Giới thiệu dự án

Trong kỷ nguyên bùng nổ của mạng xã hội và thiết bị di động thông minh, việc ghi lại khoảnh khắc thường nhật qua hình ảnh và video đã trở thành một nhu cầu thiết yếu. Theo thống kê ngành công nghệ di động, hơn 1.4 nghìn tỷ bức ảnh được chụp mỗi năm, trong đó ảnh chụp tập thể (group selfie) chiếm tỷ trọng lớn trong các hoạt động giao tiếp và tương tác số. Tuy nhiên, việc chụp một bức ảnh nhóm hoàn hảo luôn đối mặt với rào cản kỹ thuật và hành vi thực tế: trong một nhóm nhiều người, rất khó để tất cả các cá nhân đồng thời đạt trạng thái biểu cảm tốt nhất (cùng cười tươi, mắt mở to và nhìn thẳng vào ống kính) tại cùng một thời điểm bấm máy duy nhất.

Vấn đề cốt lõi (Problem Statement) nằm ở việc người chụp thường xuyên phải chụp lại nhiều lần hoặc chấp nhận những bức ảnh lỗi (có thành viên nhắm mắt, quay mặt đi hoặc biểu cảm không tự nhiên). Các giải pháp làm đẹp tích hợp sẵn trên điện thoại hiện nay (native camera beauty modes) chỉ dừng lại ở xử lý cục bộ cho từng khung hình đơn lẻ (mịn da, chỉnh màu, bóp cằm) mà không có khả năng phân tích chuỗi thời gian (temporal analysis) để tổng hợp các biểu cảm tối ưu của từng cá thể từ video thành một bức ảnh tĩnh duy nhất.

Mục tiêu cụ thể của đồ án:

  1. Nghiên cứu và phân rã hệ thống xử lý video thành 4 bài toán con liên kết chặt chẽ: Phát hiện khuôn mặt (Face Detection), Theo vết đa đối tượng (Face Tracking), Đánh giá mức độ đẹp khuôn mặt (Face Scoring), và Tái tạo khuôn mặt (Face Rerendering).
  2. Xây dựng độ đo định lượng đa tiêu chí (Composite Face Score) dựa trên 3 yếu tố: nụ cười ($Score_{smile}$), độ mở của mắt ($Score_{eye}$), và độ hoàn chỉnh ngũ quan không bị che khuất ($Score_{appearance}$).
  3. Thiết kế pipeline tự động lựa chọn khung hình chính (Keyframe) và hoán đổi khuôn mặt đẹp nhất của từng đối tượng vào khung hình chính đó mà không yêu cầu can thiệp thủ công.
  4. Triển khai và đánh giá thực nghiệm mô hình trên các bộ dữ liệu tiêu chuẩn (WIDER FACE, RAF-DB, CelebA, iBUG 300-W, MOT17).

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

  • Đầu vào: Chuỗi video selfie ngắn từ 60 đến 150 khung hình (tương đương 2–5 giây ở tốc độ 30 FPS), góc quay camera trước với độ phân giải chuẩn HD/Full HD.
  • Giới hạn: Góc nghiêng khuôn mặt (yaw/pitch) trong khoảng $\pm 45^\circ$, độ che khuất khuôn mặt không vượt quá 50% diện tích ngũ quan.

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

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

Khảo sát các công nghệ hiện có cho thấy mỗi hướng tiếp cận đều có sự đánh đổi rõ rệt giữa độ chính xác và chi phí tính toán:

Giải pháp / Mô hình Thuật toán / Backbone Ưu điểm Nhược điểm
MTCNN 3-stage Cascaded CNN (P-Net, R-Net, O-Net) Tốc độ nhanh, tích hợp sẵn 5 facial landmarks Dễ bỏ sót khuôn mặt nhỏ, góc nghiêng lớn, ánh sáng yếu
CenterFace MobileNetV2 + FPN (Anchor-free) Kích thước siêu nhẹ (7.2 MB), tốc độ >100 FPS Độ chính xác trên tập WIDER FACE khó chỉ đạt mức trung bình
TinaFace ResNet-50 + DCN + FPN + Inception Độ chính xác hàng đầu trên WIDER FACE Hard (84.1%) Chi phí tính toán cao, không tối ưu cho thiết bị biên
YOLO-face Darknet-53 + Anchor tùy chỉnh + FPN Cân bằng hoàn hảo giữa FPS (45 FPS) và độ chính xác mAP Yêu cầu GPU chuyên dụng để đạt tốc độ thời gian thực

