Bối cảnh và vấn đề nghiên cứu

Nhận dạng khuôn mặt (Face Recognition) là một phân ngành thuộc lĩnh vực Thị giác máy tính (Computer Vision) và Xử lý ảnh, thu hút sự quan tâm lớn từ cộng đồng nghiên cứu khoa học từ đầu những năm 1990. Con người có khả năng tự nhiên trong việc ghi nhớ và nhận diện các khuôn mặt phức tạp qua thời gian; mục tiêu của ngành khoa học máy tính là mô phỏng năng lực thị giác này trên các hệ thống tính toán tự động. Lịch sử nghiên cứu nhận dạng khuôn mặt đã phát triển từ các bài toán xử lý ảnh đơn giản (ảnh đơn sắc, ảnh xám, góc chụp thẳng đứng, một đối tượng) đến các bài toán phức tạp (ảnh màu đa đối tượng, khuôn mặt nghiêng, bị che khuất một phần, phông nền phức tạp ngoài tự nhiên). Tại Việt Nam, việc nghiên cứu tích hợp dữ liệu sinh trắc học vào giấy tờ định danh (hộ chiếu, căn cước công dân) và hệ thống kiểm soát thực tế ngày càng trở nên cấp thiết.

Đồ án thực tập tốt nghiệp ngành Công nghệ Thông tin tại Trường Đại học Giao thông Vận tải TP. Hồ Chí Minh của nhóm sinh viên Nguyễn Hà Khánh Duy, Đỗ Nguyên Khang và Võ Thành Thông (dưới sự hướng dẫn của ThS. Đặng Nhân Cách, năm 2020) tập trung giải quyết bài toán: "Xây dựng hệ thống nhận dạng kiểm soát khuôn mặt với Deep Learning".

Mục tiêu nghiên cứu cụ thể của đề tài bao gồm 7 nhiệm vụ:

  1. Nghiên cứu kỹ thuật phát hiện ảnh mặt dựa trên đặc trưng HOG (Histogram of Oriented Gradients).
  2. Nghiên cứu thuật toán phân lớp có giám sát SVM (Support Vector Machine).
  3. Nghiên cứu và khai thác thư viện thị giác máy tính mã nguồn mở OpenCV.
  4. Nghiên cứu thư viện học máy mã nguồn mở Dlib.
  5. Nghiên cứu các nền tảng học sâu mã nguồn mở TensorFlow và Keras.
  6. Nghiên cứu và ứng dụng kiến trúc mạng nơ-ron tích chập VGG16.
  7. Nghiên cứu và áp dụng hàm mất mát Triplet Loss cho bài toán nhận dạng khuôn mặt bằng mạng Deep Learning.

Đối tượng và phạm vi nghiên cứu của đề tài tập trung vào bài toán xác định danh tính (Face Identification dạng 1-N), trong đó hệ thống so khớp ảnh đầu vào với cơ sở dữ liệu $N$ ảnh đã biết danh tính để đưa ra kết quả. Phạm vi ứng dụng thực tiễn được định hướng cho việc kiểm soát ra vào, điểm danh tự động tại trường học/công sở, hỗ trợ tra cứu thông tin tội phạm, giám sát camera an ninh tại khu vực công cộng, tìm kiếm trẻ lạc, và nhận diện khách hàng VIP trong ngành dịch vụ khách sạn.


Cơ sở lý thuyết và phương pháp

Khung lý thuyết và mô hình tính toán

Nghiên cứu dựa trên nền tảng lý thuyết mạng nơ-ron nhân tạo (Artificial Neural Network - ANN) và mạng nơ-ron tích chập (Convolutional Neural Network - CNN). Mô hình nơ-ron nhân tạo mô phỏng cơ chế sinh học: tiếp nhận tín hiệu qua các nhánh (dendrites), tính toán tổng có trọng số kèm độ lệch (bias), đưa qua hàm kích hoạt (Activation Function như ReLU, Tanh) để chuẩn hóa đầu ra và truyền qua sợi trục (axon) khi vượt ngưỡng kích hoạt.

Mạng CNN giải quyết các hạn chế của mạng ANN truyền thống nhờ ba cơ chế cốt lõi:

  • Trường tiếp nhận cục bộ (Local receptive field): Mỗi nơ-ron ẩn chỉ kết nối với một vùng ảnh nhỏ cục bộ (ví dụ kích thước $5 \times 5$) của tầng trước đó thông qua cửa sổ trượt (Sliding Window), giúp trích xuất các đặc trưng biên (edges), hình dạng (shapes) và đặc trưng khuôn mặt cấp cao.
  • Trọng số chia sẻ (Shared weights and biases): Tất cả các nơ-ron trong cùng một bản đồ đặc trưng (Feature Map) sử dụng chung một ma trận trọng số (kernel/filter) và độ lệch, giúp giảm thiểu đáng kể số lượng tham số cần huấn luyện so với mạng kết nối đầy đủ (Fully Connected Layer).
  • Lớp tổng hợp (Pooling Layer): Áp dụng kỹ thuật Max-Pooling (kích thước $2 \times 2$) hoặc L2 Pooling để lấy giá trị đặc trưng lớn nhất, giảm kích thước không gian của ma trận dữ liệu và tạo tính bất biến đối với các phép dịch chuyển (translation), xoay (rotation) và co giãn (scaling).

Quá trình huấn luyện mạng được thực hiện thông qua việc tối ưu hóa hàm mất mát (Cost/Loss Function) bằng thuật toán Lan truyền ngược (Backpropagation) và thuật toán Giảm độ dốc (Gradient Descent / Stochastic Gradient Descent). Công thức tổng quát của hàm mất mát trên tập dữ liệu $D$:

$$\mathcal{L}{\mathcal{D}}(f_w) = \frac{1}{|D|} \sum{(x,y) \in D} L(f_w(x), y)$$

Trong đó $f_w(x)$ là nhãn hoặc vector đặc trưng được dự đoán từ ảnh đầu vào $x$, $y$ là nhãn thực tế, và $L$ là giá trị sai lệch cần tối thiểu hóa về mức 0.

So sánh sinh trắc học và thách thức môi trường

Đồ án phân tích ưu thế của nhận dạng khuôn mặt so với các phương pháp sinh trắc học khác (vân tay, mống mắt, dáng đi): không yêu cầu đối tượng phải tương tác trực tiếp với thiết bị thu thập, dữ liệu ảnh mặt phổ biến và dễ thu thập qua camera hoặc mạng xã hội, đồng thời cung cấp nhiều thông tin mở rộng (giới tính, độ tuổi, màu da, hướng nhìn, cảm xúc).

Bên cạnh đó, các thách thức kỹ thuật làm suy giảm độ chính xác nhận dạng được xác định gồm:

  • Điều kiện chiếu sáng thay đổi (Light conditions).
  • Quá trình lão hóa theo thời gian (Aging changes).
  • Biến đổi góc chụp (Pose variations), đặc biệt là các góc nghiêng lớn hơn $45^\circ$.
  • Biểu cảm khuôn mặt (Facial expressions) gây biến dạng vị trí mắt, mũi, miệng.
  • Hiện tượng che khuất (Occlusions) do phụ kiện (kính, khẩu trang) hoặc vật cản ngoại cảnh.

Công nghệ và công cụ mã nguồn mở

