Lensa ML

Pooling dan Downsampling

Langkah 1 dari 6: Kenapa Pooling?

Mengurangi dimensi spasial

Ukuran Feature Map8
Input: 8×82×2 poolHasil pooling: 4×4
Sel asli
64
Sel setelah pooling
16
Pengurangan
75%

Map 8×8 punya 64 sel. Setelah pooling 2×2, jumlahnya menyusut menjadi 16, jadi sel yang harus diproses layer berikutnya berkurang 75%.

Geser Ukuran Feature Map dari 4 sampai 16. Pool 2×2 dengan stride 2 menyisakan satu nilai per window, jadi setiap layer pooling memangkas jumlah sel sekitar 75%. Demo ini membulatkan ukuran ganjil ke atas, jadi 7×7 menjadi 4×4. Framework biasanya membulatkan ke bawah secara default (ceil_mode=False di PyTorch), sehingga hasilnya 3×3. Pooling tidak punya weight dan biayanya sendiri kecil. Penghematannya muncul di layer sesudahnya, yang biayanya sebanding dengan luas map. VGG-16 memakai lima layer max pooling 2×2 untuk mengecilkan input 224×224 menjadi 7×7.

Langkah 2 dari 6: Max Pooling

Pertahankan sinyal terkuat

Ukuran Pool
Posisi Window0
Input 8×81187139459324639225094477065301471551596854556513095627302614520Output Max Pool9869769785693967
Ukuran Pool
2×2
Maks Window
9
Ukuran Output
4×4

Window 2×2 memilih nilai maksimum (9) dari setiap wilayah. Aktivasi terkuat dipertahankan dan yang lebih lemah dibuang.

Klik 2×2 atau 3×3, lalu geser Posisi Window untuk memindahkan window yang disorot di map 8×8. Dalam backpropagation, gradient dari output max pooling hanya mengalir ke sel yang memegang nilai maksimum, dan sel lain di window itu mendapat nol. Karena itu, framework menyimpan posisi setiap maksimum saat forward pass. Dengan window 3×3 dan stride 3, hanya 6 dari 8 baris dan kolom yang muat, jadi dua terakhir dibuang. AlexNet memakai max pooling yang saling tumpang tindih: window 3×3 dengan stride 2.

Langkah 3 dari 6: Average Pooling

Agregasi yang halus

Ukuran Pool
Posisi Window0
Input1187139459324639225094477065301471551596854556513095627302614520Max Pool9869769785693967Avg Pool453.56.32.84445.34.84.35.31.35.34.33
Nilai Maks
9
Nilai Rata-rata
4
Selisih
5.0

Max pooling memilih puncaknya (9), sedangkan average pooling meratakannya menjadi 4. Max lebih baik untuk mendeteksi feature yang tajam, sedangkan average mempertahankan intensitas keseluruhan.

Klik 2×2 atau 3×3 dan geser Posisi Window sambil membandingkan kartu Nilai Maks dan Nilai Rata-rata. Average pooling membagi gradient sama rata, masing-masing 1/k², ke setiap sel dalam window k×k, sehingga semua input terus belajar. LeNet-5 (1998) memakai bentuk average pooling yang bisa dilatih dan menyebutnya subsampling. Di kebanyakan CNN, max pooling menggantikannya karena lebih baik dalam memberi sinyal apakah sebuah feature ada di mana pun dalam window. Average pooling bertahan dalam bentuk global dan di tempat yang butuh downsampling halus dengan aliasing rendah.

Langkah 4 dari 6: Stride dan Overlap

Mengatur ukuran output

Stride2
Posisi Window0
Input 8×8, stride 21187139459324639225094477065301471551596854556513095627302614520Output 4×49869769785693967
Stride
2
Ukuran Output
4×4
Overlap?
Tidak

Stride 2 dengan pool 2×2 menghasilkan window yang tidak tumpang tindih, pengaturan yang paling umum. Setiap sel dibaca tepat sekali, dan ukurannya menjadi separuh.

Geser Stride dari 1 sampai 4, dan geser Posisi Window untuk menelusuri tiap window. Lebar output adalah ⌊(W − k)/s⌋ + 1 untuk lebar input W, ukuran window k, dan stride s. Dengan W = 8 dan k = 2, hasilnya 7, 4, 3, dan 2 untuk stride 1 sampai 4. Padding menambahkan p sel di tiap sisi, jadi rumusnya menjadi ⌊(W + 2p − k)/s⌋ + 1. Rumus yang sama memberi ukuran output convolutional layer.

Langkah 5 dari 6: Global Average Pooling

Diringkas menjadi vector

Jumlah Channel4
4 feature map (4×4) → 4 skalar lewat GAP0.60.40.30.10.50.00.30.71.00.30.90.30.20.70.50.70.470.70.90.80.71.00.30.20.90.50.40.10.90.50.90.90.10.610.10.60.70.00.60.40.30.40.80.20.60.10.60.10.50.10.370.70.90.30.70.40.20.10.00.10.80.30.20.80.70.30.90.47FC → Kelas
Channel
4
Parameter input
64
Setelah GAP
4
Pengurangan
16×

Masing-masing dari 4 feature map dirata-ratakan menjadi satu angka, sehingga terbentuk vector 4 dimensi. Dimensi spasialnya hilang, jadi dense layer berikutnya tetap kecil.

