Các thuật toán Machine Learning trong xử lý ảnh – Hướng dẫn chi tiết
🖊️ A.I Tech Blog | 📅 15/09/2023 | ⏱️ 12 phút đọc
Trong thời đại bùng nổ dữ liệu hình ảnh, Machine Learning (ML) đã trở thành công cụ không thể thiếu để giải quyết các bài toán nhận dạng, phân loại và xử lý ảnh. Hiểu rõ các thuật toán ML là bước nền tảng để bạn có thể xây dựng các hệ thống thị giác máy tính hiệu quả.
Bài viết này sẽ đi sâu vào ba nhóm thuật toán chính: Học có giám sát, Học không giám sát và Học sâu – với các mô hình tiêu biểu như SVM, K-means, PCA, CNN và Transformer. Chúng tôi cũng cung cấp hướng dẫn thực hành xây dựng mô hình phân loại ảnh bằng TensorFlow và bảng so sánh giúp bạn lựa chọn thuật toán phù hợp.
Đây là bài viết chuyên sâu dành cho kỹ sư, nhà nghiên cứu và sinh viên muốn nắm vững nền tảng kỹ thuật của xử lý hình ảnh bằng AI.
1. Học có giám sát (Supervised Learning)
Học có giám sát là phương pháp huấn luyện mô hình trên tập dữ liệu đã được gán nhãn (input – output). Mô hình học cách ánh xạ từ đầu vào đến đầu ra và sau đó dự đoán nhãn cho dữ liệu mới.
Trong xử lý ảnh, các thuật toán học có giám sát phổ biến bao gồm SVM, Decision Tree, Random Forest, và K-Nearest Neighbors (KNN). Chúng thường được áp dụng cho các bài toán phân loại (nhận dạng đối tượng, phân loại bệnh từ ảnh y tế) và hồi quy.
1.1 Support Vector Machine (SVM) – Máy vector hỗ trợ
SVM là thuật toán phân loại mạnh mẽ, hoạt động bằng cách tìm một siêu phẳng (hyperplane) tối ưu để phân tách các lớp dữ liệu. Trong không gian nhiều chiều, SVM sử dụng hàm kernel (linear, polynomial, RBF) để ánh xạ dữ liệu sang không gian mới, giúp phân tách tuyến tính hiệu quả hơn.
- Cách hoạt động: SVM xác định các vector hỗ trợ – những điểm dữ liệu gần biên phân cách nhất – và xây dựng siêu phẳng với biên độ (margin) tối đa.
- Ưu điểm: Hoạt động tốt với số chiều cao, hiệu quả với bộ dữ liệu nhỏ và trung bình.
- Nhược điểm: Khó áp dụng với dữ liệu lớn (hàng triệu ảnh) do chi phí tính toán cao, yêu cầu tiền xử lý và chọn kernel phù hợp.
- Ứng dụng trong ảnh: Nhận dạng chữ viết tay, phân loại ảnh y tế (ví dụ: phân biệt ảnh X-quang bình thường và bất thường).
1.2 Decision Tree và Random Forest
Decision Tree (Cây quyết định) là mô hình phân loại dựa trên cấu trúc cây, mỗi nút là một phép kiểm tra trên một đặc trưng, và mỗi nhánh là kết quả của phép kiểm tra đó. Lá cây là nhãn dự đoán.
- Cách hoạt động: Tại mỗi nút, thuật toán chọn đặc trưng tốt nhất (dựa trên chỉ số Gini hoặc entropy) để phân chia dữ liệu, lặp lại cho đến khi đạt điều kiện dừng.
- Ưu điểm: Dễ hiểu, trực quan, có thể xử lý dữ liệu hỗn hợp (số và danh mục).
- Nhược điểm: Dễ bị overfitting nếu cây quá sâu.
Random Forest là tập hợp của nhiều cây quyết định, mỗi cây được huấn luyện trên một mẫu ngẫu nhiên của dữ liệu và đặc trưng. Kết quả cuối cùng là bình chọn đa số từ các cây.
- Ưu điểm: Giảm overfitting, độ chính xác cao, ít nhạy với nhiễu.
- Nhược điểm: Tốn tài nguyên tính toán, khó diễn giải so với một cây đơn.
- Ứng dụng trong ảnh: Phân loại ảnh vệ tinh, nhận dạng khuôn mặt đơn giản.
2. Học không giám sát (Unsupervised Learning)
Khác với học có giám sát, học không giám sát làm việc với dữ liệu không có nhãn. Thuật toán tự tìm ra các cấu trúc, mẫu hình hoặc nhóm tiềm ẩn trong dữ liệu. Các ứng dụng phổ biến bao gồm phân cụm (clustering), giảm chiều (dimensionality reduction), và phát hiện bất thường.
2.1 K-means – Thuật toán phân cụm kinh điển
K-means là thuật toán phân cụm chia dữ liệu thành K cụm (K do người dùng xác định) dựa trên khoảng cách (thường là Euclidean). Mục tiêu là tối thiểu hóa tổng bình phương khoảng cách từ các điểm đến tâm cụm.
- Cách hoạt động: Khởi tạo K tâm ngẫu nhiên, gán mỗi điểm vào cụm gần nhất, cập nhật lại tâm cụm, lặp lại cho đến khi hội tụ.
- Ưu điểm: Đơn giản, nhanh, hiệu quả với dữ liệu lớn.
- Nhược điểm: Cần xác định K trước, nhạy với tâm ban đầu, không hiệu quả với cụm có hình dạng phức tạp.
- Ứng dụng trong ảnh: Phân đoạn ảnh (image segmentation) – nhóm các pixel có màu sắc tương tự, nén ảnh (giảm số màu), tổ chức thư viện ảnh.
2.2 Principal Component Analysis (PCA) – Phân tích thành phần chính
PCA là kỹ thuật giảm chiều dữ liệu bằng cách tìm ra các "thành phần chính" – các hướng có phương sai lớn nhất – và chiếu dữ liệu lên đó. PCA giúp loại bỏ nhiễu, giảm kích thước đặc trưng, và tăng tốc huấn luyện các mô hình khác.
- Cách hoạt động: Chuẩn hóa dữ liệu, tính ma trận hiệp phương sai, tìm vector riêng và giá trị riêng, sắp xếp và chọn K thành phần chính đầu tiên.
- Ưu điểm: Giảm chiều hiệu quả, giữ lại thông tin quan trọng, giảm overfitting.
- Nhược điểm: Giảm khả năng diễn giải, có thể mất thông tin phi tuyến tính.
- Ứng dụng trong ảnh: Nén ảnh, khử nhiễu, tiền xử lý cho các mô hình SVM hoặc CNN.
3. Học sâu (Deep Learning) – Công nghệ đột phá
Học sâu là một nhánh của ML sử dụng các mạng nơ-ron với nhiều lớp ẩn để tự động trích xuất đặc trưng từ dữ liệu thô. Đây là công nghệ nền tảng cho hầu hết các ứng dụng thị giác máy tính hiện đại.
3.1 Mạng Neural Tích Chấp (CNN) – Convolutional Neural Network
CNN là kiến trúc mạng nơ-ron được thiết kế đặc biệt cho dữ liệu lưới như hình ảnh. Nó hoạt động dựa trên hai phép toán chính: tích chập (convolution) và gộp (pooling).
- Cơ chế hoạt động:
- Lớp tích chập: Quét các bộ lọc (filters) nhỏ qua ảnh để phát hiện các đặc trưng cơ bản (cạnh, góc, hoa văn).
- Lớp gộp: Thu nhỏ kích thước biểu đồ đặc trưng, giữ lại thông tin quan trọng và tăng tính bất biến.
- Lớp kết nối đầy đủ: Tổng hợp các đặc trưng để đưa ra quyết định phân loại cuối cùng.
- Ưu điểm: Tự động học đặc trưng, giảm tham số so với mạng fully-connected, bất biến với dịch chuyển và biến đổi nhỏ.
- Nhược điểm: Cần nhiều dữ liệu, tài nguyên tính toán lớn, khó giải thích.
- Ứng dụng: Nhận dạng khuôn mặt, phân loại đối tượng, phát hiện ung thư từ ảnh y tế, xe tự lái.
Để hiểu sâu hơn về CNN, bạn có thể tham khảo bài viết Mạng Neural Tích Chấp (CNN) – Công Nghệ Cốt Lõi.
3.2 Vision Transformer (ViT) – Kiến trúc transformer cho ảnh
Vision Transformer (ViT) áp dụng kiến trúc Transformer – vốn thành công trong xử lý ngôn ngữ tự nhiên – vào thị giác máy tính. Thay vì tích chập, ViT chia ảnh thành các patch (mảnh) và xử lý chúng như các token, sử dụng cơ chế self-attention để hiểu mối quan hệ giữa các vùng.
- Cơ chế hoạt động:
- Chia ảnh thành lưới các patch có kích thước cố định.
- Linear embedding từng patch thành vector, thêm positional encoding.
- Đưa các vector qua các lớp Transformer Encoder với self-attention.
- Sử dụng token CLS (hoặc global pooling) để phân loại.
- Ưu điểm: Khả năng mô hình hóa mối quan hệ toàn cục tốt hơn CNN, hiệu suất vượt trội trên tập dữ liệu lớn.
- Nhược điểm: Yêu cầu lượng dữ liệu huấn luyện cực lớn, chi phí tính toán cao hơn CNN.
- Ứng dụng: Phân loại hình ảnh, phát hiện đối tượng, phân đoạn ngữ nghĩa.
Nếu bạn muốn tìm hiểu về Transformer trong ngôn ngữ, đừng bỏ qua bài viết Transformer là gì? Kiến trúc nền tảng của ChatGPT.
4. Thực hành: Xây dựng mô hình phân loại ảnh với TensorFlow
Dưới đây là hướng dẫn từng bước xây dựng một mô hình CNN đơn giản để phân loại ảnh trên bộ dữ liệu MNIST (chữ số viết tay) – bài toán "Hello World" của thị giác máy tính. Chúng tôi sử dụng TensorFlow và Keras API.
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()
train_images = train_images.astype('float32') / 255.0
test_images = test_images.astype('float32') / 255.0
train_images = np.expand_dims(train_images, axis=-1)
test_images = np.expand_dims(test_images, axis=-1)
model = models.Sequential([
layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
layers.MaxPooling2D((2,2)),
layers.Conv2D(64, (3,3), activation='relu'),
layers.MaxPooling2D((2,2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit(train_images, train_labels,
epochs=5,
validation_data=(test_images, test_labels))
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Độ chính xác trên tập test:', test_acc)
model.save('mnist_cnn_model.h5')
Giải thích các bước:
- Bước 2: Tải dữ liệu MNIST và chuẩn hóa về [0,1]. Thêm chiều kênh (vì ảnh grayscale có 1 kênh).
- Bước 3: Xây dựng CNN với 2 lớp Conv2D + MaxPooling, sau đó Flatten và Dense. Số lớp và số filter có thể điều chỉnh.
- Bước 4: Compile với optimizer Adam và loss sparse_categorical_crossentropy (phù hợp với nhãn số nguyên).
- Bước 5: Huấn luyện 5 epoch (có thể tăng lên để cải thiện độ chính xác).
- Bước 6: Đánh giá trên tập test – CNN cơ bản có thể đạt độ chính xác >98%.
Để áp dụng cho bài toán phân loại của bạn, bạn chỉ cần thay đổi:
- Dữ liệu: Thay MNIST bằng tập ảnh của bạn (sử dụng ImageDataGenerator để đọc từ thư mục).
- Kích thước đầu vào: Điều chỉnh `input_shape` theo kích thước ảnh của bạn.
- Số lớp: Thay 10 bằng số class trong bài toán của bạn.
- Kiến trúc: Có thể thêm Dropout, BatchNormalization để cải thiện.
Nếu bạn muốn tìm hiểu thêm về cách xây dựng ứng dụng hoàn chỉnh, hãy tham khảo bài viết Tạo ứng dụng nhận diện hình ảnh bằng TensorFlow.
5. So sánh các thuật toán – Khi nào dùng loại nào?
| Thuật toán |
Loại |
Ưu điểm |
Nhược điểm |
Khi nào dùng |
| SVM |
Supervised |
Hiệu quả với số chiều cao, bộ nhớ thấp |
Chậm với dữ liệu lớn, khó chọn kernel |
Dữ liệu trung bình (hàng nghìn ảnh), bài toán nhị phân |
| Random Forest |
Supervised |
Độ chính xác cao, ít overfitting, dễ song song |
Tốn RAM, chậm hơn SVM với dữ liệu lớn |
Dữ liệu có nhiều đặc trưng (sau PCA), yêu cầu diễn giải |
| K-means |
Unsupervised |
Đơn giản, nhanh, dễ hiểu |
Cần biết K, nhạy với khởi tạo |
Phân cụm, phân đoạn ảnh, giảm màu |
| PCA |
Unsupervised |
Giảm chiều tốt, khử nhiễu |
Mất thông tin phi tuyến |
Tiền xử lý trước khi dùng SVM, Random Forest |
| CNN |
Deep Learning |
Tự động trích xuất đặc trưng, độ chính xác rất cao |
Cần nhiều dữ liệu, GPU mạnh, khó giải thích |
Bài toán phân loại ảnh phức tạp, dữ liệu lớn (>10k ảnh) |
| Vision Transformer |
Deep Learning |
Mô hình hóa quan hệ toàn cục tốt, hiệu suất đỉnh |
Rất tốn tài nguyên, cần dữ liệu siêu lớn |
Tập dữ liệu cực lớn (hàng triệu ảnh), yêu cầu độ chính xác tối đa |
5.1 Hướng dẫn lựa chọn thuật toán
- Nếu bạn có ít dữ liệu (dưới 1.000 ảnh): Bắt đầu với SVM hoặc Random Forest kết hợp với PCA để giảm chiều.
- Nếu bạn có dữ liệu trung bình (1.000 – 10.000 ảnh): Random Forest hoặc CNN đơn giản (ít lớp) là lựa chọn tốt. Sử dụng data augmentation để tăng dữ liệu.
- Nếu bạn có dữ liệu lớn (>10.000 ảnh): CNN là lựa chọn tiêu chuẩn. Vision Transformer phù hợp nếu bạn có đủ tài nguyên và yêu cầu độ chính xác cao nhất.
- Nếu bạn muốn khám phá dữ liệu chưa gán nhãn: Sử dụng K-means hoặc PCA để phân cụm, giảm chiều và trực quan hóa.
6. Kết luận và hướng phát triển
Trong bài viết này, chúng ta đã cùng nhau khám phá ba nhóm thuật toán Machine Learning chính trong xử lý ảnh: học có giám sát (SVM, Decision Tree, Random Forest), học không giám sát (K-means, PCA), và học sâu (CNN, Vision Transformer). Mỗi nhóm đều có thế mạnh và ứng dụng riêng, phù hợp với từng loại bài toán và quy mô dữ liệu.
Trong tương lai, xu hướng phát triển của các thuật toán xử lý ảnh tập trung vào:
- Hiệu quả tính toán: Các mô hình nhẹ hơn (MobileNet, EfficientNet) cho phép chạy trên thiết bị di động và IoT.
- Học ít mẫu (Few-shot learning): Giảm sự phụ thuộc vào dữ liệu lớn.
- Học tự giám sát (Self-supervised learning): Tận dụng dữ liệu không nhãn để học các biểu diễn tốt hơn.
- Thị giác 3D và đa phương thức: Kết hợp hình ảnh, video, điểm ảnh và văn bản.
Để tiếp tục hành trình học tập, bạn có thể tham khảo:
🔑 Từ khóa chính của bài viết:
- Machine Learning
- Xử lý ảnh
- Học có giám sát
- Học không giám sát
- Học sâu
- CNN
- Transformer
- SVM
- K-means
- PCA
- TensorFlow
- Phân loại ảnh
🔗 Backlink về trang chủ:
A.I Tech Blog – Cập nhật công nghệ AI mới nhất