Rumah  >  Artikel  >  Peranti teknologi  >  AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label

AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label

PHPz
PHPzke hadapan
2023-04-14 18:25:031994semak imbas

Hari ini saya akan berkongsi dengan anda sistem analisis atribut pejalan kaki. Pejalan kaki boleh dikenal pasti daripada aliran video video atau kamera dan sifat setiap orang boleh ditanda.

AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label

Atribut yang diiktiraf termasuk 10 kategori berikut

AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label

Sesetengah kategori mempunyai berbilang atribut, jika orientasi badan ialah: depan , sisi dan belakang, jadi terdapat 26 atribut dalam latihan akhir.

Melaksanakan sistem sedemikian memerlukan 3 langkah:

  • Gunakan YOlOv5 untuk mengenal pasti pejalan kaki
  • Teg orang yang sama dengan penjejakan ByteTrack
  • Kereta berbilang- imej label Rangkaian pengelasan, mengenal pasti 26 atribut pejalan kaki

1 Pengecaman dan penjejakan pejalan kaki

Pengiktirafan pejalan kaki menggunakan model pengesanan sasaran YOLOv5, atau anda boleh terus menggunakan YOLOv5 pra-latihan Model yang baik.

Penjejakan pejalan kaki menggunakan teknologi Multi-Object Tracking Technology (MOT) Video ini terdiri daripada gambar Walaupun kita manusia boleh mengenal pasti orang yang sama dalam gambar yang berbeza, jika kita tidak menjejaki pejalan kaki, AI tidak dapat dikenali. Teknologi MOT diperlukan untuk menjejaki orang yang sama dan memberikan ID unik kepada setiap pejalan kaki.

Latihan dan penggunaan model YOLOv5, serta prinsip dan penyelesaian pelaksanaan teknologi teknologi pengesanan berbilang objek (MOT), diperincikan dalam artikel sebelum ini. Rakan-rakan yang berminat boleh menyemak artikel di sana "YOLOv5+ByteTrack mengira aliran trafik".

2. Melatih rangkaian pengelasan berbilang label

Kebanyakan klasifikasi imej yang pertama kali kami temui adalah pengelasan label tunggal, iaitu: gambar diklasifikasikan ke dalam kategori 1, dan kategori boleh menjadi dua kategori. Ia juga boleh menjadi beberapa kategori. Dengan mengandaikan terdapat tiga kategori, label yang sepadan dengan setiap gambar mungkin dalam format umum berikut:

001.jpg010
002.jpg100
003.jpg100

label​Hanya satu kedudukan ialah 1.

Rangkaian klasifikasi berbilang label yang akan kami latih hari ini ialah gambar yang mengandungi berbilang kategori pada masa yang sama Format label adalah seperti berikut:

001.jpg011
002.jpg111
003.jpg100

label​ boleh ada berbilang kedudukan 1.

Terdapat dua pilihan untuk melatih rangkaian sedemikian. Satu adalah untuk menganggap setiap kategori sebagai klasifikasi label tunggal, mengira kerugian secara berasingan, meringkaskan jumlah dan mengira kecerunan untuk mengemas kini parameter rangkaian.

Yang lain boleh dilatih secara langsung, tetapi anda perlu memberi perhatian kepada butiran rangkaian, mengambil ResNet50 sebagai contoh

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)

Fungsi pengaktifan lapisan keluaran akhir mestilah sigmoid ​, kerana setiap atribut diperlukan Kebarangkalian dikira secara berasingan. Dengan cara yang sama, fungsi kehilangan semasa latihan juga perlu menggunakan binary_crossentropy.

Sebenarnya, prinsip kedua-dua kaedah di atas adalah serupa, tetapi beban kerja pembangunan adalah berbeza.

Untuk kemudahan di sini, saya menggunakan PaddleCls untuk latihan. Konfigurasi Paddle adalah mudah, tetapi kelemahannya ialah ia adalah sedikit kotak hitam Anda hanya boleh mengikut peraturannya sendiri, dan lebih menyusahkan untuk menyesuaikannya.

Set data PA100K digunakan untuk latihan model Perlu diingat bahawa walaupun label asal yang ditakrifkan oleh set data PA100K mempunyai maksud yang sama seperti Paddle, susunannya berbeza.

Contohnya: digit pertama label asal mewakili sama ada label itu perempuan, manakala Paddle memerlukan digit pertama untuk mewakili sama ada label itu memakai topi, dan digit ke-22 mewakili sama ada label itu perempuan.

AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label

Kami boleh melaraskan kedudukan label asal mengikut keperluan Paddle, yang akan memudahkan penaakulan kami nanti.

Muat turun PaddleClas

git clone https://github.com/PaddlePaddle/PaddleClas

Nyahzip set data yang dimuat turun dan letakkannya dalam direktori set data PaddleClas.

Cari fail konfigurasi pcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml dan konfigurasikan laluan imej dan label.

DataLoader:
Train:
dataset:
name: MultiLabelDataset
image_root: "dataset/pa100k/" #指定训练AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label所在根路径
cls_label_path: "dataset/pa100k/train_list.txt" #指定训练列表文件位置
label_ratio: True
transform_ops:

Eval:
dataset:
name: MultiLabelDataset
image_root: "dataset/pa100k/" #指定评估AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label所在根路径
cls_label_path: "dataset/pa100k/val_list.txt" #指定评估列表文件位置
label_ratio: True
transform_ops:

Format train_list.txt ialah

00001.jpg0,0,1,0,....

Selepas konfigurasi, anda boleh berlatih terus

python3 tools/train.py 
-c ./ppcls/configs/PULC/person_attribute/PPLCNet_x1_0.yaml

Selepas latihan, eksport model

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

Letakkan hasil yang dieksport dalam direktori ~/.paddleclas/inference_model/PULC/person_attribute/

AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label

dan anda boleh memanggilnya terus menggunakan fungsi yang disediakan oleh PaddleCls

import paddleclas

model = paddleclas.PaddleClas(model_name="person_attribute")

result = model.predict(input_data="./test_imgs/000001.jpg")

print(result)

Hasil output adalah seperti berikut:

[{'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'}]

Proses latihan model berakhir di sini, set data dan kod sumber keseluruhan projek telah dibungkus.

Atas ialah kandungan terperinci AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam