Bagaimana cara mempersiapkan / menambah gambar untuk jaringan saraf?

41

Saya ingin menggunakan jaringan saraf untuk klasifikasi gambar. Saya akan mulai dengan CaffeNet yang sudah dilatih sebelumnya dan melatihnya untuk aplikasi saya.

Bagaimana saya menyiapkan gambar input?

Dalam hal ini, semua gambar adalah objek yang sama tetapi dengan variasi (pikirkan: kontrol kualitas). Mereka berada pada skala yang agak berbeda / resolusi / jarak / kondisi pencahayaan (dan dalam banyak kasus saya tidak tahu skalanya). Juga, di setiap gambar ada area (dikenal) di sekitar objek yang menarik yang harus diabaikan oleh jaringan.

Saya dapat (misalnya) memotong bagian tengah setiap gambar, yang dijamin mengandung sebagian dari objek yang menarik dan tidak ada area yang diabaikan; tetapi sepertinya itu akan membuang informasi, dan juga hasilnya tidak akan benar-benar skala yang sama (mungkin variasi 1,5x).

Augmentasi dataset

Saya pernah mendengar tentang membuat lebih banyak data pelatihan secara acak / mirror / etc, apakah ada metode standar untuk ini? Adakah hasil pada berapa banyak peningkatan yang dihasilkan untuk akurasi klasifikasi?

Alex I
sumber

Jawaban:

35

Gagasan dengan Neural Networks adalah bahwa mereka memerlukan sedikit pra-pemrosesan karena pengangkatan berat dilakukan oleh algoritma yang bertanggung jawab mempelajari fitur-fiturnya.

Para pemenang dari Data Science Bowl 2015 memiliki tulisan yang bagus mengenai pendekatan mereka, sehingga sebagian besar konten jawaban ini diambil dari: Mengklasifikasikan plankton dengan jaringan saraf yang dalam . Saya sarankan Anda membacanya, khususnya bagian tentang Pra-pemrosesan dan augmentasi data .

- Ubah Ukuran Gambar

Adapun ukuran, resolusi atau jarak yang berbeda Anda dapat melakukan hal berikut. Anda cukup mengubah skala sisi terbesar dari setiap gambar hingga panjang tetap.

Pilihan lain adalah menggunakan openCV atau scipy. dan ini akan mengubah ukuran gambar menjadi 100 cols (lebar) dan 50 baris (tinggi):

resized_image = cv2.resize(image, (100, 50)) 

Namun pilihan lain adalah dengan menggunakan modul scipy, dengan menggunakan:

small = scipy.misc.imresize(image, 0.5)

- Augmentasi Data

Augmentasi Data selalu meningkatkan kinerja meskipun jumlahnya tergantung pada dataset. Jika Anda ingin memperbesar data untuk secara artifisial meningkatkan ukuran dataset Anda dapat melakukan hal berikut jika case berlaku (itu tidak berlaku jika misalnya adalah gambar rumah atau orang di mana jika Anda memutarnya 180 derajat mereka akan kehilangan semua informasi tetapi tidak jika Anda membaliknya seperti cermin):

  • rotasi: acak dengan sudut antara 0 ° dan 360 ° (seragam)
  • terjemahan: acak dengan pergeseran antara -10 dan 10 piksel (seragam)
  • rescaling: acak dengan faktor skala antara 1 / 1.6 dan 1.6 (log-uniform)
  • flipping: yes or no (bernoulli)
  • geser: acak dengan sudut antara -20 ° dan 20 ° (seragam)
  • stretching: acak dengan stretch factor antara 1 / 1.3 dan 1.3 (log-uniform)

Anda dapat melihat hasilnya pada gambar mangkuk Science Data.

Gambar yang sudah diproses

Gambar yang sudah diproses

versi augmented dari gambar yang sama

masukkan deskripsi gambar di sini

-Teknik lainnya

Ini akan berurusan dengan properti gambar lain seperti pencahayaan dan sudah terkait dengan algoritma utama lebih seperti langkah pra-pemrosesan sederhana. Periksa daftar lengkapnya di: Tutorial UFLDL

wacax
sumber
1
Warna juga layak dilihat untuk pembesaran data.
David C. Bishop
Bisakah Anda juga berbagi kode untuk rotasi dan geser dll ?? @wacax
Arsenal Fanatic
Kalian bisa menggunakan paket seperti keras untuk augmentasi data.
Ricardo Cruz
2
Bagi siapa pun yang memiliki masalah dengan mengimpor modul scipy.misc. Anda harus melakukannya import scipy.misc. stackoverflow.com/questions/13581593/…
eleijonmarck
Sedangkan untuk mengubah ukuran gambar, metode apa yang biasanya digunakan dalam metode canggih, misalnya yang digunakan di ImageNet?
HelloGoodbye
2

Sementara jawaban wacax lengkap dan sangat jelas, saya ingin menambahkan beberapa hal jika ada yang tersandung pada jawaban ini.

Pertama-tama, kebanyakan scipy.miscfungsi terkait gambar ( imread, imsave, imresizeERC) telah menjadi usang dalam mendukung baik imageio atau skimage .

Kedua, saya akan sangat menyarankan imgaug library python untuk tugas augmentasi. Ini sangat mudah digunakan dan memiliki hampir semua teknik augmentasi yang mungkin ingin Anda gunakan.

John Doe
sumber