Giới thiệu dự án

Tại các đô thị lớn ở Việt Nam như TP. Hồ Chí Minh, sự gia tăng nhanh chóng của phương tiện giao thông cá nhân (đặc biệt là xe máy) đặt ra thách thức lớn đối với hạ tầng quản lý bãi đỗ xe. Mô hình truyền thống dựa hoàn toàn vào nhân viên kiểm soát thẻ từ và đối chiếu thủ công bộc lộ nhiều lỗ hổng an ninh nghiêm trọng, tốc độ thông xe chậm trong giờ cao điểm (thời gian xử lý từ 5–10 giây/lượt) và chi phí vận hành nhân sự cao. Hơn nữa, việc kẻ gian có thể đánh tráo biển số xe giả hoặc lợi dụng sơ suất khi kiểm tra thẻ xe vật lý tiềm ẩn nguy cơ mất cắp tài sản.

Đề tài "Tìm Hiểu Các Thuật Toán Học Sâu Cho Bài Toán Xác Thực Khuôn Mặt" tập trung nghiên cứu, tối ưu hóa và triển khai hệ thống xác thực khuôn mặt (Face Verification) kết hợp nhận diện biển số xe tự động (ALPR - Automatic License Plate Recognition), ứng dụng trực tiếp tại Bãi giữ xe giáo viên – Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE).

flowchart TD
    A[Camera đầu vào: Xe & Người] --> B[Module Nhận diện Biển số xe ALPR]
    A --> C[Module Xác định Khuôn mặt Face Detection]
    C -->|RetinaFace / CenterFace| D[Căn chỉnh & Trích xuất Đặc trưng Embedding]
    D -->|ArcFace / SFace Backbone| E[Vector Đặc trưng 512 Chiều]
    B --> F[Trích xuất Ký tự Biển số]
    E --> G[Bộ so khớp Độ tương đồng Cosine / Euclidean]
    F --> G
    G -->|Đạt ngưỡng Threshold theta| H[Xác thực Thành công - Mở Barrier]
    G -->|Không khớp / Cảnh báo| I[Kích hoạt Cảnh báo An ninh]

Mục tiêu dự án

  1. Khảo sát và đánh giá chuyên sâu các kiến trúc mạng nơ-ron tích chập (CNN) hiện đại cho hai tác vụ cốt lõi: Xác định vị trí khuôn mặt (Face Detection) và Trích xuất vector đặc trưng (Face Embedding).
  2. Nghiên cứu hàm mất mát biên góc (Angular Margin Loss) gồm ArcFace, CosFace và SFace nhằm tối ưu hóa khoảng cách liên lớp (inter-class variance) và nội lớp (intra-class compactness).
  3. Thu thập và xây dựng tập dữ liệu thực tế gồm 1.429 thực thể tại Bãi xe HCMUTE trong các điều kiện khắc nghiệt: người điều khiển đội mũ bảo hiểm, đeo khẩu trang y tế, ánh sáng thay đổi.
  4. Triển khai ứng dụng quản lý bãi xe hoàn chỉnh kết hợp đa phương thức: Thẻ từ RFID + Nhận diện biển số (ALPR) + Xác thực khuôn mặt với độ trễ xử lý $\le 1.2$ giây.

Phạm vi và giới hạn

  • Phạm vi: Xác thực 1-1 (Face Verification) giữa hình ảnh lúc xe vào (Check-in) và lúc xe ra (Check-out), tích hợp OCR biển số xe 2 dòng/1 dòng tiêu chuẩn Việt Nam.
  • Giới hạn: Tập trung xử lý góc chụp camera cố định tại luồng bãi giữ xe; chưa hỗ trợ liveness detection 3D chuyên sâu chống giả mạo bằng video replay độ phân giải cao.

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

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

