Giới thiệu dự án

Ùn tắc giao thông đô thị đang là thách thức nghiêm trọng đối với các đô thị phát triển nhanh. Theo báo cáo Traffic Index của TomTom trên 403 thành phố thuộc 56 quốc gia, mức độ tắc nghẽn giao thông toàn cầu liên tục gia tăng với hơn 75% đô thị ghi nhận chỉ số nghẽn mạch tăng trưởng hàng năm. Tại Việt Nam, đặc biệt ở TP. Hồ Chí Minh và TP. Hà Nội, tình trạng kẹt xe không chỉ gây áp lực hạ tầng mà còn gây tổn thất kinh tế khổng lồ. Ước tính thiệt hại kinh tế do ùn tắc tại TP. Hồ Chí Minh chiếm từ 1% đến 2% GDP của thành phố, tương đương từ 600 triệu USD đến 1 tỷ USD mỗi năm.

                                  HỆ THỐNG GIÁM SÁT GIAO THÔNG
                                  
   Camera giám sát              Mô hình Deep Learning            Điều phối & Cảnh báo
   +-------------+              +---------------------+          +--------------------+
   | Video RTSP  |  ========>   |  SSD300 + VGG16     | ======>  |  Phân tích mật độ  |
   | Camera IP   |              |  (8732 Anchor Boxes)|          |  Cảnh báo ùn tắc   |
   +-------------+              +---------------------+          +--------------------+

Hệ thống camera giám sát đô thị hiện nay đã được phủ sóng diện rộng nhưng chủ yếu dừng lại ở mức truyền phát hình ảnh thụ động để con người quan sát thủ công. Phương pháp này bộc lộ nhiều điểm nghẽn: tốn kém nhân sự vận hành, độ trễ phản ứng cao và không thể trích xuất dữ liệu lưu lượng theo thời gian thực. Đề tài "Nhận diện phương tiện giao thông sử dụng bộ phát hiện Single Shot MultiBox Detector" được thực hiện bởi sinh viên ngành Công nghệ Kỹ thuật Máy tính (Trường Đại học Sư phạm Kỹ thuật TP.HCM) nhằm giải quyết trực tiếp bài toán này thông qua thị giác máy tính và học sâu (Deep Learning).

Mục tiêu cụ thể của dự án:

  1. Nghiên cứu, cấu hình và huấn luyện lại (Transfer Learning/Fine-tuning) mạng nơ-ron tích chập Single Shot MultiBox Detector (SSD) tối ưu cho bài toán nhận diện phương tiện giao thông.
  2. Xây dựng pipeline tiền xử lý và trích xuất đặc trưng trên tập dữ liệu chuẩn giao thông KITTI 2D và Pascal VOC.
  3. Hiện thực hóa mô hình định vị và phân loại đối tượng đa tỉ lệ trong luồng video thời gian thực, lọc nhiễu dương tính giả và tracking đối tượng qua bộ đệm khung hình (frame buffer).
  4. Đánh giá tính khả thi khi triển khai hệ thống trên phần cứng máy tính phổ thông với GPU tầm trung, cân bằng giữa độ trễ (latency) và độ chính xác (mAP).

Phạm vi nghiên cứu tập trung vào việc phân loại các phương tiện đường bộ chính (ô tô, xe tải, xe buýt, người tham gia giao thông) trong điều kiện ánh sáng ban ngày và môi trường giao thông phức tạp. Dự án chưa bao gồm phần cứng chuyên dụng trên camera biên (Edge AI) hay điều khiển đèn tín hiệu tự động.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các giải pháp phát hiện đối tượng trong thị giác máy tính trải qua hai nhánh chính: các thuật toán hai giai đoạn (Two-Stage Detectors) như R-CNN, Fast R-CNN, Faster R-CNN và các thuật toán một giai đoạn (One-Stage Detectors) như YOLO, SSD.

