Rumah > Artikel > Peranti teknologi > AI telah melihat anda dengan jelas, rangkaian klasifikasi YOLO+ByteTrack+berbilang label
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.
Atribut yang diiktiraf termasuk 10 kategori berikut
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:
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".
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
labelHanya 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.
Kami boleh melaraskan kedudukan label asal mengikut keperluan Paddle, yang akan memudahkan penaakulan kami nanti.
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/
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!