Bagaimana kami mengenali alat pelindung diri

Mungkin, Anda telah bertanya-tanya sepanjang hidup Anda bagaimana melatih jaringan saraf untuk mengenali orang di helm dan rompi oranye! Tidak? Tapi bagaimanapun juga kami akan memberitahumu.

Nama kami adalah Tatyana Voronova dan Elvira Dyaminova. Kami terlibat dalam analisis data di perusahaan Center 2M, kami banyak bekerja dengan pabrik dan perusahaan yang paling nyata. Karena pelanggaran keselamatan, mereka menderita kerugian jutaan dolar, karyawan terluka, jadi alangkah baiknya bisa mendeteksi pelanggaran semacam itu secara sistematis dan secepat mungkin. Terbaik dari semuanya - secara otomatis. Jadi kami memiliki masalah yang terkait dengan mengenali alat pelindung diri (APD) di video dan mengidentifikasi orang atau peralatan di zona bahaya.

gambar

Sebagian besar, pesanan datang kepada kami untuk menentukan helm (lebih tepatnya, ketidakhadiran mereka) dan pakaian kerja. Kami telah memperoleh pengalaman dalam melakukan tugas-tugas seperti itu dan sekarang kami dapat menggambarkan masalah yang kami temui dan bagaimana menyelesaikannya.

Karena berdasarkan ketentuan kerja sama kami tidak memiliki hak untuk menerbitkan rekaman dari objek pelanggan, kami akan mengilustrasikan artikel dengan gambar dari Internet, di mana orang-orang di helm sering tersenyum dan terlihat hebat. Sayangnya, dalam domain publik tidak untuk semua fitur tugas yang kita hadapi dalam kenyataan, Anda dapat menemukan contoh yang baik. Secara khusus, dalam kehidupan orang-orang yang memakai helm cenderung tidak tersenyum, dan masalah pekerja botak (kita akan membicarakannya nanti) di Internet belum benar-benar terungkap!

Gambar dari Internet (ukuran 1920x1280):

gambar

Pengenalan APD dapat direduksi menjadi satu dari dua masalah klasik penglihatan komputer: klasifikasi gambar dan deteksi objek. Dalam praktiknya, ternyata lebih baik tidak menggunakan salah satu dari pendekatan ini, tetapi memilih yang paling cocok untuk setiap kasus tertentu, serta menggabungkannya secara fleksibel. Sebagai contoh, pertama-tama kita dapat menentukan di mana orang berada pada gambar, kemudian mengklasifikasikan gambar yang dipotong oleh siluet ke dalam kelas "dalam pakaian kerja" dan "tanpa", dan mendeteksi keberadaan helm pada lintasan kedua.

Pada tokoh-tokoh pra-potong orang, klasifikasi keberadaan helm dan pakaian kerja terlihat seperti ini (tampilan gambar asli):

Hasil karya model untuk klasifikasi pakaian kerja dan helm

gambar

Pada tokoh manusia yang sama yang sebelumnya dipilih, penerapan pendekatan kali ini dengan deteksi untuk helm.

Hasil model untuk klasifikasi pakaian kerja dan model untuk mendeteksi helm:

gambar

Tahap satu: deteksi manusia


Kualitas definisi benda kecil (helm / kacamata / sarung tangan) pada bingkai besar begitu-begitu. Jauh lebih mudah bagi komputer, seperti seseorang, untuk pertama-tama memahami di mana orang-orang berada, dan baru kemudian mengetahui apa yang mereka kenakan. Jadi, semuanya dimulai dengan mengidentifikasi orang-orang dalam bingkai.

Sebagai hasil dari percobaan, kami menemukan bahwa jaringan saraf R-CNN yang lebih cepat dengan Inception v2 sebagai ekstraksi fitur sangat cocok untuk mendeteksi orang. TensorFlow sudah memiliki jaringan saraf pra- pelatihan untuk mendeteksi objek.

