Heute werde ich Ihnen ein System zur Analyse von Fußgängerattributen vorstellen. Fußgänger können anhand von Video- oder Kamera-Videostreams identifiziert und die Attribute jeder Person markiert werden.
Die identifizierten Attribute umfassen die folgenden 10 Kategorien
Einige Kategorien haben mehrere Attribute, wenn die Körperausrichtung ist: vorne, seitlich und hinten, sodass es im Abschlusstraining 26 Attribute gibt.
Es sind drei Schritte erforderlich, um ein solches System zu implementieren:
Die Fußgängererkennung verwendet das YOLOv5-Zielerkennungsmodell. Sie können das Modell selbst trainieren oder direkt das vorab trainierte YOLOv5-Modell verwenden.
Bei der Fußgängerverfolgung kommt die Multi-Object-Tracking-Technologie (MOT) zum Einsatz. Das Video besteht aus einem Bild. Obwohl wir Menschen dieselbe Person auf verschiedenen Bildern identifizieren können, kann die KI nicht identifiziert werden. MOT-Technologie ist erforderlich, um dieselbe Person zu verfolgen und jedem Fußgänger eine eindeutige ID zuzuweisen.
Das Training und die Verwendung des YOLOv5-Modells sowie die Prinzipien und Implementierungslösungen der Multi-Object-Tracking-Technologie (MOT) werden im vorherigen Artikel ausführlich beschrieben. Interessierte Freunde können sich den Artikel „YOLOv5+ByteTrack Statistics“ ansehen „Verkehrsfluss“.
Die meisten Bildklassifizierungen, mit denen wir zuerst in Kontakt kamen, waren Ein-Label-Klassifizierungen, das heißt: Ein Bild wird in eine Kategorie klassifiziert, und die Kategorie kann aus zwei Kategorien oder mehreren Kategorien bestehen . Unter der Annahme, dass es drei Kategorien gibt, kann die jedem Bild entsprechende Beschriftung das folgende allgemeine Format haben:
001.jpg010 002.jpg100 003.jpg100
BeschriftungNur eine Position ist 1.
Das Multi-Label-Klassifizierungsnetzwerk, das wir heute trainieren werden, ist ein Bild, das mehrere Kategorien gleichzeitig enthält. Das Label-Format ist wie folgt:
001.jpg011 002.jpg111 003.jpg100
label kann mehrere Positionen von 1 haben.
Es gibt zwei Möglichkeiten, ein solches Netzwerk zu trainieren. Eine davon besteht darin, jede Kategorie als Einzeletikettenklassifizierung zu behandeln, den Verlust separat zu berechnen, die Gesamtsumme zusammenzufassen und den Gradienten zu berechnen, um die Netzwerkparameter zu aktualisieren.
Der andere kann direkt trainiert werden, aber Sie müssen auf die Netzwerkdetails achten. Nehmen Sie ResNet50 als Beispiel.
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)
Die Aktivierungsfunktion der endgültigen Ausgabeschicht muss Sigmoid sein, da die Wahrscheinlichkeit separat berechnet werden muss jedes Attribut. Auf die gleiche Weise muss auch die Verlustfunktion während des Trainings die Binär_Kreuzentropie verwenden.
Tatsächlich sind die Prinzipien der beiden oben genannten Methoden ähnlich, aber der Entwicklungsaufwand ist unterschiedlich.
Der Einfachheit halber verwende ich PaddleCls zum Training. Die Konfiguration von Paddle ist einfach, aber der Nachteil besteht darin, dass es sich um eine Art Blackbox handelt. Man kann nur seine eigenen Regeln befolgen und es ist schwieriger, es anzupassen.
Das Modelltraining verwendet den PA100K-Datensatz. Es ist zu beachten, dass die durch den PA100K-Datensatz definierte Originalbezeichnung zwar dieselbe Bedeutung wie Paddle hat, die Reihenfolge jedoch unterschiedlich ist.
Zum Beispiel: Die 1. Ziffer des Originaletiketts gibt an, ob das Etikett weiblich ist, während Paddle die 1. Ziffer benötigt, um anzugeben, ob das Etikett einen Hut trägt, und die 22. Ziffer gibt an, ob das Etikett weiblich ist.
Wir können die ursprüngliche Etikettenposition entsprechend den Anforderungen von Paddle anpassen, damit unsere Argumentation später einfacher wird.
git clone https://github.com/PaddlePaddle/PaddleClas
Entpacken Sie den heruntergeladenen Datensatz und legen Sie ihn im Datensatzverzeichnis von PaddleClas ab.
Suchen Sie die Konfigurationsdatei ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml und konfigurieren Sie die Bild- und Etikettenpfade. Das Format von
DataLoader: Train: dataset: name: MultiLabelDataset image_root: "dataset/pa100k/" #指定训练AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk所在根路径 cls_label_path: "dataset/pa100k/train_list.txt" #指定训练列表文件位置 label_ratio: True transform_ops: Eval: dataset: name: MultiLabelDataset image_root: "dataset/pa100k/" #指定评估AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk所在根路径 cls_label_path: "dataset/pa100k/val_list.txt" #指定评估列表文件位置 label_ratio: True transform_ops:
train_list.txt ist
00001.jpg0,0,1,0,....
Nach der Konfiguration können Sie direkt trainieren
python3 tools/train.py -c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml
Nach dem Training exportieren Sie das Modell
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
und platzieren Sie die exportierten Ergebnisse in ~/.paddleclas/inference_model/PULC/person_attribute/ In Im Verzeichnis
können Sie die von PaddleCls bereitgestellte Funktion verwenden, um
import paddleclas model = paddleclas.PaddleClas(model_name="person_attribute") result = model.predict(input_data="./test_imgs/000001.jpg") print(result)
direkt aufzurufen. Die Ausgabeergebnisse lauten wie folgt:
[{'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'}]
Der Modelltrainingsprozess endet hier, der Datensatz und der Quellcode des gesamten Projekts liegen vor verpackt worden.
Das obige ist der detaillierte Inhalt vonAI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!