Hệ thống sử dụng hệ sinh thái phần mềm mã nguồn mở chuyên dụng:

  • OpenCV (phiên bản 4.3): Cung cấp các module xử lý ảnh core, imgproc, highgui, video, features2d, objdetect, ml, gpu, nonfree (SIFT, SURF), contrib, ocl, tối ưu hóa hiệu năng tính toán thông qua Intel TBB, IPP, OpenMP và NVIDIA CUDA.
  • Dlib: Cung cấp các thuật toán máy học (kNN, SVM) và mô hình căn chỉnh các điểm mốc trên khuôn mặt (Facial Landmark Alignment).
  • TensorFlow & Keras: Nền tảng quản lý luồng dữ liệu Tensor (với các thuộc tính Rank, Shape, Type: Scalar rank 0, Vector rank 1, Matrix rank 2, N-Tensor) và API xây dựng kiến trúc mạng Deep Learning.
  • NumPy & Matplotlib: Phục vụ tính toán đại số tuyến tính trên mảng đa chiều (Broadcasting, Slicing) và trực quan hóa dữ liệu huấn luyện qua Pyplot.

Nguồn dữ liệu thực nghiệm

Đồ án sử dụng bộ dữ liệu chuẩn LFW (Labeled Faces in the Wild) làm tập dữ liệu thực nghiệm. Bộ dữ liệu này chứa hơn 13.000 hình ảnh khuôn mặt người được thu thập từ internet và được gán nhãn danh tính chuẩn.


Thiết kế và triển khai

Hệ thống nhận dạng được thiết kế theo quy trình tuần tự 3 giai đoạn:

  1. Phát hiện và căn chỉnh khuôn mặt (Facial Detection & Alignment): Xác định tọa độ khuôn mặt trong khung hình 2D bằng thuật toán HOG kết hợp bộ phân lớp SVM, sau đó chuẩn hóa vùng ảnh mặt về kích thước cố định thông qua thư viện Dlib.
  2. Trích xuất đặc trưng (Feature Extraction): Sử dụng mô hình mạng học sâu kết hợp giữa kiến trúc VGG16 (gồm 138 triệu tham số, từng đạt độ chính xác top-5 $92{,}7%$ trên tập ImageNet) và mạng ConvNet đa nhánh (3 nhánh xử lý song song).
  3. Biểu diễn và so khớp danh tính (Embedding & Verification): Chuyển đổi dữ liệu từ các tầng tích chập về vector nhúng (Embedding Vector) kích thước 128 chiều được chuẩn hóa theo chuẩn $L_2$ ($L_2$ Normalization), áp dụng hàm Triplet Loss để tối ưu khoảng cách Euclidean giữa các khuôn mặt cùng danh tính và khác danh tính.

Kiến trúc các nhánh ConvNet kết hợp với VGG16 được triển khai bằng framework Keras như sau:

convnet_model = convnet_model_(input_shape)

# Nhánh tích chập thứ nhất
first_input = Input(shape=input_shape)
first_conv = Conv2D(96, kernel_size=(8, 8), strides=(16, 16), padding='same')(first_input)
first_max = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding='same')(first_conv)
first_max = Flatten()(first_max)
first_max = Lambda(lambda x: K.l2_normalize(x, axis=1))(first_max)

# Nhánh tích chập thứ hai
second_input = Input(shape=input_shape)
second_conv = Conv2D(96, kernel_size=(8, 8), strides=(32, 32), padding='same')(second_input)
second_max = MaxPool2D(pool_size=(7, 7), strides=(4, 4), padding='same')(second_conv)
second_max = Flatten()(second_max)
second_max = Lambda(lambda x: K.l2_normalize(x, axis=1))(second_max)