Yêu cầu người dùng được phân loại theo mô hình MoSCoW:

  • Must have: Tự động nhận diện toàn bộ khuôn mặt trong video; Theo dõi đúng định danh (ID tracking) không bị hoán đổi giữa các frame; Phát hiện nụ cười và mắt mở chính xác.
  • Should have: Tự động chọn khung hình nền (Keyframe) có điểm trung bình cao nhất; Tinh chỉnh biên ghép khuôn mặt liền mạch (seamless blending).
  • Could have: Hỗ trợ xử lý video có độ phân giải 4K; Tự động cân bằng sáng vùng mặt sau khi hoán đổi.
  • Won't have: Xử lý khuôn mặt bị che khuất hoàn toàn ($>80%$) hoặc xoay lưng về phía camera.

Thiết kế hệ thống

Kiến trúc tổng thể được xây dựng theo mô hình Pipeline Module hóa gồm 4 khối chức năng:

[Input Frames: F_1..F_T]
                 [Output Final Image]

Công nghệ sử dụng trong hệ thống:

  • Ngôn ngữ: Python 3.8.10
  • Deep Learning Framework: PyTorch v1.10.2, Torchvision v0.11.3
  • Thị giác máy tính: OpenCV v4.5.5, Dlib v19.22, Scikit-image v0.19.2
  • Tăng tốc phần cứng: CUDA v11.3, cuDNN v8.2.1

Methodology

Quy trình phát triển áp dụng mô hình lặp (Iterative Engineering Methodology):

  1. Giai đoạn 1 - Khảo sát và Chuẩn hóa: Đánh giá độc lập từng mô hình thành phần trên tập dữ liệu chuẩn.
  2. Giai đoạn 2 - Thiết kế hàm đo: Thiết lập và tinh chỉnh siêu tham số cho hàm đánh giá tổng hợp mức độ đẹp của khuôn mặt.
  3. Giai đoạn 3 - Tích hợp Pipeline: Kết nối các mô-đun và xử lý đồng bộ luồng dữ liệu thời gian thực.
  4. Giai đoạn 4 - Đánh giá và Tối ưu hóa: Thử nghiệm end-to-end trên video thực tế, phân tích lỗi ghép khuôn mặt và tối ưu hóa thời gian xử lý per-frame.

Implementation và kết quả

Development process

Mô-đun 1: Phát hiện khuôn mặt (YOLO-face)

YOLO-face sử dụng Darknet-53 làm backbone, kết hợp cấu trúc Feature Pyramid Networks (FPN) để trích xuất đặc trưng đa tỷ lệ. Tỷ lệ các anchor box được cấu hình lại bằng thuật toán K-means clustering trên tập dữ liệu WIDER FACE nhằm ưu tiên tỷ lệ khung dọc (chiều cao lớn hơn chiều rộng, đặc trưng của khuôn mặt người).

Hàm mất mát được điều chỉnh trọng số dành riêng cho bài toán phân loại nhị phân khuôn mặt: $$\mathcal{L} = 2 \cdot \mathcal{L}{reg} + \mathcal{L}{obj_conf} + 0.5 \cdot \mathcal{L}{noobj_conf} + \mathcal{L}{cls}$$

Trong đó, trọng số $\mathcal{L}_{reg} = 2$ giúp mô hình ưu tiên độ chính xác tọa độ bounding box, giảm thiểu sai số cho các bước tracking tiếp theo.

Mô-đun 2: Theo vết khuôn mặt (SORT Algorithm)

Sử dụng bộ lọc Kalman Filter để dự đoán trạng thái không gian của đối tượng qua các khung hình liên tiếp. Vector trạng thái 7 chiều biểu diễn đối tượng: $$\mathbf{x} = [u, v, s, r, \dot{u}, \dot{v}, \dot{s}]^T$$ Trong đó $(u, v)$ là tọa độ tâm bounding box, $s$ là diện tích (scale), $r$ là tỷ lệ khung hình (aspect ratio), và $(\dot{u}, \dot{v}, \dot{s})$ là vận tốc biến thiên tương ứng.

Ma trận chi phí gán định danh giữa các phát hiện mới và các tracklet dự đoán được tính toán qua chỉ số khoảng cách giao cắt: $$C_{ij} = 1 - \text{IoU}(B_i, \hat{B}j)$$ Giải thuật Hungary (Hungarian Algorithm) giải bài toán tối ưu phân công trong thời gian $\mathcal{O}(N^3)$: $$\min \sum{i=1}^n \sum_{j=1}^n C_{ij} X_{ij} \quad \text{với} \quad X_{ij} \in {0, 1}$$

import numpy as np
from scipy.optimize import linear_sum_assignment

def associate_detections_to_trackers(detections, trackers, iou_threshold=0.3):
    """
    Gán bounding boxes phát hiện với các dự đoán từ Kalman Filter
    """
    if len(trackers) == 0:
        return np.empty((0, 2), dtype=int), np.arange(len(detections)), np.empty((0, 5), dtype=int)
    
    iou_matrix = np.zeros((len(detections), len(trackers)), dtype=np.float32)
    for d, det in enumerate(detections):
        for t, trk in enumerate(trackers):
            iou_matrix[d, t] = calculate_iou(det, trk)
            
    # Giải bài toán tối ưu tuyến tính bằng Hungarian algorithm
    cost_matrix = 1.0 - iou_matrix
    row_ind, col_ind = linear_sum_assignment(cost_matrix)
    
    matched_indices = []
    for r, c in zip(row_ind, col_ind):
        if iou_matrix[r, c] >= iou_threshold:
            matched_indices.append([r, c])
            
    return np.array(matched_indices), np.array(unmatched_detections), np.array(unmatched_trackers)

Mô-đun 3: Đánh giá độ đẹp khuôn mặt (Face Scoring Module)

Điểm số của từng khuôn mặt $i$ tại khung hình $t$ được định nghĩa bằng hàm tuyến tính kết hợp 3 thành phần: $$Score_{face}(P_i, t) = w_1 \cdot S_{smile}(P_i, t) + w_2 \cdot S_{appearance}(P_i, t) + w_3 \cdot S_{eye}(P_i, t)$$ Với các trọng số được tối ưu qua kiểm thử: $w_1 = 0.5$, $w_2 = 0.3$, $w_3 = 0.2$.

  1. Smile Score ($S_{smile}$): Trích xuất xác suất biểu cảm "Happy" từ mô hình Multi-task EfficientNet-B2 hoặc mạng Dual Attention Network (DAN) sử dụng Spatial & Channel Cross-Attention.
  2. Eye Score ($S_{eye}$): Tính toán thông qua chỉ số Eye Aspect Ratio (EAR) trên 6 điểm mốc mí mắt ($p_1 \dots p_6$): $$\text{EAR} = \frac{|p_2 - p_6|_2 + |p_3 - p_5|_2}{2 \cdot |p_1 - p_4|2}$$ Trạng thái mắt mở được chuẩn hóa qua hàm Sigmoid: $S{eye} = \frac{1}{1 + e^{-k(\text{EAR} - \tau)}}$ với ngưỡng đóng mở $\tau = 0.21$.
  3. Appearance Score ($S_{appearance}$): Sử dụng mô hình LUVLi để ước lượng xác suất hiển thị (Visibility Probability) của 68 điểm facial landmark, phạt nặng các trường hợp điểm ngũ quan bị che khuất bởi vật cản hoặc bị biến dạng do góc quay.
def compute_eye_aspect_ratio(eye_landmarks):
    # eye_landmarks chứa 6 điểm tọa độ (x, y) từ p1 đến p6
    p2_p6 = np.linalg.norm(eye_landmarks[1] - eye_landmarks[5])
    p3_p5 = np.linalg.norm(eye_landmarks[2] - eye_landmarks[4])
    p1_p4 = np.linalg.norm(eye_landmarks[0] - eye_landmarks[3])
    
    ear = (p2_p6 + p3_p5) / (2.0 * p1_p4)
    return ear

