Giới thiệu dự án

Sự bùng nổ của dữ liệu đa phương tiện kỹ thuật số đặt ra thách thức lớn trong việc quản lý, phân tích và khai thác thông tin từ video độ dài lớn. Theo các báo cáo thống kê trong ngành công nghệ truyền thông (OTT/VOD), hơn 80% lưu lượng truy cập internet toàn cầu hiện nay là video. Các nền tảng phát trực tuyến sở hữu hàng triệu giờ phim ảnh, đòi hỏi các công cụ phân tích tự động thông minh để nâng cao trải nghiệm người dùng như: tính năng tua nhanh đến phân cảnh có diễn viên yêu thích (smart skip), tóm tắt video tự động (video summarization), hay truy vết đối tượng trong giám sát an ninh (smart surveillance).

Đề tài "Truy xuất nhân vật trong phim dựa trên ảnh mẫu" do sinh viên Phạm Nguyễn Thanh Hà thực hiện dưới sự hướng dẫn của TS. Mai Tiến Dũng tại Khoa Khoa học Máy tính, Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, tập trung giải quyết bài toán cốt lõi: Tự động định vị và truy xuất toàn bộ các cảnh quay (shots) có sự xuất hiện của một nhân vật cụ thể trong một bộ phim hoàn chỉnh (feature-length film) dựa trên một tập hợp các ảnh khuôn mặt mẫu (face queries).

Input: Video phim hoàn chỉnh (M) + Tập ảnh mẫu khuôn mặt nhân vật c (E^c = {e_1, e_2, ..., e_k})
Output: Danh sách các phân cảnh (S^c = {shot_1, shot_2, ..., shot_m}) được xếp hạng theo độ tương đồng

Các thách thức kỹ thuật lớn mà bài toán phải đối mặt trong môi trường phim điện ảnh thực tế bao gồm:

  • Thời lượng phim lớn: Mỗi bộ phim kéo dài từ 75 đến 97 phút, tốc độ khung hình chuẩn 24–30 fps, tương đương 108.000 – 174.600 frames, đòi hỏi năng lực tính toán và tối ưu hóa thời gian xử lý cực cao.
  • Biến thể không gian và ngoại hình không kiểm soát: Góc quay biến đổi liên tục (chính diện, góc nghiêng, quay lưng), biểu cảm khuôn mặt phong phú, sự thay đổi kiểu tóc, râu, trang điểm.
  • Điều kiện ánh sáng phức tạp: Cảnh quay ban đêm, thiếu sáng, chênh sáng mạnh hoặc đổ bóng.
  • Vấn đề che khuất (Occlusion): Nhân vật đeo kính râm, khẩu trang, mũ bảo hiểm hoặc bị vật thể trong bối cảnh che một phần khuôn mặt.

Mục tiêu dự án

  1. Nghiên cứu và triển khai kỹ thuật phân đoạn video: Tự động phát hiện ranh giới cảnh quay (Shot Boundary Detection - SBD) với độ chính xác cao.
  2. Xây dựng đường ống nhận dạng khuôn mặt (Face Pipeline): Tích hợp các mạng nơ-ron tích chập (CNN) hiện đại để dò tìm (face detection) và trích xuất đặc trưng khuôn mặt (feature extraction).
  3. Thiết kế thuật toán tối ưu hóa truy vấn đa mẫu (Multi-Query Aggregation): Đề xuất giải pháp lưu trữ vector index và thuật toán ma trận khoảng cách để tổng hợp độ tương đồng từ nhiều ảnh query.
  4. Thực nghiệm toàn diện trên bộ chuẩn quốc tế: Đánh giá trên tập dữ liệu TRECVID-MSUM-2022 thuộc chuẩn NIST.
  5. Xây dựng ứng dụng hoàn chỉnh: Thiết kế giao diện web tương tác trực quan cho phép người dùng tải phim, chọn nhân vật và truy xuất phân cảnh tức thì.

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

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

Truy xuất nhân vật trong phim dài tập là một phân nhánh phức tạp của bài toán Face Video Retrieval. Bảng dưới đây so sánh các phương pháp tiếp cận qua các thời kỳ:

Tiêu chí Tiếp cận Cổ điển (Arandjelovic & Zisserman, 2005) Tiếp cận Baseline (Frame-by-Frame Cosine) Giải pháp Đề xuất trong Đồ án
Kỹ thuật trích xuất Signature Image + Kernel PCA Standard CNN Feature Extractor ArcFace (ResNet-34) / FaceNet512
Không gian vector Chiều thấp, phân tách phi tuyến 128-D hoặc 512-D thông thường 512-D L2-Normalized Hypersphere
Phương pháp so khớp Support Vector Machine (SVM) Cosine Distance trung bình tuyến tính FAISS IndexFlatL2 + Distance Matrix Min-Pooling
Khả năng mở rộng Kém khi scale tập dữ liệu lớn Độ trễ tuyến tính $O(N \times M)$ Cực cao, tìm kiếm vector phân tán $O(\log N)$
Xử lý che khuất Rất hạn chế Phụ thuộc vào chất lượng 1 detector Cơ chế Dual-Detector (InsightFace + MTCNN)

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

  • Must have (Bắt buộc có):
    • Module cắt shot tự động sử dụng TransNet V2.
    • Trích xuất đặc trưng khuôn mặt 512 chiều với chuẩn hóa L2.
    • Indexing dữ liệu bằng Facebook AI Similarity Search (FAISS).
    • Thuật toán gộp ma trận khoảng cách cho trường hợp đa ảnh mẫu ($k > 1$).
  • Should have (Nên có):
    • Cơ chế dò tìm khuôn mặt dự phòng (fallback mechanism) bằng MTCNN khi InsightFace gặp lỗi.
    • Giao diện trực quan hiển thị video shot theo thứ tự xếp hạng độ tương quan.
  • Could have (Có thể có):
    • Tùy chọn chuyển đổi linh hoạt giữa các backbone trích xuất (ArcFace vs FaceNet512).
    • Khả năng xuất metadata ranh giới thời gian (Start Time - End Time) của từng shot.
  • Won't have (Chưa thực hiện):
    • Nhận diện nhân vật qua giọng nói hoặc nhận dạng hành vi thời gian thực.

Thiết kế kiến trúc hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình Pipeline phân tầng khép kín:

Technology Stack chi tiết

  • Ngôn ngữ phát triển: Python 3.8+
  • Xử lý đa phương tiện: FFmpeg v4.4+, Pillow v9.2.0, OpenCV v4.6.0
  • Deep Learning Frameworks: TensorFlow v2.9.1, PyTorch v1.12.1, Keras v2.9.0
  • Thư viện thị giác máy tính chuyên sâu:
    • insightface v0.7.3: Dò tìm và căn chỉnh khuôn mặt 2D/3D
    • deepface v0.0.79: Wrapper tích hợp các mô hình nhận diện khuôn mặt hàng đầu
    • mtcnn v0.1.1: Multi-task Cascaded Convolutional Networks phục vụ cơ chế fallback
  • Tìm kiếm và tính toán vector:
    • faiss-cpu v1.7.4: Facebook AI Similarity Search Engine
    • numpy v1.23.3, scipy v1.9.1, pandas v1.5.0
  • Giao diện người dùng: Streamlit v1.20.0

Implementation và kết quả

Quy trình phân đoạn video và trích xuất đặc trưng

  1. Phát hiện ranh giới cảnh (Shot Boundary Detection): Hệ thống ứng dụng kiến trúc mạng sâu TransNet V2 để chia video thành các shot độc lập. Các frame trong mỗi shot được trích xuất theo tần suất cố định $5\text{ fps}$ nhằm giảm tải độ dư thừa thông tin nhưng vẫn giữ trọn vẹn diễn biến hành động.
  2. Dò tìm và xử lý ngoại lệ khuôn mặt:
    • Sử dụng mô hình InsightFace để quét toàn bộ frame trích xuất.
    • Đối với các ảnh query bị che khuất hoặc góc mặt khó (như trường hợp ảnh Kiya6 trong phim Like Me), hệ thống kích hoạt MTCNN làm cơ chế dự phòng để khôi phục vùng khuôn mặt (bounding box).
import numpy as np
from insightface.app import FaceAnalysis
from mtcnn import MTCNN

class RobustFaceDetector:
    def __init__(self):
        self.app = FaceAnalysis(name='buffalo_l')
        self.app.prepare(ctx_id=0, det_size=(640, 640))
        self.fallback_detector = MTCNN()

    def detect_face(self, img_rgb):
        faces = self.app.get(img_rgb)
        if len(faces) > 0:
            return faces[0].embedding # 512-D embedding
        
        # Fallback to MTCNN if InsightFace fails
        mtcnn_results = self.fallback_detector.detect_faces(img_rgb)
        if len(mtcnn_results) > 0:
            x, y, w, h = mtcnn_results[0]['box']
            face_crop = img_rgb[max(0, y):y+h, max(0, x):x+w]
            return face_crop
        return None
  1. Trích xuất đặc trưng bằng ArcFace Loss: ArcFace cải tiến hàm Softmax truyền thống bằng cách áp dụng Additive Angular Margin Penalty ($m = 0.5$) trực tiếp vào góc $\theta_{y_i}$ trong không gian siêu cầu (hypersphere bán kính $s = 64$), tối ưu hóa khoảng cách nội lớp (intra-class compactness) và phân tách tối đa khoảng cách liên lớp (inter-class discrepancy):

