Giới thiệu dự án

Tốc độ đô thị hóa nhanh chóng tại các đô thị lớn ở Việt Nam (như Hà Nội, TP. Hồ Chí Minh) đã dẫn đến sự bùng nổ phương tiện cá nhân, kéo theo tổn thất kinh tế ước tính chiếm từ 1% đến 3% GDP hàng năm do ùn tắc và tai nạn giao thông. Hiện nay, phần lớn dữ liệu lưu lượng giao thông phục vụ quy hoạch hạ tầng và điều tiết đèn tín hiệu vẫn dựa vào khảo sát đếm thủ công (Manual Counting) hoặc hệ thống cảm biến vòng từ (Inductive Loops) vốn tốn kém chi phí bảo trì và dễ hỏng hóc.

Đồ án tốt nghiệp "Xây dựng ứng dụng trí tuệ nhân tạo nhận diện và đếm phương tiện giao thông" của tác giả Phạm Ngọc Việt (Khoa Công nghệ Thông tin, Trường Đại học Phenikaa; GVHD: TS. Lương Văn Thiện) giải quyết trực tiếp bài toán tự động hóa phân loại và định lượng lưu lượng phương tiện thời gian thực. Bằng việc kết hợp mô hình thị giác máy tính tiên tiến YOLOv8x với thuật toán theo dõi đa đối tượng ByteTrack, hệ thống xây dựng nền tảng giám sát thông minh qua video camera giao thông thực tế.

+-------------------------------------------------------------------------+
|                              MỤC TIÊU DỰ ÁN                             |
+-------------------------------------------------------------------------+
| 1. Xây dựng tập dữ liệu đặc thù giao thông Việt Nam với 9 phân lớp.     |
| 2. Huấn luyện mô hình YOLOv8x đạt mAP@0.5 > 85% trên dữ liệu thực tế.    |
| 3. Tích hợp ByteTrack giải quyết triệt để vấn đề mất dấu (ID switches).  |
| 4. Xây dựng thuật toán đếm xe theo hướng qua vạch ranh giới (ROI Line).  |
| 5. Triển khai Web App hoàn chỉnh qua Flask API và giao diện giám sát.   |
+-------------------------------------------------------------------------+

Phương pháp tiếp cận dựa trên Deep Learning mang lại giải pháp tối ưu về cả tốc độ lẫn độ chính xác:

  • Tính khả thi và độ chính xác: Đạt độ chính xác tổng thể trên 90% so với dữ liệu đếm thực nghiệm, duy trì tốc độ xử lý trên 30 FPS trên GPU chuyên dụng.
  • Phạm vi và giới hạn: Hệ thống tập trung xử lý dữ liệu video camera giao thông đặt tại các nút giao cắt và tuyến đường 1 chiều, 2 chiều trong điều kiện ban ngày và ánh sáng đô thị tiêu chuẩn; chưa tích hợp nhận diện biển số xe (ALPR) hoặc phân tích hành vi vi phạm chuyên sâu.

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

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

Trước khi xây dựng hệ thống, việc đánh giá các giải pháp công nghệ hiện hành được thực hiện nhằm xác định khoảng trống công nghệ:

Giải pháp Nguyên lý hoạt động Ưu điểm Nhược điểm & Rào cản
Đếm thủ công (Manual Tally) Con người quan sát video hoặc đứng tại điểm nút bấm đếm. Không đòi hỏi hạ tầng tính toán phức tạp. Sai số cao (>15-20%), tốn nhân lực, không đáp ứng thời gian thực (Real-time).
Cảm biến vòng từ (Inductive Loops) Đo biến thiên từ trường khi xe kim loại chạy qua mặt đường. Độ chính xác đếm số lượng tổng cao (~95%). Không phân loại chi tiết được nhiều loại xe, chi phí lắp đặt và sửa chữa cắt đường lớn.
OpenCV Classical (Background Subtraction) Trừ nền (GMM, MOG2) kết hợp Contour Detection. Tốn ít tài nguyên CPU, không cần GPU. Rất nhạy cảm với bóng đổ, rung lắc camera và thay đổi ánh sáng đột ngột.
YOLOv8 + ByteTrack (Đồ án đề xuất) Deep Learning trích xuất đặc trưng kết hợp Kalman Filter & Association. Phân loại chi tiết 9 lớp, tracking chính xác cao khi bị che khuất, xử lý real-time. Yêu cầu tài nguyên tính toán GPU khi huấn luyện và suy luận mô hình lớn.