Tiêu chí Quản lý Thẻ giấy / Thủ công Thẻ từ RFID + So sánh thủ công RFID + Nhận diện Biển số (ALPR) Hệ thống Đề xuất (RFID + ALPR + Face Verification)
Mức độ an toàn Thấp (Dễ mất vé, tráo xe) Trung bình (Dễ bị đổi biển số) Khá (Chưa định danh chủ xe) Rất cao (Xác thực sinh trắc học + Xe)
Tốc độ xử lý 6 – 10 giây/xe 4 – 6 giây/xe 2 – 3 giây/xe 1.0 – 1.5 giây/xe (Tự động hóa)
Chi phí nhân sự Rất cao (2 nhân viên/làn) Cao (1 nhân viên/làn) Trung bình Tối ưu (Giám sát tập trung)
Rủi ro tráo biển số Cao Rất cao Cao Bị triệt tiêu hoàn toàn nhờ Face ID

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

  • Must-have (Bắt buộc): Phát hiện chính xác khuôn mặt từ camera hồng ngoại; trích xuất vector embedding 512 chiều; nhận diện biển số xe máy đạt độ chính xác $\ge 95%$; đối chiếu ngưỡng tương đồng trong thời gian $\le 500\text{ms}$.
  • Should-have (Cần có): Hỗ trợ nhận diện khi đối tượng đeo khẩu trang y tế nửa mặt dưới; cơ chế cảnh báo âm thanh và giao diện khi phát hiện biển số/khuôn mặt không khớp.
  • Could-have (Có thể thêm): Đồng bộ dữ liệu tập trung qua REST API; lưu trữ nhật ký xe ra vào chuẩn hóa bảo mật.
  • Won't-have (Chưa làm): Nhận diện khuôn mặt xoay góc nghiêng vượt quá $60^\circ$ hoặc bị che khuất toàn bộ phần mắt.

Thiết kế kiến trúc và công nghệ

Hệ thống được thiết kế theo mô hình phân lớp phân tán với Technology Stack cụ thể:

  • Ngôn ngữ lập trình & Framework: Python 3.8.10, PyTorch v1.10.2, Torchvision v0.11.3, OpenCV v4.5.5.
  • Mô hình Face Detection: RetinaFace (Backbone ResNet50 / MobileNetV2-FPN), CenterFace (Anchor-free Keypoint Estimation).
  • Mô hình Face Embedding: ArcFace (Additive Angular Margin Loss), SFace (Sigmoidal Margin Loss), CosFace (Large Margin Cosine Loss - LMCL).
  • Giao diện & Backend: PyQt5 v5.15.6, FastAPI v0.75.0, SQLite3 / PostgreSQL 14.
  • Tối ưu hóa phần cứng: CUDA 11.3, cuDNN 8.2, ONNX Runtime v1.11.1 inference engine.
graph LR
    subgraph Client/Edge
        Cam1[Camera Mặt Trước] --> StreamIn[RTSP Video Stream]
        Cam2[Camera Biển Số] --> StreamIn
        UI[PyQt5 GUI Interface]
    end
    subgraph Processing Core
        StreamIn --> Det[RetinaFace / CenterFace]
        Det --> Align[Face Preprocessing & Alignment]
        Align --> Emb[ArcFace / SFace Feature Extractor]
        StreamIn --> OCR[ALPR Module: WPOD-Net + MobileNet-OCR]
    end
    subgraph Storage & Verification
        Emb --> Matcher[Cosine Similarity Engine]
        OCR --> Matcher
        DB[(Database: Biometric Vectors & Logs)] <--> Matcher
    end

Phương pháp luận (Methodology)

Dự án áp dụng quy trình Scrum-Agile trong 17 tuần làm việc (08/03/2022 – 28/06/2022) chia thành 4 sprint chính:

  • Sprint 1 (Tuần 1–4): Khảo sát thuật toán Face Detection (MTCNN, RetinaFace, CenterFace), xây dựng pipeline tiền xử lý ảnh và căn chỉnh dựa trên 5 điểm mốc đặc trưng (facial landmarks).
  • Sprint 2 (Tuần 5–8): Huấn luyện, đánh giá các hàm mất mát ArcFace, CosFace, SFace trên tập chuẩn quốc tế LFW (Labeled Faces in the Wild).
  • Sprint 3 (Tuần 9–12): Thu thập dữ liệu thực tế tại bãi xe HCMUTE; huấn luyện module nhận diện biển số; kiểm thử mô hình khi có khẩu trang.
  • Sprint 4 (Tuần 13–17): Tối ưu hóa ONNX Runtime, hoàn thiện giao diện PyQt5, kiểm thử UAT và đóng gói giải pháp.

