7.2. Apa yang diubah oleh ML

Modul image membawa beberapa metode deteksi warisan -- find_features() untuk deteksi wajah Haar-cascade, find_eye() untuk pencari pupil tetap, find_hog() untuk ringkasan arah gradien, jalur find_keypoints() dan find_lbp() untuk titik kunci arbitrer. Semua masih berfungsi; semua telah digantikan oleh pipeline pembelajaran mesin.

7.2.1. Pemisahan klasik: ringkasan yang dirancang manual, keputusan yang dipelajari

Pipeline visi klasik adalah proses dua langkah. Langkah pertama mengubah piksel mentah menjadi sekumpulan angka kompak yang dipilih untuk merangkum apa yang ada di gambar -- bukan nilai piksel itu sendiri, tetapi deskripsi pendek tentang pola mana yang muncul di mana. Langkah kedua mengambil rangkuman itu dan membuat keputusan: wajah atau bukan, objek ini atau itu, target yang sama atau berbeda.

Pemisahan itu penting karena dua langkah memiliki penulis yang berbeda. Langkah pertama ditulis oleh manusia. Seseorang duduk dan memutuskan bahwa perbedaan kecerahan antara dua persegi panjang tertentu adalah ringkasan yang baik dari wilayah mata, bahwa arah tepi dominan di setiap sel kisi adalah ringkasan yang baik dari siluet orang yang berdiri, bahwa pola terang-atau-gelap di sekitar setiap piksel adalah ringkasan yang baik dari tekstur lokal. Masing-masing pilihan itu adalah algoritma yang ditulis tangan -- ditulis, di-debug, dan dipublikasikan. Metode warisan di atas semuanya adalah ringkasan semacam ini yang telah menjadi alat standar:

  • find_features() merangkum jendela citra dengan menjumlahkan kecerahan di dalam beberapa persegi panjang dan membandingkan totalnya. Tata letak persegi panjang dipilih karena wajah manusia menunjukkan kontras terang-terhadap-gelap yang dapat diandalkan: alis terhadap pipi, rongga mata terhadap dahi, hidung terhadap kulit sekitarnya.

  • find_hog() merangkum citra dengan berjalan melalui kisi sel-sel kecil dan merekam arah tepi mana yang mendominasi di setiap sel. Kisi dipilih karena siluet orang yang berdiri menghasilkan pola arah tepi yang dapat dikenali terlepas dari pakaian atau pencahayaan.

  • find_lbp() merangkum lingkungan setiap piksel dengan mengkodekan piksel sekitar mana yang lebih terang dan mana yang lebih gelap. Pengkodean dipilih karena pola lebih-terang-dari / lebih-gelap-dari ini menangkap tekstur permukaan secara independen dari pencahayaan keseluruhan.

  • find_keypoints() menemukan titik sudut dalam citra dan mendeskripsikan area di sekitar setiap sudut dengan cara yang tetap sama ketika sudut diputar. Skema sudut-dan-rotasi dipilih karena sudut yang sama muncul kembali ketika suatu adegan dilihat dari sudut yang berbeda.

Setelah sebuah ringkasan ditulis secara manual, langkah pembelajaran kecil di atasnya dapat menggabungkan angka-angka menjadi keputusan. Algoritma deteksi wajah menambahkan langkah pembelajaran pada ringkasan perbedaan persegi panjang, melatihnya pada citra wajah dan non-wajah berlabel untuk mempelajari kombinasi perbedaan mana yang menandakan wajah. Ringkasan arah tepi dimasukkan ke langkah pembelajaran yang dilatih pada citra orang dan non-orang berlabel. Deskriptor sudut dimasukkan ke langkah pencocokan yang mempelajari berapa banyak bobot yang harus diberikan pada setiap sudut. Masing-masing langkah kedua ini adalah algoritma pembelajaran -- kecil menurut standar modern, tetapi algoritma pembelajaran.

Pemisahan kontribusi itulah yang penting. Manusia berkontribusi ringkasan. Mesin mempelajari kombinasi. Menambahkan target baru berarti menulis ringkasan baru.

7.2.2. Apa yang diubah oleh jaringan saraf

Sebuah jaringan saraf menghapus pemisahan. Lapisan-lapisan pertama jaringan melakukan pekerjaan ringkasan yang digunakan oleh algoritma yang ditulis tangan -- mendeteksi tepi, sudut, batang berorientasi, tekstur, persis hal-hal yang masing-masing metode warisan di atas ditala untuk dideteksi -- tetapi tidak ditulis tangan. Mereka dipelajari dari data pelatihan yang sama dengan langkah keputusan yang dipelajari, dalam satu pass pelatihan yang menyesuaikan kedua bagian jaringan sekaligus. Lapisan yang lebih dalam melakukan penggabungan yang dilakukan oleh langkah pembelajaran kecil di atas ringkasan yang ditulis tangan, juga dipelajari, dalam pass yang sama.

Perubahan dalam siapa yang merancang apa bersifat total:

  • Manusia merancang masukan -- bingkai yang ditangkap dari ukuran dan format tertentu.

  • Manusia merancang keluaran -- tata letak tensor hasil (satu skor per kelas untuk klasifikasi, daftar kotak untuk deteksi, kisi titik kunci untuk landmark).

  • Manusia menyediakan data pelatihan berlabel -- contoh target yang cukup dan contoh non-target yang cukup sehingga proses pelatihan memiliki sesuatu untuk dipelajari.

Semua yang ada di antara masukan dan keluaran dihasilkan oleh proses pelatihan. Tidak ada langkah penulisan-ringkasan yang terpisah. Lapisan awal menetap menjadi detektor tepi dan tekstur bukan karena seseorang menulisnya seperti itu, tetapi karena deteksi tepi dan tekstur adalah yang membuat prediksi jaringan cocok dengan label. Lapisan yang lebih dalam menetap menjadi detektor bentuk dan objek karena alasan yang sama. Kedua bagian dilatih bersama, yang memungkinkan ringkasan yang dihasilkan setiap lapisan menjadi persis ringkasan yang dibutuhkan lapisan berikutnya -- bukan yang generik yang harus diterima oleh pipeline yang ditulis tangan.

7.2.3. Menyusun dengan modul image

Pipeline jaringan saraf masih menangkap melalui API sensor yang sama, menggambar hasil melalui primitif draw_rectangle() dan draw_circle() yang sama, dan membatasi pekerjaan melalui ROI (x, y, w, h) yang sama. Pipeline tipikal menangkap bingkai, secara opsional menemukan target kasar dengan detektor klasik seperti find_blobs() dan meneruskan kotak pembatasnya ke inferensi sebagai ROI, menjalankan inferensi, dan mengaNotasi deteksi yang dikembalikan kembali ke bingkai asli. Primitif klasik adalah substrat; jaringan adalah langkah baru di tengah.