🎯 Mục tiêu bài học
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 Stride và Padding
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...
📖 Bảng Thuật Ngữ CNN
| Thuật ngữ | Tiếng Việt | Giải thích |
|---|---|---|
| CNN | Mạng nơ-ron tích chập | Mạng neural chuyên xử lý dữ liệu có cấu trúc lưới (ảnh) |
| Convolution | Phép tích chập | Phép toán trượt filter qua ảnh để trích xuất đặc trưng |
| Filter/Kernel | Bộ lọc | Ma trận nhỏ dùng để phát hiện đặc trưng |
| Feature Map | Bản đồ đặc trưng | Kết quả sau khi áp dụng filter |
| Stride | Bước nhảy | Số pixel di chuyển mỗi lần trượt filter |
| Padding | Đệm viền | Thêm pixel vào viền ảnh |
| Channel | Kênh màu | Số chiều màu (RGB = 3, Grayscale = 1) |
| Receptive Field | Trường tiếp nhận | Vùng ảnh gốc mà một neuron "nhìn thấy" |
Checkpoint
Bạn đã đọc qua bảng thuật ngữ?
🖼️ CNN là gì?
Định nghĩa
CNN giống như cách mắt và não người xử lý hình ảnh:
- Mắt nhận ra chi tiết nhỏ (cạnh, góc)
- Não ghép chi tiết thành hình dạng (mắt, mũi)
- 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.
Nguồn: Stanford CS231n
Checkpoint
Bạn đã hiểu CNN là gì?
❓ Tại sao không dùng ANN cho ảnh?
Vấn đề với Fully Connected Network
| Vấn đề | Giải thích | Ví 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 gian | Flatten ả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ác | Mè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ần | Cù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áp | Mô tả | Lợi ích |
|---|---|---|
| Parameter Sharing | Một filter dùng cho toàn bộ ảnh | Giảm đáng kể số tham số |
| Local Connectivity | Mỗi neuron chỉ kết nối vùng nhỏ | Giữ thông tin không gian |
| Translation Invariance | Cùng filter mọi vị trí | Bất biến với dịch chuyển |
So sánh số tham số:
| Model | Tính toán | Số tham số |
|---|---|---|
| ANN cho ảnh 224×224×3 | 150,528 × 1000 neurons | ~150 triệu params |
| CNN với 32 filters 3×3×3 | 32 × (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?
🔍 Phép toán Convolution
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
Ví dụ tính toán
Phép toán Convolution
Tính góc trên trái của output:
Filter phát hiện gì?
| Filter | Cô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?
⚙️ Stride và Padding
Stride (Bước nhảy)
Stride = số pixel filter di chuyển mỗi lần
Stride và Padding trong Convolution
Công thức tính Output Size
Trong đó:
- : Input size
- : Kernel size
- : Padding
- : Stride
Ví dụ
| Input | Kernel | Padding | Stride | Output |
|---|---|---|---|---|
| 32×32 | 3×3 | 0 | 1 | 30×30 |
| 32×32 | 3×3 | 1 | 1 | 32×32 (same) |
| 32×32 | 3×3 | 1 | 2 | 16×16 |
| 224×224 | 7×7 | 3 | 2 | 112×112 |
Padding = 'same': Output size = Input size Padding = 'valid': Không padding, output nhỏ hơn
Checkpoint
Bạn đã hiểu Stride và Padding?
🌈 Multi-Channel Convolution
Convolution trên ảnh RGB (Multi-Channel)
Checkpoint
Bạn hiểu cách xử lý ảnh RGB với CNN?
💻 Conv2D trong Keras
Cú pháp Conv2D
1from tensorflow.keras import layers23# Conv2D layer4layers.Conv2D(5 filters=32, # Số filters (output channels)6 kernel_size=(3, 3), # Kích thước filter7 strides=(1, 1), # Stride8 padding='same', # 'same' hoặc 'valid'9 activation='relu', # Activation function10 input_shape=(28, 28, 1) # Chỉ cần ở layer đầu11)Ví dụ xây dựng CNN
1from tensorflow import keras2from tensorflow.keras import layers34model = keras.Sequential([5 # Conv Block 16 layers.Conv2D(32, (3, 3), activation='relu', 7 input_shape=(28, 28, 1)),8 layers.MaxPooling2D((2, 2)),9 10 # Conv Block 211 layers.Conv2D(64, (3, 3), activation='relu'),12 layers.MaxPooling2D((2, 2)),13 14 # Conv Block 315 layers.Conv2D(64, (3, 3), activation='relu'),16 17 # Classification Head18 layers.Flatten(),19 layers.Dense(64, activation='relu'),20 layers.Dense(10, activation='softmax')21])2223model.summary()Tham số quan trọng
| Tham số | Ý nghĩa | Giá trị thường dùng |
|---|---|---|
filters | Số feature maps output | 32, 64, 128, 256, 512 |
kernel_size | Kích thước filter | (3,3) phổ biến nhất |
strides | Bước nhảy | (1,1) hoặc (2,2) |
padding | Đệm viền | 'same' hoặc 'valid' |
activation | Hàm kích hoạt | 'relu' |
Checkpoint
Bạn đã biết sử dụng Conv2D trong Keras?
🎯 Tổng kết
Những điểm quan trọng
-
CNN chuyên xử lý dữ liệu có cấu trúc không gian (ảnh)
-
Convolution = trượt filter qua ảnh để trích xuất features
-
Ư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
-
Stride & Padding kiểm soát output size
-
Multi-channel: Filter depth = Input depth
Công thức cần nhớ
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!
