Bagaimana kita menghitung orang yang menggunakan visi komputer

gambar
Foto-foto dari sumber terbuka

Pertemuan massal orang menciptakan masalah di berbagai bidang (ritel, layanan publik , bank, pengembang). Pelanggan perlu menggabungkan dan memantau informasi tentang jumlah orang di banyak tempat: di kantor layanan, gedung administrasi, di lokasi konstruksi, dll

. Tugas menghitung orang memiliki solusi yang sudah jadi, misalnya, penggunaan kamera dengan analitik bawaan. Namun, dalam banyak kasus, penting untuk menggunakan sejumlah besar kamera yang sebelumnya dipasang di berbagai departemen. Selain itu, solusi yang memperhitungkan kekhasan pelanggan tertentu akan lebih baik baginya.

Nama kami adalah Tatyana Voronova dan Elvira Dyaminova, kami terlibat dalam analisis data di Center 2M. Meskipun topik tampaknya paling sederhana dari apa yang saat ini sedang dipertimbangkan dalam masalah penglihatan komputer, bahkan dalam masalah ini, ketika datang ke praktik (implementasi), banyak subtugas kompleks dan non-sepele harus dipecahkan. Tujuan artikel kami adalah untuk menunjukkan kompleksitas dan pendekatan dasar untuk masalah penglihatan komputer menggunakan contoh pemecahan salah satu masalah dasar. Untuk bahan-bahan berikut, kami ingin menarik kolega: devops, engineer, manajer proyek pada analitik video, sehingga mereka berbicara tentang sumber daya komputasi yang terlibat, pengukuran kecepatan, nuansa berkomunikasi dengan pelanggan dan kisah implementasi proyek. Kami akan fokus pada beberapa metode analisis data yang digunakan.

Mari kita mulai dengan pernyataan berikut: Anda perlu menampilkan jumlah orang dalam antrian di kantor layanan. Jika antrian, sesuai dengan aturan internal perusahaan pelanggan, dianggap kritis, skenario internal akan mulai dikerjakan:
  • pemberitahuan perlunya membuka pintu masuk / meja kas tambahan;
  • panggilan manajer;
  • memberi tahu tentang perlunya mengalihkan aliran orang ke meja kas (lebih gratis) lainnya.

Dengan demikian, pekerjaan kami akan menyelamatkan banyak pelanggan.

Model Pembelajaran Mesin Digunakan


Deteksi siluet orang


Awalnya, kami memutuskan untuk menggunakan model yang sudah terlatih untuk mendeteksi orang (siluet), karena tugas tersebut memiliki solusi yang cukup baik, misalnya, definisi siluet .

Jadi, di perpustakaan TensorFlow ada sejumlah besar model pra-terlatih .

Setelah melakukan tes, kami pertama kali memilih dua arsitektur: Lebih cepat R-CNN dan YOLO v2. Kemudian, setelah versi baru muncul, kami menambahkan YOLO v3.

Deskripsi model .

Contoh hasil pengakuan untuk YOLO v2 (selanjutnya, gambar diambil dari sumber gratis - kami tidak dapat menerbitkan bingkai dari kamera pelanggan):

gambar

Contoh hasil pengakuan untuk Faster R-CNN:

gambar

Keuntungan YOLO adalah bahwa model merespons lebih cepat, dan dalam beberapa tugas ini penting. Namun, dalam praktiknya, kami menemukan bahwa jika tidak mungkin untuk menggunakan versi pra-terlatih dari model, dan pelatihan ulang diperlukan pada set pelatihan khusus Anda, lebih tepat untuk menggunakan F-R-CNN yang lebih cepat. Jika kamera dipasang cukup jauh dari orang-orang (ketinggian siluet kurang dari 100 piksel untuk resolusi 1920 x 1080) atau perlu juga mengenali peralatan pelindung pribadi pada seseorang: helm, pengencang, elemen pakaian pelindung, dalam situasi seperti itu kualitas hasil pelatihan pada dataset Anda sendiri (hingga 10 ribuan objek berbeda) untuk YOLO v2 kami tidak puas.