# Hợp nhất các nhánh và trích xuất vector 128 chiều
merge_one = concatenate([first_max, second_max])
merge_two = concatenate([merge_one, convnet_model.output])
emb = Dense(4096)(merge_two)
emb = Dense(128)(emb)
l2_norm_final = Lambda(lambda x: K.l2_normalize(x, axis=1))(emb)
Thành phần kiến trúc Tham số / Kỹ thuật cấu hình Vai trò kỹ thuật trong hệ thống
Phát hiện mặt HOG + Linear SVM (Dlib) Xác định tọa độ và cắt vùng khuôn mặt từ ảnh 2D
Nhánh 1 (First Conv) Conv2D ($96 \times 8 \times 8$, stride 16), MaxPool2D ($3 \times 3$, stride 2) Trích xuất đặc trưng cục bộ ở độ phân giải trung bình
Nhánh 2 (Second Conv) Conv2D ($96 \times 8 \times 8$, stride 32), MaxPool2D ($7 \times 7$, stride 4) Trích xuất đặc trưng ở vùng bao quát với bước nhảy lớn
Nhánh chính (VGG16) Mô hình chuẩn 16 layers, 138 triệu tham số Trích xuất đặc trưng trừu tượng mức cao
Tầng Dense kết hợp Dense(4096) $\rightarrow$ Dense(128) Thu gọn không gian đặc trưng về vector 128 chiều
Hàm tối ưu Triplet Loss kết hợp $L_2$ Normalization Tối ưu hóa khoảng cách không gian vector đặc trưng

Nội dung chính theo từng chương

Chương 1: Giới thiệu

Chương 1 làm rõ tính cấp thiết của đề tài xuất phát từ nhu cầu tự động hóa việc nhận diện đối tượng trong xã hội số và ứng dụng thông tin sinh trắc học tại Việt Nam. Tác giả trình bày cấu trúc 3 bước cơ bản của bài toán nhận dạng khuôn mặt trên ảnh 2D: phát hiện khuôn mặt, trích xuất đặc trưng bằng Deep Learning, và xác minh danh tính. Chương này xác định mục tiêu nghiên cứu các kỹ thuật HOG, SVM, VGG16, Triplet Loss cùng các thư viện OpenCV, Dlib, TensorFlow, Keras; đồng thời vạch ra phạm vi ứng dụng trong an ninh, điểm danh và giám sát công cộng.

Chương 2: Cơ sở lý thuyết

Chương 2 trình bày chi tiết nền tảng lý thuyết xử lý ảnh và học máy. Nội dung phân tích các yếu tố ảnh hưởng trực tiếp đến chất lượng nhận diện khuôn mặt (ánh sáng, độ tuổi, góc chụp, biểu cảm, che khuất), phân biệt hai bài toán xác định danh tính (Identification) và xác thực (Verification). Tác giả tổng hợp cấu trúc, chức năng của 6 thư viện mã nguồn mở (OpenCV, Dlib, TensorFlow, Keras, NumPy, Matplotlib). Về mặt mạng nơ-ron, chương này giải thích chi tiết cấu trúc mạng nhiều tầng ẩn (Deep Neural Network), nguyên lý hoạt động của tầng Convolution (cửa sổ trượt, ma trận lọc), tầng Max-Pooling, cơ chế chia sẻ trọng số giúp giảm tham số tính toán, cùng các bước huấn luyện mạng bằng thuật toán lan truyền ngược và giảm độ dốc (Gradient Descent).

Chương 3: Triển khai nghiên cứu

Chương 3 tập trung vào khâu chuẩn bị thực nghiệm: lựa chọn kiến trúc mạng học sâu VGG16 kết hợp mô hình ConvNet 3 nhánh để chuyển đổi ảnh khuôn mặt thành vector 128 chiều (thay thế cho vector 4096 chiều truyền thống), chuẩn bị bộ dữ liệu thử nghiệm LFW (Labeled Faces in the Wild) với hơn 13.000 ảnh mặt người có gán nhãn, và cấu hình hàm mất mát Triplet Loss để huấn luyện mạng so khớp đặc trưng.

Chương 4: Triển khai huấn luyện mô hình

Chương 4 mô tả chi tiết các bước cài đặt kỹ thuật: phát hiện vị trí khuôn mặt bằng HOG và Dlib (Facial Detection), biểu diễn các khuôn mặt dưới dạng vector số học trong không gian 128 chiều, mô phỏng dữ liệu huấn luyện, theo dõi diễn biến giá trị hàm mất mát (Loss function) qua các chu kỳ lặp (epochs), và thực hiện đánh giá độ chính xác của hệ thống trong bài toán xác minh và nhận dạng danh tính khuôn mặt.

