>  기사  >  기술 주변기기  >  AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크

AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크

PHPz
PHPz앞으로
2023-04-14 18:25:031938검색

오늘은 보행자 속성 분석 시스템에 대해 알려드리겠습니다. 비디오 또는 카메라 비디오 스트림을 통해 보행자를 식별할 수 있으며 각 사람의 속성을 표시할 수 있습니다.

AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크

식별된 속성에는 다음 10개의 카테고리가 포함됩니다

AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크

신체 방향이 전면, 측면, 후면인 경우 일부 카테고리에는 여러 속성이 있으므로 최종 훈련에는 26개의 속성이 있습니다.

이러한 시스템을 구현하려면 3단계가 필요합니다.

  • YOlOv5를 사용하여 보행자를 식별합니다.
  • ByteTrack을 사용하여 동일한 사람을 추적하고 표시합니다.
  • 다중 레이블 이미지 분류 네트워크를 훈련하여 보행자의 26가지 속성을 식별합니다.

1. 보행자 식별 및 추적

보행자 인식은 YOLOv5 표적 탐지 모델을 사용합니다. 모델을 직접 훈련할 수도 있고, YOLOv5 사전 훈련된 모델을 직접 사용할 수도 있습니다.

보행자 추적은 다중 객체 추적 기술(MOT)​ 기술을 사용합니다. 영상은 하나의 사진으로 구성됩니다. 우리 인간은 서로 다른 사진에서 동일한 사람을 식별할 수 있지만 보행자를 추적하지 않으면 AI가 식별할 수 없습니다. 동일한 사람을 추적하고 각 보행자에게 고유한 ID를 할당하려면 MOT 기술이 필요합니다.

YOLOv5 모델의 훈련 및 사용, 다중 객체 추적 기술(MOT) 기술의 원리 및 구현 솔루션은 이전 기사에서 자세히 설명되어 있습니다. 관심 있는 친구는 "YOLOv5+ByteTrack 통계" 기사를 확인할 수 있습니다. " 교통 흐름".

2. 다중 라벨 분류 네트워크 훈련

우리가 처음 접한 이미지 분류의 대부분은 단일 라벨 분류였습니다. 즉, 사진은 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번째 숫자는 라벨이 여성인지 여부를 나타냅니다.

AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크

Paddle의 요구 사항에 따라 원래 라벨 위치를 조정할 수 있으므로 나중에 추론이 더 쉬워집니다.

Download PaddleClas

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/에 배치할 수 있습니다.

AI가 당신을 똑똑히 보았습니다, YOLO+ByteTrack+다중 라벨 분류 네트워크

디렉토리에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제