Học AI & Lập trình

Tổng quan Deep Learning cho Computer Vision

ML khác DL ở đâu, ảnh xám và ảnh màu được biểu diễn bằng con số ra sao, và ba bài toán cốt lõi của Computer Vision: phân loại, phát hiện, phân vùng.

Tổng quan Deep Learning cho Computer Vision
Nội dung bài viết
  1. Hệ thống thị giác của người và của máy
  2. Máy tính "nhìn" thấy gì? Ảnh chỉ là những con số
  3. Machine Learning truyền thống và Deep Learning
  4. Neural Network, Deep Learning và Machine Learning: quan hệ lồng nhau
  5. Ba bài toán cốt lõi của Computer Vision
  6. Học có giám sát với ảnh được gán nhãn
  7. Vision Engineer làm gì ngoài đời?
  8. Tóm tắt và bước tiếp theo
  9. Tài liệu tham khảo

Mỗi ngày chiếc điện thoại của bạn mở khóa bằng khuôn mặt, ứng dụng ngân hàng đọc số CCCD, dây chuyền nhà máy tự loại sản phẩm lỗi, xe tự lái nhận ra người đi bộ. Đằng sau tất cả là Computer Vision (thị giác máy tính), lĩnh vực dạy máy tính "hiểu" hình ảnh. Và động cơ chính giúp Computer Vision bùng nổ hơn chục năm qua là Deep Learning.

Số trang (ví dụ "trang 81") trong bài chỉ tới slide của bài giảng Deep Learning – Computer Vision – NLP (Thang Nguyen, Viet Nguyen); bài này giải thích chi tiết, kiểm chứng và đính chính các slide đó.

Đây là bài đọc thêm của chặng Deep Learning trong lộ trình Trở thành Vision Engineer. Mục tiêu: nắm bức tranh tổng thể trước khi đi vào từng viên gạch là neural network, CNN, object detection…

Hệ thống thị giác của người và của máy

Khi bạn nhìn một giỏ trái cây, mắt thu nhận ánh sáng (thiết bị cảm nhận), còn não diễn giải tín hiệu đó thành "cái bát, quả cam, chuối, chanh, đào" (thiết bị diễn giải). Một hệ thống Computer Vision có cấu trúc y hệt:

Con ngườiMáy tính
Thu nhậnMắtCamera, cảm biến (sensing device)
Diễn giảiNão bộThuật toán / mô hình chạy trên CPU, GPU (interpreting device)
Kết quả"Có quả cam trong bát"Nhãn, toạ độ, mặt nạ (mask)… dạng số liệu

Phần camera đã giải quyết từ lâu. Phần khó là "bộ não": biến hàng triệu con số pixel thành ý nghĩa. Đó chính là việc của Vision Engineer.

Máy tính "nhìn" thấy gì? Ảnh chỉ là những con số

Ảnh xám (grayscale)

Với máy tính, một ảnh xám kích thước H×W là một ma trận H hàng, W cột. Mỗi phần tử (pixel) thường là số nguyên 8 bit từ 0 (đen) đến 255 (trắng). Ảnh chân dung 12×16 pixel ở trang 60 của tài liệu thực chất chỉ là 192 con số như 157 153 174 168….

Ảnh màu (RGB)

Ảnh màu gồm 3 kênh (channel) đỏ, lục, lam xếp chồng lên nhau, mỗi kênh là một ma trận H×W. Tổng cộng ảnh là một khối (tensor) 3 chiều kích thước H×W×3. Một ảnh 224×224 màu có 224·224·3 = 150.528 con số.

from PIL import Image
import numpy as np

img = np.array(Image.open("meo.jpg"))           # đọc ảnh thành mảng numpy
print(img.shape, img.dtype)                       # (441, 784, 3) uint8  → H, W, C
print(img[0, 0])                                  # pixel góc trên trái, ví dụ [231 224 218] (R, G, B)

gray = np.array(Image.open("meo.jpg").convert("L"))
print(gray.shape, gray.min(), gray.max())         # (441, 784) 0 255
Ba quy ước thứ tự cần nhớ ngay từ đầu
  • Pillow / NumPy / Matplotlib: H×W×C, thứ tự màu RGB.
  • OpenCV (cv2.imread): H×W×C nhưng thứ tự màu là BGR. Quên đổi sang RGB là lỗi kinh điển khiến mô hình chạy "sai mà không báo lỗi".
  • PyTorch: C×H×W (kênh đứng trước), và một batch ảnh là N×C×H×W.

Khoảng cách ngữ nghĩa (semantic gap)

Con người thấy "con mèo", máy chỉ thấy một bảng số. Tệ hơn, cùng một con mèo nhưng các con số thay đổi hoàn toàn khi:

  • Góc nhìn thay đổi (viewpoint): xoay máy ảnh là mọi pixel đổi giá trị.
  • Ánh sáng (illumination): mèo trong phòng tối và ngoài nắng.
  • Biến dạng (deformation): mèo nằm cuộn tròn, mèo vươn vai.
  • Che khuất (occlusion): chỉ thấy cái đuôi sau ghế sofa.
  • Nền lẫn lộn (background clutter): mèo vằn trên thảm vằn.
  • Đa dạng trong cùng lớp (intra-class variation): mèo Ba Tư, mèo mướp, mèo Sphynx.

Không thể viết tay các luật if…else cho mọi trường hợp. Giải pháp là học từ dữ liệu (data-driven approach): thu thập thật nhiều ảnh đã gán nhãn, để thuật toán tự tìm quy luật.

Machine Learning truyền thống và Deep Learning

Machine Learning truyền thống Ảnh đầu vào Trích đặc trưngdo người thiết kế: HOG, SIFT… Bộ phân loạiSVM, Random Forest… Car / Not car Deep Learning Ảnh đầu vào Trích đặc trưng + Phân loạimột mạng nơ-ron nhiều lớp, học end-to-end từ dữ liệu Car / Not car
Khác biệt cốt lõi: ai là người thiết kế đặc trưng (feature)?

Trong Machine Learning truyền thống, kỹ sư phải tự thiết kế cách trích đặc trưng (feature engineering): biểu đồ màu, cạnh, HOG (histogram of oriented gradients), SIFT… rồi đưa vector đặc trưng vào một bộ phân loại như SVM. Chất lượng hệ thống phụ thuộc rất nhiều vào tay nghề "chế" đặc trưng.

Trong Deep Learning, mạng nơ-ron nhiều lớp nhận trực tiếp pixel và tự học cả phần trích đặc trưng lẫn phần phân loại, tối ưu đồng thời từ đầu đến cuối (end-to-end). Đổi lại, nó cần nhiều dữ liệu và sức tính toán (GPU) hơn.

Tiêu chíML truyền thốngDeep Learning
Đặc trưngThiết kế thủ côngTự học từ dữ liệu
Lượng dữ liệu cầnÍt đến vừa (hàng trăm, nghìn mẫu)Nhiều (hàng nghìn đến hàng triệu), hoặc dùng transfer learning
Phần cứngCPU là đủGPU gần như bắt buộc khi huấn luyện
Độ chính xác với ảnh phức tạpThấp hơn, chững lại sớmCao, tăng tiếp khi thêm dữ liệu
Khả năng giải thíchDễ hơnKhó hơn ("hộp đen")

Cột mốc lịch sử: năm 2012, mạng AlexNet thắng cuộc thi ImageNet (ILSVRC) với tỉ lệ lỗi top-5 khoảng 15,3%, bỏ xa vị trí thứ hai (khoảng 26,2%) dùng đặc trưng thủ công. Từ đó Deep Learning trở thành phương pháp mặc định của Computer Vision.

Neural Network, Deep Learning và Machine Learning: quan hệ lồng nhau

Hình ảnh búp bê Nga trong tài liệu rất chính xác: AI ⊃ Machine Learning ⊃ Neural Networks ⊃ Deep Learning.

  • Neural network (mạng nơ-ron) là một họ mô hình trong Machine Learning, gồm lớp đầu vào (input layer), các lớp ẩn (hidden/middle layer) và lớp đầu ra (output layer).
  • Deep Learning là neural network có nhiều lớp ẩn (deep = sâu). Không có ngưỡng cứng, nhưng mạng hiện đại thường có hàng chục đến hàng trăm lớp.

Vì sao "sâu" lại tốt? Mỗi lớp học đặc trưng ở một mức trừu tượng: lớp đầu học cạnh, góc; lớp giữa ghép cạnh thành bộ phận (mắt, mũi, bánh xe); lớp sau ghép bộ phận thành đối tượng (khuôn mặt, ô tô). Học phân cấp (hierarchical features) như vậy hiệu quả hơn nhiều so với cố học mọi thứ trong một lớp duy nhất.

Ba bài toán cốt lõi của Computer Vision

Bài toánCâu hỏiĐầu raVí dụ
Image classification
(phân loại ảnh)
Ảnh này là gì?Một nhãn (hoặc phân phối xác suất trên các lớp)"Cat" 82%, "dog" 15%…
Object detection
(phát hiện đối tượng)
Có những vật gì, ở đâu?Danh sách (nhãn, bounding box, độ tin cậy)Cat tại (x, y, w, h), Dog tại…
Image segmentation
(phân vùng ảnh)
Pixel nào thuộc vật nào?Mặt nạ (mask) cho từng pixelViền chính xác của mèo và chó

Phân loại thường giả định ảnh có một đối tượng chính; phát hiện và phân vùng xử lý nhiều đối tượng. Độ khó và chi phí gán nhãn tăng dần: gán một nhãn cho ảnh mất vài giây, vẽ box mất vài chục giây, tô mask có thể mất vài phút mỗi ảnh. Ngoài ra còn nhiều bài toán khác xây trên nền này: ước lượng tư thế (pose estimation), theo vết (tracking), nhận dạng ký tự (OCR), ước lượng độ sâu, sinh ảnh (GAN, diffusion)…

Học có giám sát với ảnh được gán nhãn

Hầu hết hệ thống thị giác trong thực tế là học có giám sát (supervised learning): ta cho mô hình xem hàng nghìn ảnh kèm nhãn đúng ("cat", "dog"…), mô hình dự đoán, so với nhãn, rồi tự điều chỉnh để lần sau đoán đúng hơn. Quy trình chuẩn:

  1. Thu thập và gán nhãn dữ liệu, chia thành tập train / validation / test.
  2. Chọn mô hình và huấn luyện trên tập train.
  3. Đánh giá trên tập validation để chọn siêu tham số, cuối cùng báo cáo trên tập test (chưa từng dùng khi huấn luyện).
  4. Triển khai (deploy) và giám sát mô hình khi chạy thật.

Một số bộ dữ liệu bạn sẽ gặp suốt quá trình học:

DatasetNội dungDùng cho
MNIST70.000 ảnh chữ số viết tay 28×28 xám, 10 lớpBài tập nhập môn
CIFAR-1060.000 ảnh màu 32×32, 10 lớp (máy bay, ô tô, chim, mèo…)Thử nghiệm CNN nhanh
ImageNet (ILSVRC)~1,28 triệu ảnh train, 1.000 lớpBenchmark phân loại, nguồn mô hình pretrained
Pascal VOC20 lớp, có box và maskDetection, segmentation
MS COCO~330.000 ảnh, 80 lớp, box + mask + keypointChuẩn đánh giá detection/segmentation hiện nay

Vision Engineer làm gì ngoài đời?

  • Sản xuất: kiểm tra ngoại quan tự động (AOI), phát hiện trầy xước, thiếu linh kiện, đếm sản phẩm trên băng chuyền.
  • Bán lẻ, an ninh: đếm người, nhận diện biển số, phát hiện xâm nhập.
  • Y tế: phân vùng khối u trên ảnh CT/MRI, đọc X-quang.
  • Giao thông: xe tự lái, hệ thống hỗ trợ lái (ADAS), giám sát giao thông.
  • Tài liệu: OCR hoá đơn, CCCD, eKYC.

Công việc hằng ngày không chỉ là "train model": phần lớn thời gian dành cho dữ liệu (thu thập, gán nhãn, làm sạch), đánh giá (lỗi sai nằm ở đâu?), và triển khai (tối ưu tốc độ trên GPU, thiết bị biên).

Tóm tắt và bước tiếp theo

  • Ảnh là tensor số: xám H×W, màu H×W×3 (PyTorch dùng C×H×W).
  • Deep Learning tự học đặc trưng thay vì thiết kế thủ công, cần nhiều dữ liệu và GPU.
  • Deep Learning = neural network nhiều lớp ẩn, học đặc trưng phân cấp từ cạnh đến đối tượng.
  • Ba bài toán cốt lõi: classification, detection, segmentation.

Đọc tiếp: từ linear classifier đến neural network, viên gạch nhỏ nhất của mọi mạng nơ-ron.

Tài liệu tham khảo

  • Stanford CS231n: Image Classification: Data-driven Approach (cs231n.github.io/classification).
  • Krizhevsky, Sutskever, Hinton (2012). ImageNet Classification with Deep Convolutional Neural Networks.
  • Zeiler & Fergus (2014). Visualizing and Understanding Convolutional Networks: minh hoạ đặc trưng phân cấp.
  • Bài giảng "Deep Learning – Computer Vision – NLP" của Thang Nguyen & Viet Nguyen (youtube.com/@vietnh1009).
Ban biên tập HọcFree

Chúng tôi viết những bài hướng dẫn dễ hiểu, thực tế để ai cũng có thể tự học lập trình và ngoại ngữ, hoàn toàn miễn phí.