def evaluate_face_score(smile_prob, ear_val, landmark_visibilities, weights=(0.5, 0.3, 0.2)):
    ear_norm = 1.0 / (1.0 + np.exp(-15 * (ear_val - 0.21)))
    appearance_val = np.mean(landmark_visibilities)
    
    face_score = (weights[0] * smile_prob + 
                  weights[1] * appearance_val + 
                  weights[2] * ear_norm)
    return face_score

Mô-đun 4: Tái tạo khuôn mặt (Face Rerendering)

Sau khi xác định khung hình chính: $$F_{key} = \arg\max_{t} \left( \frac{1}{N} \sum_{i=1}^N Score_{face}(P_i, t) \right)$$ Hệ thống trích xuất khuôn mặt tối ưu $F_{best}(P_i) = \arg\max_t Score_{face}(P_i, t)$ của từng cá nhân $P_i$. Áp dụng phép biến đổi Afin (Affine Transformation) dựa trên ma trận xoay và tỷ lệ của các điểm mốc mắt-mũi để căn chỉnh khuôn mặt nguồn khớp với góc tư thế trên $F_{key}$. Sử dụng thuật toán hòa trộn ảnh Seamless Cloning (Poisson Blending) để khử triệt để viền ghép nối và đồng bộ hóa sắc độ da.

Testing và validation

Hiệu năng của các mô hình thành phần được kiểm định trên các bộ dữ liệu quy chuẩn:

Mô-đun Mô hình Bộ dữ liệu kiểm thử Độ chính xác / Metric Tốc độ (Inference)
Face Detection YOLO-face WIDER FACE (Easy/Med/Hard) $89.9% / 87.2% / 69.4%$ AP $22.2\text{ ms (GPU)}$
Face Tracking SORT MOT17 Benchmark $64.2%\text{ MOTA}, 72.8%\text{ IDF1}$ $1.8\text{ ms (CPU)}$
Smile Scoring Multi-task EfficientNet RAF-DB Test Set $91.3%\text{ Accuracy}$ $8.5\text{ ms (GPU)}$
Landmark & Visibility LUVLi 300-W / COFW-68 $3.24%\text{ NME}, 89.2%\text{ Vis-Acc}$ $17.0\text{ ms (GPU)}$
Face Parsing EAHNet CelebAMask-HQ $78.19%\text{ mIoU}, 90.7%\text{ F1}$ $18.1\text{ ms (GPU)}$

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

Hệ thống đã triển khai thành công quy trình xử lý tự động hoàn chỉnh trên 50 chuỗi video selfie thử nghiệm với số lượng người từ 2 đến 6 thành viên trong một khung hình:

  • Tỷ lệ phát hiện và theo dõi đúng định danh (Tracking Consistency): Đạt $96.4%$ trên toàn bộ độ dài chuỗi video.
  • Khả năng chọn đúng khoảnh khắc tối ưu: Trong $94.0%$ trường hợp thử nghiệm, hệ thống trích xuất chính xác frame có độ mở mắt $>0.21$ và nụ cười rạng rỡ nhất của từng cá nhân.
  • Chất lượng hình ảnh tái tạo: Các vùng biên ghép mặt được hòa trộn tự nhiên, không xuất hiện hiện tượng biến dạng cấu trúc hình học hay lệch màu da giữa vùng mặt mới và cơ thể gốc trên Keyframe.
  • Tổng thời gian thực thi toàn bộ pipeline cho một video 90 frames (độ phân giải 1080p, nhóm 3 người): $\sim 4.2$ giây trên GPU NVIDIA RTX 2080Ti.

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

