Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và công nghiệp 4.0, các hệ thống kiểm soát định danh truyền thống (như thẻ từ RFID, mật mã số PIN hoặc vân tay tiếp xúc) bộc lộ nhiều điểm hạn chế nghiêm trọng về thời gian xác thực, nguy cơ gian lận và tính vệ sinh dịch tễ. Theo các báo cáo thống kê ngành thị giác máy tính và an ninh sinh trắc học, nhu cầu về hệ thống định danh không tiếp xúc (contactless biometrics) đạt mức tăng trưởng hàng năm kép (CAGR) trên 16.5%. Tuy nhiên, các giải pháp nhận diện khuôn mặt truyền thống đòi hỏi phần cứng trung tâm đắt đỏ, tiêu tốn băng thông đường truyền và có độ trễ lớn khi truyền dữ liệu video thô về máy chủ.

Vấn đề cốt lõi đặt ra là: Làm thế nào để xây dựng một hệ thống nhận diện khuôn mặt thời gian thực (Real-time Face Recognition) có độ chính xác cao, trọng lượng nhẹ để vận hành được trên các thiết bị tính toán biên (Edge Computing) như Kit nhúng Jetson Nano, đồng thời tích hợp đồng bộ với hệ thống Internet of Things (IoT) và lưu trữ dữ liệu tập trung trên nền tảng đám mây (Cloud Platform).

Đồ án "Nhận diện khuôn mặt Real-time với mô hình FaceNet và ứng dụng IoT Platform" được thực hiện tại Khoa Kỹ thuật Máy tính - Trường Đại học Công nghệ Thông tin (ĐHQG-HCM) nhằm giải quyết trực tiếp bài toán này với các mục tiêu cụ thể:

  1. Nghiên cứu và tối ưu hóa quy trình trích xuất đặc trưng khuôn mặt dạng vector 512 chiều (512-D embedding) sử dụng kiến trúc mạng nơ-ron tích chập sâu siêu nhẹ MobileFaceNet kết hợp hàm mất mát ArcFace (Additive Angular Margin Loss).
  2. Xây dựng pipeline phát hiện khuôn mặt tự động đa tầng bằng thư viện MTCNN (Multi-task Cascaded Convolutional Networks) kết hợp bộ phân loại Linear SVM để định danh danh tính và tính toán độ tin cậy (confidence score).
  3. Thiết kế kiến trúc phần cứng nhúng tích hợp Kit Jetson Nano, vi điều khiển ESP32 và các cảm biến môi trường (khí gas, chuyển động PIR, nhiệt độ, độ ẩm).
  4. Thiết lập hệ thống truyền thông dữ liệu hai chiều lên đám mây thông qua giao thức MQTT và Google Firebase Platform, hỗ trợ ứng dụng quản trị Java Desktop.

Phạm vi nghiên cứu tập trung vào việc huấn luyện mô hình trích xuất đặc trưng, tối ưu hóa tốc độ suy luận đạt từ 5 FPS trở lên trên thiết bị biên và trên 25 FPS trên máy tính cá nhân, đảm bảo độ chính xác nhận diện thực tế vượt mức 88%.


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

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

Các phương pháp tiếp cận nhận diện khuôn mặt trong lịch sử đã phát triển từ trích xuất đặc trưng thủ công (Haar-like features, LBP, HOG) sang học sâu (Deep Learning). Tuy nhiên, mỗi giải pháp đều tồn tại những ưu và nhược điểm riêng biệt khi áp dụng vào hệ thống nhúng.