$$\mathcal{L}{ArcFace} = -\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=1, j \neq y_i}^n e^{s \cos \theta_j}}$$

Thuật toán tổng hợp ma trận khoảng cách đa truy vấn (Multi-Query Matrix Merging)

Khi người dùng cung cấp tập hợp $K$ ảnh mẫu khuôn mặt $E^c = {e_1, e_2, ..., e_K}$, hệ thống thực hiện truy vấn độc lập từng vector trên FAISS IndexFlatL2, thu về $K$ danh sách kết quả. Sau đó, một thuật toán ma trận khoảng cách được thực thi để hợp nhất thông tin:

import numpy as np

def merge_multi_query_results(query_matrix_list, max_scene, max_shot):
    """
    query_matrix_list: Danh sách ma trận khoảng cách từ các face queries
    Kích thước ma trận: (max_scene + 1) x max_shot
    """
    # Khởi tạo ma trận kết quả tổng hợp D
    D_merged = np.full((max_scene + 1, max_shot), -1.0, dtype=np.float32)
    
    # Bước 1: Khởi tạo giá trị từ ma trận query đầu tiên
    D_merged[:] = query_matrix_list[0]
    
    # Bước 2: So sánh và cập nhật phần tử nhỏ nhất (Min-Pooling) qua từng ma trận
    for D_k in query_matrix_list[1:]:
        for i in range(max_scene + 1):
            for j in range(max_shot):
                val_current = D_merged[i, j]
                val_new = D_k[i, j]
                
                if val_current == -1.0 and val_new != -1.0:
                    D_merged[i, j] = val_new
                elif val_current != -1.0 and val_new != -1.0:
                    D_merged[i, j] = min(val_current, val_new)
                    
    # Bước 3: Thu thập và sắp xếp các shot có khoảng cách hợp lệ (> -1)
    valid_shots = []
    distances = []
    for i in range(max_scene + 1):
        for j in range(max_shot):
            if D_merged[i, j] > -1.0:
                valid_shots.append((i, j))
                distances.append(D_merged[i, j])
                
    # Sắp xếp chỉ số shot theo khoảng cách tăng dần (độ tương đồng giảm dần)
    sorted_indices = np.argsort(distances)
    ranked_shots = [valid_shots[idx] for idx in sorted_indices]
    
    return ranked_shots, sorted(distances)

Đánh giá thực nghiệm và kết quả

Thực nghiệm được triển khai trên tập dữ liệu chuẩn TRECVID-MSUM-2022 (do Kinolorberedu cấp phép) bao gồm 5 bộ phim truyện với 7 nhân vật truy vấn chính:

Tên Phim Thời lượng Số Scene Nhân vật truy vấn Số lượng Face Queries
Calloused Hands 97 phút 58 scenes Byrd / Debbie 6 ảnh / 6 ảnh
Liberty Kid 92 phút 56 scenes Derrick 7 ảnh
Like Me 80 phút 28 scenes Burt / Kiya 5 ảnh / 6 ảnh
Losing Ground 86 phút 40 scenes Sara 5 ảnh
Memphis 75 phút 47 scenes Willis 7 ảnh

Độ đo đánh giá: Average Precision (AP)

Độ đo Average Precision kết hợp giữa Precision và Recall trên danh sách trả về được xếp hạng theo thứ tự khoảng cách:

$$AP = \frac{1}{k} \sum_{i=1}^n P(i) \times \text{rel}(i)$$

Trong đó $P(i)$ là độ chính xác tại vị trí thứ $i$, $\text{rel}(i) = 1$ nếu shot thứ $i$ chứa nhân vật cần tìm (thuộc Ground Truth) và bằng $0$ nếu ngược lại; $k$ là tổng số shot thực tế có chứa nhân vật.

Kết quả đối chuẩn hiệu năng

Bảng dưới đây ghi nhận kết quả so sánh chi tiết giữa việc sử dụng Squared Euclidean Distance (L2) trên FAISS và phương pháp Baseline Cosine Distance:

Nhân vật / Phim AP - Cosine Distance (Baseline) AP - Squared Euclidean Distance (FAISS + ArcFace) Cải thiện (%)
Burt (Like Me) 0.6124 0.7845 +28.10%
Kiya (Like Me) 0.5480 0.7120 +29.92%
Sara (Losing Ground) 0.6350 0.8015 +26.22%
Byrd (Calloused Hands) 0.5890 0.7430 +26.14%
Willis (Memphis) 0.6010 0.7650 +27.28%

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

  1. Kiến trúc trích xuất tối ưu hóa không gian 512-D: Tích hợp thành công mô hình ArcFace với backbone ResNet-34 vào bài toán phân tích phim truyện độ dài lớn, giúp thu hẹp phương sai nội lớp của cùng một nhân vật dưới các góc máy điện ảnh khắc nghiệt.
  2. Cơ chế Dual-Stage Face Detection dự phòng: Giải quyết triệt để bài toán mất dấu khuôn mặt mẫu trong các trường hợp diễn viên đeo mặt nạ hoặc bị tối cục bộ (minh chứng qua việc phát hiện thành công khuôn mặt nhân vật Kiya bị che khuất).
  3. Thuật toán tổng hợp ma trận khoảng cách đa ảnh mẫu: Thay thế phương pháp lấy trung bình thô sơ bằng cơ chế Min-Pooling ma trận thời gian thực, giúp tận dụng tối đa sự đa dạng góc nhìn từ nhiều bức ảnh truy vấn mà không làm suy giảm thời gian phản hồi.
  4. Tăng tốc độ truy vấn vượt bậc với FAISS IndexFlatL2: Giảm thời gian tìm kiếm từ hàng chục giây (khi duyệt tuần tự) xuống dưới 15 mili-giây trên toàn bộ cơ sở dữ liệu hàng chục nghìn vector frames của bộ phim.

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

Tình huống ứng dụng thực tế (Use Cases)

  • Hệ thống OTT / VOD thông minh: Cho phép người xem nhấn vào avatar diễn viên để xem ngay danh sách các cảnh phim có mặt diễn viên đó mà không cần tua thủ công.
  • Biên tập và tóm tắt video tự động (Video Summarization): Hỗ trợ các nhà làm phim nhanh chóng cắt ghép trailer, tổng hợp toàn bộ phân cảnh của nhân vật chính/phụ phục vụ công tác hậu kỳ.
  • Điều tra an ninh & Giám sát hình sự: Truy vết đối tượng tình nghi xuất hiện trong các đoạn camera an ninh kéo dài nhiều giờ tại sân bay, nhà ga hoặc trung tâm thương mại.

Phân tích khả năng mở rộng (Scalability)

  • Quy mô dữ liệu nhỏ đến trung bình (1 - 50 phim): Sử dụng IndexFlatL2 đảm bảo độ chính xác tuyệt đối 100% (Exact Search) với dung lượng RAM dưới 2GB.
  • Quy mô nền tảng lớn (> 10.000 phim): Chuyển đổi sang IndexIVFFlat hoặc IndexHNSW kết hợp kỹ thuật lượng tử hóa vector (Product Quantization - PQ), duy trì độ trễ dưới 50ms cho hàng triệu phân cảnh.

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

Hạn chế kỹ thuật

  • Góc quay nghiêng cực đại (Profile Faces > 90°): Khi nhân vật quay lưng hoặc chỉ xuất hiện một phần tư khuôn mặt phía sau, độ chính xác của bộ trích xuất embedding bị suy giảm.
  • Biến đổi nhân vật theo thời gian câu chuyện: Các bộ phim có độ dài niên đại (nhân vật biến đổi từ trẻ nhỏ sang người già) tạo ra khoảng cách vector lớn, đòi hỏi cần thêm các ràng buộc ngữ cảnh.

Hướng phát triển tương lai

  • Ước lượng tư thế khuôn mặt 3D (3D Head Pose Estimation): Tích hợp chuẩn hóa tư thế trước khi trích xuất embedding.
  • Đa phương thức (Multi-Modal Fusion): Kết hợp nhận dạng khuôn mặt với nhận diện giọng nói (Speaker Diarization) và nhận diện trang phục/dáng người (Person Re-Identification - ReID) để duy trì bám vết nhân vật liên tục trong toàn bộ cảnh quay.

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

  • Sinh viên & Học viên Cao học: Nguồn tài liệu tham khảo chuẩn mực về quy trình xử lý thị giác máy tính toàn diện từ Video Ingestion, Shot Detection đến Deep Metric Learning.
  • Kỹ sư AI & Computer Vision Developers: Mô hình mẫu về việc ứng dụng FAISS và ArcFace giải quyết bài toán tìm kiếm vector đa chiều với hiệu năng cao.
  • Doanh nghiệp Truyền thông & Nền tảng OTT: Tiết kiệm hàng nghìn giờ lao động thủ công trong việc gán nhãn, phân loại nội dung và kiểm duyệt video.
  • Nhà nghiên cứu Khoa học: Cung cấp phương pháp thực nghiệm chuẩn mực và tập Ground Truth hoàn chỉnh cho tác vụ Movie Summarization trên chuẩn TRECVID.

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

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

Hệ thống có thể chạy trên CPU thông thường với RAM tối thiểu 8GB cho tác vụ truy vấn vector bằng faiss-cpu. Tuy nhiên, để thực hiện quá trình tiền xử lý video (Shot Boundary Detection và trích xuất đặc trưng ArcFace), khuyến nghị sử dụng GPU từ NVIDIA (tối thiểu 4GB VRAM như GTX 1650 hoặc tương đương) để đạt tốc độ xử lý video gấp 8–10 lần so với CPU.

2. Sự khác biệt cốt lõi giữa ArcFace và FaceNet512 trong đồ án là gì?

FaceNet512 sử dụng hàm mất mát Triplet Loss để phân tách các bộ ba mẫu (Anchor, Positive, Negative), trong khi ArcFace áp dụng hình phạt biên góc cộng trực tiếp trên siêu cầu (Additive Angular Margin Loss). Thực nghiệm chứng minh ArcFace cho độ hội tụ ổn định hơn và đạt chỉ số AP cao hơn khoảng 3–5% so với FaceNet512 trên các tập phim có độ tương phản ánh sáng lớn.

3. Tại sao hệ thống cần trích xuất khung hình ở tần số 5 fps thay vì giữ nguyên 30 fps?

Trong một shot điện ảnh, các khung hình liên tiếp trong khoảng thời gian $0.2\text{ giây}$ mang thông tin gần như tương đồng. Việc lấy mẫu ở tần số $5\text{ fps}$ giúp giảm 83.3% dung lượng lưu trữ vector và khối lượng tính toán mà vẫn đảm bảo bắt trọn mọi chuyển động và góc mặt thay đổi của nhân vật.

4. Thuật toán xử lý thế nào nếu trong cùng một shot có nhiều nhân vật xuất hiện?

Mỗi frame trong shot sẽ được InsightFace dò tìm và tách thành nhiều khuôn mặt độc lập. Từng khuôn mặt sẽ được gán nhãn vị trí cụ thể (Scene_i-Shot_j-Frame_k-Face_m) và trích xuất vector riêng biệt đưa vào FAISS. Thuật toán xếp hạng Min-Pooling sẽ tự động đối chiếu và chọn ra khoảng cách gần nhất với nhân vật query mà không bị nhầm lẫn bởi các nhân vật phụ xung quanh.

5. Chi phí triển khai và khả năng tích hợp vào hệ thống có sẵn như thế nào?

Hệ thống được module hóa hoàn toàn dưới dạng các Python package độc lập. Pipeline có thể đóng gói thành các Docker Container và expose qua RESTful API (FastAPI) với chi phí hạ tầng điện toán đám mây tối ưu (chỉ cần 1 máy chủ GPU tầm trung để phục vụ hàng trăm truy vấn phân cảnh mỗi phút).


Kết luận

Khóa luận tốt nghiệp "Truy xuất nhân vật trong phim dựa trên ảnh mẫu" của tác giả Phạm Nguyễn Thanh Hà đã giải quyết trọn vẹn và chuyên sâu một bài toán thị giác máy tính giàu tính thực tiễn. Bằng việc kết hợp hài hòa giữa các công nghệ tiên tiến nhất hiện nay gồm TransNet V2, InsightFace, Deep Metric Learning (ArcFace) và công cụ tìm kiếm vector siêu tốc FAISS, đề tài đã đạt được chỉ số Average Precision ấn tượng (lên tới hơn 80% trên phim Losing Ground), vượt trội so với các phương pháp tiếp cận truyền thống.

Đây là công trình nghiên cứu ứng dụng có hàm lượng kỹ thuật cao, cấu trúc mạch lạc và có tiềm năng lớn để chuyển giao, tích hợp vào các hệ sinh thái truyền thông số, nền tảng phát video thông minh và hệ thống quản lý dữ liệu an ninh đa phương tiện hiện đại.