Saya memiliki diskusi yang menarik berdasarkan proyek yang sedang kami kerjakan: mengapa menggunakan sistem inspeksi visual CNN melalui algoritma pencocokan templat?
Latar Belakang: Saya telah menunjukkan demo sistem penglihatan CNN sederhana (webcam + laptop) yang mendeteksi jika jenis objek tertentu "rusak" / cacat atau tidak - dalam hal ini, papan sirkuit PCB. Model CNN saya ditunjukkan contoh papan sirkuit yang benar dan rusak (masing-masing sekitar 100 gambar) dengan latar belakang statis. Model kami menggunakan beberapa lapisan conv / maxpool pertama dari VGG16 pra-terlatih (pada imagenet), dan kemudian kami menambahkan beberapa conv / pool yang lebih dapat dilatih, dengan beberapa kepadatan, yang mengarah ke keluaran vektor terkodekan panas-pendek yang dikodekan untuk klasifikasi. : (is_empty, has_good_product, has_defective_product).
Model dilatih dengan cukup mudah dan mencapai validasi 99% tanpa masalah; kami juga dilatih dengan berbagai augmentasi data karena kami tahu dataset kami kecil. Dalam praktiknya, ini bekerja sekitar 9 kali dari 10, tetapi beberapa terjemahan / rotasi acak dari papan sirkuit yang sama kadang-kadang meletakkannya di kelas yang berlawanan. Mungkin augmentasi data yang lebih agresif akan membantu. Bagaimanapun, untuk proyek konsep prototipe kami senang.
Sekarang kami sedang mempresentasikan kepada insinyur lain dan rekannya, dan ia mengemukakan argumen bahwa NN terlalu banyak dalam hal ini, haruskah hanya menggunakan pencocokan templat, mengapa seseorang ingin melakukan CNN?
Kami tidak memiliki jawaban yang bagus untuk mengapa pendekatan kami bisa lebih baik dalam aplikasi tertentu (misalnya bagian lain untuk diperiksa). Beberapa poin yang kami kemukakan:
1) Lebih kuat untuk invarian (melalui misalnya augmentasi data)
2) Dapat melakukan pembelajaran online untuk meningkatkan sistem (misalnya manusia dapat memberi tahu perangkat lunak mana contoh yang salah)
3) Tidak perlu menetapkan ambang batas seperti pada algoritma visi komputer klasik Apa yang kalian pikirkan, apakah ada lebih banyak keuntungan untuk sistem CNN untuk jenis tugas inspeksi ini? Dalam kasus apa akan lebih baik daripada pencocokan templat?
Beberapa gagasan acak untuk NNs dalam bisa menjadi teknologi untuk pekerjaan itu: untuk sistem yang membutuhkan penginderaan kedalaman 3D sebagai bagian dari input, atau semua jenis objek yang dapat dideformasi / direntangkan / diperas tetapi masih "bagus" dan tidak cacat (mis. boneka binatang, kabel, dll). Penasaran mendengar pikiran Anda :)
Jawaban:
Insinyur yang dimaksud yang mengusulkan metode CV tradisional untuk aplikasi Anda hanya melakukannya karena kebiasaan. Menggunakan pencocokan templat sangat ketinggalan jaman dan telah terbukti berkinerja sangat buruk. Namun, saya pikir CNN berlebihan tergantung pada ukuran dataset Anda.
Bagaimana cara kerja pencocokan template?
Pencocokan templat menggeser jendela di gambar Anda yang akan memberikan kecocokan persen dengan templat. Jika kecocokan persen di atas ambang batas yang ditentukan sebelumnya maka dianggap kecocokan. Misalnya jika Anda memiliki gambar seekor anjing dan Anda ingin menentukan apakah ada seekor anjing di dalam gambar tersebut, Anda akan menggeser sebuah cetakan anjing di sekitar seluruh area gambar dan melihat apakah ada kecocokan persen yang cukup besar. Ini kemungkinan akan menghasilkan kinerja yang sangat buruk karena memerlukan template untuk tumpang tindih gambar secara identik . Apa kemungkinan hal itu dalam praktik? Tidak terlalu tinggi.
Satu-satunya pencocokan templat waktu adalah teknik yang memadai adalah jika Anda tahu persis apa yang Anda cari dan Anda yakin bahwa itu akan muncul hampir identik dalam setiap contoh kelas yang diberikan.
Mengapa menggunakan pembelajaran mesin sebagai gantinya?
Teknik pembelajaran mesin tidak kaku. Tidak seperti apa yang dikatakan stmax, CNN mampu menggeneralisasi dataset dengan sangat baik . Itu sebabnya mereka begitu kuat. Menggunakan contoh anjing, CNN tidak perlu melihat gambar setiap anjing yang ada untuk memahami apa yang dimaksud dengan anjing. Anda dapat menunjukkannya mungkin 1000 gambar dari pencarian Google, dan kemudian algoritme akan dapat mendeteksi bahwa anjing Anda, sebenarnya adalah seekor anjing. Fakta bahwa algoritma pembelajaran mesin menggeneralisasi dengan sangat baik adalah alasan bahwa mereka mengganti semua teknik CV kuno. Sekarang masalahnya adalah jumlah data yang Anda butuhkan untuk melatih CNN. Mereka sangat intensif data .
Saya tidak berpikir bahwa 100 poin data cukup untuk melatih CNN yang kuat. Karena kompleksitas model yang mendalam untuk membatasi bias, Anda perlu menambah jumlah contoh. Saya biasanya menyarankan 100 contoh untuk setiap fitur untuk model dalam dan 10 contoh untuk setiap fitur untuk model dangkal. Itu benar-benar semua tergantung pada fitur-ruang Anda.
Apa yang saya sarankan.
Apa yang sebenarnya Anda lakukan adalah deteksi anomali . Anda memiliki banyak contoh yang akan disajikan dari PCB yang dalam kondisi baik. Anda ingin mendeteksi yang rusak. Jadi saya akan mencoba beberapa metode deteksi anomali. Mereka jauh lebih mudah diimplementasikan dan Anda bisa mendapatkan hasil yang baik menggunakan model dangkal terutama dalam dataset miring (1 kelas lebih terwakili).
sumber
Jawabannya tergantung pada tugas. Pencocokan template dapat berfungsi untuk beberapa tugas tetapi tidak untuk semua. CNN berpotensi memiliki kemampuan untuk menggeneralisasi untuk input yang tidak terlihat yang tidak cocok dengan template Anda, sehingga berpotensi menggeneralisasi lebih baik.
Tetapi apakah CNN akan mengalahkan pencocokan templat akan tergantung pada tugas spesifik dan spesifik apa yang ingin Anda capai. Ini adalah ilmu empiris; pada akhirnya, cara Anda menemukan mana yang lebih baik adalah dengan mencoba keduanya - atau belajar dari orang lain yang telah mencobanya (misalnya, dengan membaca literatur). Saya tidak berpikir Anda akan menemukan beberapa teori atau taksonomi yang akan menggantikan evaluasi empiris pada data dunia nyata.
sumber
Satu masalah yang mungkin Anda temui dengan NN (dan metode klasifikasi lainnya) adalah karena Anda hanya menunjukkan cacat tertentu, NN mungkin tidak tahu bagaimana harus bereaksi terhadap cacat yang sama sekali baru / belum terlihat yang mungkin muncul di masa mendatang.
Anda ingin NN belajar "apa pun yang tidak terlihat seperti PCB yang tidak rusak adalah PCB yang rusak". Tetapi bagaimana jika ia telah mempelajari "sesuatu yang tidak terlihat seperti PCB yang rusak adalah PCB yang tidak rusak"?
Anda dapat mencoba untuk memodifikasi beberapa gambar dari PCB yang tidak cacat dengan menambahkan white spot kecil (atau gangguan kecil lainnya) pada mereka di lokasi acak dan memiliki jaringan saraf mengklasifikasikan gambar yang dimodifikasi ini. Itu pasti harus mengklasifikasikan mereka sebagai cacat, bukan? Tetapi mungkin akan kehilangan beberapa (atau cukup banyak) karena tidak pernah melihat cacat seperti itu sebelumnya.
Untuk mendeteksi cacat yang benar-benar baru, metode deteksi anomali / pengklasifikasi satu kelas mungkin lebih .. trustworty, karena mereka harus mengambil apa pun yang belum pernah dilihat sebelumnya.
Seperti kata DW, Anda hanya perlu mencoba kedua metode dan mencari tahu mana yang bekerja lebih baik. Pastikan untuk memiliki set tes yang benar-benar bagus yang juga mengandung cacat baru!
sumber