Giải pháp Đặc điểm kỹ thuật Ưu điểm Nhược điểm
Haar Cascades + Eigenfaces/LBPH Trích xuất đặc trưng hình thái học cổ điển qua thuật toán Viola-Jones Tính toán cực nhẹ, không cần GPU, chạy tốt trên CPU yếu Độ chính xác thấp (<75%), nhạy cảm với ánh sáng và góc quay
Standard FaceNet (Inception-ResNet) Mạng DCNN sâu với Triplet Loss, tạo vector đặc trưng 128-D Độ chính xác cao trên tập LFW (99.63%), tổng quát hóa tốt Kích thước mô hình lớn (>100MB), cần >200M ảnh train, quá nặng cho Edge AI
RetinaFace + ResNet-50 Feature Pyramid Network trích xuất đa tác vụ (box, 5 landmarks, 3D mesh) Độ chính xác phát hiện khuôn mặt vượt trội Tốc độ suy luận chậm trên thiết bị nhúng do tải tính toán 3D
MobileFaceNet + ArcFace (Đề xuất) Depthwise Separable Conv, Global Depthwise Conv (GDC), ArcFace loss Siêu nhẹ (~0.99M params), vector 512-D chính xác, tối ưu thời gian thực Cần tối ưu pipeline khi chạy trên CPU nhúng

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must have: Phát hiện khuôn mặt từ luồng camera RTSP/USB; trích xuất vector 512-D; phân loại danh tính qua SVM; đồng bộ dữ liệu thời gian thực lên Firebase; đọc dữ liệu cảm biến ngoại vi qua ESP32.
  • Should have: Tốc độ xử lý $\ge 15$ FPS trên PC và $\ge 5$ FPS trên Jetson Nano; độ chính xác định danh $\ge 88%$; hiển thị bounding box kèm nhãn định danh và độ tin cậy.
  • Could have: Tích hợp cảnh báo vượt ngưỡng khí gas/nhiệt độ về ứng dụng giám sát; giao diện quản lý phân quyền người dùng Java Swing.
  • Won't have (lần này): Tự động xoay camera theo góc di chuyển của đối tượng; nhận diện khuôn mặt khi bị che khuất hoàn toàn (>70%).

Thiết kế hệ thống

Kiến trúc hệ thống được thiết kế theo mô hình phân tầng Edge-to-Cloud tích hợp:

[ Camera Module ] ---> [ Jetson Nano (MTCNN + MobileFaceNet + SVM) ] 
                              | (HTTPS / RESTful API)
[ Sensor Network ] ---> [ NodeMCU ESP32 ] ---> [ MQTT Broker / Firebase ] 
                                                      |
                                            [ Java Desktop Admin App ]
  • Tầng Edge AI Processing:
    • Module thị giác: Camera thu nhận luồng video RGB $\rightarrow$ MTCNN (P-Net, R-Net, O-Net) phát hiện khuôn mặt và chuẩn hóa tọa độ $\rightarrow$ MobileFaceNet trích xuất vector 512 đặc trưng $\rightarrow$ Linear SVM phân loại nhãn và Logistic Regression tính toán độ tin cậy.
    • Module cảm biến: Vi điều khiển ESP32 giao tiếp với các cảm biến ngoại vi (cảm biến khí gas MQ-2, cảm biến chuyển động PIR, cảm biến nhiệt độ - độ ẩm DHT11/22) qua giao tiếp GPIO/ADC.
  • Tầng Cloud Platform & Message Broker:
    • Sử dụng Google Cloud Platform (GCP) với dịch vụ cốt lõi là Firebase Firestore / Realtime Database để lưu trữ nhật ký định danh (Timestamp, UserID, Confidence, Status).
    • Tích hợp giao thức MQTT (Message Queuing Telemetry Transport) với các mức chất lượng dịch vụ (QoS 0, QoS 1, QoS 2), cơ chế Publish/Subscribe qua các Topic phân cấp: building/room1/temperature, building/room1/access_log.
  • Tầng Ứng dụng Người dùng:
    • Ứng dụng Java Desktop tương tác với Cloud Database thông qua Firebase Admin SDK, cung cấp chức năng đăng nhập phân quyền, quản lý hồ sơ nhân viên, trực quan hóa dữ liệu cảm biến và xuất báo cáo điểm danh.

Methodology