Chương 5: Kết luận

Chương 5 tổng kết toàn bộ kết quả nghiên cứu và thực hiện đề tài. Nhóm tác giả khẳng định việc nắm bắt quy trình xây dựng hệ thống nhận diện khuôn mặt tự động từ lý thuyết đến cài đặt thực nghiệm, hoàn thành chương trình phần mềm đáp ứng mục tiêu nghiên cứu ban đầu.


Kết quả và đóng góp

Kết quả chính

  • Hệ thống hóa toàn diện cơ sở lý thuyết về thị giác máy tính, từ các phương pháp truyền thống (HOG, SVM) đến các mô hình học sâu hiện đại (CNN, VGG16, Triplet Loss).
  • Xây dựng thành công quy trình xử lý 3 giai đoạn tự động: trích xuất mặt 2D qua thư viện Dlib $\rightarrow$ trích xuất đặc trưng qua mạng ConvNet kết hợp VGG16 $\rightarrow$ ánh xạ khuôn mặt về vector nhúng 128 chiều chuẩn hóa $L_2$.
  • Cài đặt và thực nghiệm mô hình trên bộ dữ liệu chuẩn LFW với quy mô hơn 13.000 ảnh gán nhãn, chứng minh tính khả thi của việc giảm số chiều đặc trưng từ 4096 xuống 128 nhưng vẫn đảm bảo tính phân tách danh tính.

Đóng góp kỹ thuật tự đánh giá

  • Phân tích và làm rõ vai trò của các thư viện mã nguồn mở chuyên dụng (OpenCV, Dlib, TensorFlow, Keras) trong việc tối ưu hóa hiệu năng tính toán thời gian thực.
  • Thiết kế cấu trúc mạng ConvNet 3 nhánh tích hợp tầng tích chập đa kích thước kernel và bước nhảy ($8 \times 8$, stride 16 và 32) kết hợp VGG16, giúp trích xuất đồng thời các đặc trưng chi tiết cục bộ và đặc trưng trừu tượng toàn cục của khuôn mặt.
  • Hoàn thiện phần mềm nhận dạng kiểm soát khuôn mặt phục vụ cho việc nghiên cứu và định hướng ứng dụng thực tế.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế được ghi nhận

  • Hệ thống xây dựng hoàn toàn dựa trên xử lý hình ảnh 2D, do đó thiếu các thông tin về chiều sâu không gian (độ cao, độ cong sống mũi, cấu trúc trán).
  • Độ chính xác của mô hình chịu ảnh hưởng tiêu cực khi ảnh đầu vào có góc nghiêng lớn hơn $45^\circ$, điều kiện ánh sáng thay đổi đột ngột hoặc khuôn mặt bị che khuất một phần bởi phụ kiện (kính mắt, khăn che).
  • Quá trình huấn luyện mạng Deep Learning đòi hỏi tài nguyên tính toán lớn (Computational power) và thời gian thực hiện kéo dài.

Hướng nghiên cứu tiếp

  • Nghiên cứu các giải pháp thuật toán nội suy nhằm bù đắp vùng khuôn mặt bị che khuất hoặc biến dạng khi góc chụp thay đổi lớn.
  • Khai thác sâu hơn các tập lệnh phần cứng và nền tảng tính toán song song GPU (NVIDIA CUDA, OpenCL, Intel TBB) để tối ưu hóa tốc độ xử lý cho các hệ thống giám sát thời gian thực quy mô lớn.

Giá trị tham khảo

