Chapter 19

কনভল্যুশন অপারেশন

Convolution Operation
🎬 ফিল্টার যেভাবে দেখে
Convolution অপারেশন হলো একটি ছোট filter (kernel) ইমেজের উপর স্লাইড করে, প্রতিটি অবস্থানে element-wise গুণফলের যোগফল বের করা। এটি CNN-এর হৃদয়।

গাণিতিক সংজ্ঞা

ইনপুট X, kernel K হলে আউটপুট Y(i,j) = ΣΣ X(i+m, j+n) · K(m, n)। Deep learning frameworks-এ বাস্তবে cross-correlation ব্যবহার হয় (flip ছাড়া), কিন্তু সবাই এটিকে convolution বলে।

হাতের হিসাব — 3×3 kernel

Input (5×5)        Kernel (3×3)
1 1 1 0 0          1 0 1
0 1 1 1 0          0 1 0
0 0 1 1 1   *      1 0 1
0 0 1 1 0
0 1 1 0 0

(0,0) এ আউটপুট = 1·1 + 1·0 + 1·1 + 0·0 + 1·1 + 1·0 + 0·1 + 0·0 + 1·1 = 4

মূল প্যারামিটার

  • Kernel size: সাধারণত 3×3 বা 5×5।
  • Stride: filter কত পিক্সেল লাফায় (1 = ঘন, 2 = downsample)।
  • Padding: "same" — output size একই, "valid" — কোনো padding নেই।
  • Channels: input channel × output channel = filter count।

Output shape সূত্র

O = floor((I + 2P - K) / S) + 1

I = input size, K = kernel, P = padding, S = stride

উদাহরণ: I=28, K=3, P=1, S=1 → O = (28 + 2 - 3)/1 + 1 = 28

সাধারণ Filter পরিচিতি

Filter
কাজ
Sobel-X / Sobel-Y
খাড়া / আনুভূমিক edge
Laplacian
সব দিকের edge
Gaussian Blur
noise কমানো
Sharpen
পার্থক্য বাড়ানো

NumPy দিয়ে manual convolution

import numpy as np

def conv2d(x, k, stride=1, pad=0):
    if pad:
        x = np.pad(x, pad)
    H, W = x.shape
    Kh, Kw = k.shape
    out_h = (H - Kh) // stride + 1
    out_w = (W - Kw) // stride + 1
    out = np.zeros((out_h, out_w))
    for i in range(out_h):
        for j in range(out_w):
            patch = x[i*stride:i*stride+Kh, j*stride:j*stride+Kw]
            out[i, j] = (patch * k).sum()
    return out

sobel_x = np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
print(conv2d(image, sobel_x).shape)

Multi-channel Convolution

RGB ইমেজে kernel হবে 3×3×3 — প্রতিটি input channel-এর জন্য আলাদা plane। অনেক filter ব্যবহার করলে output channel তত হবে। তাই Conv2D(64) মানে 64টি filter, 64-channel output।

🔑 1×1 Convolution
1×1 কnel নষ্ট মনে হলেও — এটি channel mixing/dimensionality reduction-এ অসাধারণ। GoogLeNet-এর "bottleneck" এই কৌশল-ই।

অনুশীলন

১. একটি grayscale ইমেজে Sobel-X ও Sobel-Y প্রয়োগ করে edge দেখুন।

২. Stride 1 ও 2-এ output shape কেমন বদলায় — যাচাই করুন।

৩. "same" vs "valid" padding-এর তুলনা করুন।

সারসংক্ষেপ

✨ এই অধ্যায়ে যা শিখলাম
  • Convolution = filter স্লাইড করে weighted sum।
  • Kernel, stride, padding output shape নিয়ন্ত্রণ করে।
  • একই filter পুরো ইমেজে — weight sharing।