Dự án áp dụng mô hình phát triển phần mềm lặp (Iterative Waterfall) kết hợp kiểm thử liên tục (Continuous Integration):

  • Giai đoạn 1 (Tuần 1 - 4): Thu thập tập dữ liệu khuôn mặt, tiền xử lý và xây dựng pipeline trích xuất đặc trưng với PyTorch.
  • Giai đoạn 2 (Tuần 5 - 8): Huấn luyện lại mô hình MobileFaceNet với hàm mất mát ArcFace trên GPU; xây dựng bộ phân loại SVM.
  • Giai đoạn 3 (Tuần 9 - 12): Lập trình firmware cho ESP32, tích hợp truyền nhận giao thức MQTT và cấu hình Cloud Firebase.
  • Giai đoạn 4 (Tuần 13 - 16): Triển khai toàn bộ mô hình lên Kit Jetson Nano, đánh giá hiệu năng, tinh chỉnh độ trễ và hoàn thiện phần mềm Java.

Implementation và kết quả

Development process

Quá trình hiện thực hóa giải pháp tập trung vào 3 thành phần thuật toán nòng cốt:

1. Phát hiện và căn chỉnh khuôn mặt bằng MTCNN

MTCNN bao gồm 3 mạng nơ-ron xếp chồng tuần tự:

  • P-Net (Proposal Network): Mạng tích chập hoàn toàn quét qua kim tự tháp ảnh (Image Pyramid) với kích thước cửa sổ trượt $12 \times 12$ để tạo ra các ứng viên bounding box sơ bộ.
  • R-Net (Refine Network): Loại bỏ phần lớn các bounding box sai lệch thông qua phân loại nhị phân và tinh chỉnh tọa độ hồi quy.
  • O-Net (Output Network): Trích xuất tọa độ chính xác của bounding box và xác định 5 điểm mốc giải phẫu khuôn mặt (2 mắt, đỉnh mũi, 2 khóe miệng) để thực hiện phép biến đổi affine căn chỉnh khuôn mặt về kích thước chuẩn $112 \times 112$ pixels.

2. Trích xuất đặc trưng bằng MobileFaceNet và ArcFace

Kiến trúc MobileFaceNet thay thế các lớp tích chập tiêu chuẩn bằng Depthwise Separable Convolution kết hợp các khối Inverted Residual Bottleneck và hàm kích hoạt phi tuyến PReLU (Parametric ReLU). Đặc biệt, lớp Global Average Pooling được thay thế bằng Global Depthwise Convolution (GDC) $7 \times 7$ nhằm tối ưu hóa việc phân bổ trọng số không gian:

$$\text{Depthwise Conv: } \hat{y}{i,j,k} = \sum{m,n} K_{m,n,k} \cdot x_{i+m, j+n, k}$$

Hàm mất mát ArcFace (Additive Angular Margin Loss) chuẩn hóa các vector trọng số $W_j$ và vector đặc trưng $x_i$ về mặt siêu cầu với bán kính $s = 64$ và cộng thêm khoảng cách biên góc $m = 0.5$:

$$L = -\frac{1}{N}\sum_{i=1}^{N} \log \frac{e^{s(\cos(\theta_{y_i} + m))}}{e^{s(\cos(\theta_{y_i} + m))} + \sum_{j \neq y_i, j=1}^{n} e^{s \cos \theta_j}}$$

Thuật toán ép các vector đặc trưng cùng lớp co cụm lại gần nhau trên mặt siêu cầu, đồng thời đẩy xa khoảng cách giữa các lớp khác nhau, tạo ra vector 512-D có tính phân biệt cực cao.

import torch
import torch.nn as nn
import torch.nn.functional as F

class ArcMarginProduct(nn.Module):
    def __init__(self, in_features=512, out_features=1000, s=64.0, m=0.50):
        super(ArcMarginProduct, self).__init__()
        self.in_features = in_features
        self.out_features = out_features
        self.s = s
        self.m = m
        self.weight = nn.Parameter(torch.FloatTensor(out_features, in_features))
        nn.init.xavier_uniform_(self.weight)

    def forward(self, input_features, label):
        # Normalize weights and feature vectors
        cosine = F.linear(F.normalize(input_features), F.normalize(self.weight))
        sine = torch.sqrt(1.0 - torch.pow(cosine, 2)).clamp(0, 1)
        # cos(theta + m) = cos(theta)*cos(m) - sin(theta)*sin(m)
        phi = cosine * torch.cos(torch.tensor(self.m)) - sine * torch.sin(torch.tensor(self.m))
        
        one_hot = torch.zeros(cosine.size(), device=input_features.device)
        one_hot.scatter_(1, label.view(-1, 1).long(), 1)
        output = (one_hot * phi) + ((1.0 - one_hot) * cosine)
        output *= self.s
        return output