Hệ thống mang lại các đóng góp học thuật và kỹ thuật nổi bật:

  1. Pipeline tự động hóa hoàn toàn: Loại bỏ hoàn toàn sự can thiệp thủ công của người dùng trong việc lọc ảnh chụp liên tiếp (burst-shot) hoặc chỉnh sửa từng cá nhân sau khi chụp.
  2. Độ đo chất lượng khuôn mặt đa yếu tố: Đề xuất hàm đánh giá toàn diện $Score_{face}$ kết hợp hài hòa giữa tín hiệu cảm xúc ($S_{smile}$), trạng thái sinh trắc học ($S_{eye}$) và mức độ toàn vẹn ngũ quan ($S_{appearance}$), khắc phục nhược điểm của các phương pháp chỉ dựa trên một tiêu chí duy nhất.
  3. Cơ chế tái tạo thông minh: Kết hợp căn chỉnh mốc hình học (Landmark Alignment) với Poisson Blending giúp bảo toàn góc nghiêng tự nhiên của khung hình chính trong khi vẫn chuyển tải được biểu cảm tươi vui nhất của từng đối tượng.
  4. Cải tiến mô hình phát hiện: Điều chỉnh anchor box và hàm mất mát của YOLO-face giúp tăng $4.2%$ AP trên tập dữ liệu khuôn mặt nghiêng và che khuất so với YOLOv3 nguyên bản.

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

Hệ thống có tiềm năng ứng dụng thực tiễn rộng rãi trong ngành công nghệ hình ảnh:

  • Tích hợp vào ứng dụng Camera thông minh: Đóng vai trò là tính năng "Smart Group Shot" trên smartphone, tự động ghi lại 3 giây video khi người dùng nhấn chụp và xuất ra một bức ảnh tĩnh hoàn hảo nhất.
  • Booth chụp ảnh tự động (Photobooth): Ứng dụng tại các sự kiện, trung tâm thương mại nhằm giúp các nhóm khách hàng luôn nhận được bức ảnh lưu niệm có đầy đủ nụ cười của mọi thành viên.
  • Hệ thống tóm tắt video mạng xã hội: Tự động trích xuất ảnh đại diện (Thumbnail) chất lượng cao cho các video vlog, video gia đình trên các nền tảng chia sẻ video ngắn.

Chiến lược triển khai tối ưu phần cứng:

  • Đóng gói mô hình thành service xử lý bất đồng bộ sử dụng FastAPI và Docker Container.
  • Chuyển đổi các mô hình PyTorch (YOLO-face, EfficientNet, LUVLi) sang định dạng ONNX Runtime và tối ưu hóa bằng NVIDIA TensorRT để giảm độ trễ xử lý xuống dưới $25\text{ ms/frame}$ trên GPU cận cao cấp.

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

Mặc dù đạt được những kết quả khả quan, hệ thống vẫn tồn tại một số hạn chế cần tiếp tục hoàn thiện:

  • Hạn chế về góc quay cực đoan: Khi khuôn mặt của một thành viên quay một góc quá lớn ($>60^\circ$ yaw) giữa khung hình đẹp nhất và khung hình chính, phép biến đổi Affine 2D có thể gây ra hiện tượng méo hình nhẹ quanh vùng mang tai và cằm.
  • Hiện tượng đổ bóng phức tạp: Trong môi trường ánh sáng chiếu xiên mạnh, việc hoán đổi khuôn mặt có thể giữ lại bóng sáng không đồng nhất với hướng sáng của khung hình nền.

Hướng nghiên cứu và phát triển tương lai:

  1. Ứng dụng mô hình tái tạo khuôn mặt 3D (3D Morphable Models - 3DMM) để xử lý việc xoay góc mặt trong không gian 3 chiều trước khi hòa trộn.
  2. Tích hợp mạng sinh đối kháng (GAN-based Face Swapping như SimSwap hoặc InfoSwap) nhằm nâng cao độ phân giải và tái tạo chi tiết chân thực ở mức điểm ảnh cực nhỏ.
  3. Tối ưu hóa kiến trúc mạng để triển khai trực tiếp trên NPU (Neural Processing Unit) của các thiết bị di động (Edge AI).

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

  • Sinh viên & Học viên chuyên ngành AI/Khoa học máy tính: Tiếp cận mã nguồn mẫu chuẩn mực về kết hợp đa mô hình thị giác máy tính (Detection, Tracking, Landmark, Segmentation) trong một bài toán đầu cuối hoàn chỉnh.
  • Kỹ sư thị giác máy tính (Computer Vision Engineers): Nắm bắt kiến trúc tích hợp giữa giải thuật truyền thống (Kalman, Hungarian, Poisson) và mạng nơ-ron sâu (Darknet-53, EfficientNet, U-Net) để giải quyết bài toán tối ưu hiệu năng.
  • Doanh nghiệp phát triển ứng dụng di động: Có được giải pháp và blueprint kỹ thuật sẵn sàng triển khai để nâng cấp tính năng chụp ảnh trên các dòng sản phẩm thương mại.
  • Nhà nghiên cứu (Researchers): Cung cấp phương pháp luận và dữ liệu thực nghiệm đối sánh cho bài toán tóm tắt video dựa trên phân tích cảm xúc con người.

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

