Bài Tập Lớn Số 2 · CO5085 · 2025–2026 HK2

Phát hiện đối tượng:
One-Stage vs Two-Stage

So sánh YOLOv8n (one-stage, anchor-free) và Faster R-CNN ResNet-50 FPN (two-stage) trên Pascal VOC 2012 — mAP, FPS, phân tích lỗi.

Nguyễn Trung Phong · Giảng viên: Lê Thành Sách

📋 Nội Dung Bài Tập

5 notebook theo yêu cầu đề bài — dataset: Pascal VOC 2012 (20 lớp, ~11.5K train / 2.8K val)
1
EDA — Khám phá tập dữ liệu Pascal VOC 2012
Phân phối lớp · Thống kê bounding box · Visualize mẫu ảnh · Lý do chọn dataset
✅ Done
2
Data Pipeline — Dataset, DataLoader & Augmentation
VOCDetectionDataset · collate_fn · VOC XML → YOLO txt · ImageNet normalization
✅ Done
3
Training & So sánh — YOLOv8n vs Faster R-CNN
Kiến trúc One-Stage vs Two-Stage · Fine-tune từ pretrained COCO · mAP comparison
✅ Done
4
Kết quả — Bảng số liệu, biểu đồ & phân tích lỗi
mAP@0.5 · mAP@0.5:0.95 · Per-class AP · Speed vs Accuracy · Error Analysis (TP/FP/FN)
✅ Done
5
Mở rộng — FPS Benchmark, Feature Maps & Gradio Demo
FPS benchmark ✅ · Confidence threshold sweep, FPN feature maps, Web demo: TODO
⚠ Partial

🗄️ Dataset

Pascal VOC 2012 — benchmark phát hiện đối tượng chuẩn trong nhiều năm
Số lớp
20
Train images
11,530
Val images
2,788
Annotation
BBox XML
Nguồn
torchvision

🏗️ Các Mô hình So sánh

Pretrained trên COCO, fine-tune trên Pascal VOC 2012
One-Stage Detector
YOLOv8n
Kiến trúc anchor-free, single forward pass.
Backbone: CSPDarknet + FPN neck.
Output head: classification + localization đồng thời.
3.2M params · imgsz=640
Two-Stage Detector
Faster R-CNN ResNet-50 FPN
Two-stage: RPN đề xuất ~300 vùng → ROI Head phân loại.
Backbone: ResNet-50 + FPN (multi-scale features).
Optimizer: SGD + momentum + StepLR.
41.8M params
Trade-off chính: One-stage (YOLO) nhanh hơn ~5–10× nhưng thường kém chính xác hơn two-stage. Faster R-CNN phù hợp khi cần độ chính xác cao; YOLOv8 phù hợp real-time (camera, video).

📊 Kết Quả Thực Nghiệm

Cập nhật sau khi hoàn thành training · Pretrained COCO → Fine-tune VOC 2012
So sánh hai mô hình
Mô hình Loại mAP@0.5 mAP@0.5:0.95 FPS Params
YOLOv8n One-stage 63.5% 44.4% 19.6 3.0M
Faster R-CNN ResNet-50 FPN Two-stage 64.0% 35.7% 10.9 41.4M

* Cả hai model fine-tune 2 epoch trên Pascal VOC 2012 (5,717 ảnh train · 5,823 ảnh val). YOLOv8n nhanh gần 2× so với Faster R-CNN — minh họa rõ trade-off speed vs accuracy giữa kiến trúc one-stage và two-stage.

Per-Class AP@0.5 — top 5 / bottom 5 (cả hai model)
LớpYOLOv8nFaster R-CNN
person82.3%79.5%
cat80.2%79.7%
bus77.0%74.2%
car72.9%74.7%
bicycle67.0%76.5%
⋯ 10 lớp ở giữa (xem biểu đồ đầy đủ bên dưới)
chair48.8%48.3%
sofa53.8%44.6%
bottle49.9%56.0%
boat41.6%46.2%
pottedplant41.1%47.1%

* Các lớp dễ (person, cat, bus, car, bicycle) có nhiều mẫu training và đặc trưng rõ ràng — cả hai model đều đạt >65%. Lớp khó (pottedplant, boat, bottle, sofa, chair) thường bị che khuất hoặc có biến thể hình dạng/góc nhìn — cả hai model đều <55%. YOLOv8n nhỉnh hơn ở vài lớp (person, cat, bus, sofa) nhờ anchor-free + dense prediction; Faster R-CNN tốt hơn ở các lớp cần precision cao (bicycle, bottle, pottedplant, boat).

Biểu đồ đầy đủ — 20 lớp · YOLOv8n vs Faster R-CNN

Per-class AP comparison across all 20 VOC classes