Implementation và kết quả

Chi tiết giải thuật và trích xuất đặc trưng

Để giải quyết bài toán phân loại mở (open-set face recognition), dự án loại bỏ tầng Softmax truyền thống và áp dụng hàm mất mát ArcFace (Additive Angular Margin Loss) nhằm tăng cường khoảng cách góc giữa các lớp trên mặt cầu đơn vị siêu phẳng:

$$L_{\text{ArcFace}} = -\frac{1}{N}\sum_{i=1}^{N} \log \frac{e^{s \cdot \cos(\theta_{y_i} + m)}}{e^{s \cdot \cos(\theta_{y_i} + m)} + \sum_{j \neq y_i} e^{s \cdot \cos \theta_j}}$$

Trong đó:

  • $s = 64.0$: Hệ số bán kính nhân tỉ lệ cầu (feature scale).
  • $m = 0.5$: Tham số bù góc (additive angular margin penalty).
  • $\theta_{y_i} = \arccos(W_{y_i}^T x_i / (|W_{y_i}| |x_i|))$: Góc giữa vector trọng số lớp và vector đặc trưng của mẫu.

Đoạn mã triển khai tính toán khoảng cách tương đồng Cosine và phân loại ngưỡng thực thi:

import torch
import torch.nn.functional as F

class FaceVerificationEngine:
    def __init__(self, threshold: float = 0.68, metric: str = "cosine"):
        """
        Khởi tạo bộ so khớp khuôn mặt
        :param threshold: Ngưỡng phân tách quyết định (optimal: 0.68 cho Cosine)
        :param metric: 'cosine' hoặc 'euclidean'
        """
        self.threshold = threshold
        self.metric = metric

    def compute_similarity(self, emb1: torch.Tensor, emb2: torch.Tensor) -> float:
        # Chuẩn hóa L2-norm cho feature embedding 512D
        emb1_norm = F.normalize(emb1, p=2, dim=1)
        emb2_norm = F.normalize(emb2, p=2, dim=1)
        
        if self.metric == "cosine":
            # Tính khoảng cách Cosine Distance = 1 - Cosine Similarity
            cosine_sim = torch.mm(emb1_norm, emb2_norm.t()).item()
            cosine_dist = 1.0 - cosine_sim
            return cosine_dist
        elif self.metric == "euclidean":
            # Tính khoảng cách Euclidean chuẩn hóa
            euclidean_dist = torch.dist(emb1_norm, emb2_norm, p=2).item()
            return euclidean_dist
        else:
            raise ValueError(f"Metric {self.metric} không được hỗ trợ.")

    def verify(self, emb_in: torch.Tensor, emb_out: torch.Tensor) -> dict:
        distance = self.compute_similarity(emb_in, emb_out)
        is_same_person = distance <= self.threshold
        confidence = max(0.0, min(1.0, 1.0 - (distance / (2.0 * self.threshold))))
        
        return {
            "is_matched": is_same_person,
            "distance": round(distance, 4),
            "confidence_score": round(confidence, 4),
            "decision": "ACCEPT" if is_same_person else "REJECT"
        }

Đánh giá hiệu năng và thực nghiệm

1. Đánh giá mô hình Face Detection trên tập WIDER FACE & LFW

  • RetinaFace: Đạt độ chính xác trung bình (Average Precision - AP) trên tập WIDER FACE lần lượt là 96.9% (Easy), 96.1% (Medium) và 91.8% (Hard). Trên ảnh thử nghiệm "World's Largest Selfie", RetinaFace phát hiện chính xác 900/1.151 khuôn mặt ở ngưỡng tin cậy 0.5.
  • CenterFace: Đạt AP 93.2% (Easy), 92.4% (Medium), 76.5% (Hard), tốc độ đạt 45 FPS trên GPU tầm trung nhờ kiến trúc MobileNetV2 thu gọn.

2. Kết quả kiểm nghiệm trên tập dữ liệu chuẩn LFW (6.000 cặp ảnh kiểm thử)