3. Định danh và ước lượng độ tin cậy với Linear SVM

Sau khi trích xuất vector 512-D, hệ thống sử dụng thuật toán Linear Support Vector Machine với chiến lược One-vs-Rest (OvR). Độ tin cậy (Confidence Score) được tính toán bằng cách khớp mô hình hồi quy Logistic trên khoảng cách từ điểm dữ liệu đến siêu phẳng phân cách (Hyperplane):

from sklearn.svm import SVC
from sklearn.calibration import CalibratedClassifierCV

# X_train: ma tran dac trung shape (N, 512), y_train: danh tinh nhan vien
base_svm = SVC(kernel='linear', C=1.0, probability=True)
clf = CalibratedClassifierCV(base_svm, method='sigmoid', cv='prefit')
base_svm.fit(X_train, y_train)
clf.fit(X_train, y_train)

def identify_face(embedding_512d):
    probabilities = clf.predict_proba([embedding_512d])[0]
    best_idx = probabilities.argmax()
    confidence = probabilities[best_idx]
    label = clf.classes_[best_idx]
    return label, confidence

Testing và validation

Mô hình trích xuất đặc trưng được đánh giá chéo trên các tập dữ liệu khuôn mặt benchmark quốc tế tiêu chuẩn:

  • LFW (Labeled Faces in the Wild): Đạt độ chính xác 99.10%.
  • AgeDB-30 (Tập dữ liệu chênh lệch độ tuổi lớn): Đạt độ chính xác 93.05% (vượt trội so với MobileNetV1 đạt 88.2%).

Thực nghiệm đo lường hiệu năng suy luận (Inference Benchmark) trên các cấu hình phần cứng thực tế:

Thiết bị phần cứng Cấu hình xử lý Tốc độ khung hình (FPS) Độ chính xác định danh Tỷ lệ truyền tin Firebase
PC Workstation Intel Core i7, GPU NVIDIA RTX 29 FPS 99.6% 100% (<80ms)
Laptop tầm trung Intel Core i5, GPU NVIDIA GTX 15 - 18 FPS 95.0 - 98.0% 100% (<120ms)
Kit nhúng Jetson Nano ARM Cortex-A57 4-core, 128 Maxwell GPU 2 - 5 FPS 88.0 - 92.0% 99.2% (<250ms)

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

  • Hoàn thành trọn vẹn 100% các tính năng đề ra theo hợp đồng nghiên cứu.
  • Rút gọn kích thước mô hình trích xuất đặc trưng xuống dưới 1 triệu tham số (~0.99M parameters), tiết kiệm 95% dung lượng bộ nhớ so với FaceNet gốc (Inception backbone).
  • Xây dựng thành công hệ thống phần cứng tích hợp hoàn chỉnh bao gồm Kit Jetson Nano, NodeMCU ESP32, Camera và 4 cảm biến môi trường.
  • Truyền tải dữ liệu định danh và thông số cảm biến lên Firebase Realtime Database ổn định qua giao thức HTTP REST và MQTT với tỷ lệ suy hao gói tin dưới 0.8%.

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

  1. Nâng cấp không gian đặc trưng từ 128-D lên 512-D trên mô hình siêu nhẹ: Đa số các nghiên cứu nhúng trước đây sử dụng vector 128 chiều (như OpenFace hoặc MobileNetV2-128D chỉ đạt độ chính xác ~71.8% trên Kit TX1 theo nghiên cứu tham chiếu). Việc chuyển dịch sang vector 512-D trên nền tảng MobileFaceNet giúp tăng khả năng phân tách dữ liệu sinh trắc học thêm 27.8% độ chính xác mà không làm tăng đáng kể chi phí tính toán suy luận.
  2. Ứng dụng hàm mất mát ArcFace trong huấn luyện mạng nhỏ: Thay vì sử dụng Triplet Loss đòi hỏi kỹ thuật khai phá bộ ba (Triplet Mining) phức tạp và tốn kém tài nguyên với hàng trăm triệu ảnh, việc tích hợp ArcFace trực tiếp tối ưu hóa góc trên mặt siêu cầu, giúp mô hình đạt độ chính xác tương đương chỉ với tập dữ liệu huấn luyện nhỏ hơn 30 lần (5.8 triệu ảnh so với 200 triệu ảnh của FaceNet).
  3. Mô hình kiến trúc IoT lai (Hybrid IoT-Vision Architecture): Kết hợp linh hoạt giữa giao thức băng thông thấp MQTT và dịch vụ đám mây Firebase, tách biệt hoàn toàn luồng xử lý thị giác nặng tại Edge và luồng giám sát cảm biến vi điều khiển, tối ưu hóa độ ổn định toàn hệ thống.

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

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