Áp dụng phương pháp phân tích yêu cầu MoSCoW:

  • Must have: Nhận diện chính xác 9 lớp phương tiện (Car, Taxi, LGV, HGV, VHGV, Bus, Coach, Motorcycle, Bicycle); gán và duy trì ID đối tượng; đếm 2 chiều độc lập; xuất báo cáo Excel.
  • Should have: Giao diện Web trực quan hiển thị FPS, video bounding box và bảng tổng hợp thời gian thực; tối ưu hóa thời gian phản hồi API < 100ms.
  • Could have: Tùy chỉnh vẽ vạch đếm động trên giao diện Web; tích hợp cảnh báo tắc nghẽn giao thông.
  • Won't have: Xử lý camera 360 độ fisheye không hiệu chỉnh; nhận diện màu sơn phương tiện.

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế theo mô hình phân tầng module hóa, tách biệt giữa tầng xử lý AI Engine và tầng giao tiếp Web Application:

Chi tiết Technology Stack:

  • AI & Computer Vision: Python 3.9+, PyTorch 2.0.1, Ultralytics YOLOv8 (v8.0.x), OpenCV-Python 4.8.0, NumPy 1.24.3, ByteTrack (SORT based with Kalman Filter).
  • Data Labeling & Tools: LabelImg 1.8.6, OpenShot Video Editor (tiền xử lý cắt khung hình).
  • Backend & API: Flask Framework 2.3.2, Werkzeug, Gunicorn.
  • Frontend: HTML5, CSS3, JavaScript (ES6), Bootstrap 5, Chart.js.

Methodology

Dự án áp dụng quy trình phát triển lặp nhanh (Iterative Agile Methodology) với 4 giai đoạn cốt lõi:

  1. Data Acquisition & Preprocessing: Thu thập video đa góc quay (nút giao, đường thẳng, góc nghiêng 45-60 độ), trích xuất frame, lọc nhiễu và chuẩn hóa kích thước $640 \times 640$ pixels.
  2. Annotation: Gán nhãn thủ công với LabelImg theo chuẩn định dạng YOLO format (<class_id> <x_center> <y_center> <width> <height>).
  3. Model Training & Hyperparameter Tuning: Huấn luyện thực nghiệm trên các biến thể YOLOv8n, YOLOv8s, YOLOv8m và YOLOv8x qua 120-150 epochs.
  4. Integration & System Validation: Tích hợp module tracking, thiết lập thuật toán cắt tia vector xác định hướng di chuyển và đóng gói hệ thống Web.

Implementation và kết quả

Development Process & Core Algorithms

1. Định nghĩa không gian phân loại 9 Classes

Dữ liệu giao thông được chuẩn hóa thành 9 lớp bao gồm:

  1. car: Ô tô con dưới 13 chỗ, xe gia đình 4-7 chỗ.
  2. taxi: Ô tô con có logo, tem dán thương hiệu hoặc mào taxi trên nóc.
  3. LGV (Light Goods Vehicle): Xe tải nhỏ 2 trục, xe bán tải (pickup), xe van chở hàng.
  4. HGV (Heavy Goods Vehicle): Xe tải hạng nặng 2 trục lớn (>3.5 tấn) hoặc xe tải 3-4 trục.
  5. VHGV (Very Heavy Goods Vehicle): Xe đầu kéo container, xe tải $\ge 5$ trục, xe cẩu lớn.
  6. coach: Xe khách liên tỉnh từ 13 đến 30 chỗ.
  7. bus: Xe buýt công cộng nội đô.
  8. motorcycle: Xe mô tô, xe gắn máy 2 bánh.
  9. bicycle: Xe đạp thể thao, xe đạp truyền thống.

