Jaringan saraf convolutional dengan input gambar dari berbagai dimensi - Segmentasi gambar


12

Saya menghadapi masalah memiliki gambar dengan dimensi yang berbeda sebagai input dalam tugas segmentasi. Perhatikan bahwa gambar bahkan tidak memiliki rasio aspek yang sama.

Salah satu pendekatan umum yang saya temukan secara umum dalam pembelajaran mendalam adalah memotong gambar, seperti juga disarankan di sini . Namun, dalam kasus saya, saya tidak dapat memotong gambar dan mempertahankan pusatnya atau sesuatu yang serupa karena dalam segmentasi saya ingin output memiliki dimensi yang sama dengan input.

Makalah ini menunjukkan bahwa dalam tugas segmentasi seseorang dapat memberi makan gambar yang sama beberapa kali ke jaringan tetapi dengan skala yang berbeda dan kemudian mengumpulkan hasilnya. Jika saya memahami pendekatan ini dengan benar, itu hanya akan berfungsi jika semua gambar input memiliki rasio aspek yang sama. Tolong koreksi saya jika saya salah.

Alternatif lain adalah hanya mengubah ukuran setiap gambar ke dimensi tetap. Saya pikir ini juga diusulkan oleh jawaban untuk pertanyaan ini . Namun, itu tidak ditentukan dengan cara apa ukuran gambar diubah.

Saya mempertimbangkan untuk mengambil lebar dan tinggi maksimum dalam dataset dan mengubah ukuran semua gambar ke ukuran tetap dalam upaya untuk menghindari kehilangan informasi. Namun, saya percaya bahwa jaringan kami mungkin mengalami kesulitan dengan gambar yang terdistorsi karena bagian tepi gambar mungkin tidak jelas. Apa yang mungkin merupakan cara terbaik untuk mengubah ukuran gambar Anda sebelum mengumpankannya ke jaringan?

Apakah ada opsi lain yang saya tidak sadari untuk memecahkan masalah memiliki gambar dengan dimensi yang berbeda?

Juga, yang mana dari pendekatan ini menurut Anda adalah yang terbaik dengan mempertimbangkan kompleksitas komputasi tetapi juga kemungkinan hilangnya kinerja oleh jaringan?

Saya akan sangat menghargai jika jawaban atas pertanyaan saya menyertakan beberapa tautan ke sumber jika ada. Terima kasih.

Jawaban:


4

Saya akan memberikan jawaban yang lebih menyeluruh.

Ada 2 masalah yang mungkin Anda hadapi.

1) Jaring saraf Anda (dalam hal ini jaring syaraf convolutional) tidak dapat secara fisik menerima gambar dari resolusi yang berbeda. Ini biasanya terjadi jika seseorang memiliki lapisan yang sepenuhnya terhubung, tetapi jika jaringan sepenuhnya-convolutional maka harus dapat menerima gambar dari dimensi apa pun. Sepenuhnya convolutional menyiratkan bahwa itu tidak mengandung lapisan yang sepenuhnya terhubung, tetapi hanya lapisan convolutional, max-pooling dan normalisasi batch yang semuanya tidak berbeda dengan ukuran gambar. Tepatnya pendekatan ini diusulkan dalam makalah pelopor ini Jaringan Sepenuhnya Konvolusional untuk Segmentasi Semantik . Perlu diingat bahwa arsitektur dan metode pelatihan mereka mungkin sedikit usang sekarang. Pendekatan serupa digunakan dalam banyak digunakanU-Net: Jaringan Konvolusional untuk Segmentasi Gambar Biomedis dan banyak arsitektur lain untuk deteksi objek, perkiraan dan segmentasi.

2) Jaring saraf konvolusional tidak berskala invarian. Misalnya jika seseorang melatih kucing dengan ukuran yang sama dalam piksel pada gambar dengan resolusi tetap, internet akan gagal pada gambar kucing berukuran lebih kecil atau lebih besar. Untuk mengatasi masalah ini, saya tahu dua metode (mungkin lebih banyak dalam literatur): 1) pelatihan multi-skala gambar dengan ukuran yang berbeda dalam jaring sepenuhnya-convolutional untuk membuat model lebih kuat terhadap perubahan skala; dan 2) memiliki arsitektur multi-skala. Tempat untuk memulai adalah dengan melihat dua makalah penting ini: Fitur Jaringan Piramida untuk Deteksi Objek dan Representasi Resolusi Tinggi untuk Memberi Label Piksel dan Wilayah .


2

Dengan asumsi Anda memiliki dataset besar, dan ini berlabel pixel-bijaksana, satu cara hacky untuk menyelesaikan masalah ini adalah dengan preproses gambar untuk memiliki dimensi yang sama dengan memasukkan margin horisontal dan vertikal sesuai dengan dimensi yang Anda inginkan, seperti untuk label Anda menambahkan dummy ekstra output untuk piksel margin jadi saat menghitung kerugian Anda bisa menutupi margin.


Bagaimana seseorang berurusan dengan normalisasi dalam kasus-kasus ini? Apakah Anda hanya menormalkan piksel dalam gambar yang tidak termasuk dalam marginnya?
MattSt

Ya, karena proses pembuatan data Anda memiliki ukuran yang berbeda sehingga jika Anda memasukkan margin, Anda akan mengubah distribusi data. margin dimasukkan untuk mengelompokkan sampel pelatihan ke dalam batch karena masalah Anda perlu menampilkan vektor output yang tetap.
Fadi Bakoura


0

Karena Anda ingin melakukan segmentasi, Anda dapat menggunakan U-Net. Tidak memiliki Unit yang sepenuhnya terhubung. Oleh karena itu, ukuran input tidak menjadi masalah.


3
Saya pikir Anda harus menguraikan poin Anda sedikit lebih.
DuttaA

0

saya pikir Anda dapat mengubah ukuran pixel gambar Anda dan mengkonversi rgb ke biner atau integer untuk langkah selanjutnya


1
Hai dan selamat datang di AI Stack Exchange. Bisakah Anda memperluas jawaban Anda? Pertimbangkan untuk menambahkan lebih banyak konteks untuk mendukung jawaban Anda dan mungkin menambahkan referensi.
Jaden Travnik

0

Coba ubah ukuran gambar ke dimensi input arsitektur jaringan saraf Anda (pertahankan agar tetap seperti 128 * 128 dalam arsitektur 2D U-net standar) menggunakan teknik interpolasi tetangga terdekat . Ini karena jika Anda mengubah ukuran gambar menggunakan interpolasi lainnya, ini dapat berakibat merusak label kebenaran dasar. Ini khususnya masalah dalam segmentasi. Anda tidak akan menghadapi masalah seperti itu ketika datang ke klasifikasi.

Coba yang berikut ini:

import cv2 
resized_image = cv2.resize(original_image, (new_width, new_height), 
                           interpolation=cv2.INTER_NEAREST)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.