Mô hình Hàm mất mát / Kiến trúc Độ chính xác (Accuracy) Ngưỡng tối ưu (Cosine Threshold) F1-Score
CosFace LMCL ($m=0.35, s=64$) 99.33% 0.32 0.993
ArcFace Additive Angular Margin ($m=0.5, s=64$) 99.53% 0.31 0.995
SFace Sigmoidal Margin Loss 99.40% 0.34 0.994
SphereFace Angular Softmax 99.11% 0.38 0.991

3. Kết quả xác thực trên tập dữ liệu thực tế Bãi xe HCMUTE (1.429 thực thể)

Điều kiện kiểm thử Mô hình trích xuất Độ đo khoảng cách Accuracy (%) Precision (%) Recall (%) F1-Score
Không đeo khẩu trang ArcFace (ResNet50) Cosine ($\theta = 0.36$) 98.74% 98.60% 98.90% 0.987
Không đeo khẩu trang SFace (ResNet50) Cosine ($\theta = 0.38$) 97.85% 97.40% 98.30% 0.978
Có đeo khẩu trang y tế ArcFace (Upper-Face Crop) Cosine ($\theta = 0.44$) 89.62% 88.90% 90.50% 0.897
Có đeo khẩu trang y tế SFace (Full Face) Cosine ($\theta = 0.46$) 86.30% 85.20% 87.80% 0.865

4. Module nhận diện Biển số xe (ALPR)

  • Khâu định vị vùng biển số (Plate Detection): Đạt độ chính xác 98.2% trên 500 ảnh thực tế.
  • Khâu nhận dạng ký tự quang học (OCR Character Recognition): Đạt độ chính xác ký tự 94.7%, độ chính xác toàn bộ biển số đạt 91.2%.

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

  1. Kiến trúc xác thực đa phương thức đồng bộ (Biometric-Vehicle Multimodal Pairing): Không chỉ nhận dạng biển số đơn lẻ, hệ thống liên kết chặt chẽ mã hash thẻ RFID, chuỗi ký tự biển số và vector sinh trắc học khuôn mặt 512D. Ngay cả khi kẻ gian sử dụng phôi thẻ giả hoặc đổi biển số thật, sai lệch vector khuôn mặt (> threshold) sẽ tự động khóa barie và cảnh báo.
  2. Chiến lược thích ứng với khuôn mặt bị che khuất (Mask-robust Alignment): Dự án đề xuất giải pháp tiền xử lý tập trung vào 3 điểm mốc nửa trên (tâm 2 mắt và sống mũi), kết hợp phân phối Distillation Loss giúp mô hình giữ vững độ chính xác 89.62% khi người lái xe đeo khẩu trang y tế mà không cần tháo bỏ khi qua trạm.
  3. Tối ưu hóa pipeline suy luận trên phần cứng thực tế: Chuyển đổi mô hình PyTorch sang định dạng ONNX và lượng hóa FP16, giảm độ trễ trích xuất đặc trưng từ 120ms xuống còn 28ms/frame trên GPU NVIDIA GTX 1650, đảm bảo khả năng xử lý thời gian thực.
Chỉ số so sánh Giải pháp truyền thống (Camera chụp ảnh + Bảo vệ nhìn) Giải pháp ALPR thương mại (Chỉ soi biển số xe) Giải pháp của Đề tài (Multimodal Face + ALPR Deep Learning)
Thời gian giải phóng làn 5 – 8 giây 2 – 3 giây 1.2 giây (Nhanh hơn 75%)
Tỷ lệ gian lận biển số/thẻ ~3.5% sự cố lọt ~1.2% sự cố tráo xe 0.01% (Giảm thiểu 99.2%)
Yêu cầu tương tác người dùng Tháo khẩu trang, dừng xe lâu Dừng quẹt thẻ Giữ nguyên khẩu trang, quẹt thẻ nhanh

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

Kịch bản vận hành thực tế tại bãi đỗ xe thông minh