2. Thuật toán phát hiện đối tượng YOLOv8

YOLOv8 loại bỏ cơ chế Anchor Box truyền thống, chuyển sang kiến trúc Anchor-Free kết hợp module trích xuất đặc trưng C2f (Cross-Stage Partial bottleneck with 2 convolutions) và cấu trúc SPPF (Spatial Pyramid Pooling - Fast). Hàm mất mát tổng hợp bao gồm Task-Aligned Assigner, Complete IoU ($CIoU$) Loss và Distribution Focal Loss ($DFL$):

$$\mathcal{L}{total} = \lambda{box}\mathcal{L}{CIoU} + \lambda{cls}\mathcal{L}{BCE} + \lambda{dfl}\mathcal{L}_{DFL}$$

3. Thuật toán theo dõi ByteTrack & Đếm theo vạch ranh giới (Line Crossing)

Khác với DeepSORT sử dụng mạng ReID tốn kém tài nguyên tính toán, ByteTrack duy trì theo dõi hiệu quả bằng cách tận dụng cả các bounding box có điểm tin cậy thấp (Low-score detections) thay vì loại bỏ chúng, giúp hạn chế đứt gãy ID khi phương tiện bị che khuất một phần:

import numpy as np
import cv2

class DirectionalCounter:
    """
    Thuat toan xac dinh huong di chuyen va dem phuong tien qua vach ao (Virtual Line)
    su dung phep tinh tich co huong (Cross Product).
    """
    def __init__(self, line_pt1, line_pt2):
        self.pt1 = np.array(line_pt1, dtype=float)
        self.pt2 = np.array(line_pt2, dtype=float)
        self.counted_ids = set()
        self.counts = {"IN": 0, "OUT": 0}

    def _cross_product(self, p, a, b):
        return (b[0] - a[0]) * (p[1] - a[1]) - (b[1] - a[1]) * (p[0] - a[0])

    def update(self, track_id, prev_pos, curr_pos, class_name):
        if track_id in self.counted_ids:
            return None
        
        # Tinh toan vi tri tuong quan cua diem truoc va sau qua vector duong thang
        cp_prev = self._cross_product(prev_pos, self.pt1, self.pt2)
        cp_curr = self._cross_product(curr_pos, self.pt1, self.pt2)

        # Neu tich co dau doi lap, vat the da cat ngang qua vach
        if cp_prev * cp_curr < 0:
            direction = "IN" if cp_curr > 0 else "OUT"
            self.counts[direction] += 1
            self.counted_ids.add(track_id)
            return {"id": track_id, "class": class_name, "direction": direction}
        return None

Testing và validation

Quá trình huấn luyện thực nghiệm được tiến hành trên môi trường GPU, so sánh giữa các phiên bản kiến trúc YOLOv8:

Mô hình Kích thước tham số (Params) FLOPs mAP@0.5 (%) mAP@0.5:0.95 (%) Tốc độ suy luận (Inference Speed - GPU)
YOLOv8n 3.2M 8.7G 71.4% 48.2% 112 FPS
YOLOv8s 11.2M 28.6G 78.6% 55.1% 85 FPS
YOLOv8m 25.9M 78.9G 83.1% 61.4% 52 FPS
YOLOv8x (120 epochs) 68.2M 257.8G 86.8% 65.3% 34 FPS
YOLOv8x (150 epochs - Fine-tuned) 68.2M 257.8G 89.7% 68.9% 32 FPS
+-------------------------------------------------------------------------+
|                  BIỂU ĐỒ HỘI TỤ HUẤN LUYỆN (YOLOv8x)                   |
+-------------------------------------------------------------------------+
| Epoch   0 | Loss: 3.42 | mAP@0.5: 22.1%  [==>-----------------------]   |
| Epoch  50 | Loss: 1.15 | mAP@0.5: 68.4%  [============>-------------]   |
| Epoch 100 | Loss: 0.62 | mAP@0.5: 84.5%  [====================>-----]   |
| Epoch 150 | Loss: 0.38 | mAP@0.5: 89.7%  [=======================>--]   |
+-------------------------------------------------------------------------+

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

Hệ thống được kiểm thử thực tế trên 2 bộ kịch bản thực nghiệm video đường phố Việt Nam (bao gồm ngã tư và đường trục chính nhiều làn):

Kịch bản kiểm thử Phương thức Xe máy Xe con Taxi Xe tải (LGV/HGV) Xe khách/Bus Tổng đếm Độ chính xác
Sense Box_C70 (5 Classes) Đếm thủ công 142 58 21 14 8 243 --
Hệ thống AI 134 56 20 13 8 231 95.06%
Sense VN Mixed (9 Classes) Đếm thủ công 312 84 36 29 19 480 --
Hệ thống AI 278 81 33 27 18 437 91.04%

Độ chính xác tổng hợp đạt >90% trong điều kiện mật độ giao thông hỗn hợp đông đúc đặc thù tại Việt Nam, giảm thiểu sai số ID Switch xuống dưới 4.2% nhờ cơ chế liên kết nhị phân của ByteTrack.


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

  • Xây dựng bộ dữ liệu phân loại sâu 9 lớp: Phá vỡ giới hạn của tập COCO chuẩn (vốn chỉ phân biệt chung chung car, bus, truck), giải pháp tách biệt rõ nét giữa Taxi, Car, LGV, HGV, VHGV, CoachBus dựa trên nhận diện đặc trưng mào xe, kết cấu trục và tem thương hiệu.
  • Tối ưu hóa Tracking cho giao thông hỗn hợp: Kết hợp thuật toán ByteTrack với mô hình phát hiện YOLOv8x giúp xử lý triệt để tình trạng dòng xe máy đi sát nhau gây che khuất lẫn nhau (Occlusion).
  • Cải thiện hiệu năng xử lý: Giảm 40% chi phí tính toán tracking so với DeepSORT do loại bỏ mô hình Feature Extractor phụ, đảm bảo tốc độ phản hồi Real-time trên luồng video Full HD (1080p).

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

Kịch bản ứng dụng thực tế

  1. Hệ thống điều khiển đèn giao thông thích ứng (Adaptive Traffic Control): Cung cấp tham số mật độ phương tiện thời gian thực để tự động tăng giảm thời lượng đèn xanh tại các giao lộ có lưu lượng xe cao.
  2. Thu thập dữ liệu quy hoạch giao thông: Thay thế đội ngũ đếm xe truyền thống, tự động kết xuất dữ liệu báo cáo lưu lượng phương tiện theo từng khung giờ cao điểm và thấp điểm phục vụ xây dựng cầu đường.
  3. Giám sát làn đường và tải trọng: Đếm và thống kê số lượng phương tiện tải nặng (HGV, VHGV) đi vào khung giờ cấm hoặc tuyến đường hạn chế tải trọng.

Yêu cầu phần cứng và triển khai:

  • Cấu hình đề xuất (Server/Edge AI): GPU NVIDIA RTX 3060 12GB hoặc NVIDIA Jetson AGX Orin, CPU Intel Core i7 12th Gen/AMD Ryzen 7, RAM 32GB DDR4/DDR5.
  • Tối ưu hóa môi trường Production: Export mô hình PyTorch sang định dạng TensorRT hoặc OpenVINO engine để tăng gấp 2.5 lần throughput xử lý FPS.

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

Hạn chế hiện tại

  • Điều kiện thời tiết cực đoan: Độ chính xác giảm khoảng 8-12% khi ghi hình vào ban đêm thiếu sáng hoặc mưa lớn làm nhòe ống kính camera.
  • Mật độ che khuất dày đặc: Ở các ngã tư giờ cao điểm có hàng trăm xe máy dừng sát nhau, bounding box bị chồng lấn lớn gây sót đối tượng nhỏ.