Geser Jumlah Channel dari 1 sampai 6. Setiap map 4×4 menjadi rata-ratanya, jadi C channel menjadi vector C dimensi. Global average pooling diperkenalkan dalam Network in Network (Lin dkk., 2013) sebagai pengganti fully connected layer. ResNet-50 diakhiri feature map 7×7×2048: kalau di-flatten, 100.352 nilai masuk ke classifier, sedangkan GAP hanya memasukkan 2.048. Karena GAP mengabaikan ukuran spasial, network bisa menerima resolusi gambar yang berbeda. Weight classifier pada tiap map juga menghasilkan class activation map (CAM).

Langkah 6 dari 6: Pooling vs Strided Conv

Downsampling tetap vs yang dipelajari

Bandingkan
Input 6×6266666643096686021643411871394593246Max Pool2×2, s=2Output6698629390 parameterKernel 3×30.40.80.60.50.9-0.3-0.50.70.1Conv3×3, s=2Output1871719111191014144 parameter
Parameter Pool
0
Parameter Conv
144
Bisa dilatih?
Tidak
Ukuran Output
3×3

Max pooling adalah operasi tetap yang mengambil nilai maksimum di setiap window 2×2. Parameternya nol dan cepat, tetapi ia tidak bisa mempelajari informasi mana yang perlu disimpan.

Klik Max Pool atau Strided Conv untuk membandingkan kedua jalur pada input 6×6 yang sama. Keduanya menghasilkan output 3×3. Kernel 3×3 yang diterapkan pada 16 channel input punya 144 weight per channel output, dan layer sungguhan punya banyak channel output: 64 channel butuh 9.216 weight sebelum bias. Springenberg dkk. (2014) menemukan bahwa mengganti max pooling dengan strided convolution tidak menurunkan akurasi pada beberapa benchmark. ResNet melakukan downsampling dengan convolution stride 2 di dalam blok-bloknya, dan Vision Transformer memecah gambar menjadi patch, bukan memakai pooling.

Apa itu pooling di CNN?

Pooling adalah operasi CNN yang memperkecil feature map dengan meringkas setiap window kecil berisi nilai menjadi satu angka, biasanya nilai maksimum (max pooling) atau rata-rata (average pooling). Operasi ini tidak punya weight yang dipelajari. Pool 2×2 dengan stride 2 membagi dua lebar dan tinggi setiap channel dan menyisakan 25% nilainya.

Layer pooling ada di classifier gambar klasik seperti LeNet, AlexNet, dan VGG. Di sana, pooling mengurangi komputasi dan membuat network tahan terhadap pergeseran kecil pada input. Arsitektur modern masih memakai global average pooling untuk mengubah feature map terakhir menjadi vector bagi classifier, dan banyak yang mengganti layer pooling di tengah dengan strided convolution.

Ide utama

  • Pooling meringkas setiap window pada feature map menjadi satu angka dan tidak punya weight yang dipelajari.
  • Max pooling menyimpan aktivasi terkuat di setiap window, sedangkan average pooling menyimpan rata-ratanya.
  • Pool 2×2 dengan stride 2 membagi dua tinggi dan lebar, dan menyisakan 25% nilainya.
  • Lebar output adalah ⌊(W − k)/s⌋ + 1 untuk lebar input W, ukuran window k, dan stride s.
  • Global average pooling mengubah setiap channel menjadi satu angka, sehingga classifier menerima vector dengan panjang tetap.
  • Strided convolution bisa menggantikan pooling dengan downsampling yang dipelajari network.

Pertanyaan umum

Apakah pooling membuat CNN translation invariant?

Hanya sebagian. Feature yang bergeser di dalam satu window pooling menghasilkan maksimum yang sama, jadi pergeseran kecil teredam, tetapi pergeseran yang melewati batas window bisa mengubah output. Zhang (2019) menunjukkan bahwa CNN standar tidak shift invariant, lalu menambahkan blur sebelum downsampling (anti-aliased pooling) untuk mengatasi sebagian besar masalahnya.

Apakah layer pooling punya parameter yang bisa dilatih?

Tidak. Max pooling dan average pooling adalah fungsi tetap dari input-nya, jadi tidak menambah weight ke model. Gradient tetap melewatinya saat backpropagation, sehingga layer pooling bisa berada di antara convolutional layer yang dilatih tanpa menghambat proses belajar.

Apa itu adaptive pooling?

Adaptive pooling menerima ukuran output target, bukan ukuran window, lalu memilih window yang pas. AdaptiveAvgPool2d((1, 1)) di PyTorch adalah global average pooling untuk ukuran input apa pun, dan AdaptiveAvgPool2d((7, 7)) membuat classifier head bisa menerima gambar beresolusi berbeda.

Apa itu RoI pooling pada object detection?

RoI pooling (region of interest), dari Fast R-CNN, memotong feature map sesuai setiap kotak usulan dan menerapkan max pooling ke grid tetap seperti 7×7. Setiap kotak, berapa pun ukurannya, lalu menghasilkan feature vector dengan panjang yang sama untuk head klasifikasi dan box regression. Mask R-CNN menggantinya dengan RoIAlign, yang tidak perlu membulatkan koordinat kotak.

Penjelasan terkait

Referensi

  1. Lin, Chen & Yan (2013), "Network In Network"
  2. Springenberg et al. (2014), "Striving for Simplicity: The All Convolutional Net"
  3. Zhou et al. (2016), "Learning Deep Features for Discriminative Localization", CVPR
  4. Zhang (2019), "Making Convolutional Networks Shift-Invariant Again", ICML
  5. Stanford CS231n, "Convolutional Neural Networks for Visual Recognition" course notes

Terakhir diperbarui