Hệ thống được thiết kế chuyên biệt cho các kịch bản triển khai:

  • Điểm danh sinh viên và học sinh thông minh: Đặt camera tại cửa phòng học, hệ thống tự động ghi nhận danh tính, thời gian vào lớp và gửi báo cáo về tài khoản giảng viên mà không gây tắc nghẽn tại cửa ra vào.
  • Kiểm soát ra vào tòa nhà thông minh (Smart Building Access Control): Xác thực mở cửa tự động cho nhân viên, đồng thời cảm biến chuyển động PIR và cảm biến gas liên tục kiểm soát an toàn phòng cháy chữa cháy tại khu vực cửa kiểm soát.

Hướng dẫn triển khai và Cài đặt

  1. Yêu cầu hệ thống phần cứng:
    • Kit NVIDIA Jetson Nano Developer Kit (4GB RAM) hoặc PC chạy Ubuntu 18.04/20.04 LTS.
    • Module NodeMCU ESP32, Cảm biến khí MQ-2, Cảm biến chuyển động PIR, Cảm biến nhiệt/ẩm DHT11.
    • Camera USB 720p hoặc Camera RTSP IP.
  2. Cài đặt môi trường phần mềm:
    # Cài đặt các thư viện lõi
    pip3 install torch==1.8.0 torchvision==0.9.0 -f https://download.pytorch.org/whl/torch_stable.html
    pip3 install opencv-python==4.5.1 scikit-learn==0.24.1 paho-mqtt==1.5.1 firebase-admin==4.5.0
    
  3. Quy trình vận hành:
    • Bước 1: Nạp firmware ESP32 kết nối Wi-Fi và cấu hình MQTT Broker / Firebase URL.
    • Bước 2: Chạy script đăng ký khuôn mặt để trích xuất 512-D embeddings vào cơ sở dữ liệu.
    • Bước 3: Huấn luyện bộ phân loại SVM: python3 train_svm.py --data ./dataset.
    • Bước 4: Khởi động hệ thống nhận diện thời gian thực: python3 main_recognition.py.

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

  • Hạn chế kỹ thuật: Tốc độ xử lý trên Jetson Nano nguyên bản còn thấp (2 - 5 FPS) do chưa tối ưu hóa lượng tử hóa mô hình (Model Quantization). Độ chính xác nhận diện giảm xuống dưới 85% trong điều kiện thiếu sáng nghiêm trọng hoặc góc nghiêng khuôn mặt vượt quá 45 độ.
  • Hướng phát triển tương lai:
    • Ứng dụng công nghệ TensorRT của NVIDIA để chuyển đổi mô hình sang định dạng FP16/INT8, nâng tốc độ xử lý trên Jetson Nano đạt ngưỡng 15 - 20 FPS.
    • Bổ sung thuật toán chống giả mạo khuôn mặt (Face Anti-Spoofing / Liveness Detection) để ngăn chặn hành vi sử dụng ảnh chụp hoặc video phát lại trên điện thoại.
    • Tích hợp thêm nhận diện biển số xe tự động (ALPR) để xây dựng hệ thống kiểm soát an ninh đa tầng cho bãi đỗ xe thông minh.

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

  • Sinh viên ngành Kỹ thuật Máy tính / CNTT: Nắm vững tài liệu tham khảo chi tiết về quy trình huấn luyện DCNN, cơ chế hoạt động của hàm mất mát ArcFace và kỹ thuật lập trình phần cứng nhúng.
  • Kỹ sư và Lập trình viên AI / IoT: Tham khảo cấu trúc mã nguồn tích hợp giữa PyTorch, OpenCV, SVM và giao thức truyền thông MQTT / Firebase.
  • Doanh nghiệp và Cơ sở giáo dục: Có được giải pháp tham chiếu với chi phí phần cứng thấp (dưới 3 triệu đồng cho một cổng kiểm soát) thay thế các hệ thống thương mại đắt đỏ.
  • Các nhà nghiên cứu: Kế thừa dữ liệu thực nghiệm so sánh hiệu năng giữa các kiến trúc trích xuất đặc trưng MobileFaceNet, ShuffleNet và FaceNet trên môi trường tài nguyên giới hạn.

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

1. Cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu tối thiểu một Kit NVIDIA Jetson Nano (hoặc Raspberry Pi 4 có gắn Intel Neural Compute Stick), một Camera USB 720p 30fps và module ESP32 nếu có sử dụng thêm các cảm biến ngoại vi.

2. Làm thế nào để giải quyết giới hạn tốc độ xử lý thấp trên Kit Jetson Nano?

Để nâng tốc độ từ 2 - 5 FPS lên mức thời gian thực (>15 FPS), cần chuyển đổi mô hình PyTorch (.pth) sang định dạng ONNX, sau đó tối ưu hóa đồ thị tính toán bằng NVIDIA TensorRT với chế độ tính toán dấu phẩy động 16-bit (FP16).

3. Hệ thống có thể tích hợp vào cơ sở dữ liệu nhân sự SQL sẵn có của doanh nghiệp không?

Có. Thay vì chỉ lưu trữ trên Firebase, hệ thống cung cấp sẵn các hàm API để gửi dữ liệu định danh dạng JSON qua giao thức HTTP POST hoặc MQTT đến bất kỳ máy chủ RESTful API backend nào (Node.js, Spring Boot, Django) kết nối với cơ sở dữ liệu MySQL/PostgreSQL.

4. Hệ thống cần bảo trì định kỳ những hạng mục nào?

Cần hiệu chuẩn lại cảm biến khí gas MQ-2 định kỳ 6 tháng một lần, đồng thời cập nhật tập dữ liệu huấn luyện SVM khi có nhân viên mới hoặc khi hình thái khuôn mặt nhân viên có sự thay đổi lớn (như thay đổi kiểu tóc, phẫu thuật thẩm mỹ).

5. Chi phí phần cứng dự toán và thời gian thu hồi vốn (ROI) là bao nhiêu?

Tổng chi phí phần cứng cho một điểm kiểm soát khoảng 2.500.000 - 3.500.000 VNĐ. Với một doanh nghiệp quy mô 100 nhân viên, việc tự động hóa chấm công và cắt giảm thẻ từ vật lý giúp hoàn vốn đầu tư trong vòng 3 đến 6 tháng hoạt động.


Kết luận

Đồ án tốt nghiệp "Nhận diện khuôn mặt Real-time với mô hình FaceNet và ứng dụng IoT Platform" đã giải quyết thành công bài toán cân bằng giữa độ chính xác nhận diện sinh trắc học và hiệu năng tính toán trên thiết bị nhúng. Bằng việc kết hợp sáng tạo giữa mạng phát hiện MTCNN, mạng trích xuất đặc trưng MobileFaceNet với vector 512 chiều được tối ưu bằng hàm mất mát ArcFace, và bộ phân loại Linear SVM, hệ thống đạt độ chính xác lên tới 99.1% trên tập LFW và vận hành ổn định trên các nền tảng máy tính cá nhân cũng như Kit nhúng Jetson Nano. Việc tích hợp đồng bộ mạng lưới cảm biến ngoại vi ESP32 cùng nền tảng Cloud Firebase đã minh chứng tính khả thi cao của mô hình trong việc xây dựng các hệ thống an ninh và quản lý thông minh cho các đô thị hiện đại.