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?
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?
Jawaban:
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:
N
gambar berbeda dengan ukuran yang benar.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_pad
itu 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.
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.