Bagi kami, Faster R-CNN Inception v2 (dilatih tentang dataset COCO) adalah metode dasar yang kami coba pertama kali saat memecahkan masalah tersebut.

Awalnya, kami mendeteksi orang-orang pada frame (dan kemudian pada orang-orang yang ditemukan kami menemukan APD):

gambar

Perhatikan bahwa kami telah meningkatkan kotak pembatas "dengan seseorang" di sepanjang sumbu y :

gambar

Dalam foto ini, pekerja itu ditembak dalam cahaya yang baik dan dengan latar belakang yang kontras (dengan gambar yang ditemukan di Internet, ini terjadi setiap saat). Oleh karena itu, kotak pembatas dengan orang tersebut dibangun dengan baik. Namun, dalam praktik kami sering ada kasus (terutama dalam kondisi visibilitas yang tidak memadai) ketika model deteksi memotong helm pada seseorang, setelah itu tidak ada gunanya mencarinya pada gambar yang dipangkas. Dalam hal ini, sepanjang sumbu y, kami meningkatkan kotak terikat yang diprediksi sebesar 15% sebelum beralih ke tahap kedua.

Saat mendeteksi orang, kami menghadapi masalah kecil yang tidak menyenangkan. Pertama, ketika dua orang berjalan atau berdiri di belakang satu sama lain, seringkali mereka mulai terdeteksi sebagai satu orang. Kedua, kebetulan bahwa objek statis memasuki bidang pandang kamera, di mana model dapat mengenali seseorang, seperti hidran. Masalah-masalah ini dapat diselesaikan dengan berbagai cara. Misalnya, bagaimana kami melakukannya: merekonsiliasi dan menerimanya, karena secara umum, model ini cocok untuk kami dalam hal produktivitas dan kualitas.

Masalah yang lebih mendasar adalah bahwa tempat industri di mana terdapat "zona bahaya" seringkali besar dan, oleh karena itu, orang-orang dalam bingkai sangat kecil. Metode dasar kami berdasarkan Faster R-CNN Inception v2 menunjukkan hasil yang buruk dalam kasus tersebut, dan pada akhirnya kami mencobaLebih cepat R-CNN Nas . Hasilnya mengesankan, orang-orang diakui dengan baik bahkan di kejauhan, tetapi kecepatannya jauh lebih rendah daripada model dasar. Dengan sumber daya yang memadai dan kebutuhan akan akurasi yang tinggi, Anda dapat menggunakan Faster R-CNN Nas .

Tahap kedua: penentuan pelanggar jahat


Tergantung pada tugasnya, yang berikut ini sering digunakan:

  • Model Klasifikasi Gambar - Inception v3
  • Model Deteksi Objek - Lebih Cepat R-CNN Inception v2

Klasifikasi pakaian kerja dan helm


Kami menguji arsitektur jaringan saraf yang berbeda untuk mengklasifikasikan gambar, dan akhirnya memilih Inception v3, memutuskan untuk mengambil keuntungan dari fakta bahwa itu dirancang untuk bekerja dengan ukuran gambar variabel. Kami sudah memiliki banyak gambar yang dipotong dengan orang-orang, dan tidak sulit untuk menghitung nilai median untuk tinggi dan lebar. Jadi kami sampai pada kesimpulan bahwa untuk pelatihan pengklasifikasi mulai membawa gambar ke ukuran 150x400.

Untuk melatih jaringan untuk mengenali APD, pertama-tama, perlu untuk mengumpulkan dataset dari contoh berlabel. Dalam proses ini, ada kehalusan, realisasi yang datang dengan pengalaman. Sebagai contoh, lebih baik untuk menghapus orang-orang yang terpotong di atas pinggul dari dataset. Ini akan membawa dataset lebih dekat ke kondisi nyata, karena sebagian besar waktu orang terlihat penuh pada video dari kamera pengintai. Kasus-kasus yang tumpang tindih, tentu saja, juga terjadi, tetapi siluet lengkap untuk sampel target jauh lebih khas.

