Perbedaan antara "kernel" dan "filter" di CNN

37

Apa perbedaan antara istilah "kernel" dan "filter" dalam konteks jaringan saraf convolutional?

ryguy
sumber
5
Mereka sama! Filter atau kernel adalah sekelompok bobot sederhana yang dibagikan di seluruh ruang input.
yasin.yazici

Jawaban:

42

Dalam konteks jaringan saraf convolutional, kernel = filter = fitur detektor.


Berikut ini adalah ilustrasi hebat dari tutorial pembelajaran mendalam Stanford (juga dijelaskan dengan baik oleh Denny Britz ).

masukkan deskripsi gambar di sini

Filter adalah jendela geser kuning, dan nilainya adalah:

[101010101]
Franck Dernoncourt
sumber
2
Apakah ada nama khusus untuk filter? Seperti "Blur" atau "Edge mendeteksi"
Pratik Khadloya
2
@PratikKhadloya tidak, nama-nama itu diberikan secara subjektif oleh para peneliti berdasarkan apa yang tampaknya terdeteksi oleh filter.
shadowtalker
1
@ Frank Dernoncourt menurut tautan ini menuju data data.com ... mereka berbeda ketika kami memiliki beberapa saluran. sebenarnya ketika ada beberapa saluran Setiap filter sebenarnya merupakan kumpulan kernel, dengan terdapat satu kernel untuk setiap saluran input tunggal ke layer, dan setiap kernel menjadi unik. Saya akan senang memiliki ide Anda
sariii
6

Peta fitur sama dengan filter atau "kernel" dalam konteks khusus ini. Bobot filter menentukan fitur spesifik apa yang terdeteksi.

Jadi misalnya, Franck telah menyediakan visual yang hebat. Perhatikan bahwa filter / fitur-detektornya memiliki x1 di sepanjang elemen diagonal dan x0 di sepanjang semua elemen lainnya. Pembobotan kernel ini akan mendeteksi piksel dalam gambar yang memiliki nilai 1 sepanjang diagonal gambar.

Perhatikan bahwa fitur yang berbelit-belit yang dihasilkan menunjukkan nilai 4 di mana pun gambar memiliki "1" di sepanjang nilai diagonal filter 3x3 (sehingga mendeteksi filter di bagian 3x3 spesifik gambar), dan nilai 2 yang lebih rendah di bidang gambar gambar di mana filter itu tidak cocok dengan kuat.

JohnnyUtah
sumber
5

k×k×CCCHsayan×Hsayan×C32×32Gambar RGB). Masuk akal untuk menggunakan kata yang berbeda untuk menggambarkan array bobot 2D dan yang berbeda untuk struktur 3D bobot, karena perkalian terjadi antara array 2D dan kemudian hasilnya dijumlahkan untuk menghitung operasi 3D.

Saat ini ada masalah dengan nomenklatur di bidang ini. Ada banyak istilah yang menggambarkan hal yang sama dan bahkan istilah yang digunakan secara bergantian untuk konsep yang berbeda! Ambil sebagai contoh terminologi yang digunakan untuk menggambarkan output dari lapisan konvolusi: peta fitur, saluran, aktivasi, tensor, pesawat, dll ...

Berdasarkan wikipedia, "Dalam pemrosesan gambar, sebuah kernel, adalah sebuah matriks kecil".

Berdasarkan wikipedia, "Matriks adalah susunan persegi panjang yang disusun dalam baris dan kolom".

k1×k2×C

Yah, saya tidak bisa berpendapat bahwa ini adalah terminologi terbaik , tetapi lebih baik daripada hanya menggunakan istilah "kernel" dan "filter" secara bergantian. Selain itu, kita perlu kata untuk menggambarkan konsep array 2D berbeda yang membentuk filter.

Jim
sumber
1

Jawaban yang ada sangat bagus dan komprehensif menjawab pertanyaan. Hanya ingin menambahkan bahwa filter dalam jaringan Konvolusional dibagikan di seluruh gambar (yaitu, inputnya digabungkan dengan filter, seperti yang divisualisasikan dalam jawaban Franck). Bidang reseptif dari neuron tertentu adalah semua unit input yang memengaruhi neuron yang dimaksud. Bidang reseptif dari neuron dalam jaringan Konvolusional umumnya lebih kecil dari bidang reseptif neuron dalam jaringan padat milik filter bersama (juga disebut berbagi parameter ).

Berbagi parameter menganugerahkan manfaat tertentu pada CNN, yaitu properti yang disebut equivariance to translation . Ini untuk mengatakan bahwa jika input terganggu atau diterjemahkan, output juga dimodifikasi dengan cara yang sama. Ian Goodfellow memberikan contoh yang bagus dalam Buku Pembelajaran Deep mengenai bagaimana praktisi dapat memanfaatkan kesetaraan dalam CNN:

Saat memproses data deret waktu, ini berarti konvolusi menghasilkan semacam garis waktu yang menunjukkan kapan fitur berbeda muncul di input. Jika kita memindahkan suatu peristiwa nanti dalam input, representasi yang sama persis akan muncul di output, baru saja nanti. Demikian pula dengan gambar, konvolusi membuat peta 2-D di mana fitur tertentu muncul di input. Jika kita memindahkan objek dalam input, perwakilannya akan memindahkan jumlah yang sama di output. Ini berguna ketika kita tahu bahwa beberapa fungsi dari sejumlah kecil piksel tetangga berguna ketika diterapkan ke beberapa lokasi input. Misalnya, saat memproses gambar, akan sangat berguna untuk mendeteksi tepi di lapisan pertama dari jaringan konvolusional. Tepi yang sama muncul kurang lebih di mana-mana di gambar, sehingga praktis untuk berbagi parameter di seluruh gambar.

Pranav Vempati
sumber