Tiêu chí Phương pháp truyền thống (HOG + SVM) Two-Stage Detector (Faster R-CNN) One-Stage Detector (SSD300 - Đề tài)
Cơ chế hoạt động Trích xuất đặc trưng thủ công + Bộ phân loại tuyến tính Đề xuất vùng qua RPN -> Phân loại & hồi quy bounding box Dự đoán trực tiếp class scores và offsets trên đa tầng Feature Maps
Độ chính xác (mAP) Thấp (< 45%), dễ nhiễu trong môi trường ánh sáng phức tạp Rất cao (> 75%), bắt đối tượng nhỏ tốt Khá đến Cao (~ 70% - 74% trên tập benchmark)
Tốc độ xử lý (FPS) Chậm khi áp dụng cửa sổ trượt (Sliding Window) Chậm (5 - 12 FPS), khó đáp ứng thời gian thực trên GPU tầm trung Rất nhanh (30 - 45 FPS), tối ưu cho luồng video trực tiếp
Chi phí phần cứng Thấp, chạy trên CPU đơn lõi Rất cao, đòi hỏi Server GPU đắt tiền Trung bình, tương thích card đồ họa phổ thông (Nvidia GTX)

Yêu cầu hệ thống theo mô hình MoSCoW:

  • Must Have (Bắt buộc): Pipeline nhận diện xe cộ qua ảnh tĩnh và video với độ trễ < 50ms/frame; chỉ số IoU $\ge 0.5$; độ chính xác phân loại $\ge 70%$.
  • Should Have (Nên có): Cơ chế loại bỏ phát hiện trùng lặp (Non-Maximum Suppression), thuật toán duy trì nhận diện ổn định qua 10 khung hình liên tiếp.
  • Could Have (Có thể mở rộng): Đếm lưu lượng xe theo chiều sâu không gian, tích hợp cảnh báo mật độ tắc nghẽn qua API.
  • Won't Have (Chưa thực hiện): Nhận diện biển số xe tự động (ANPR), phân loại chi tiết model/hãng xe.

Thiết kế hệ thống

Kiến trúc mô hình SSD300 sử dụng mạng cơ sở (Base Network) là VGG16 đã loại bỏ các tầng Fully-Connected (FC6, FC7 được chuyển đổi thành các tầng tích chập Conv6, Conv7), đồng thời bổ sung thêm các tầng trích xuất đặc trưng đa tầng (Auxiliary Feature Layers: Conv8_2, Conv9_2, Conv10_2, Conv11_2).

graph TD
    Input[Input Image: 300x300x3] --> Base[VGG16 Base Network]
    Base --> C4[Conv4_3: 38x38x512]
    C4 --> C7[Conv7: 19x19x1024]
    C7 --> C8[Conv8_2: 10x10x512]
    C8 --> C9[Conv9_2: 5x5x256]
    C9 --> C10[Conv10_2: 3x3x256]
    C10 --> C11[Conv11_2: 1x1x256]

    C4 --> Det1[Dự đoán: 38x38x4 = 5776 boxes]
    C7 --> Det2[Dự đoán: 19x19x6 = 2166 boxes]
    C8 --> Det3[Dự đoán: 10x10x6 = 600 boxes]
    C9 --> Det4[Dự đoán: 5x5x6 = 150 boxes]
    C10 --> Det5[Dự đoán: 3x3x4 = 36 boxes]
    C11 --> Det6[Dự đoán: 1x1x4 = 4 boxes]

    Det1 & Det2 & Det3 & Det4 & Det5 & Det6 --> Total[Tổng cộng: 8,732 Default Bounding Boxes]
    Total --> NMS[Hard Negative Mining & Non-Maximum Suppression]
    NMS --> Output[Tọa độ Bounding Box + Nhãn phương tiện + Độ tin cậy]

Technology Stack chi tiết:

  • Ngôn ngữ lập trình: Python 3.6+
  • Framework học sâu: TensorFlow 1.14/2.0 Object Detection API, Keras
  • Thư viện thị giác máy tính: OpenCV 4.1.2 (xử lý luồng hình ảnh/video), NumPy, Matplotlib
  • Môi trường tăng tốc: CUDA Toolkit 10.0, cuDNN 7.6
  • Mạng cơ sở: VGG16 (Pre-trained weights từ ImageNet Large Scale Visual Recognition Challenge - ILSVRC)

Methodology

