Apakah konvolusi “meratakan gambar”?

8

Saya mencari penjelasan yang bagus tentang bagaimana konvolusi dalam pembelajaran mendalam bekerja ketika diterapkan pada gambar multi-channel. Sebagai contoh, katakanlah saya memiliki gambar 100 x 100 piksel dengan tiga saluran, RGB. Input tensor kemudian memiliki dimensi 100 x 100 x 3.

Jika saya menerapkan konvolusi dengan N filter dan satu langkah, akan menjadi dimensi output:

100 x 100 x 3 x N?

atau

100 x 100 x N?

Dengan kata lain, apakah konvolusi yang diterapkan "meratakan" gambar, atau apakah konvolusi diterapkan pada saluran berdasarkan saluran?

David Ruiz
sumber

Jawaban:

7

Dalam semua implementasi untuk CNN yang memproses gambar yang telah saya lihat, output dalam lapisan apa pun adalah

Width x Height x Channels

atau permutasi. Ini adalah jumlah dimensi yang sama dengan input, tidak ada dimensi tambahan yang ditambahkan oleh lapisan convolutional. Setiap saluran peta fitur dalam output lapisan CNN adalah array 2D "pipih" yang dibuat dengan menambahkan hasil beberapa kernel 2D (satu untuk setiap saluran di lapisan input).

Biasanya bahkan gambar input skala abu-abu diharapkan diwakili Width x Height x 1sedemikian rupa sehingga sesuai dengan pola yang sama dan model lapisan yang sama dapat digunakan.

Sangat layak untuk membangun desain lapisan yang mengubah lapisan input saluran 2D + standar menjadi lapisan saluran 3D +. Ini bukan sesuatu yang pernah saya lihat sebelumnya, tetapi Anda tidak pernah dapat mengesampingkan bahwa itu bisa berguna dalam masalah tertentu.

Anda juga dapat melihat konvolusi saluran 3D + di CNN yang diterapkan pada video, tetapi dalam hal ini, strukturnya akan menjadi beberapa variasi dari

Width x Height x Frames x Channels
Neil Slater
sumber
Terima kasih banyak. Saya benar-benar menemukan penjelasan bagus lainnya yang menyertakan bentuk konvolusi kernel di sini: link
David Ruiz
2

Itu tergantung pada jumlah filter yang Anda pilih. katakanlah Anda telah memilih 64 filter.

tensor berat Anda akan berbentuk [3, 3, 3, 64] (3 ke 3 adalah jumlah saluran di lapisan input dan 64 adalah jumlah saluran di lapisan keluaran) dan bentuk tensor bias [64]

output akan menjadi jika Pad = "SAMA" dan melangkah 1 untuk gambar input 224 * 224 * 3 = 224 * 224 * 64

output akan menjadi jika Pad = "Valid" dan melangkah 1 untuk gambar input 224 * 224 * 3 = 221 * 221 * 64

Sekarang dengan input 221 * 221 * 64 jika Anda ingin membuat 128 filter pada layer berikutnya, bentuk vektor bobot Anda adalah [3, 3, 64, 128] dan - bias bentuk vecotr adalah [128]

dan bentuk keluaran - jika Pad = "SAMA" [221, 221, 128] - jika Pad = "VALID" [198, 198, 128] sedang mempertimbangkan stride = [1,1,1,1]

Anda dapat memeriksa hasil ini sambil membangun grafik menggunakan layername.get_shape ().

Prakash Vanapalli
sumber
1
Secara teknis jawaban untuk pertanyaan OP tidak tergantung pada jumlah filter. Jadi kalimat pertama Anda bisa dilakukan dengan mengubah / klarifikasi. Namun, nilai contoh berguna, terutama memperjelas bentuk array bobot.
Neil Slater
1

Dimensi keluaran konvolusi dalam pembelajaran mendalam tergantung pada banyak faktor

  1. ukuran filter (alias kernel)
  2. padding (apakah Anda menambahkan nol atau tidak di sekitar gambar Anda dan berapa banyak)
  3. jumlah filter yang Anda gunakan
  4. langkahnya

Ketergantungan yang paling sederhana adalah pada jumlah filter N. Ini memberi Anda jumlah peta fitur yang memiliki output Anda. Untuk input yang mungkin berupa saluran RGB yaitu 3, untuk output nomor ini dapat dipilih secara bebas.

Faktor berikutnya adalah zero-padding. Jika Anda menggunakan ukuran filter (3,3) dan padding "valid" yaitu menambahkan NO nol di sekitar gambar Anda berakhir dengan output dimensi.

(100, 100, 3) -> (98, 98, N)

Karena Anda menggunakan langkah 1. Jika Anda memindahkan filter melintasi gambar di akhir gambar di setiap arah, filter akan mengenai batas setelah 98 langkah.

Namun, jika Anda menggunakan lapisan "SAMA" Anda mengimbangi ukuran filter -dalam kasus ukuran filter (3,3) yang akan sesuai dengan satu baris nol di sekitar gambar- Anda akan berakhir dengan:

(100, 100, 3) -> (100, 100, N)

Dengan langkah 2 misalnya Anda menggeser posisi filter dengan dua piksel. Karena itu, Anda dapatkan

(100, 100, 3) -> (50, 50, N)
Sören
sumber
1

Tiga saluran RGB dililit oleh kernel yang berbeda dan ditambahkan di setiap peta fitur. Jadi, Anda akan memiliki 100 x 100 x N sebagai output lapisan pertama.

Jessé Andrade
sumber