YOLO v3 menunjukkan hasil yang dapat diterima, namun, tes kecepatan tidak memberikan keuntungan yang signifikan untuk YOLO v3 dibandingkan dengan F-R-CNN yang lebih cepat. Selain itu, kami menemukan cara untuk meningkatkan kecepatan pengenalan dengan menggunakan batch (kelompok pemrosesan gambar), analisis selektif gambar (lebih lanjut tentang ini di bawah).

Untuk semua jenis model, kami meningkatkan akurasi menggunakan pasca-pemrosesan hasil: kami menghapus nilai outlier, mengambil nilai yang paling umum untuk satu set frame yang berurutan. Satu detik dari satu kamera biasanya setara dengan 25-50 frame. Tentu saja, untuk meningkatkan kinerja (dengan semakin banyak kamera), kami menganalisis tidak setiap frame, tetapi sering kali memungkinkan untuk memberikan jawaban akhir selama beberapa detik, yaitu, menggunakan beberapa frame. Keputusan ini dapat dibuat secara dinamis, dengan mempertimbangkan jumlah total kamera (aliran video untuk diproses) dan daya komputasi yang tersedia.

Contoh menggunakan model F-R-CNN yang lebih cepat, dilatih dengan dataset kami sendiri:

gambar

Sekarang kami melakukan pengujian dengan model SSD-300. Kami berharap bahwa ini akan memberi kami peningkatan produktivitas sambil mempertahankan kualitas pengakuan yang dapat diterima.

Membuat dataset pelatihan Anda sendiri


Dalam kasus di mana Anda ingin membuat set pembelajaran Anda sendiri, kami telah mengembangkan sendiri prosedur berikut:
  • kami mengumpulkan klip video dengan objek yang diperlukan: video pelanggan, video dalam domain publik (video yang ditata, kamera pengintai);
  • kami memotong dan memfilter fragmen video sehingga dataset yang dihasilkan seimbang di berbagai objek pengenalan;
  • Kami mendistribusikan bingkai di antara marker untuk menyorot objek yang diperlukan. Contoh alat markup ;
  • selektif memeriksa hasil spidol;
  • jika perlu, kami melakukan augmentasi: biasanya kami menambahkan belokan, refleksi, mengubah ketajaman (membentuk dataset bertanda yang diperluas).

Menggunakan zona deteksi


Salah satu masalah dengan penghitungan orang dalam antrean adalah persimpangan area visibilitas beberapa kamera. Lebih dari satu kamera dapat dipasang di sebuah ruangan, oleh karena itu, penting untuk menjaga area gambar yang tumpang tindih, dan ketika seseorang memasuki bidang tampilan beberapa kamera, ia harus diperhitungkan sekali.

Dalam beberapa situasi, orang perlu dideteksi hanya di area tertentu dari ruangan (dekat jendela servis) atau platform (di dekat peralatan).

Untuk alasan yang jelas, adalah salah untuk memverifikasi bahwa kotak-perbatasan (kotak / bingkai), membatasi seluruh orang, jatuh ke zona (poligon). Dalam situasi ini, bagian bawah (ketiga / setengah) dari persegi panjang dibagi menjadi titik - node (grid 10 dengan 10 node diambil) dan jatuh ke zona masing - masing node dipilih diperiksa. "Significant" node dialokasikan oleh administrator sistem berdasarkan pada geometri ruangan (nilai default juga dipilih - jika pengaturan untuk ruangan tertentu tidak dimasukkan).

gambar

Selain itu, aplikasi arsitektur Mask R-CNN untuk tugas kami sedang diuji . Metode ini memungkinkan Anda untuk menentukan garis siluet - ini akan memungkinkan untuk menjauh dari menggunakan persegi panjang perbatasan saat menganalisis persimpangan dengan zona .