Quy trình phát triển được triển khai theo mô hình lặp (Iterative Engineering) với 4 cột mốc chính trong 14 tuần:

  1. Giai đoạn 1 (Tuần 1 - 4): Thu thập dữ liệu KITTI 2D (7,481 ảnh train, 7,518 ảnh test, 80,256 nhãn bounding box), chuyển đổi định dạng annotation sang TFRecord, phân chia tập dữ liệu theo tỷ lệ 90% Train và 10% Validation.
  2. Giai đoạn 2 (Tuần 5 - 8): Xây dựng cấu trúc mạng SSD300, cấu hình Default Boxes (tỷ lệ hướng $a_r \in {1, 2, 3, \frac{1}{2}, \frac{1}{3}}$), thiết lập hàm mất mát đa nhiệm MultiBox Loss.
  3. Giai đoạn 3 (Tuần 9 - 11): Huấn luyện mô hình với tối ưu hóa SGD, tinh chỉnh ngưỡng confidence threshold $\ge 0.7$, xây dựng thuật toán theo dõi phương tiện qua video (Tracking logic).
  4. Giai đoạn 4 (Tuần 12 - 14): Kiểm thử trên video thực tế, đo đạc chỉ số IoU, FPS, đánh giá giới hạn và hoàn thiện báo cáo tốt nghiệp.

Implementation và kết quả

Development process

Cốt lõi của thuật toán SSD là việc gán các Default Bounding Boxes (hộp mặc định) có tỉ lệ kích thước (scale) và tỉ lệ hướng (aspect ratio) khác nhau trên các tầng feature map đa kích thước. Tỷ lệ kích thước của các hộp mặc định tại tầng $k$ được tính toán theo công thức:

$$s_k = s_{min} + \frac{s_{max} - s_{min}}{m - 1}(k - 1), \quad k \in [1, m]$$

Trong đó $s_{min} = 0.2$, $s_{max} = 0.9$, và $m = 6$ (tương ứng với 6 tầng trích xuất đặc trưng từ Conv4_3 đến Conv11_2). Chiều rộng ($w$) và chiều cao ($h$) của từng hộp mặc định theo aspect ratio $a_r$ được xác định:

$$w_k^a = s_k \sqrt{a_r}, \quad h_k^a = \frac{s_k}{\sqrt{a_r}}$$

Hàm mất mát tổng thể (MultiBox Loss) là tổng có trọng số giữa hàm mất mát vị trí (Localization Loss - $L_{loc}$) dùng Smooth L1 và hàm mất mát độ tin cậy (Confidence Loss - $L_{conf}$) dùng Softmax kết hợp Hard Negative Mining theo tỷ lệ mẫu âm/mẫu dương là 3:1:

$$L(x, c, l, g) = \frac{1}{N} \left( L_{conf}(x, c) + \alpha L_{loc}(x, l, g) \right)$$

import tensorflow as tf

def smooth_l1_loss(y_true, y_pred):
    """
    Hàm Smooth L1 Loss tính sai số hồi quy tọa độ Bounding Box
    y_true: Ground Truth offsets (g_hat)
    y_pred: Predicted offsets (l)
    """
    absolute_loss = tf.abs(y_true - y_pred)
    square_loss = 0.5 * tf.square(y_true - y_pred)
    l1_loss = tf.where(tf.less(absolute_loss, 1.0), square_loss, absolute_loss - 0.5)
    return tf.reduce_sum(l1_loss, axis=-1)

def multibox_loss(y_true_cls, y_pred_cls, y_true_loc, y_pred_loc, alpha=1.0):
    """
    Hàm mất mát tổng hợp SSD: Kết hợp Confidence Loss và Localization Loss
    """
    # 1. Localization Loss chỉ tính trên các Positive Matches (IoU >= 0.5)
    pos_mask = tf.cast(y_true_cls > 0, dtype=tf.float32)
    N = tf.maximum(1.0, tf.reduce_sum(pos_mask))
    
    loc_loss = tf.reduce_sum(smooth_l1_loss(y_true_loc, y_pred_loc) * pos_mask)
    
    # 2. Hard Negative Mining cho Confidence Loss (tỷ lệ Negative:Positive = 3:1)
    conf_loss_all = tf.nn.sparse_softmax_cross_entropy_with_logits(
        labels=y_true_cls, logits=y_pred_cls
    )
    
    # Hard negative mining logic
    pos_conf_loss = tf.reduce_sum(conf_loss_all * pos_mask)
    num_neg = tf.cast(tf.minimum(tf.reduce_sum(pos_mask) * 3.0, tf.cast(tf.size(y_true_cls), tf.float32)), tf.int32)
    
    # Chọn top loss âm tính cao nhất
    neg_mask = tf.cast(y_true_cls == 0, dtype=tf.float32)
    neg_conf_loss_all = conf_loss_all * neg_mask
    top_neg_loss, _ = tf.nn.top_k(tf.reshape(neg_conf_loss_all, [-1]), k=num_neg)
    neg_conf_loss = tf.reduce_sum(top_neg_loss)
    
    total_loss = (pos_conf_loss + neg_conf_loss + alpha * loc_loss) / N
    return total_loss