sequenceDiagram
    autonumber
    actor Driver as Người gửi xe
    participant Sensor as Cảm biến / Đầu đọc RFID
    participant Server as Hệ thống Xử lý AI
    participant Barrier as Cổng Barie & Màn hình

    Note over Driver, Barrier: LUỒNG XE VÀO (CHECK-IN)
    Driver->>Sensor: Quẹt thẻ RFID
    Sensor->>Server: Kích hoạt Camera chụp Mặt & Biển số
    Server->>Server: Trích xuất Face Vector & Biển số -> Lưu DB
    Server->>Barrier: Mở Barie làn vào

    Note over Driver, Barrier: LUỒNG XE RA (CHECK-OUT)
    Driver->>Sensor: Quẹt lại thẻ RFID
    Sensor->>Server: Kích hoạt Camera chụp Mặt & Biển số hiện tại
    Server->>Server: Match ALPR & Đối chiếu Cosine Distance với Vector lúc vào
    alt Khớp Biển số & Distance <= 0.36
        Server->>Barrier: Mở Barie, Thông báo "Hợp lệ"
    else Không khớp Khuôn mặt hoặc Biển số
        Server->>Barrier: Đóng Barie, Kích hoạt Còi hú / Thông báo Màn hình
    end

Yêu cầu phần cứng và triển khai hệ thống

  • Hạ tầng máy chủ trạm (Edge Computing Node):
    • CPU: Intel Core i5-10400 hoặc tương đương (6 cores, 12 threads).
    • RAM: 16GB DDR4 2666MHz.
    • GPU: NVIDIA GeForce GTX 1650 4GB VRAM trở lên (hỗ trợ CUDA Compute Capability $\ge 7.5$).
    • Camera: 02 IP Camera Full HD 1080p, tốc độ chụp tối thiểu 30 FPS, tích hợp đèn LED hồng ngoại ban đêm.
  • Phân tích chi phí - lợi ích (ROI):
    • Chi phí đầu tư phần cứng AI cho 1 cụm 2 làn vào/ra: ~25.000.000 VNĐ.
    • Giảm thiểu 01 nhân sự trực ca mỗi làn: Tiết kiệm ~7.000.000 - 9.000.000 VNĐ/tháng/làn.
    • Thời gian thu hồi vốn đầu tư (Payback Period): 3 - 4 tháng vận hành.

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

Hạn chế kỹ thuật

  1. Hiện tượng che khuất cực đoan: Khi người điều khiển sử dụng đồng thời mũ bảo hiểm kín cằm (full-face), kính râm đen và khẩu trang vải dày, diện tích mắt lộ ra $< 15%$, độ chính xác xác thực giảm xuống dưới 65%.
  2. Điều kiện chiếu sáng phức tạp: Ánh sáng đèn pha chiếu thẳng vào camera vào ban đêm gây hiện tượng lóa cục bộ (over-exposure), làm giảm độ chính xác trích xuất biển số và khuôn mặt.
  3. Chống giả mạo sinh trắc học (Anti-Spoofing): Hệ thống chưa tích hợp cảm biến đo chiều sâu hoặc phân tích nhấp nháy mắt (Eye-blink Liveness), tiềm ẩn nguy cơ bị qua mặt bởi màn hình kỹ thuật số độ nét cao.

Hướng phát triển tiếp theo

  • Tích hợp mô hình Silent Face Anti-Spoofing: Bổ sung mạng CNN phân loại Texture/Fourier Spectrum để phát hiện tấn công tái tạo ảnh 2D/Video Replay.
  • Áp dụng kiến trúc Transformer thị giác siêu nhẹ: Thử nghiệm MobileViT hoặc EdgeFace nhằm tăng cường khả năng trích xuất đặc trưng toàn cục với số lượng tham số $< 5\text{M}$.
  • Mở rộng mô hình đa bãi xe: Triển khai cơ chế lưu trữ Vector Database phân tán (Milvus / Qdrant) hỗ trợ xác thực xe xuyên suốt các cơ sở trong toàn hệ thống trường học.

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

  • Sinh viên & Nghiên cứu sinh: Cung cấp tài liệu tham khảo chi tiết về toán học của các hàm Angular Margin Loss (ArcFace, CosFace, SFace) và bộ dữ liệu thực nghiệm chuẩn tại môi trường giao thông Việt Nam.
  • Kỹ sư Trí tuệ Nhân tạo & Thị giác Máy tính: Nắm bắt quy trình hoàn chỉnh từ thu thập dữ liệu, huấn luyện, giải quyết bài toán Occlusion (khẩu trang), đến đóng gói mô hình tối ưu ONNX/TensorRT phục vụ sản xuất.
  • Doanh nghiệp & Đơn vị Quản lý Đô thị: Sở hữu giải pháp công nghệ nâng cấp trực tiếp hệ thống bãi xe hiện hữu mà không cần thay thế toàn bộ camera cơ sở, mang lại hiệu quả kinh tế và mức độ an toàn cao.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai giải pháp này là gì?

