Lewati ke konten
Dasar-Dasar Citra Digital18 menit baca

Bagaimana Komputer Melihat Gambar

Pelajaran gratisinteraktif

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.

y[i, j] = Σₘ Σₙ x[i + m, j + n] · k[m, n]
x
gambar masukan
k
kernel (filter)
y
peta fitur keluaran
Konvolusi 2-D seperti yang dipakai di deep learning (secara teknis cross-correlation)
Loading simulation…

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.

python
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)
Output
[[ 0 30 30]
 [ 0 30 30]
 [ 0 30 30]]

Ukuran keluaran#

n_out = ⌊(n + 2p − k) / s⌋ + 1
n
lebar (atau tinggi) masukan
k
ukuran kernel
p
padding di setiap sisi
s
stride — besar langkah geser
Gambar 5 × 5, kernel 3, tanpa padding, stride 1 → (5 − 3)/1 + 1 = 3

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.

SifatKenapa penting
Berbagi bobotKernel 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.
LokalitasSetiap piksel keluaran hanya melihat lingkungan kecilnya, sesuai dengan cara pola visual tersusun.
Ekuivarian translasiMenggeser objek di gambar menggeser respons filternya dengan jumlah yang sama.
Checkpoint

Gambar 32 × 32 dikonvolusi dengan kernel 5 × 5, padding 0, stride 1. Berapa ukuran keluarannya?

Checkpoint

Kenapa CNN butuh jauh lebih sedikit parameter daripada jaringan fully connected untuk gambar yang sama?