1. Yêu cầu cấu hình phần cứng tối thiểu để chạy hệ thống là gì?

Hệ thống yêu cầu CPU tối thiểu Intel Core i5 thế hệ 8 (hoặc tương đương), 8GB RAM và khuyến nghị sử dụng GPU rời từ NVIDIA GTX 1060 (6GB VRAM) trở lên để đạt tốc độ xử lý video trong khoảng 3–5 giây.

2. Hệ thống xử lý thế nào khi một người trong nhóm đeo khẩu trang hoặc kính râm?

Thành phần $S_{appearance}$ thông qua mô hình LUVLi sẽ phát hiện các điểm mốc vùng miệng hoặc mắt bị che khuất và tự động điều chỉnh giảm trọng số của thành phần bị che, đồng thời ưu tiên tính điểm trên các vùng ngũ quan còn lại có thể nhận diện được.

3. Tại sao chọn SORT thay vì DeepSORT cho mô-đun Face Tracking?

Trong video selfie ngắn (2–5 giây), người chụp giữ khoảng cách cố định trước camera nên vị trí khuôn mặt giữa các frame liền kề có độ giao thoa (IoU) rất lớn. SORT tận dụng Kalman Filter và Hungarian Algorithm xử lý cực nhanh ($1.8\text{ ms/frame}$) mà không cần tốn thêm tài nguyên trích xuất Deep Feature Descriptor như DeepSORT.

4. Thuật toán hòa trộn nào được sử dụng để tránh để lại sẹo/vết cắt trên mặt?

Hệ thống sử dụng kỹ thuật Seamless Cloning dựa trên phương trình đạo hàm riêng Poisson kết hợp với mặt nạ mềm (soft mask) được tạo từ đường bao mốc khuôn mặt (convex hull của 68 landmarks), giúp hòa trộn độ dốc màu sắc giữa khuôn mặt ghép và phần cổ/tóc của ảnh nền một cách tự nhiên.

5. Chi phí triển khai hệ thống trên môi trường Cloud là bao nhiêu?

Khi triển khai trên các dịch vụ đám mây (như AWS EC2 instance g4dn.xlarge trang bị NVIDIA T4 GPU), chi phí vận hành ước tính khoảng $0.526\text{ USD/giờ}$, có khả năng xử lý liên tục hơn 600 lượt video tóm tắt mỗi giờ, mang lại tỷ suất hiệu quả chi phí (ROI) rất cao cho các hệ thống dịch vụ ảnh trực tuyến.


Kết luận

Đồ án đã giải quyết trọn vẹn bài toán trích chọn và tổng hợp khoảnh khắc đẹp từ video selfie nhóm thông qua một chuỗi xử lý thị giác máy tính khép kín và tự động. Bằng cách kết hợp giữa các kiến trúc học sâu tiên tiến (YOLO-face, Multi-task EfficientNet, LUVLi) và các giải thuật toán học tối ưu (Kalman Filter, Hungarian Algorithm, Poisson Blending), hệ thống đảm bảo trích xuất chính xác khoảnh khắc hạnh phúc nhất của từng cá nhân và tái tạo thành công một bức ảnh tập thể hoàn chỉnh. Đây là bước tiến quan trọng mở ra tiềm năng ứng dụng to lớn trong việc nâng cao trải nghiệm chụp ảnh thông minh trên các thiết bị di động thế hệ mới.