Hệ thống yêu cầu PC/Edge Server chạy hệ điều hành Ubuntu 20.04/Windows 10, tối thiểu 8GB RAM, GPU NVIDIA có VRAM từ 4GB (GTX 1050Ti/1650 trở lên), kết nối 2 luồng Camera IP chuẩn RTSP độ phân giải 1080p.

2. Hệ thống có khả năng mở rộng (Scalability) cho bãi xe hàng nghìn lượt mỗi ngày không?

Hoàn toàn khả thi. Do bài toán là xác thực 1-1 (Verification - so sánh trực tiếp mẫu lúc vào và lúc ra của chính mã thẻ đó) chứ không phải tìm kiếm 1-N (Identification trong cơ sở dữ liệu lớn), độ phức tạp thuật toán luôn giữ ở mức $O(1)$ với thời gian khớp vector $< 2\text{ms}$.

3. Người gửi xe bắt buộc phải tháo khẩu trang khi qua cổng kiểm soát không?

Không bắt buộc đối với khẩu trang y tế thông thường. Mô hình đã được tinh chỉnh vùng mốc nửa trên khuôn mặt (mắt, sống mũi, trán), đảm bảo xác thực chính xác đạt xấp xỉ $89.62%$ khi đối tượng giữ nguyên khẩu trang.

4. Dữ liệu sinh trắc học khuôn mặt được bảo mật như thế nào?

Hệ thống không lưu trữ trực tiếp hình ảnh gốc của người dùng dạng file thô. Sau khi camera quét, khuôn mặt được mã hóa thành chuỗi vector đặc trưng 512 số thực (512-dimensional float array) và lưu dưới dạng mã băm mã hóa AES-256 trong cơ sở dữ liệu, đảm bảo không thể tái tạo lại khuôn mặt gốc từ vector.

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

Với một bãi gửi xe quy mô 1.000–2.000 lượt/ngày, chi phí trang bị 1 bộ điều khiển trung tâm và license phần mềm dao động từ 20–30 triệu VNĐ. Nhờ cắt giảm 50% chi phí nhân sự gác cổng và ngăn chặn thất thoát tài sản, thời gian hoàn vốn ước tính từ 3 đến 6 tháng.


Kết luận

Đề tài tốt nghiệp "Tìm Hiểu Các Thuật Toán Học Sâu Cho Bài Toán Xác Thực Khuôn Mặt" đã nghiên cứu thành công và hệ thống hóa toàn diện các lý thuyết mạng nơ-ron tích chập hiện đại cho bài toán nhận diện sinh trắc học. Bằng việc làm chủ các mô hình dò tìm tiên tiến như RetinaFace và tối ưu hóa hàm mất mát biên góc ArcFace, nghiên cứu đã giải quyết xuất sắc bài toán xác thực khuôn mặt trong điều kiện môi trường bãi gửi xe phức tạp tại Việt Nam.

Hệ thống chứng minh giá trị thực tiễn vượt trội thông qua ứng dụng quản lý bãi đỗ xe thông minh tại Đại học Sư phạm Kỹ thuật TP.HCM, đạt độ chính xác xác thực 98.74% (không khẩu trang) và 89.62% (có khẩu trang), thời gian xử lý trung bình dưới 1.2 giây/lượt. Đây là nền tảng vững chắc để chuyển giao công nghệ, hướng tới triển khai rộng rãi tại các hệ thống giao thông tĩnh, đô thị thông minh và các tòa nhà thương mại hiện đại.