Bagaimana Komputer Melihat Gambar
Bagi komputer, gambar adalah tabel angka. Konvolusi — sebuah jumlah berbobot kecil yang digeser — mengubah angka-angka itu menjadi tepi, tekstur, dan akhirnya objek.
Yang akan Anda bisa
- Menjelaskan piksel, kanal, dan bentuk tensor gambar
- Menghitung satu konvolusi dengan tangan
- Menjelaskan kenapa CNN mempelajari kernelnya
Foto di ponsel Anda, bagi komputer, adalah tabel angka. Gambar hitam-putih 28 × 28 piksel adalah 784 angka antara 0 (hitam) dan 255 (putih). Gambar berwarna menambahkan dimensi ketiga: tiga kanal — merah, hijau, biru — jadi bentuknya H × W × 3.
Konvolusi: jumlah berbobot yang digeser#
Ambil kernel kecil, misalnya 3 × 3 angka. Letakkan di atas sudut kiri atas gambar, kalikan setiap angka kernel dengan piksel di bawahnya, jumlahkan — itu satu piksel keluaran. Geser satu langkah, ulangi. Hasilnya adalah gambar baru yang menyorot apa pun yang "dicari" kernel itu.
- x
- gambar masukan
- k
- kernel (filter)
- y
- peta fitur keluaran
Satu kernel, dengan tangan#
Gambar di bawah gelap di kiri dan terang di kanan — ada satu tepi vertikal. Kernel [−1, 0, 1] di setiap baris menghitung "kanan dikurangi kiri", jadi ia bernilai besar tepat di tepi dan nol di area yang rata.
import numpy as np image = np.array([[0, 0, 0, 10, 10]] * 5) # 5 x 5, tepi di tengahkernel = np.array([[-1, 0, 1]] * 3) # 3 x 3, tepi vertikal out = np.zeros((3, 3), dtype=int)for i in range(3): for j in range(3): out[i, j] = np.sum(image[i:i+3, j:j+3] * kernel) print(out)[[ 0 30 30]
[ 0 30 30]
[ 0 30 30]]Ukuran keluaran#
- n
- lebar (atau tinggi) masukan
- k
- ukuran kernel
- p
- padding di setiap sisi
- s
- stride — besar langkah geser
Dari filter buatan tangan ke filter yang dipelajari#
Selama puluhan tahun, peneliti visi komputer merancang kernel seperti Sobel dengan tangan. Ide utama convolutional neural network (CNN) adalah membiarkan angka-angka di kernel menjadi bobot yang dipelajari dengan gradient descent. Lapisan pertama CNN yang terlatih biasanya mempelajari sesuatu yang mirip detektor tepi dan warna; lapisan yang lebih dalam menggabungkannya menjadi tekstur, bagian objek, lalu objek utuh.
| Sifat | Kenapa penting |
|---|---|
| Berbagi bobot | Kernel yang sama dipakai di seluruh gambar, jadi jumlah parameternya kecil — 3 × 3 × 3 = 27 bobot (ditambah bias) per filter untuk gambar RGB, berapa pun ukuran gambarnya. |
| Lokalitas | Setiap piksel keluaran hanya melihat lingkungan kecilnya, sesuai dengan cara pola visual tersusun. |
| Ekuivarian translasi | Menggeser objek di gambar menggeser respons filternya dengan jumlah yang sama. |
Gambar 32 × 32 dikonvolusi dengan kernel 5 × 5, padding 0, stride 1. Berapa ukuran keluarannya?
Kenapa CNN butuh jauh lebih sedikit parameter daripada jaringan fully connected untuk gambar yang sama?