Bagaimana cara memformat data gambar untuk pelatihan / prediksi saat gambar berbeda ukurannya?

88

Saya mencoba melatih model saya yang mengklasifikasikan gambar. Masalah yang saya miliki adalah, mereka memiliki ukuran yang berbeda. bagaimana cara memformat gambar / atau arsitektur model saya?

Asif Mohammed
sumber
2
Tolong tunjukkan apa yang telah Anda coba sejauh ini dan apa yang tampaknya tidak berhasil untuk Anda.
Keith John Hutchison
16
Dan bam begitulah kode Inception v4. Saya tidak setuju dengan komentar off-the-shelf itu. Sedikit lebih banyak masukan akan menyenangkan - seperti jaringan seperti apa yang sedang kita bicarakan - tetapi suara negatif tidak dibenarkan sama sekali. Itu adalah masalah nyata di sana.
tepi matahari
4
Pertanyaannya adalah bagaimana ImageNet memformat data gambar mereka agar berguna untuk pelatihan?
mskw

Jawaban:

148

Anda tidak mengatakan arsitektur apa yang Anda bicarakan. Karena Anda mengatakan ingin mengklasifikasikan gambar, saya berasumsi bahwa itu adalah jaringan yang sebagian konvolusional, sebagian terhubung sepenuhnya seperti AlexNet, GoogLeNet, dll. Secara umum, jawaban atas pertanyaan Anda bergantung pada jenis jaringan yang Anda gunakan.

Jika, misalnya, jaringan Anda hanya berisi unit konvolusional - artinya, tidak berisi lapisan yang sepenuhnya terhubung - jaringan Anda dapat menjadi invarian terhadap ukuran gambar masukan. Jaringan seperti itu dapat memproses gambar masukan dan pada gilirannya mengembalikan gambar lain ("konvolusional sepanjang jalan"); Anda harus memastikan bahwa hasilnya sesuai dengan yang Anda harapkan, karena Anda harus menentukan kerugian dengan cara tertentu, tentunya.

Jika Anda menggunakan unit yang sepenuhnya terhubung, Anda siap menghadapi masalah: Di sini Anda memiliki sejumlah bobot yang dipelajari yang harus dikerjakan oleh jaringan Anda, jadi input yang berbeda akan membutuhkan jumlah bobot yang berbeda - dan itu tidak mungkin.

Jika itu masalah Anda, berikut beberapa hal yang dapat Anda lakukan:

  • Jangan peduli tentang merusak gambar. Sebuah jaringan mungkin saja belajar memahami kontennya; apakah skala dan perspektif berarti apa-apa bagi konten?
  • Pangkas gambar ke tengah ke ukuran tertentu. Jika Anda takut kehilangan data, lakukan beberapa pangkas dan gunakan ini untuk menambah data masukan Anda, sehingga gambar asli akan dipecah menjadi Ngambar berbeda dengan ukuran yang benar.
  • Padatkan gambar dengan warna pekat ke ukuran persegi, lalu ubah ukurannya.
  • Lakukan kombinasi itu.

Opsi padding mungkin memperkenalkan sumber kesalahan tambahan ke prediksi jaringan, karena jaringan mungkin (baca: kemungkinan besar akan) menjadi bias ke gambar yang berisi batas berlapis tersebut. Jika Anda membutuhkan beberapa ide, lihat bagian Gambar di dokumentasi TensorFlow, ada bagian seperti resize_image_with_crop_or_paditu yang menghilangkan pekerjaan yang lebih besar.

Untuk sekedar tidak peduli tentang squashing, berikut adalah bagian dari pipeline preprocessing dari jaringan Inception yang terkenal:

# This resizing operation may distort the images because the aspect
# ratio is not respected. We select a resize method in a round robin
# fashion based on the thread number.
# Note that ResizeMethod contains 4 enumerated resizing methods.

# We select only 1 case for fast_mode bilinear.
num_resize_cases = 1 if fast_mode else 4
distorted_image = apply_with_random_selector(
    distorted_image,
    lambda x, method: tf.image.resize_images(x, [height, width], method=method),
    num_cases=num_resize_cases)

Mereka benar-benar menyadarinya dan tetap melakukannya.

Bergantung pada seberapa jauh Anda ingin atau perlu pergi, sebenarnya ada makalah di sini yang disebut Spatial Pyramid Pooling in Deep Convolution Networks for Visual Recognition yang menangani input dengan ukuran yang berubah-ubah dengan memprosesnya dengan cara yang sangat khusus.

sisi matahari
sumber
11
Topik ini tampaknya jauh lebih rumit ketika Anda berurusan dengan deteksi objek dan segmentasi instance, karena ukuran kotak jangkar yang juga merupakan hyperparameter perlu disesuaikan jika Anda memiliki kumpulan data dengan varians tinggi dalam ukuran gambar.
CMCDragonkai
Rasio aspek memainkan peran yang cukup penting untuk jaringan yaitu untuk membedakan antara lingkaran dan elips.
HelloGoodbye
1
Pengamatan umum lainnya adalah bahwa bets tidak harus memiliki dimensi yang sama; Kelompok pertama dapat menangani gambar 4: 3, kelompok kedua dengan 16: 9 dst, selama lapisan padat ditangani.
sisi matahari
1
@Tobitor, selalu buat input jaringan sedekat mungkin dengan data aktual (pengujian, atau waktu inferensi). Jika semua gambar Anda jauh lebih lebar dari tinggi, Anda juga harus membuat model jaringan Anda untuk memproses gambar Anda seperti ini. Yang mengatakan, jika Anda tidak mungkin mengatakan bagaimana data "penggunaan" Anda akan terlihat, Anda harus membuat beberapa pengorbanan selama pelatihan. Dan dalam hal ini, mengubah ukuran gambar dari 1000x200 menjadi 256x256 secara umum tidak masalah (bayangkan melihat pelat nomor itu pada sudut 60 derajat - sekarang sangat kasar).
sisi matahari
2
@Tobitor Tidak ada persyaratan sama sekali untuk gambar menjadi persegi, itu hanya akan menjadi tradeoff paling buruk jika Anda tidak tahu ukuran gambar sebenarnya selama inferensi. : ^) Mengenai ukuran, semakin kecil semakin baik, tetapi gambar harus cukup besar untuk tetap menangkap detail terbaik yang diperlukan - secara umum, perlu diingat bahwa jika Anda, sebagai ahli manusia, tidak dapat menentukan apa yang ada di image, jaringan juga tidak akan bisa.
tepi matahari
11

Cobalah membuat lapisan penyatuan piramida spasial. Kemudian letakkan setelah lapisan konvolusi terakhir Anda sehingga lapisan FC selalu mendapatkan vektor berdimensi konstan sebagai masukan. Selama pelatihan, latih gambar dari seluruh kumpulan data menggunakan ukuran gambar tertentu untuk satu periode. Kemudian untuk periode berikutnya, beralihlah ke ukuran gambar yang berbeda dan lanjutkan pelatihan.

Pranay Mukherjee
sumber
Bisakah Anda menjelaskan sedikit tentang apa itu "penggabungan piramida spasial" dibandingkan dengan penggabungan biasa?
Matthieu
silakan baca Penyatuan piramida spasial di jaringan konvolusional yang dalam untuk pengenalan visual di blog.acolyer.org/2017/03/21/convolution-neural-nets-part-2 @Matthieu
Asif Mohammed