MinAI - Về trang chủ
Lý thuyết
6/2160 phút
Đang tải...

Giới thiệu CNN và Convolution

Tìm hiểu Convolutional Neural Networks - kiến trúc mạnh mẽ cho xử lý hình ảnh. Học về Convolution, Filter, Feature Maps

0

🎯 Mục tiêu bài học

TB5 min

Sau bài này, bạn sẽ:

✅ Hiểu CNN là gì và tại sao dùng cho ảnh

✅ Hiểu Convolution (phép tích chập) hoạt động thế nào

✅ Biết Filter/Kernel phát hiện features như thế nào

✅ Hiểu StridePadding

Bắt đầu Module mới: CNN!

Module trước (ANN) học về neural network cơ bản.

Module này (CNN): Chuyên xử lý hình ảnh - nhận dạng khuôn mặt, phân loại ảnh, xe tự lái...

1

📖 Bảng Thuật Ngữ CNN

TB5 min
Thuật ngữTiếng ViệtGiải thích
CNNMạng nơ-ron tích chậpMạng neural chuyên xử lý dữ liệu có cấu trúc lưới (ảnh)
ConvolutionPhép tích chậpPhép toán trượt filter qua ảnh để trích xuất đặc trưng
Filter/KernelBộ lọcMa trận nhỏ dùng để phát hiện đặc trưng
Feature MapBản đồ đặc trưngKết quả sau khi áp dụng filter
StrideBước nhảySố pixel di chuyển mỗi lần trượt filter
PaddingĐệm viềnThêm pixel vào viền ảnh
ChannelKênh màuSố chiều màu (RGB = 3, Grayscale = 1)
Receptive FieldTrường tiếp nhậnVùng ảnh gốc mà một neuron "nhìn thấy"

Checkpoint

Bạn đã đọc qua bảng thuật ngữ?

2

🖼️ CNN là gì?

TB5 min

Định nghĩa

CNN giống như cách mắt và não người xử lý hình ảnh:

  1. Mắt nhận ra chi tiết nhỏ (cạnh, góc)
  2. Não ghép chi tiết thành hình dạng (mắt, mũi)
  3. Cuối cùng nhận ra vật thể (khuôn mặt ai)

Convolutional Neural Network (CNN) là kiến trúc neural network được thiết kế đặc biệt để xử lý dữ liệu có cấu trúc lưới - đặc biệt là hình ảnh.

Tại sao gọi là "Convolutional"?

CNN sử dụng phép toán Convolution (tích chập) thay vì phép nhân ma trận thông thường, giúp học được đặc trưng không gian của ảnh.

CNN Overview Nguồn: Stanford CS231n

Checkpoint

Bạn đã hiểu CNN là gì?

3

❓ Tại sao không dùng ANN cho ảnh?

TB5 min

Vấn đề với Fully Connected Network

Vấn đềGiải thíchVí dụ
Quá nhiều tham sốMỗi pixel kết nối với mọi neuronẢnh 224×224×3 = 150,528 inputs → 150 triệu weights!
Mất thông tin không gianFlatten ảnh làm mất vị tríPixel góc trái vs góc phải → sau flatten như nhau
Không bất biến dịch chuyểnẢnh dịch → kết quả khácMèo góc trái vs góc phải → 2 kết quả khác
Không hiệu quảHọc lại đặc trưng nhiều lầnCùng "cạnh" ở nhiều vị trí → học nhiều lần

CNN giải quyết như thế nào?

Giải phápMô tảLợi ích
Parameter SharingMột filter dùng cho toàn bộ ảnhGiảm đáng kể số tham số
Local ConnectivityMỗi neuron chỉ kết nối vùng nhỏGiữ thông tin không gian
Translation InvarianceCùng filter mọi vị tríBất biến với dịch chuyển

So sánh số tham số:

ModelTính toánSố tham số
ANN cho ảnh 224×224×3150,528 × 1000 neurons~150 triệu params
CNN với 32 filters 3×3×332 × (3×3×3 + 1)896 params

→ CNN giảm hơn 100,000 lần số tham số!

Checkpoint

Bạn hiểu tại sao cần CNN cho ảnh?

4

🔍 Phép toán Convolution

TB5 min

Convolution là gì?

Convolution giống như dùng kính lúp nhỏ (filter) quét qua bức ảnh. Mỗi vị trí, nó tính toán và ghi nhận một con số đại diện cho vùng đó.

Công thức

(IK)[i,j]=m=0kh1n=0kw1I[i+m,j+n]K[m,n](I * K)[i,j] = \sum_{m=0}^{k_h-1} \sum_{n=0}^{k_w-1} I[i+m, j+n] \cdot K[m,n]

Ví dụ tính toán

Phép toán Convolution

Phép toán ConvolutionInput (5×5)1230101231121002101110123×Filter (3×3)101010101=Tính toán1×1 + 2×0 + 3×1 +0×0 + 1×1 + 2×0 +1×1 + 2×0 + 1×1= 1+0+3+0+1+0+1+0+1= 7Output7??

Tính góc trên trái của output:

=1×1+2×0+3×1+0×0+1×1+2×0+1×1+2×0+1×1= 1×1 + 2×0 + 3×1 + 0×0 + 1×1 + 2×0 + 1×1 + 2×0 + 1×1 =1+0+3+0+1+0+1+0+1=7= 1 + 0 + 3 + 0 + 1 + 0 + 1 + 0 + 1 = \boxed{7}

Filter phát hiện gì?

FilterCông dụng
[[-1,0,1], [-1,0,1], [-1,0,1]]Phát hiện cạnh dọc
[[-1,-1,-1], [0,0,0], [1,1,1]]Phát hiện cạnh ngang
[[0,-1,0], [-1,5,-1], [0,-1,0]]Làm nét (sharpen)
[[1/9,...]] (all 1/9)Làm mờ (blur)

Checkpoint

Bạn đã hiểu phép Convolution?

5

⚙️ Stride và Padding

TB5 min

Stride (Bước nhảy)

Stride = số pixel filter di chuyển mỗi lần

Stride và Padding trong Convolution

Stride và Padding trong ConvolutionStride = 1Di chuyển 1 pixelOutput: 3×3Stride = 2Di chuyển 2 pixelsOutput: 2×2Zero Padding (P=1)Không Padding5×5+PVới Padding0000000000000000000000007×7 (Thêm viền 0)

Công thức tính Output Size

Output Size=WK+2PS+1\text{Output Size} = \left\lfloor \frac{W - K + 2P}{S} \right\rfloor + 1

Trong đó:

  • WW: Input size
  • KK: Kernel size
  • PP: Padding
  • SS: Stride

Ví dụ

InputKernelPaddingStrideOutput
32×323×30130×30
32×323×31132×32 (same)
32×323×31216×16
224×2247×732112×112

Padding = 'same': Output size = Input size Padding = 'valid': Không padding, output nhỏ hơn

Checkpoint

Bạn đã hiểu Stride và Padding?

6

🌈 Multi-Channel Convolution

TB5 min

Convolution trên ảnh RGB (Multi-Channel)

Convolution trên ảnh RGB (Multi-Channel)Input Image28 × 28 × 3BlueGreenRed3 channels*Filter 3×3×33×33×3=Feature Map26 × 26 × 11 channel1 Filter → 1 Feature MapMultiple Filters32 filters26×26×3232 Filters → 32 Feature MapsMỗi filter học một đặc trưng khác nhau:Filter 1: Cạnh ngangFilter 2: Cạnh dọcFilter 3: GócFilter 4: Texture...

Checkpoint

Bạn hiểu cách xử lý ảnh RGB với CNN?

7

💻 Conv2D trong Keras

TB5 min

Cú pháp Conv2D

python.py
1from tensorflow.keras import layers
2
3# Conv2D layer
4layers.Conv2D(
5 filters=32, # Số filters (output channels)
6 kernel_size=(3, 3), # Kích thước filter
7 strides=(1, 1), # Stride
8 padding='same', # 'same' hoặc 'valid'
9 activation='relu', # Activation function
10 input_shape=(28, 28, 1) # Chỉ cần ở layer đầu
11)

Ví dụ xây dựng CNN

python.py
1from tensorflow import keras
2from tensorflow.keras import layers
3
4model = keras.Sequential([
5 # Conv Block 1
6 layers.Conv2D(32, (3, 3), activation='relu',
7 input_shape=(28, 28, 1)),
8 layers.MaxPooling2D((2, 2)),
9
10 # Conv Block 2
11 layers.Conv2D(64, (3, 3), activation='relu'),
12 layers.MaxPooling2D((2, 2)),
13
14 # Conv Block 3
15 layers.Conv2D(64, (3, 3), activation='relu'),
16
17 # Classification Head
18 layers.Flatten(),
19 layers.Dense(64, activation='relu'),
20 layers.Dense(10, activation='softmax')
21])
22
23model.summary()

Tham số quan trọng

Tham sốÝ nghĩaGiá trị thường dùng
filtersSố feature maps output32, 64, 128, 256, 512
kernel_sizeKích thước filter(3,3) phổ biến nhất
stridesBước nhảy(1,1) hoặc (2,2)
paddingĐệm viền'same' hoặc 'valid'
activationHàm kích hoạt'relu'

Checkpoint

Bạn đã biết sử dụng Conv2D trong Keras?

8

🎯 Tổng kết

TB5 min

Những điểm quan trọng

  1. CNN chuyên xử lý dữ liệu có cấu trúc không gian (ảnh)

  2. Convolution = trượt filter qua ảnh để trích xuất features

  3. Ưu điểm CNN:

    • Parameter sharing → ít tham số
    • Local connectivity → giữ thông tin không gian
    • Translation invariance → bất biến với dịch chuyển
  4. Stride & Padding kiểm soát output size

  5. Multi-channel: Filter depth = Input depth

Công thức cần nhớ

Output=WK+2PS+1\text{Output} = \left\lfloor \frac{W - K + 2P}{S} \right\rfloor + 1

Bài tiếp theo

Chúng ta sẽ học về:

  • Pooling Layer: Giảm kích thước, giữ đặc trưng quan trọng
  • Kiến trúc CNN hoàn chỉnh
  • Hierarchical Feature Learning

🎉 Tuyệt vời! Bạn đã hiểu Convolution - trái tim của CNN!