Để tracking và ổn định kết quả nhận diện trên video, nhóm xây dựng thuật toán lọc nhiễu: Một phương tiện chỉ được xác nhận hiển thị nếu xuất hiện liên tục trong ít nhất 10 khung hình liên tiếp, và đối tượng sẽ bị giải phóng khỏi bộ nhớ nếu biến mất quá 10 khung hình.

Testing và validation

Mô hình được huấn luyện và đánh giá trên phần cứng máy tính xách tay trang bị GPU NVIDIA GeForce GTX 965M, hệ điều hành Linux/Ubuntu, môi trường CUDA 10.0.

Thông số siêu tham số (Hyperparameters):

  • Batch size: 32
  • Optimizer: Stochastic Gradient Descent (SGD) với Momentum = 0.9
  • Learning rate khởi tạo: 0.001 (giảm dần theo phân rã trọng số)
  • Weight decay: 0.0005
  • Ngưỡng Intersection over Union (IoU): $\ge 0.5$
  • Ngưỡng Confidence Score: $0.7 - 0.9$
+-------------------------------------------------------------------------------+
| MA TRẬN NHẦM LẪN (CONFUSION MATRIX TỔNG HỢP TRÊN TẬP VALIDATION KITTI)        |
+-------------------+--------------------+--------------------+-----------------+
| Nhãn thực tế      | Dự đoán: Xe hơi    | Dự đoán: Xe tải/buýt| Dự đoán: Background |
+-------------------+--------------------+--------------------+-----------------+
| Xe hơi (Car)      | 91.2% (True Pos)   | 4.3% (Mislabeled)  | 4.5% (False Neg)|
| Xe tải / Xe buýt  | 7.8% (Mislabeled)  | 84.1% (True Pos)   | 8.1% (False Neg)|
| Nền (Background)  | 2.1% (False Pos)   | 1.4% (False Pos)   | 96.5% (True Neg)|
+-------------------+--------------------+--------------------+-----------------+

Kết quả đạt được

  • Độ chính xác: Đạt tỷ lệ nhận diện chính xác xấp xỉ 70% trên tập dữ liệu kiểm thử tổng hợp (trên các bức ảnh chuẩn từ Pascal VOC đạt độ chính xác ~90%).
  • Chỉ số IoU: Tỉ lệ chồng lấn hộp dự đoán so với hộp thực tế (Ground Truth) đạt trên 50%, đảm bảo bao bọc sát thân xe.
  • Tốc độ suy luận (Inference Speed): Đạt ngưỡng xử lý 28 - 35 FPS trên video HD, đáp ứng tiêu chuẩn xử lý thời gian thực (Real-time constraints).
  • Khả năng lọc trùng: Hạn chế triệt để hiện tượng 1 phương tiện xuất hiện nhiều bounding box nhờ kết hợp Soft-NMS và thuật toán trung bình hóa vị trí hộp bao.

Đổi mới và đóng góp

  1. Ứng dụng hiệu quả kỹ thuật Hard Negative Mining: Xử lý triệt để hiện tượng mất cân bằng mẫu (Imbalance Dataset) khi số lượng Default Boxes nền (negative) áp đảo hoàn toàn mẫu chứa xe (positive) trong tổng số 8,732 vị trí dự đoán, giúp mô hình hội tụ ổn định với hàm mất mát SGD.
  2. Cơ chế phân cấp phát hiện đa tầng đặc trưng (Multi-scale Feature Maps): Bắt được phương tiện ở đa dạng tỉ lệ không gian. Các tầng đầu (Conv4_3 với kích thước $38 \times 38$) chuyên trách nhận diện xe ở khoảng cách xa (kích thước nhỏ), trong khi các tầng sâu (Conv10_2, Conv11_2) phát hiện xe cỡ lớn ở cự ly gần camera.
  3. Thuật toán Buffer Frame Tracking: Giải quyết bài toán giật/chớp tắt bounding box khi phương tiện bị che khuất tạm thời (Occlusion) hoặc khi hai phương tiện vượt qua nhau.