gambar

Pendekatan lain: deteksi kepala (pelatihan model)


Kualitas tidak selalu dicapai dengan memilih model, menambah / mengubah set pelatihan, dan metode ML murni lainnya. Terkadang perbaikan yang menentukan hanya dapat diperoleh dengan mengubah seluruh rumusan masalah (misalnya, dalam masalah kita). Dalam antrian ini, orang-orang berkerumun dan karenanya saling tumpang tindih, sehingga kualitas pengakuan seringkali tidak cukup untuk hanya menggunakan metode ini dalam kondisi nyata.

Ambil gambar di bawah ini. Kami menutup mata terhadap fakta bahwa gambar diambil di telepon, dan sudut kemiringannya tidak sesuai dengan sudut kemiringan kamera CCTV. Ada 18 orang di bingkai, dan model pendeteksian siluet mengidentifikasi 11 orang:

gambar

Untuk meningkatkan hasilnya, kami beralih dari mendefinisikan siluet ke mendefinisikan tujuan. Untuk ini, model R-CNN yang lebih cepat dilatih pada dataset yang diambil daritautan (dataset mencakup bingkai dengan jumlah orang yang berbeda, termasuk kelompok besar, di antaranya ada orang dari berbagai ras dan usia).

Plus, kami memperkaya dataset dengan bingkai dari materi (dari kamera) pelanggan sekitar sepertiga (terutama karena fakta bahwa dataset asli memiliki beberapa kepala di topi). Tutorial berguna untuk mempelajari model secara mandiri .

Masalah utama yang kami temui adalah kualitas gambar dan skala objek. Kepala memiliki ukuran yang berbeda (seperti yang dapat dilihat dari gambar di atas), dan bingkai dari kamera pelanggan memiliki resolusi 640x480, karena ini, benda-benda menarik (kerudung, bola Natal, punggung kursi) kadang-kadang terdeteksi sebagai kepala.

Misalnya, dalam dataset pelatihan, kami telah memberi label kepala:

gambar- ini adalah kepala dalam dataset;

gambar- dan ini adalah bagian belakang kursi, tetapi model ingin percaya bahwa ini adalah kepalanya.

Namun, secara umum, model ini cukup baik dalam kasus di mana ada konsentrasi besar orang. Jadi, dalam bingkai di atas, model kami mengidentifikasi 15 orang:

gambar

Jadi, dalam gambar ini, model tidak dapat menemukan hanya tiga kepala, yang secara signifikan diblokir oleh benda asing.

Untuk meningkatkan kualitas model, Anda dapat mengganti kamera saat ini dengan kamera dengan resolusi lebih tinggi dan juga mengumpulkan dan menandai dataset pelatihan.

Namun demikian, harus diingat bahwa dengan sejumlah kecil orang, metode pendeteksian dengan siluet daripada dengan kepala lebih cocok, karena siluet lebih sulit untuk sepenuhnya tumpang tindih atau membingungkan dengan benda asing. Namun, jika ada kerumunan, tidak ada jalan keluar, jadi untuk menghitung orang dalam antrean, diputuskan untuk menggunakan dua model secara paralel - untuk kepala dan siluet - dan menggabungkan jawabannya.

Siluet dan kepala, contoh hasil pengakuan:

gambar

Peringkat akurasi


Saat menguji model, frame dipilih yang tidak berpartisipasi dalam pelatihan (dataset dengan jumlah orang yang berbeda pada frame, dalam sudut yang berbeda dan ukuran yang berbeda), untuk menilai kualitas model, kami menggunakan daya ingat dan presisi.

Ingat - kelengkapan menunjukkan proporsi objek yang sebenarnya termasuk kelas positif, yang kami prediksi dengan benar.

Presisi - akurasi menunjukkan proporsi objek yang dikenali sebagai objek dari kelas positif, yang kami prediksi dengan benar.

