Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk

AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk

PHPz
PHPznach vorne
2023-04-14 18:25:031993Durchsuche

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.

AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk

Die identifizierten Attribute umfassen die folgenden 10 Kategorien

AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk

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:

  • Verwenden Sie YOlOv5, um Fußgänger zu identifizieren.
  • Verwenden Sie ByteTrack, um dieselbe Person zu verfolgen und zu markieren.
  • Trainieren Sie ein Bildklassifizierungsnetzwerk mit mehreren Etiketten, um 26 Attribute von Fußgängern zu identifizieren.

1. Fußgängererkennung und -verfolgung

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“.

2. Trainieren Sie ein Multi-Label-Klassifizierungsnetzwerk

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

Beschriftung​Nur 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.

AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk

Wir können die ursprüngliche Etikettenposition entsprechend den Anforderungen von Paddle anpassen, damit unsere Argumentation später einfacher wird.

PaddleClas herunterladen

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

AI hat Sie klar gesehen, YOLO+ByteTrack+Multi-Label-Klassifizierungsnetzwerk

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen