Bài 5

Detection & Segmentation

Ngoài phân loại (classification), Computer Vision còn cần định vịphân vùng đối tượng trong ảnh — biết "có gì", "ở đâu" và "thuộc về cá thể nào". Đây là các họ kiến trúc chính giải quyết những bài toán đó.

Các bài toán Computer Vision
Từ "ảnh có gì" đến "từng pixel là gì"

Các bài toán CV tăng dần về mức độ chi tiết của đầu ra: từ một nhãn cho cả ảnh, đến hộp giới hạn (bounding box), rồi tới nhãn cho từng pixel.

Bài toánĐầu raMô tả
Image Classification1 nhãn / ảnhTrả lời "ảnh này là gì" — gán đúng một lớp cho toàn bộ ảnh, không cần biết vị trí
Localization1 đối tượng + bboxMột đối tượng chính + hộp giới hạn (bounding box) bao quanh nó
Object DetectionNhiều đối tượng + bbox + nhãnPhát hiện nhiều đối tượng cùng lúc, mỗi đối tượng có một bbox và một nhãn lớp
Semantic SegmentationNhãn cho TỪNG PIXELGán nhãn lớp cho mỗi pixel — nhưng không phân biệt các cá thể cùng lớp (hai con mèo chung một "vùng mèo")
Instance SegmentationMask riêng từng cá thểVừa phân vùng theo pixel, vừa tách riêng từng cá thể (con mèo 1 và con mèo 2 là hai mask khác nhau)
Pose EstimationTập keypointXác định các điểm khớp (keypoint) — ví dụ khớp người, để dựng lại tư thế/khung xương
Trục độ khó: Classification → Localization → Detection → Semantic → Instance Segmentation. Đầu ra càng chi tiết, kiến trúc càng phức tạp và chi phí gán nhãn càng đắt.
Object Detection — hai giai đoạn (two-stage)
Họ R-CNN: tách riêng việc sinh đề xuất và phân loại

Detector hai giai đoạn chia bài toán thành hai bước: (1) sinh ra các vùng đề xuất (region proposals) có khả năng chứa đối tượng, (2) phân loại và tinh chỉnh bbox cho từng vùng. Họ R-CNN tiến hóa qua ba thế hệ:

Anchor boxes: RPN không đoán bbox từ con số 0 mà đặt sẵn một bộ hộp neo (anchor) với nhiều kích thước và tỉ lệ khung khác nhau tại mỗi vị trí trên feature map. Mạng chỉ cần học độ lệch (offset) và xác suất "có đối tượng" so với các anchor đó — giúp việc dự đoán bbox ổn định và dễ học hơn.

Đổi mới cốt lõi qua từng đời: R-CNN (CNN cho từng vùng) → Fast R-CNN (chia sẻ feature + RoI Pooling) → Faster R-CNN (RPN sinh đề xuất, end-to-end). Đây là nền tảng cho cả Mask R-CNN ở phần sau.
Object Detection — một giai đoạn (one-stage)
Dự đoán bbox và lớp trong một lần duyệt — ưu tiên tốc độ

Detector một giai đoạn bỏ qua bước sinh đề xuất riêng: trực tiếp dự đoán bbox và lớp ngay trên feature map trong một lần forward duy nhất. Đổi lại tốc độ rất cao (real-time), thường nhỉnh hơn về tốc độ nhưng có thể kém hơn chút về độ chính xác so với two-stage.

Tiêu chíTwo-stage (Faster R-CNN…)One-stage (YOLO, SSD, RetinaNet)
Cơ chếSinh đề xuất → phân loại/tinh chỉnhDự đoán bbox + lớp trong một lần
Tốc độChậm hơnNhanh, thường đạt real-time
Độ chính xácThường cao hơn (đặc biệt vật nhỏ)Hơi thấp hơn, nhưng RetinaNet/YOLO mới đã thu hẹp khoảng cách
Phù hợpBài toán ưu tiên độ chính xácỨng dụng thời gian thực, thiết bị biên
Khái niệm chung trong detection
IoU, NMS, mAP, FPN

IoU (Intersection over Union) đo độ trùng khớp giữa bbox dự đoán \(A\) và bbox thật \(B\) — tỉ lệ diện tích giao trên diện tích hợp:

$$\text{IoU}=\frac{|A\cap B|}{|A\cup B|}$$

Giá trị nằm trong \(0 \le \text{IoU} \le 1\); thường coi một dự đoán là "đúng" (true positive) khi \(\text{IoU} \gt 0.5\) so với box thật.

NMS (Non-Maximum Suppression) — sau khi mạng sinh ra nhiều bbox chồng lên cùng một đối tượng, NMS giữ lại box có điểm tin cậy cao nhất và loại bỏ các box trùng (những box có IoU với box đó vượt ngưỡng), tránh đếm trùng một vật.

mAP (mean Average Precision) — độ đo chính của detection. Với mỗi lớp tính Average Precision (diện tích dưới đường precision–recall), rồi lấy trung bình trên tất cả các lớp; thường báo cáo ở các ngưỡng IoU khác nhau (ví dụ mAP@0.5, mAP@[0.5:0.95]).

FPN (Feature Pyramid Network) — kết hợp đặc trưng đa tỉ lệ: lấy feature map ở nhiều độ phân giải rồi hợp nhất theo cấu trúc kim tự tháp (top-down + lateral connections). Nhờ đó mạng phát hiện tốt cả vật nhỏ (ở feature map độ phân giải cao) lẫn vật lớn (ở feature map sâu). FPN được dùng làm backbone/neck trong nhiều detector hiện đại.

Semantic Segmentation
Gán nhãn lớp cho từng pixel

Semantic segmentation gán cho mỗi pixel một nhãn lớp (không phân biệt cá thể). Kiến trúc điển hình theo dạng encoder–decoder: encoder nén ảnh thành đặc trưng giàu ngữ nghĩa nhưng độ phân giải thấp, decoder upsample trở lại kích thước ảnh gốc để dự đoán nhãn từng pixel.

HRNet (xem Bài 4: HRNet) duy trì biểu diễn độ phân giải cao xuyên suốt mạng, nên cũng rất mạnh cho segmentation và pose estimation.

Đọc sơ đồ U-Net: kiến trúc hình chữ U — nhánh trái (encoder) đi xuống giảm dần độ phân giải qua các khối conv + downsample, đáy chữ U là tầng đặc trưng nén nhất (bottleneck), nhánh phải (decoder) đi lên upsample dần về kích thước gốc; các skip connection là những mũi tên ngang (vàng) nối từng tầng encoder sang tầng decoder cùng độ phân giải (nối đối xứng hai cánh chữ U).
U-Net — Encoder–Decoder với skip connection Scroll / zoom · Mở draw.io ↗
Instance Segmentation
Mask R-CNN: tách mask cho từng cá thể

Mask R-CNN mở rộng Faster R-CNN bằng cách thêm một nhánh mask song song với nhánh phân loại và hồi quy bbox. Với mỗi vùng đề xuất, nhánh mask dự đoán một mask nhị phân ở mức pixel cho từng instance — nhờ đó vừa phát hiện (bbox + lớp) vừa phân vùng chính xác từng cá thể riêng biệt.

Điểm mấu chốt là thay RoI Pooling bằng RoIAlign: RoI Pooling làm tròn tọa độ khi cắt đặc trưng, gây lệch nhỏ — chấp nhận được cho phân loại nhưng phá vỡ độ chính xác pixel của mask. RoIAlign dùng nội suy song tuyến (bilinear), giữ căn chỉnh không gian đúng, nâng đáng kể chất lượng mask.

Thành phầnVai trò
Faster R-CNN baseRPN sinh đề xuất + nhánh phân loại + nhánh hồi quy bbox
Nhánh maskDự đoán mask nhị phân pixel cho từng instance
RoIAlignCắt đặc trưng vùng giữ căn chỉnh chính xác (thay RoI Pooling)
Độ đo (Metrics)
Đánh giá detection và segmentation
Độ đoDùng choÝ nghĩa
IoUDetection & SegmentationTỉ lệ trùng khớp giao/hợp giữa dự đoán và thực tế
mAPDetectionTrung bình Average Precision trên các lớp (thường theo nhiều ngưỡng IoU)
Dice / IoUSegmentationDice coefficient \(\dfrac{2|A\cap B|}{|A|+|B|}\) và IoU đo mức trùng của vùng mask dự đoán so với mask thật
Kiến trúc chung của CV hiện đại: một backbone trích đặc trưng (ResNet, HRNet, hoặc backbone có FPN) kết hợp với một đầu task (head) chuyên biệt — detection head (bbox + lớp), segmentation head (nhãn pixel) hay mask head. Đổi backbone hoặc đổi head là cách linh hoạt để chuyển giữa các bài toán.

Bảng dưới tổng kết kiến trúc tiêu biểu theo từng bài toán:

Bài toánKiến trúc tiêu biểuĐặc trưng then chốt
Object Detection (two-stage)R-CNN → Fast → Faster R-CNNRPN + anchor boxes, end-to-end
Object Detection (one-stage)YOLO, SSD, RetinaNetMột lần duyệt, multi-scale, Focal Loss
Semantic SegmentationFCN, U-Net, SegNet, DeepLabEncoder–decoder, skip connection, atrous + ASPP
Instance SegmentationMask R-CNNFaster R-CNN + nhánh mask + RoIAlign
Đa tỉ lệ / PoseFPN, HRNetHợp nhất đặc trưng đa độ phân giải
← Quay lại
Bài 4: HRNet