오늘은 보행자 속성 분석 시스템에 대해 알려드리겠습니다. 비디오 또는 카메라 비디오 스트림을 통해 보행자를 식별할 수 있으며 각 사람의 속성을 표시할 수 있습니다.
식별된 속성에는 다음 10개의 카테고리가 포함됩니다
신체 방향이 전면, 측면, 후면인 경우 일부 카테고리에는 여러 속성이 있으므로 최종 훈련에는 26개의 속성이 있습니다.
이러한 시스템을 구현하려면 3단계가 필요합니다.
보행자 인식은 YOLOv5 표적 탐지 모델을 사용합니다. 모델을 직접 훈련할 수도 있고, YOLOv5 사전 훈련된 모델을 직접 사용할 수도 있습니다.
보행자 추적은 다중 객체 추적 기술(MOT) 기술을 사용합니다. 영상은 하나의 사진으로 구성됩니다. 우리 인간은 서로 다른 사진에서 동일한 사람을 식별할 수 있지만 보행자를 추적하지 않으면 AI가 식별할 수 없습니다. 동일한 사람을 추적하고 각 보행자에게 고유한 ID를 할당하려면 MOT 기술이 필요합니다.
YOLOv5 모델의 훈련 및 사용, 다중 객체 추적 기술(MOT) 기술의 원리 및 구현 솔루션은 이전 기사에서 자세히 설명되어 있습니다. 관심 있는 친구는 "YOLOv5+ByteTrack 통계" 기사를 확인할 수 있습니다. " 교통 흐름".
우리가 처음 접한 이미지 분류의 대부분은 단일 라벨 분류였습니다. 즉, 사진은 1개의 카테고리로 분류되고 카테고리는 두 개의 카테고리 또는 다중 카테고리가 될 수 있습니다. . 세 가지 범주가 있다고 가정하면 각 그림에 해당하는 레이블은 다음과 같은 일반적인 형식일 수 있습니다.
001.jpg010 002.jpg100 003.jpg100
label하나의 위치만 1입니다.
오늘 훈련할 다중 라벨 분류 네트워크는 여러 카테고리를 동시에 포함하는 그림입니다. 라벨 형식은 다음과 같습니다:
001.jpg011 002.jpg111 003.jpg100
label은 1개의 위치를 가질 수 있습니다.
이러한 네트워크를 훈련하는 데는 두 가지 옵션이 있습니다. 하나는 각 범주를 단일 레이블 분류로 처리하고, 손실을 별도로 계산하고, 총계를 요약하고, 기울기를 계산하여 네트워크 매개변수를 업데이트하는 것입니다.
다른 하나는 직접 훈련할 수 있지만 네트워크 세부 사항에 주의해야 합니다. ResNet50을 예로 들어보겠습니다.
resnet50 = ResNet50(include_top=False, weights='imagenet') # 迁移学习,不重新训练卷积层 for layer in resnet50.layers: layer.trainable = False # 新的全连接层 x = Flatten()(resnet50.output) x = Dense(1024)(x) x = Activation('relu')(x) x = BatchNormalization()(x) x = Dropout(0.5)(x) # 输出 26 个属性的多分类标签 x = Dense(26, activatinotallow='sigmoid')(x) model = Model(inputs = resnet50.input, outputs=x)
최종 출력 레이어의 활성화 함수는 시그모이드여야 합니다. 각 속성. 같은 방식으로 훈련 중 손실 함수도 Binary_crossentropy를 사용해야 합니다.
사실 위 두 방법의 원리는 비슷하지만 개발 작업량은 다릅니다.
여기에서는 편의상 PaddleCls를 사용하여 훈련합니다. Paddle의 구성은 간단하지만 자체 규칙만 따를 수 있고 맞춤 설정이 더 까다롭다는 단점이 있습니다.
모델 학습에서는 PA100K 데이터 세트를 사용합니다. PA100K 데이터 세트에서 정의한 원래 레이블은 Paddle과 동일한 의미를 갖지만 순서가 다릅니다.
예: 원래 라벨의 첫 번째 숫자는 라벨이 여성인지 여부를 나타내고, Paddle에서는 라벨이 모자를 쓰고 있는지 여부를 나타내기 위해 첫 번째 숫자가 필요하며, 22번째 숫자는 라벨이 여성인지 여부를 나타냅니다.
Paddle의 요구 사항에 따라 원래 라벨 위치를 조정할 수 있으므로 나중에 추론이 더 쉬워집니다.
git clone https://github.com/PaddlePaddle/PaddleClas
다운로드한 데이터세트의 압축을 풀고 PaddleClas의 데이터세트 디렉터리에 넣습니다.
ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml 구성 파일을 찾아 이미지 및 라벨 경로를 구성하세요.
DataLoader: Train: dataset: name: MultiLabelDataset image_root: "dataset/pa100k/" #指定训练AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크所在根路径 cls_label_path: "dataset/pa100k/train_list.txt" #指定训练列表文件位置 label_ratio: True transform_ops: Eval: dataset: name: MultiLabelDataset image_root: "dataset/pa100k/" #指定评估AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크所在根路径 cls_label_path: "dataset/pa100k/val_list.txt" #指定评估列表文件位置 label_ratio: True transform_ops:
train_list.txt의 형식은
00001.jpg0,0,1,0,....
입니다. 구성 후
python3 tools/train.py -c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml
학습 후 모델을 내보내고
python3 tools/export_model.py -c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml -o Global.pretrained_model=output/PPLCNet_x1_0/best_model -o Global.save_inference_dir=deploy/models/PPLCNet_x1_0_person_attribute_infer
내보낸 결과를 ~/.paddleclas/inference_model/PULC/person_attribute/에 배치할 수 있습니다.
디렉토리에서 PaddleCls가 제공하는 함수를 사용하여
import paddleclas model = paddleclas.PaddleClas(model_name="person_attribute") result = model.predict(input_data="./test_imgs/000001.jpg") print(result)
를 직접 호출할 수 있습니다. 출력 결과는 다음과 같습니다.
[{'attributes': ['Female', 'Age18-60', 'Front', 'Glasses: False', 'Hat: False', 'HoldObjectsInFront: True', 'ShoulderBag', 'Upper: ShortSleeve', 'Lower:Trousers', 'No boots'], 'output': [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0], 'filename': './test_imgs/000001.jpg'}]
모델 학습 프로세스는 여기서 끝납니다. 전체 프로젝트의 데이터 세트와 소스 코드 포장되었습니다.
위 내용은 AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!