Hướng phát triển

  • Tối ưu hóa mô hình với Edge Computing: Ứng dụng kỹ thuật lượng tử hóa INT8 (Quantization) và tỉa bớt trọng số (Pruning) để triển khai trực tiếp trên các thiết bị nhúng giá rẻ tại trụ đèn tín hiệu.
  • Tích hợp ALPR & Phát hiện vi phạm: Mở rộng nhận diện biển số xe và phát hiện tự động các hành vi vượt đèn đỏ, đi sai làn đường quy định.

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

  • Cơ quan quản lý và Quy hoạch đô thị: Giảm 85% chi phí nhân công khảo sát giao thông định kỳ; nhận dữ liệu lưu lượng chính xác 24/7 phục vụ phân luồng.
  • Kỹ sư AI và Lập trình viên: Cung cấp mã nguồn tham khảo chuẩn mực về tích hợp YOLOv8, ByteTrack và xây dựng hệ thống Flask API đa luồng.
  • Sinh viên & Nhà nghiên cứu: Nguồn tài liệu học tập toàn diện về xử lý ảnh, kỹ thuật gán nhãn dữ liệu chuẩn hóa và quy trình fine-tuning mô hình Deep Learning trong thực tế.

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

1. Hệ thống yêu cầu cấu hình phần cứng tối thiểu như thế nào để triển khai?

Để xử lý 01 luồng camera Full HD thời gian thực (Real-time 25-30 FPS), hệ thống cần tối thiểu GPU NVIDIA GTX 1660 Ti (6GB VRAM) hoặc thiết bị nhúng NVIDIA Jetson Xavier NX. Đối với môi trường chỉ có CPU, có thể chuyển sang sử dụng mô hình tối ưu YOLOv8n chạy qua OpenVINO với độ phân giải đầu vào $416 \times 416$.

2. Làm thế nào để hệ thống không đếm lặp 1 xe khi bị che khuất rồi xuất hiện lại?

ByteTrack duy trì trạng thái theo dõi của đối tượng qua bộ lọc Kalman Filter trong một số lượng frame nhất định (ví dụ max_time_lost = 30 frames). Khi đối tượng xuất hiện lại trong khoảng thời gian này, thuật toán sẽ liên kết lại đúng ID cũ thay vì cấp phát ID mới, kết hợp với tập trạng thái counted_ids để đảm bảo mỗi ID chỉ được tính 1 lần qua vạch đếm.

3. Hệ thống có thể tích hợp với hạ tầng camera giám sát (CCTV) có sẵn không?

Hoàn toàn có thể. Ứng dụng hỗ trợ tiếp nhận luồng video qua giao thức chuẩn RTSP (Real-Time Streaming Protocol) hoặc HTTP Stream từ bất kỳ IP Camera nào có sẵn trên thị trường mà không cần thay đổi phần cứng camera.

4. Giải pháp xuất dữ liệu thống kê ra sao?

Dữ liệu lưu lượng theo từng phân lớp xe và hướng di chuyển được tự động ghi nhận theo thời gian thực vào cơ sở dữ liệu và cho phép kết xuất trực tiếp ra định dạng file Excel (.xlsx) hoặc CSV qua giao diện Web chỉ với một click.

5. Chi phí đầu tư và thời gian hoàn vốn (ROI) ước tính?

So với chi phí thuê nhân công đếm thủ công định kỳ (khoảng 15-20 triệu VNĐ/đợt khảo sát tại một nút giao), việc triển khai một trạm Edge AI (chi phí thiết bị khoảng 20-30 triệu VNĐ) giúp hoàn vốn chỉ sau 2-3 đợt khảo sát và vận hành liên tục trong nhiều năm.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng trí tuệ nhân tạo nhận diện và đếm phương tiện giao thông" của sinh viên Phạm Ngọc Việt đã chứng minh tính hiệu quả vượt trội của việc kết hợp mô hình thị giác máy tính hiện đại YOLOv8x và thuật toán tracking ByteTrack. Với việc phân loại chi tiết 9 lớp phương tiện và đạt độ chính xác thực tế trên 90%, công trình không chỉ đáp ứng xuất sắc yêu cầu học thuật mà còn mang giá trị ứng dụng cao trong việc xây dựng các hệ thống giao thông thông minh (ITS) và chuyển đổi số hạ tầng đô thị tương lai.