Contoh dari dataset pakaian kerja kami:

gambar

Kami belum menemukan sesuatu yang spesifik sebagai metrik, kami menggunakan daya ingat dan presisi.

Model untuk mengklasifikasikan ada / tidaknya pakaian kerja:

Hasil pada sampel validasi

gambar

Deteksi APD


Model klasifikasi bekerja lebih cepat daripada model untuk mendeteksi objek, tetapi karena fakta bahwa kacamata keselamatan dan sarung tangan kecil dalam gambar, sulit untuk membuat classifier yang baik untuk APD tersebut. Oleh karena itu, kami melatih jaringan saraf R-CNN yang lebih cepat pada dataset dengan enam kelas:

  • kacamata / not_glasses
  • sarung tangan / not_gloves
  • helm / not_helmet

gambar

Pengumpulan data dan markup


Masalah utama terkait dengan dataset helm. Itu adalah cara yang menarik: kami melewati orang-orang botak, orang-orang dengan helm di tangan mereka, dan bahkan melalui orang-orang botak dengan helm di tangan mereka.

Karena pada awal perjalanan kami tidak memiliki banyak bingkai dari kondisi nyata, kami mengumpulkan set data sebaik mungkin: memfilmkan diri sendiri, mengambil gambar dari internet atau dari situs konstruksi. Beberapa saat kemudian, kami mulai menerima banyak video dari berbagai perusahaan, jadi kami mulai memperkaya dataset hanya dengan bingkai kondisi nyata. Pada titik tertentu, jumlah gambar yang ditandai melebihi 5k, dan kualitas dari menambahkan contoh baru berhenti meningkat, dalam hal ini, kami merevisi pendekatan untuk markup.

Kami akan menjelaskan langkah-langkah meningkatkan set data helm menggunakan contoh gambar dari Internet, sehingga sudut dan kualitasnya tidak sesuai dengan yang kami miliki.

Selain gambar di atas, dipangkas di atas pinggul, kami menghapus gambar di mana helm dipotong lebih dari setengah untuk menghindari kebingungan dengan topi.

gambar

Kami juga menghadapi kenyataan bahwa jika seseorang memiliki helm di tangannya, maka seringkali model itu tidak melihat adanya pelanggaran: apakah ada helm? Ada. Oleh karena itu, kami menghapus dari dataset pelatihan semua bingkai di mana seseorang memegang helm dengan tangannya, bahkan jika helm ada di kepalanya pada saat itu.

Secara umum, kami mencoba untuk menghapus gambar dengan latar belakang yang menyala atau di ruangan gelap, dan kemudian kami meminimalkan jumlah foto yang diambil oleh kami, meninggalkan sebagian besar rekaman dari produksi. Akibatnya, kami mengurangi dataset hingga setengahnya.

Selain itu, kami memperkaya dataset dengan orang botak, jika tidak mereka akan selalu memakai helm, bahkan jika tidak demikian, dan dengan pirang dengan kotak, yang, dengan sudut tertentu, detektor juga menentukan helm.

Setelah menghapus gambar yang tidak sesuai, kami melanjutkan langsung ke markup (untuk mendeteksi objek). Ternyata tidak sesederhana itu. Ternyata kualitas detektor akhir sangat tergantung pada apa tepatnya area dalam gambar ditandai sebagai "helm" atau "sarung tangan". Awalnya, kami mengalokasikan helm dan kacamata tanpa menyambar wajah, dan sarung tangan dengan tangan meraih. Namun, dengan pengalaman, kami secara bertahap meningkatkan pendekatan kami dengan melihat kesalahan jenis pertama dan kedua, di mana orang memegang helm di tangan mereka, dan sesuatu yang bulat pada sesuatu yang lama ternyata merupakan "sarung tangan". Sekarang, ketika menandai helm dan kacamata, kami mencoba meraih wajah sampai ke ujung hidung, dan ketika menandai sarung tangan, sebaliknya, kami membatasi diri pada sikat.