So sánh tốc độ xử lý và kích thước mô hình:

Faster R-CNN (VGG16): [======== 7-10 FPS ========] | Dung lượng: 520MB
YOLOv3 (Darknet-53) : [================= 25-30 FPS =================] | Dung lượng: 240MB
SSD300 (VGG16)      : [=================== 30-35 FPS ===================] | Dung lượng: 105MB (Tối ưu)

Ứng dụng thực tế và triển khai

Hệ thống có khả năng tích hợp trực tiếp vào hạ tầng camera giao thông thông minh (Intelligent Transportation Systems - ITS) tại các đô thị lớn như TP.HCM và Hà Nội:

                            SƠ ĐỒ TRIỂN KHAI HỆ THỐNG ITS
                            
 [ Camera IP Tuyến Đường ] (H.264/RTSP Stream)
  • Yêu cầu phần cứng triển khai:
    • Trạm xử lý biên (Local/Edge): Bộ vi xử lý Intel Core i5 thế hệ 8 hoặc card nhúng NVIDIA Jetson Xavier / GTX 1050 Ti trở lên, RAM tối thiểu 8GB.
    • Băng thông mạng: Kết nối tối thiểu 10 Mbps cho mỗi luồng RTSP 1080p từ camera IP.
  • Bài toán kinh tế (Cost-Benefit Analysis): So với hệ thống cảm biến vòng từ dưới lòng đường (Inductive Loop Sensors) tốn hàng tỷ đồng chi phí lắp đặt, đào đường và bảo trì, việc tận dụng camera giám sát sẵn có kết hợp mô hình SSD giúp tiết kiệm hơn 80% chi phí đầu tư ban đầu cho các trung tâm quản lý giao thông.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Mạng cơ sở VGG16: Mặc dù ổn định nhưng kiến trúc VGG16 tiêu tốn nhiều tài nguyên bộ nhớ và tính toán, chưa thực sự tối ưu tuyệt đối cho các vi mạch nhúng siêu nhỏ (như Raspberry Pi).
  • Hiện tượng che khuất (Occlusion): Trong điều kiện tắc đường nghiêm trọng khi mật độ xe quá dày đặc, các phương tiện đè lên nhau khiến tỉ lệ IoU giảm, gây sót đối tượng.
  • Yếu tố môi trường: Độ chính xác sụt giảm vào ban đêm hoặc trong điều kiện trời mưa to làm mờ ống kính camera.

Hướng phát triển

  1. Thay thế mạng cơ sở VGG16 bằng MobileNetV2 hoặc MobileNetV3 (sử dụng Depthwise Separable Convolutions) để giảm kích thước model xuống dưới 20MB, tăng tốc độ suy luận trên vi xử lý nhúng.
  2. Nâng cấp thuật toán tracking lên DeepSORT hoặc ByteTrack để duy trì ID định danh xe liên tục, phục vụ đo vận tốc phương tiện và phát hiện vi phạm lấn làn.
  3. Mở rộng tập dữ liệu huấn luyện bằng cách thu thập hình ảnh giao thông thực tế tại Việt Nam (xe máy chiếm đa số) để gia tăng độ chính xác bản địa hóa.

Đối tượng hưởng lợi

  • Sinh viên & Học viên ngành Máy tính: Tài liệu tham khảo hoàn chỉnh từ lý thuyết mạng nơ-ron tích chập đến việc hiện thực hóa mô hình Single Shot MultiBox Detector trên bài toán thực tế.
  • Kỹ sư AI & Lập trình viên Thị giác máy tính: Nắm vững kỹ thuật xử lý dữ liệu hình ảnh, cấu hình Anchor Boxes, hàm mất mát Smooth L1/Softmax và kỹ thuật Hard Negative Mining.
  • Doanh nghiệp & Cơ quan quản lý đô thị: Sở Giao thông Vận tải và các công ty giải pháp công nghệ có sẵn mô hình nền tảng chi phí thấp để xây dựng hệ thống đếm xe và điều phối giao thông tự động.
  • Nhà nghiên cứu: Cơ sở dữ liệu thực nghiệm so sánh hiệu năng giữa mô hình một giai đoạn và hai giai đoạn trong môi trường giao thông đang phát triển.

