Saya bekerja dengan Python, scikit-belajar dan keras. Saya memiliki 3.000 ribu gambar arloji berwajah depan seperti yang berikut: Watch_1 , Watch_2 , Watch_3 .
Saya ingin menulis sebuah program yang menerima input foto jam tangan nyata yang mungkin diambil dalam kondisi yang kurang ideal daripada foto-foto di atas (warna latar yang berbeda, petir yang lebih gelap, dll.) Dan menemukan jam tangan yang paling mirip di antara 3000 yang ada di dalamnya. Dengan kemiripan yang saya maksudkan adalah bahwa jika saya memberikan sebagai input foto jam tangan cokelat bulat dengan renda tipis maka saya berharap sebagai jam tangan keluaran berbentuk bulat, warna gelap dan dengan renda tipis.
Apa algoritma pembelajaran mesin paling efisien untuk melakukan ini?
Misalnya, dengan mengikuti tautan ini, saya memiliki dua solusi berbeda di pikiran saya:
1) Menggunakan CNN sebagai ekstraktor fitur dan membandingkan jarak antara fitur-fitur ini untuk setiap pasangan gambar dengan mengacu pada gambar input.
2) Menggunakan dua CNN dalam Jaringan Saraf Siam untuk membandingkan gambar.
Apakah kedua opsi ini yang terbaik untuk tugas ini atau akankah Anda menyarankan sesuatu yang lain?
Apakah Anda tahu jaringan saraf pra-terlatih (dengan hiperparameter yang ditentukan sebelumnya) untuk tugas ini?
Saya telah menemukan beberapa posting menarik tentang StackOverflow tentang ini tetapi mereka cukup tua: Post_1 , Post_2 , Post_3 .
sumber
Jawaban:
Saya tidak berpikir bahwa arsitektur tingkat tinggi adalah yang paling cocok tetapi lebih tergantung pada banyak faktor dan detail. Dari apa yang saya sadari pendekatan pertama menjanjikan terutama ketika diperluas dengan langkah-langkah tambahan seperti yang dilakukan dalam TiefVision :
Karya ini jauh lebih baru (2016/17) dari yang Anda posting dan dilengkapi dengan seperangkat alat yang bagus dan makalah yang lebih rinci .
Mengapa menggunakan kembar tiga alias Deep Ranking?
Seperti yang dinyatakan dalam komentar: Mengapa kita harus menggunakan kembar tiga untuk kesamaan gambar daripada belajar vektor fitur dan menghitung jaraknya? Kembar tiga adalah cara merumuskan pertanyaan kesamaan sebagai masalah belajar, bukan belajar fitur vektor yang pada dasarnya tidak peduli untuk kesamaan. Pendekatan ini sangat masuk akal dalam kasus-kasus di mana kesamaan yang dirasakan manusia penting, yang mungkin berbeda dari persepsi mesin.
Kembar tiga bekerja seperti ini: Anda memberikan 3 gambar. Satu untuk membandingkan, satu mirip (dekat) dan satu gambar tidak begitu mirip (jauh). Ini adalah data pelatihan / ujian / validasi Anda. Melatih jaringan Anda pada sampel tersebut dan memprediksi urutan yang benar (mengklasifikasikan yang sama dari gambar yang tidak serupa) secara keseluruhan memungkinkan jaringan belajar cara memesan gambar berdasarkan kesamaan mereka.
Secara keseluruhan, pendekatan ini relatif kompleks. Mungkin overengineered tetapi Anda juga meminta cara terbaik untuk melakukan ini dan Deep Ranking mencapai nilai presisi yang sangat tinggi.
sumber
Saya akan memilih classifier, seperti VGG-16, yang bekerja dengan baik pada kelas imagenet. Kemudian, jalankan gambar arloji Anda melewatinya. Yang pasti, Anda dapat mengharapkan sebagian besar output "menonton" dengan probabilitas tinggi.
Namun, Anda kemudian mendapatkan fitur tambahan: tingkat aktivasi semua kategori lainnya. Itu memberi Anda vektor seribu nilai antara 0 dan 1.
Anda juga dapat mengekstrak aktivasi di berbagai titik di jaringan. Kemudian, kesamaan aktivasi dan output tersebut harus serupa antara dua kasus hanya jika gambarnya serupa.
sumber
Saya akan fokus pada augmentasi data terlebih dahulu. Karena gambar Anda memiliki latar belakang putih, Anda membuatnya sedikit lebih mudah. Ubah latar belakang putih menjadi latar belakang transparan, turunkan gambar, putar dan letakkan di latar yang mirip dengan data target Anda.
Lakukan ini beberapa kali dengan kombinasi berbeda dan miliki label untuk setiap jam. Maka saya akan menyarankan Anda menggunakan jaringan saraf convolutional reguler untuk klasifikasi. Setiap label akan memiliki skor, pilih satu dengan kepercayaan diri tertinggi dan yang harus paling mirip .
Misalnya katakanlah Anda menjalankan penggolong dengan gambar dan mendapatkan hasil ini:
CNN mengatakan bahwa ia memiliki keyakinan 51% bahwa Watch1 adalah arloji di gambar input. Tetapi juga yang benar adalah bahwa yang dianggap lebih mirip, Watch2 akan menjadi yang berikutnya lebih mirip dan seterusnya.
Jika Anda tidak mendapatkan hasil yang baik, lakukan seperti biasa. Lakukan percobaan dengan parameter dan / atau tambahkan lebih banyak lapisan. Coba cari tahu di mana itu gagal. Setelah memiliki wawasan itu, Anda dapat menggunakannya untuk memilih jenis jaringan konvolusional yang lebih terspesialisasi untuk masalah khusus Anda. Mencari itu tanpa pengetahuan sebelumnya tentang bagaimana itu akan melakukan bukan pendekatan yang tepat. Saya sarankan Anda mulai dengan model konvolusional dasar dan kemudian bekerja dari sana.
sumber