gambar

Sebagai hasil dari manipulasi kami pada dataset, kami mendapatkan hasil sebagai berikut.

Model untuk mendeteksi ada / tidaknya APD menggunakan helm sebagai contoh:
Hasil pada sampel validasi sebelum dimulainya "kerja global" pada dataset

gambar


Hasil akhir pada sampel validasi

gambar

Kelengkapan pengakuan helm sedikit mereda, tetapi pada saat yang sama, metrik untuk mendeteksi pelanggaran meningkat, dan inilah yang ingin kami capai.

Model untuk mengklasifikasikan ada / tidak adanya helm:
Hasil pada sampel validasi sebelum dimulainya "kerja global" pada dataset

gambar

Hasil akhir pada sampel validasi

gambar

Perlu dicatat bahwa kita tidak memiliki pembagian menjadi kacamata dan kacamata untuk penglihatan, mereka pergi di bawah tag "kacamata" yang sama, dan sarung tangan dari nuansa cahaya dapat dianggap sebagai sikat kosong. Kami mencoba untuk memaksimalkan gamut warna helm dan pakaian kerja dalam dataset kami, tetapi untuk keandalan, kami menambahkan teknik paling sederhana dan paling dapat diandalkan untuk ini: jika perlu, untuk mendeteksi sarung tangan, kami memberi tahu pelanggan bahwa warna-warna cerah membantu meningkatkan akurasi.

Saat ini, kami memiliki model universal yang kami gunakan untuk pertunjukan awal kepada pelanggan. Namun, harus dipahami bahwa tidak mungkin untuk membuat model universal untuk semua orang, perlu untuk beradaptasi dengan setiap pelanggan, mengidentifikasi dan mempertimbangkan nuansa baru, memperkaya dataset atau membuat mereka baru untuk memenuhi persyaratan spesifik.

gambar

Bonus


Biasanya, pelanggan ingin memproses kamera sebanyak mungkin, menggunakan sumber daya sesedikit mungkin. Butch, tentu saja, adalah hal yang baik, tetapi trik tambahan untuk mengoptimalkan prosesnya tidak dilarang.

Sebagai contoh, saya dan kolega-kolega saya dari Moscow IBM client centre memiliki hipotesis bahwa menyatukan beberapa orang untuk mendeteksi helm akan meningkatkan jumlah kamera per server dengan kehilangan akurasi yang tidak berprinsip.

Sebagai dasar, kami memutuskan untuk mengambil ukuran 1000x600 untuk kanvas di mana orang akan "diterapkan". Dua opsi tata letak awalnya dipertimbangkan:

  • Tetap lebar dan tinggi (200x600), dengan pendekatan ini, ada 5 orang di bingkai.
  • Tetap lebar dan tinggi (125x600), 8 orang.

Keputusan ini disebabkan oleh fakta bahwa dengan data tetap, kami tahu persis jumlah orang di foto, yang memberi kami perkiraan beban. Namun, selama pengembangan, kami mempertimbangkan opsi seperti itu:
  • Tinggi tetap dan lebar proporsional (*** x600), jumlah orang yang berbeda.

Diasumsikan bahwa dengan meningkatnya ukuran dan mempertahankan proporsi, hasilnya akan lebih baik dibandingkan dengan opsi tata letak lainnya. Jumlah orang berkisar antara 3 hingga 5 (+/–).

Hasilnya, kami memperoleh bahwa opsi dengan lebar dan tinggi tetap (200x600) adalah yang terbaik di antara yang dipertimbangkan. Tentu saja, metode ini tidak cocok untuk mendeteksi kacamata dan sarung tangan, karena objeknya kecil, tetapi untuk mendeteksi helm / kekurangan helm, metode ini menunjukkan hasil yang baik.

Misalnya, dalam sampel validasi:

gambar

gambar

: (tvoronova), (elviraa)

All Articles