Menggunakan classifier CNN yang sudah terlatih dan menerapkannya pada dataset gambar yang berbeda

11

Bagaimana Anda akan mengoptimalkan sebuah pra-dilatih neural network untuk menerapkannya ke masalah yang terpisah? Apakah Anda hanya menambahkan lebih banyak layer ke model pra-terlatih dan mengujinya pada set data Anda?

Misalnya, jika tugasnya adalah menggunakan CNN untuk mengklasifikasikan grup wallpaper , saya yakin itu tidak akan berhasil untuk secara langsung mengklasifikasikan jaringan pra-terlatih yang dilatih pada gambar kucing dan anjing, meskipun keduanya adalah pengklasifikasi gambar.

Sid
sumber

Jawaban:

15

Apakah Baca - Ketika Transfer Pembelajaran Tidak Menguntungkan? (Terima kasih kepada @media) (terlihat sangat informatif bagi saya, jadi tambahkan di sini untuk membuat jawaban ini lengkap ...)

Jawab untuk Pertanyaan Anda .. (mulai di sini)

Transfer Learning adalah Apa yang Anda Cari ..

  • Ketika kita diberi tugas Pembelajaran Mendalam, katakanlah, yang melibatkan pelatihan Jaringan Neural Konvolusional (Covnet) pada dataset gambar, naluri pertama kita adalah melatih jaringan dari awal. Namun, dalam praktiknya, jaringan saraf yang dalam seperti Covnet memiliki sejumlah besar parameter, seringkali dalam kisaran jutaan. Pelatihan Covnet pada dataset kecil (yang lebih kecil dari jumlah parameter) sangat mempengaruhi kemampuan Covnet untuk menggeneralisasi, sering mengakibatkan overfitting.

  • Oleh karena itu, lebih sering dalam praktiknya, seseorang akan menyempurnakan jaringan yang ada yang dilatih pada dataset besar seperti ImageNet (gambar 1,2M berlabel) dengan terus melatihnya (yaitu menjalankan back-propagation) pada dataset yang lebih kecil yang kita miliki. Asalkan dataset kami tidak berbeda secara drastis dalam konteks dengan dataset asli (misalnya ImageNet), model pra-terlatih akan telah mempelajari fitur yang relevan dengan masalah klasifikasi kami sendiri.

Kapan Model fine tune?

  • Secara umum, jika dataset kami tidak berbeda secara drastis dalam konteks dari dataset yang digunakan untuk model pra-pelatihan, kami harus melakukan fine-tuning. Jaringan pra-terlatih pada dataset besar dan beragam seperti ImageNet menangkap fitur universal seperti kurva dan tepi pada lapisan awalnya, yang relevan dan berguna untuk sebagian besar masalah klasifikasi.

  • Tentu saja, jika dataset kami mewakili beberapa domain yang sangat spesifik, misalnya, gambar medis atau karakter tulisan tangan Cina, dan bahwa tidak ada jaringan pra-terlatih pada domain tersebut yang dapat ditemukan, maka kami harus mempertimbangkan untuk melatih jaringan dari awal.

  • Satu keprihatinan lain adalah bahwa jika dataset kami kecil, fine-tuning jaringan pra-dilatih pada dataset kecil mungkin menyebabkan overfitting, terutama jika beberapa lapisan terakhir dari jaringan sepenuhnya terhubung lapisan, seperti dalam kasus untuk jaringan VGG. Berbicara dari pengalaman saya, jika kita memiliki beberapa ribu sampel mentah, dengan strategi augmentasi data umum diimplementasikan (terjemahan, rotasi, membalik, dll), fine-tuning biasanya akan memberi kita hasil yang lebih baik.

  • Jika dataset kami benar-benar kecil, misalkan kurang dari seribu sampel, pendekatan yang lebih baik adalah dengan mengambil output dari lapisan menengah sebelum lapisan yang terhubung sepenuhnya sebagai fitur (fitur bottleneck) dan melatih pengelompokan linier (misalnya SVM) di atas Itu. SVM sangat baik dalam menggambar batas keputusan pada dataset kecil.

Teknik fine-tuning

Di bawah ini adalah beberapa panduan umum untuk implementasi fine-tuning:

  • Praktik umum adalah memotong lapisan terakhir (lapisan softmax) dari jaringan pra-terlatih dan menggantinya dengan lapisan softmax baru kami yang relevan dengan masalah kita sendiri. Misalnya, jaringan pra-terlatih di ImageNet hadir dengan lapisan softmax dengan 1000 kategori.

  • Jika tugas kami adalah klasifikasi pada 10 kategori, lapisan softmax baru jaringan akan terdiri dari 10 kategori, bukan 1000 kategori. Kami kemudian menjalankan kembali propagasi pada jaringan untuk menyempurnakan bobot pra-terlatih. Pastikan validasi silang dilakukan agar jaringan dapat menggeneralisasi dengan baik.

  • Gunakan tingkat belajar yang lebih kecil untuk melatih jaringan. Karena kami berharap bobot pra-pelatihan sudah cukup baik dibandingkan dengan bobot yang diinisialisasi secara acak, kami tidak ingin mendistorsi bobot terlalu cepat dan terlalu banyak. Praktik yang umum adalah membuat tingkat pembelajaran awal 10 kali lebih kecil daripada yang digunakan untuk pelatihan awal.

  • Ini juga merupakan praktik umum untuk membekukan bobot beberapa lapis pertama dari jaringan pra-terlatih. Ini karena beberapa lapisan pertama menangkap fitur universal seperti kurva dan tepi yang juga relevan dengan masalah baru kita. Kami ingin menjaga bobot itu tetap utuh. Sebagai gantinya, kami akan membuat jaringan fokus pada pembelajaran fitur khusus dataset di lapisan berikutnya.

Anda perlu melatih mereka lagi dalam hal ini seolah-olah saya tidak salah maka wallpaper bukan kelas model Image-net .. Tidak akan sulit untuk membangun model dari awal untuk melakukannya (lebih disukai yang lebih dangkal akan juga lakukan di sini ..)

Sumber jawaban saya adalah terjemahan dari kursus luar biasa ini ..

Untuk Bacaan Lebih Lanjut,

Aditya
sumber
Jika Anda hanya melakukan ekstraksi fitur, seperti tidak memperbaiki lapisan mana pun. Apakah ada alasan untuk mengganti lapisan padat terakhir dengan classifier linier? Mengapa tidak menyimpannya sebagai lapisan padat baru, dan hanya melatih ulang sambil menjaga semua lapisan bawah tetap beku? Apakah hanya karena melatih classifier linier akan lebih cepat daripada melatih layer padat baru?
CMCDragonkai
1
Untuk ekstraksi fitur, tidak perlu menambahkan layer tetapi beberapa layer seperti Pooling dan Shape resize ditambahkan untuk mencocokkan redup dan mungkin mengurangi nilai-nilai perantara; Tentunya lebih cepat untuk melatih model linier daripada NN tetapi Anda dapat mencoba keduanya dan melihat mana yang terbaik untuk use case Anda; Mencairkan lapisan padat terakhir dan melatih kembali dengan beberapa lapisan tambahan agar sesuai dengan masalah Anda adalah praktik yang umum
Aditya