Bagaimana pembelajaran mendalam membantu dalam mendeteksi beberapa objek dalam satu gambar?

8

Katakanlah ada dua mobil dalam sebuah gambar. Bagaimana cara mendeteksi mobil-mobil ini, mengingat dapat mendeteksi mobil tunggal dalam gambar?

Amanuel Negash
sumber

Jawaban:

11

Meskipun banyak solusi dalam sistem produksi masih menggunakan jendela geser seperti dijelaskan di bawah dalam jawaban ini, bidang visi komputer bergerak cepat. Kemajuan terbaru dalam bidang ini termasuk R-CNN dan YOLO .


Mendeteksi objek yang cocok dalam suatu gambar, ketika Anda sudah memiliki classifier objek terlatih, biasanya merupakan masalah pemindaian kasar melalui patch gambar.

Mulailah dengan ukuran tambalan terbesar yang diharapkan. Misal, jika gambar Anda 1024 x 768, tetapi selalu mengambil jarak jalan mungkin Anda tidak mengharapkan mobil apa pun mengambil lebih dari 80 x 80 piksel dalam gambar. Jadi, Anda mengambil blok 80x80 piksel dari satu sudut gambar, dan tanyakan kepada penggolong Anda peluang apa ada mobil di sudut itu. Kemudian ambil tambalan berikutnya - mungkin bergerak dengan 20 piksel.

Ulangi untuk semua posisi yang memungkinkan, dan putuskan tambalan mana yang paling mungkin mengandung mobil.

Selanjutnya, turunkan ukuran blok (mungkin 60 x 60, bergerak 15 piksel setiap kali) dan ulangi latihan yang sama lagi. Ulangi ini sampai Anda mencapai ukuran blok terkecil yang diharapkan untuk tujuan Anda.

Akhirnya Anda akan memiliki daftar area di dalam gambar, dengan kemungkinan masing-masing berisi mobil.

Blok yang tumpang tindih baik dengan probabilitas tinggi kemungkinan besar adalah mobil yang sama , jadi logika harus memiliki ambang batas untuk menggabungkan blok - biasanya mengambil area yang tumpang tindih dengan skor probabilitas tertinggi - dan menyatakan hanya ada satu mobil di area itu.

Seperti biasa dengan pendekatan ML, Anda perlu bereksperimen dengan meta-params yang benar - dalam hal ini ukuran blok, ukuran langkah, dan aturan untuk area penggabungan / pemisahan - untuk mendapatkan hasil yang paling akurat.

Neil Slater
sumber
10

Saya ingin menambahkan jawaban @ Neil_Slater dengan membagikan aplikasi saya.

Dalam aplikasi saya, saya ingin melatih model yang dapat secara otomatis memuat posisi catur dari buku catur seperti ini:

masukkan deskripsi gambar di sini

  1. Sebelum saya melakukan sesuatu, saya memastikan saya memiliki model yang dapat secara akurat mendeteksi bidak catur.

masukkan deskripsi gambar di sini

Itu bukan masalah yang sulit karena itu seperti melatih angka MINST. Saya mengumpulkan cukup sampel, secara acak menambahkan beberapa noise ke sampel itu. Model saya adalah pembelajaran mendalam convolutional 2-layer.

  1. Karena papan catur selalu berbentuk bujur sangkar. Saya menggunakan deteksi persegi yang tersedia di OpenCV untuk memberi saya daftar kandidat. Saya akan membuang persegi yang terlalu kecil, terlalu besar atau tidak habis dibagi 64 (karena ada 64 kotak).

  2. Selanjutnya, saya akan memotong gambar menjadi seperti ini:

masukkan deskripsi gambar di sini

Sekarang, saya memiliki lain multi-layer jaringan convolutional untuk memeriksa setiap persegi di papan. Panjang langkah adalah dimensi gambar dibagi 8 (karena ada delapan kotak di setiap dimensi). Ukuran patch sama dengan panjang langkahnya.

Pekerjaan pipa saya berfungsi karena saya dapat menggabungkan dua pengklasifikasi yang berbeda. Saya pribadi lebih suka melatih dua pengklasifikasi, karena akan lebih mudah untuk melatih dan memverifikasi daripada mencoba memasukkan semuanya ke dalam model tunggal.

Halo Dunia
sumber
3

Pertanyaannya sendiri tidak terlalu jelas, karena Anda tidak menyatakan bahwa Anda memiliki model yang dapat mendeteksi satu mobil per lari untuk gambar atau Anda hanya bertanya alat, algoritma atau kerangka kerja apa yang digunakan untuk mendeteksi mobil (atau objek lain) dalam sebuah gambar.

Menjawab varian kedua, Anda harus menggunakan algoritma yang dikembangkan untuk deteksi objek, yang merupakan Haar Cascades (yang tertanam dalam OpenCV dan ada tutorial yang jelas tentang cara melatih detektor objek kustom Anda, misalnya, tutorial pisang ) atau CNN, yang merupakan pilihan untuk deteksi objek menggunakan jaringan saraf, secara pribadi, saya senang bekerja dengan implementasi itu - kode sederhana dan komprehensif dan hasil yang luar biasa.

Kedua pendekatan (Haar Cascades dan CNNs) pada dasarnya menemukan pola-pola bentuk yang saling terhubung dan terletak bersama yang menggambarkan objek khusus Anda (baik itu menghadap, pisang, mobil atau UFO) dan menggunakan pola-pola ini untuk menemukan objek pada gambar baru. Dimasukkannya bersama objek yang terdeteksi (ketika perbatasan objek berpotongan atau satu dimasukkan oleh yang lain) digunakan untuk menemukan yang paling cocok untuk setiap wilayah.

chewpakabra
sumber
0

Pertanyaan Anda secara eksplisit menyatakan bahwa Anda hanya mencari beberapa mobil daripada beberapa objek, jadi jawabannya ada di pertanyaan. Anda tidak mencari banyak objek, tetapi banyak kejadian dari objek yang sama.

Memberikan Anda melatih sistem cukup baik untuk mengenali kedua jenis mobil maka mereka berdua harus dideteksi menggunakan pendekatan filter cascading standar ... Ini seperti bertanya bagaimana saya bisa mendeteksi 2 wajah dalam satu foto?

Jika Anda mencari mobil dan monyet maka situasinya sangat berbeda dan menggunakan pendekatan umum dengan alat-alat seperti CV terbuka, Anda biasanya akan melatih 2 pengklasifikasi (satu untuk mobil dan satu untuk monyet) iterate di atas gambar dua kali.

Semakin banyak kelas objek yang ingin Anda deteksi, semakin banyak klasifikasi dan iterasi yang Anda perlukan.

softwareguru1
sumber