Saya telah mengerjakan masalah regresi di mana inputnya adalah gambar, dan labelnya adalah nilai kontinu antara 80 dan 350. Gambar-gambar tersebut dari beberapa bahan kimia setelah reaksi berlangsung. Warna yang muncul menunjukkan konsentrasi bahan kimia lain yang tersisa, dan itulah yang dihasilkan model - konsentrasi bahan kimia itu. Gambar dapat diputar, dibalik, dicerminkan, dan output yang diharapkan harus tetap sama. Analisis semacam ini dilakukan di laboratorium nyata (mesin yang sangat khusus menghasilkan konsentrasi bahan kimia menggunakan analisis warna seperti saya melatih model ini untuk dilakukan).
Sejauh ini saya hanya bereksperimen dengan model yang secara kasar didasarkan pada VGG (beberapa urutan blok konv-konv-konv-pool). Sebelum bereksperimen dengan arsitektur yang lebih baru (Inception, ResNets, dll.), Saya pikir saya akan meneliti apakah ada arsitektur lain yang lebih umum digunakan untuk regresi menggunakan gambar.
Dataset terlihat seperti ini:
Dataset berisi sekitar 5.000 sampel 250x250, yang telah saya ubah ukurannya menjadi 64x64 sehingga pelatihan lebih mudah. Setelah saya menemukan arsitektur yang menjanjikan, saya akan bereksperimen dengan gambar beresolusi lebih besar.
Sejauh ini, model terbaik saya memiliki kesalahan kuadrat rata-rata pada kedua set pelatihan dan validasi sekitar 0,3, yang jauh dari dapat diterima dalam kasus penggunaan saya.
Model terbaik saya sejauh ini terlihat seperti ini:
// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()
y = dense(x, units=1)
// loss = mean_squared_error(y, labels)
Pertanyaan
Apa arsitektur yang sesuai untuk output regresi dari input gambar?
Edit
Saya telah mengulangi penjelasan saya dan menghapus keakuratan.
Edit 2
Saya telah merestrukturisasi pertanyaan saya jadi semoga jelas apa yang saya cari
sumber
Jawaban:
Pertama-tama saran umum: lakukan pencarian literatur sebelum Anda mulai membuat percobaan pada topik yang tidak Anda kenal. Anda akan menghemat banyak waktu.
Dalam hal ini, melihat makalah yang ada Anda mungkin telah memperhatikannya
Regresi dengan CNN bukan masalah sepele. Melihat lagi pada makalah pertama, Anda akan melihat bahwa mereka memiliki masalah di mana mereka pada dasarnya dapat menghasilkan data yang tak terbatas. Tujuannya adalah untuk memprediksi sudut rotasi yang diperlukan untuk memperbaiki gambar 2D. Ini berarti bahwa saya pada dasarnya dapat mengambil set pelatihan saya dan menambahnya dengan memutar setiap gambar dengan sudut yang sewenang-wenang, dan saya akan mendapatkan set pelatihan yang lebih besar dan valid. Dengan demikian masalahnya tampak relatif sederhana, sejauh masalah Deep Learning pergi. Omong-omong, perhatikan trik augmentasi data lain yang mereka gunakan:
Jadi, apa yang bisa kita pelajari dari ini? Pertama-tama, 5000 gambar itu adalah kumpulan data kecil untuk tugas Anda. Makalah pertama menggunakan jaringan yang dipretrains pada gambar yang mirip dengan yang mereka ingin belajar tugas regresi: tidak hanya Anda perlu belajar tugas yang berbeda dari yang untuk itu arsitektur dirancang (klasifikasi), tetapi set pelatihan Anda tidak sama sekali tidak seperti perangkat pelatihan yang biasanya dilatih oleh jaringan ini (CIFAR-10/100 atau ImageNet). Jadi Anda mungkin tidak akan mendapat manfaat dari transfer pembelajaran. Contoh MATLAB memiliki 5000 gambar, tetapi mereka hitam dan putih dan secara semantik semuanya sangat mirip (well, ini bisa menjadi kasus Anda juga).
Lalu, seberapa realistiskah melakukan lebih baik dari 0,3? Pertama-tama kita harus mengerti apa yang Anda maksud dengan kerugian rata-rata 0,3. Apakah maksud Anda bahwa kesalahan RMSE adalah 0,3,
Juga, coba hitung jumlah parameter di jaringan Anda: Saya sedang terburu-buru dan saya mungkin membuat kesalahan konyol, jadi tentu saja periksa kembali perhitungan saya dengan beberapa
summary
fungsi dari kerangka apa pun yang mungkin Anda gunakan. Namun, kira-kira saya akan mengatakan Anda memilikinya(perhatikan saya melewatkan parameter dari lapisan norma batch, tapi mereka hanya 4 parameter untuk lapisan sehingga mereka tidak membuat perbedaan). Anda memiliki setengah juta parameter dan 5000 contoh ... apa yang Anda harapkan? Tentu, jumlah parameter bukan indikator yang baik untuk kapasitas jaringan saraf (ini adalah model yang tidak dapat diidentifikasi), tapi tetap saja ... Saya tidak berpikir Anda bisa melakukan jauh lebih baik dari ini, tetapi Anda dapat mencoba beberapa hal:
sumber