Báo cáo thực tập tốt nghiệp này là tài liệu tham khảo phù hợp cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Khoa học Máy tính: Học hỏi phương pháp tiếp cận bài toán Thị giác máy tính (Computer Vision), cách phối hợp giữa các thư viện xử lý ảnh cổ điển (OpenCV, Dlib) và framework Deep Learning (TensorFlow, Keras).
  • Người nghiên cứu về sinh trắc học và nhận dạng: Tham khảo chi tiết mã nguồn và kiến trúc mạng ConvNet 3 nhánh kết hợp VGG16 để trích xuất vector đặc trưng khuôn mặt 128 chiều sử dụng hàm Triplet Loss.
  • Kỹ sư triển khai hệ thống: Tham khảo cấu trúc các module cốt lõi của OpenCV (tối ưu hóa phần cứng bằng SSE, AVX, CUDA) và các kỹ thuật xử lý dữ liệu ma trận với NumPy.

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

1. Đề tài tập trung giải quyết bài toán xác định danh tính hay xác thực danh tính?

Đề tài tập trung vào bài toán xác định danh tính (Face Identification). Đây là bài toán dạng $1-N$, trong đó hệ thống so sánh ảnh khuôn mặt đầu vào với cơ sở dữ liệu gồm $N$ ảnh đã biết danh tính để tìm ra người có độ tương đồng cao nhất.

2. Mô hình học sâu trong đề tài sử dụng vector đặc trưng có kích thước bao nhiêu chiều?

Mô hình kết hợp giữa ConvNet 3 nhánh và kiến trúc VGG16 chuyển đổi và nén các tầng biểu diễn đặc trưng về vector nhúng 128 chiều (sau khi đi qua các tầng Dense(4096) $\rightarrow$ Dense(128) và chuẩn hóa $L_2$).

3. Tại sao mạng nơ-ron tích chập (CNN) lại có số lượng tham số ít hơn nhiều so với mạng kết nối đầy đủ (ANN)?

Mạng CNN giảm số lượng tham số nhờ cơ chế chia sẻ trọng số (Shared Weights and Biases) và trường tiếp nhận cục bộ (Local Receptive Field). Tất cả nơ-ron trong một bản đồ đặc trưng (Feature Map) đều dùng chung một bộ lọc (filter), thay vì mỗi nơ-ron phải kết nối riêng biệt tới toàn bộ điểm ảnh đầu vào như trong mạng ANN.

4. Bộ dữ liệu nào được nhóm tác giả sử dụng để thử nghiệm hệ thống?

Nhóm tác giả sử dụng bộ dữ liệu chuẩn Labeled Faces in the Wild (LFW), bao gồm hơn 13.000 hình ảnh khuôn mặt người được gán nhãn thu thập từ môi trường internet.

5. Thư viện Dlib và OpenCV đảm nhận nhiệm vụ gì trong hệ thống?

OpenCV đảm nhận việc cung cấp hạ tầng xử lý ảnh cơ bản, tối ưu hóa tính toán trên phần cứng và hỗ trợ thị giác máy tính; trong khi thư viện Dlib được sử dụng chuyên biệt cho tác vụ phát hiện khuôn mặt và tự động căn chỉnh các điểm mốc trên khuôn mặt (Facial Landmark Alignment) dựa trên mô hình học máy huấn luyện sẵn.


Kết luận

Đồ án thực tập tốt nghiệp "Xây dựng hệ thống nhận dạng kiểm soát khuôn mặt với Deep Learning" của nhóm sinh viên Trường Đại học Giao thông Vận tải TP. Hồ Chí Minh đã trình bày một quy trình hoàn chỉnh từ nghiên cứu lý thuyết đến triển khai thực nghiệm hệ thống nhận dạng mặt người. Đề tài kết hợp hiệu quả các kỹ thuật xử lý ảnh truyền thống (HOG, Dlib, OpenCV) với mạng nơ-ron tích chập sâu (VGG16, ConvNet 3 nhánh, Triplet Loss) để trích xuất không gian vector đặc trưng 128 chiều trên bộ dữ liệu LFW. Kết quả nghiên cứu cung cấp tài liệu tham khảo có cấu trúc rõ ràng về phương pháp luận và kỹ thuật lập trình cho các bài toán nhận dạng sinh trắc học ứng dụng học sâu.