Câu hỏi thường gặp

1. Cần cấu hình phần cứng tối thiểu nào để vận hành mô hình SSD300 này?

Để huấn luyện mô hình, cần máy tính trang bị GPU NVIDIA có tối thiểu 4GB VRAM (như GTX 965M, GTX 1050 trở lên) hỗ trợ CUDA. Khi triển khai suy luận (Inference), mô hình có thể chạy mượt mà ở tốc độ 25 - 30 FPS trên các GPU phổ thông hoặc vi xử lý đồ họa tích hợp thế hệ mới.

2. Tại sao SSD lại nhanh hơn đáng kể so với Faster R-CNN?

Faster R-CNN sử dụng mạng đề xuất vùng (Region Proposal Network - RPN) riêng biệt rồi mới thực hiện phân loại ở giai đoạn sau (Two-Stage). Ngược lại, SSD loại bỏ hoàn toàn bước đề xuất vùng, trực tiếp dự đoán tọa độ và xác suất lớp trên nhiều tầng feature map trong một lượt truyền thẳng duy nhất (Single Shot).

3. Làm thế nào để giải quyết tình trạng mất cân bằng giữa vùng nền (Background) và vật thể?

SSD áp dụng kỹ thuật Hard Negative Mining. Sau giai đoạn tính toán, các hộp mặc định nền có sai số phân loại cao nhất được sắp xếp và chỉ giữ lại một lượng mẫu âm sao cho tỷ lệ giữa mẫu âm (Negative) và mẫu dương (Positive) tối đa là 3:1, giúp gradient không bị áp đảo bởi vùng nền trống.

4. Thuật toán xử lý trường hợp một chiếc xe bị đóng nhiều khung bao trùng nhau như thế nào?

Mô hình sử dụng thuật toán Non-Maximum Suppression (NMS) kết hợp tính toán chỉ số giao diện trên hội (Intersection over Union - IoU). Khi nhiều khung bao có IoU > 0.5 cùng bao quanh một đối tượng, khung bao có điểm tin cậy (Confidence Score) cao nhất sẽ được giữ lại, các khung bao thừa bị triệt tiêu.

5. Mô hình có thể nhận diện tốt các dòng xe máy đặc trưng tại Việt Nam không?

Trong phạm vi đề tài tốt nghiệp, mô hình sử dụng tập dữ liệu chuẩn KITTI và Pascal VOC vốn tập trung vào ô tô, xe tải và xe buýt. Để tối ưu hóa cho giao thông Việt Nam, chỉ cần gán nhãn bổ sung khoảng 2,000 - 3,000 ảnh xe máy tại địa phương và áp dụng phương pháp học chuyển giao (Transfer Learning) để tái huấn luyện các tầng phân loại cuối cùng.


Kết luận

Đồ án tốt nghiệp "Nhận diện phương tiện giao thông sử dụng bộ phát hiện Single Shot MultiBox Detector" của nhóm tác giả đã nghiên cứu thành công giải pháp ứng dụng học sâu vào giải quyết bài toán giao thông đô thị. Bằng việc kết hợp kiến trúc mạng SSD300 và mạng cơ sở VGG16 cùng các kỹ thuật tối ưu hóa tham số, dự án đã hiện thực hóa mô hình nhận diện phương tiện đạt độ chính xác ~70% với tốc độ xử lý thời gian thực ổn định trên luồng video camera.

Kết quả nghiên cứu này mở ra tiềm năng ứng dụng to lớn trong việc xây dựng các đô thị thông minh (Smart Cities) tại Việt Nam, mang lại giải pháp công nghệ kinh tế, hiệu quả giúp các nhà quản lý giao thông tự động hóa công tác giám sát, giảm thiểu ùn tắc và tối ưu hóa hạ tầng giao thông quốc gia.