Pada bingkai dari kamera di situs uji (gambar di kamar ini ada di dataset) metrik:

gambar

Pada frame dari kamera baru (kamar ini tidak ada di dataset):

gambar

Ketika pelanggan membutuhkan satu digit, kombinasi akurasi dan kelengkapan, kami memberikan rata-rata harmonik , atau ukuran-F :
gambar

Pelaporan


Bagian penting dari layanan ini adalah statistik. Bersama dengan kerangka individual (dan orang-orang berdedikasi yang dihitung oleh mereka), pelanggan ingin melihat hasilnya dalam bentuk laporan siap pakai (dasbor) dengan rata-rata / hunian maksimum untuk interval waktu yang berbeda. Hasilnya seringkali menarik dalam bentuk grafik dan grafik yang mencirikan distribusi jumlah orang dari waktu ke waktu.

Misalnya, dalam solusi kami untuk bingkai, jumlah orang untuk kedua model (siluet dan kepala) dihitung dan maksimum dipilih. Jika ada beberapa kamera di dalam ruangan, zona tumpang tindih gambar (pra-atur melalui antarmuka) disimpan, dan ketika seseorang memasuki lingkup beberapa kamera, ia diperhitungkan sekali.
Selanjutnya, nilai jumlah orang dalam antrian dibentuk untuk beberapa frame berturut-turut - untuk interval Δt . Dalam satu jam, nilai untuk beberapa interval seperti itu diturunkan untuk setiap kamar.

Ukuran interval waktu dan jumlah interval ditentukan berdasarkan jumlah kamar dan daya komputasi yang digunakan. Untuk setiap interval, array nilai dibentuk dengan jumlah orang di ruangan itu.

Nilai (mode) yang paling umum dipilih. Jika ada beberapa nilai dengan frekuensi yang sama, maksimum dipilih.

Nilai yang dihasilkan adalah jumlah orang dalam antrian pada waktu tsegera mengikuti interval yang dimaksud. Hanya dalam satu jam, satu set nilai diperoleh untuk interval yang berbeda - yaitu, nilai pada waktu instance t_1, t_2 .... t_n .

Lebih lanjut untuk t_1, t_2 .... t_n, nilai maksimum dan rata-rata dari jumlah orang dihitung - nilai-nilai ini ditampilkan dalam laporan sebagai beban puncak dan rata-rata untuk jam tertentu.

Diagram distribusi orang berdasarkan waktu untuk beban maksimum (contoh sederhana):

gambar

Diagram distribusi orang berdasarkan waktu untuk beban rata-rata (contoh sederhana):

gambar

Kerumunan


Kesimpulannya, untuk kelengkapan topik, saya ingin menyebutkan kasus kerumunan yang sangat besar, misalnya, kerumunan di stadion, di tempat-tempat lalu lintas manusia yang padat.

Tugas-tugas ini adalah tentang memperkirakan ukuran kerumunan: jika itu adalah kerumunan 300 orang, jawaban 312 atau 270 dianggap dapat diterima.

Dalam praktiknya, kami tidak harus menyelesaikan masalah seperti itu dengan bantuan analitik video (jika ini adalah acara yang diselenggarakan, maka lebih mudah bagi setiap orang untuk mengeluarkan label). Namun, kami melakukan pengujian. Untuk tugas-tugas seperti itu, metode terpisah digunakan, ikhtisar metode .

Hasil model dari tinjauan (model pra-dilatih di CSRNet) direproduksi:

gambar

Sudut penting untuk pengaturan model ini, yaitu, jika lokasi pemotretan ditetapkan, hasilnya akan lebih baik daripada ketika diterapkan pada beragam gambar. Secara umum, ada peluang untuk melatih ulang model ini - kualitas dapat ditingkatkan selama operasi model, ketika video nyata dari kamera yang diinstal aktif.

Penulis artikel: Tatyana Voronova (tvoronova), Elvira Dyaminova (Elviraa)

All Articles