im-xiaoming/Facial-Recognition-Model

Facial Recognition

Jupyter Notebook

0

99 commits

updated May 10, 2026

See the code

README

Facial Recognition System

Lê Trọng Ngọc, Nguyễn Ngọc Minh, Trần Thị Huyền, Bùi Như Ý
Khoa Công nghệ Thông tin, Đại học Công nghiệp Thành phố Hồ Chí Minh
Liên hệ: [email protected], [email protected], [email protected], [email protected]

Dự án xây dựng hệ thống nhận diện khuôn mặt dựa trên học sâu, kết hợp RetinaFace cho phát hiện/căn chỉnh khuôn mặt, backbone CNN hoặc Vision Transformer để trích xuất đặc trưng, và AdaFace để học embedding thích nghi theo chất lượng ảnh. Mô hình được huấn luyện trên VGGFace2 và đánh giá trên các bộ dữ liệu LFW, AGEDB-30, CFP-FP, CFP-FF, IJB-B và IJB-C.

Tài Nguyên

Nội Dung Chính

  • Phát hiện khuôn mặt bằng RetinaFace.
  • Căn chỉnh khuôn mặt dựa trên landmark, crop/resize về kích thước 112x112.
  • Trích xuất embedding 512 chiều bằng IResNet-18, IResNet-50 hoặc ViT.
  • Huấn luyện với AdaFace loss để tăng khả năng phân biệt identity trong điều kiện ảnh có chất lượng khác nhau.
  • So khớp embedding bằng cosine similarity.
  • Đánh giá bằng Accuracy và TAR@FAR trên các benchmark chuẩn.
  • Thử nghiệm kết hợp đặc trưng truyền thống Gabor/HOG với embedding học sâu.

Cấu Trúc Thư Mục

.
+-- train.ipynb                 # Notebook huấn luyện trên Google Colab
+-- TRAIN.md                    # Hướng dẫn chạy notebook train
+-- requirements.txt            # Danh sách thư viện Python
+-- net.py                      # Backbone IResNet
+-- head.py                     # AdaFace head
+-- trainer.py                  # Training loop
+-- data.py                     # Dataset và dataloader
+-- utils.py                    # Hàm tiện ích train/evaluate
+-- ViT/                        # Backbone Vision Transformer
+-- expert/                     # Đặc trưng Gabor, HOG
+-- validation/                 # Đánh giá Accuracy
+-- validation_mixed/           # Đánh giá IJB-B/IJB-C
+-- notebooks/                  # Notebook demo, eval và train phụ
+-- img/                        # Hình ảnh, biểu đồ trong báo cáo

Phương Pháp

Pipeline của hệ thống gồm 4 giai đoạn:

  1. Face Detection: phát hiện khuôn mặt và landmark bằng RetinaFace.
  2. Face Alignment: căn chỉnh khuôn mặt theo landmark, đưa ảnh về kích thước chuẩn 112x112.
  3. Feature Extraction: trích xuất vector embedding 512 chiều bằng backbone IResNet hoặc ViT.
  4. Matching: so khớp embedding bằng cosine similarity; nếu vượt ngưỡng threshold thì xem là cùng danh tính, ngược lại là unknown.

Trong quá trình huấn luyện, AdaFace điều chỉnh margin dựa trên chất lượng mẫu ảnh, giúp mô hình học tốt hơn với ảnh rõ/nét và giảm tác động của ảnh chất lượng thấp.

Pipeline

Phát Hiện Và Căn Chỉnh Khuôn Mặt

RetinaFace được sử dụng để phát hiện vùng khuôn mặt và các landmark quan trọng. Sau đó ảnh được căn chỉnh, crop và resize về kích thước 112x112 trước khi đưa vào backbone.

Face detection

Face alignment

Tăng Cường Dữ Liệu

Trong quá trình train, ảnh đầu vào có thể được tăng cường bằng các phép biến đổi như lật ngang, mô phỏng ảnh độ phân giải thấp, crop và thay đổi điều kiện quang học để tăng khả năng tổng quát hóa của mô hình.

Data augmentation

Đặc Trưng Truyền Thống

Ngoài embedding học sâu, báo cáo còn thử nghiệm kết hợp các đặc trưng truyền thống như Gabor Filters và HOG để so sánh hiệu quả.

Gabor Filters

HOG

Dữ Liệu

Theo báo cáo, dữ liệu huấn luyện chính là VGGFace2 đã được tiền xử lý theo chuẩn nhận diện khuôn mặt: phát hiện khuôn mặt, căn chỉnh landmark và resize về 112x112. Các tập validation/evaluation gồm:

Bộ dữ liệu VGGFace2

Phân bố số lượng ảnh theo identity

  • LFW
  • AGEDB-30
  • CFP-FP
  • CFP-FF
  • IJB-B
  • IJB-C

Dataset của dự án được cung cấp tại:

https://drive.google.com/drive/folders/1E4rXfu1p60XOYwgFW31G20OyciwLu5s9?usp=sharing

Cài Đặt

Môi trường khuyến nghị:

  • Python 3.10+
  • PyTorch có CUDA
  • GPU NVIDIA nếu train model

Cài đặt dependency:

pip install -r requirements.txt

Nếu chạy trên Google Colab, notebook train.ipynb sẽ cài thêm:

pip install menpo
pip install fvcore
apt-get install -y p7zip-full

Huấn Luyện

Mở train.ipynb trên Google Colab và chạy lần lượt các cell:

  1. Mount Google Drive.
  2. Cài đặt thư viện và clone source.
  3. Giải nén dataset.
  4. Cấu hình đường dẫn dataset/checkpoint/pretrained.
  5. Khởi tạo dataloader, model, AdaFace head và optimizer.
  6. Train và lưu checkpoint.
  7. Evaluate trên validation set và IJB-B/IJB-C nếu đã chuẩn bị dữ liệu benchmark.

Các biến quan trọng trong notebook:

TRAIN_DATA_PATH = '/content/dataset/train'
ACCURACY_VAL_PATH = '/content/val_data/data'
CHECKPOINT = '/content/drive/MyDrive/checkpoints/VGG+Asian/ir_50_checkpoint_3.pth'
SAVE_CHECKPOINT_DIR = '/content/drive/MyDrive'
PRE_TRAINED_PATH = '/content/drive/MyDrive/pretrained/adaface_ir50_webface4m.ckpt'

BATCH_SIZE = 256
MODEL_NAME = 'ir_50'  # ir_18, ir_50, vit
LEARNING_RATE = 0.01
EPOCHS = 4

Hướng dẫn chi tiết cách chạy notebook nằm trong TRAIN.md.

Minh họa quá trình huấn luyện và biến thiên loss/accuracy:

Kết quả huấn luyện

Loss và Accuracy

Biểu đồ loss

Kết Quả Accuracy

Kết quả Accuracy (%) trên các bộ dữ liệu verification:

MethodAGE DBLFWCFP-FPCFP-FF
SphereFace97.0599.6796.84-
CosFace98.1799.8798.26-
MagFace98.1799.8398.46-
IResNet-1899.4899.5595.1099.46
IResNet-5094.8099.6096.2499.49
IResNet-50 Fine-tuning97.1099.8097.1199.80
IResNet-50 + Taylor Softmax96.7799.7597.2099.80
ViT Fine-tuning96.5799.8397.4699.85
IResNet-18 + Gabor94.1399.5094.8699.55
ViT + Gabor96.2599.8597.3699.82
IResNet-50 + Gabor96.7099.7096.8399.80
IResNet-18 + HOG64.0382.5250.0049.05
IResNet-50 + HOG65.1082.7550.0049.00
ViT + HOG64.9782.7350.0049.05

Kết Quả TAR@FAR

Kết quả TAR@FAR (%) trên IJB-B và IJB-C:

MethodIJB-B 1e-4IJB-B 1e-5IJB-C 1e-4IJB-C 1e-5
SphereFace89.1973.5891.7783.33
CosFace94.0189.2595.5692.68
MagFace94.3389.8895.8193.67
IResNet-1889.8281.3791.9086.67
IResNet-5091.3484.7593.4289.36
IResNet-50 Fine-tuning93.1581.2794.9988.84
IResNet-50 + Taylor Softmax93.7283.81--
ViT Fine-tuning94.0685.8895.7691.44
IResNet-18 + Gabor89.0779.7291.1485.34
IResNet-50 + Gabor92.7780.5794.6288.14
ViT + Gabor93.3684.9295.3190.53
IResNet-18 + HOG0.640.160.560.19
IResNet-50 + HOG0.680.160.580.21
ViT + HOG0.680.160.580.21

Đường cong ROC:

ROC on IJB-B

ROC on IJB-C

Triển Khai Hệ Thống

Hệ thống được mô tả theo mô hình Client-Server gồm:

  • GUI hiển thị camera và kết quả nhận diện.
  • Backend API/WebSocket xử lý khung hình theo thời gian thực.
  • Vector database FAISS để lưu và truy vấn embedding.

Luồng xử lý:

  1. Enrollment: thu thập nhiều ảnh của mỗi người dùng, phát hiện/căn chỉnh khuôn mặt, trích xuất embedding 512 chiều và lưu vào cơ sở dữ liệu.
  2. Inference: nhận frame từ camera, trích xuất embedding, so khớp cosine similarity với cơ sở dữ liệu, trả về danh tính nếu điểm tương đồng vượt ngưỡng.

Workflow

Ghi Chú

  • Model và dataset cần được tải từ các link Google Drive ở mục Tài Nguyên.
  • Khi train trên Colab, nếu gặp lỗi hết VRAM hãy giảm BATCH_SIZE.
  • Nếu muốn train từ đầu, đặt CHECKPOINT = ''.
  • Nếu muốn fine-tuning, giữ PRE_TRAINED_PATH trỏ tới checkpoint pretrained phù hợp.

im-xiaoming/Facial-Recognition-Model

Facial Recognition

Jupyter Notebook

0

99 commits

updated May 10, 2026

See the code

README

Facial Recognition System

Lê Trọng Ngọc, Nguyễn Ngọc Minh, Trần Thị Huyền, Bùi Như Ý
Khoa Công nghệ Thông tin, Đại học Công nghiệp Thành phố Hồ Chí Minh
Liên hệ: [email protected], [email protected], [email protected], [email protected]

Dự án xây dựng hệ thống nhận diện khuôn mặt dựa trên học sâu, kết hợp RetinaFace cho phát hiện/căn chỉnh khuôn mặt, backbone CNN hoặc Vision Transformer để trích xuất đặc trưng, và AdaFace để học embedding thích nghi theo chất lượng ảnh. Mô hình được huấn luyện trên VGGFace2 và đánh giá trên các bộ dữ liệu LFW, AGEDB-30, CFP-FP, CFP-FF, IJB-B và IJB-C.

Tài Nguyên

Nội Dung Chính

  • Phát hiện khuôn mặt bằng RetinaFace.
  • Căn chỉnh khuôn mặt dựa trên landmark, crop/resize về kích thước 112x112.
  • Trích xuất embedding 512 chiều bằng IResNet-18, IResNet-50 hoặc ViT.
  • Huấn luyện với AdaFace loss để tăng khả năng phân biệt identity trong điều kiện ảnh có chất lượng khác nhau.
  • So khớp embedding bằng cosine similarity.
  • Đánh giá bằng Accuracy và TAR@FAR trên các benchmark chuẩn.
  • Thử nghiệm kết hợp đặc trưng truyền thống Gabor/HOG với embedding học sâu.

Cấu Trúc Thư Mục

.
+-- train.ipynb                 # Notebook huấn luyện trên Google Colab
+-- TRAIN.md                    # Hướng dẫn chạy notebook train
+-- requirements.txt            # Danh sách thư viện Python
+-- net.py                      # Backbone IResNet
+-- head.py                     # AdaFace head
+-- trainer.py                  # Training loop
+-- data.py                     # Dataset và dataloader
+-- utils.py                    # Hàm tiện ích train/evaluate
+-- ViT/                        # Backbone Vision Transformer
+-- expert/                     # Đặc trưng Gabor, HOG
+-- validation/                 # Đánh giá Accuracy
+-- validation_mixed/           # Đánh giá IJB-B/IJB-C
+-- notebooks/                  # Notebook demo, eval và train phụ
+-- img/                        # Hình ảnh, biểu đồ trong báo cáo

Phương Pháp

Pipeline của hệ thống gồm 4 giai đoạn:

  1. Face Detection: phát hiện khuôn mặt và landmark bằng RetinaFace.
  2. Face Alignment: căn chỉnh khuôn mặt theo landmark, đưa ảnh về kích thước chuẩn 112x112.
  3. Feature Extraction: trích xuất vector embedding 512 chiều bằng backbone IResNet hoặc ViT.
  4. Matching: so khớp embedding bằng cosine similarity; nếu vượt ngưỡng threshold thì xem là cùng danh tính, ngược lại là unknown.

Trong quá trình huấn luyện, AdaFace điều chỉnh margin dựa trên chất lượng mẫu ảnh, giúp mô hình học tốt hơn với ảnh rõ/nét và giảm tác động của ảnh chất lượng thấp.

Pipeline

Phát Hiện Và Căn Chỉnh Khuôn Mặt

RetinaFace được sử dụng để phát hiện vùng khuôn mặt và các landmark quan trọng. Sau đó ảnh được căn chỉnh, crop và resize về kích thước 112x112 trước khi đưa vào backbone.

Face detection

Face alignment

Tăng Cường Dữ Liệu

Trong quá trình train, ảnh đầu vào có thể được tăng cường bằng các phép biến đổi như lật ngang, mô phỏng ảnh độ phân giải thấp, crop và thay đổi điều kiện quang học để tăng khả năng tổng quát hóa của mô hình.

Data augmentation

Đặc Trưng Truyền Thống

Ngoài embedding học sâu, báo cáo còn thử nghiệm kết hợp các đặc trưng truyền thống như Gabor Filters và HOG để so sánh hiệu quả.

Gabor Filters

HOG

Dữ Liệu

Theo báo cáo, dữ liệu huấn luyện chính là VGGFace2 đã được tiền xử lý theo chuẩn nhận diện khuôn mặt: phát hiện khuôn mặt, căn chỉnh landmark và resize về 112x112. Các tập validation/evaluation gồm:

Bộ dữ liệu VGGFace2

Phân bố số lượng ảnh theo identity

  • LFW
  • AGEDB-30
  • CFP-FP
  • CFP-FF
  • IJB-B
  • IJB-C

Dataset của dự án được cung cấp tại:

https://drive.google.com/drive/folders/1E4rXfu1p60XOYwgFW31G20OyciwLu5s9?usp=sharing

Cài Đặt

Môi trường khuyến nghị:

  • Python 3.10+
  • PyTorch có CUDA
  • GPU NVIDIA nếu train model

Cài đặt dependency:

pip install -r requirements.txt

Nếu chạy trên Google Colab, notebook train.ipynb sẽ cài thêm:

pip install menpo
pip install fvcore
apt-get install -y p7zip-full

Huấn Luyện

Mở train.ipynb trên Google Colab và chạy lần lượt các cell:

  1. Mount Google Drive.
  2. Cài đặt thư viện và clone source.
  3. Giải nén dataset.
  4. Cấu hình đường dẫn dataset/checkpoint/pretrained.
  5. Khởi tạo dataloader, model, AdaFace head và optimizer.
  6. Train và lưu checkpoint.
  7. Evaluate trên validation set và IJB-B/IJB-C nếu đã chuẩn bị dữ liệu benchmark.

Các biến quan trọng trong notebook:

TRAIN_DATA_PATH = '/content/dataset/train'
ACCURACY_VAL_PATH = '/content/val_data/data'
CHECKPOINT = '/content/drive/MyDrive/checkpoints/VGG+Asian/ir_50_checkpoint_3.pth'
SAVE_CHECKPOINT_DIR = '/content/drive/MyDrive'
PRE_TRAINED_PATH = '/content/drive/MyDrive/pretrained/adaface_ir50_webface4m.ckpt'

BATCH_SIZE = 256
MODEL_NAME = 'ir_50'  # ir_18, ir_50, vit
LEARNING_RATE = 0.01
EPOCHS = 4

Hướng dẫn chi tiết cách chạy notebook nằm trong TRAIN.md.

Minh họa quá trình huấn luyện và biến thiên loss/accuracy:

Kết quả huấn luyện

Loss và Accuracy

Biểu đồ loss

Kết Quả Accuracy

Kết quả Accuracy (%) trên các bộ dữ liệu verification:

MethodAGE DBLFWCFP-FPCFP-FF
SphereFace97.0599.6796.84-
CosFace98.1799.8798.26-
MagFace98.1799.8398.46-
IResNet-1899.4899.5595.1099.46
IResNet-5094.8099.6096.2499.49
IResNet-50 Fine-tuning97.1099.8097.1199.80
IResNet-50 + Taylor Softmax96.7799.7597.2099.80
ViT Fine-tuning96.5799.8397.4699.85
IResNet-18 + Gabor94.1399.5094.8699.55
ViT + Gabor96.2599.8597.3699.82
IResNet-50 + Gabor96.7099.7096.8399.80
IResNet-18 + HOG64.0382.5250.0049.05
IResNet-50 + HOG65.1082.7550.0049.00
ViT + HOG64.9782.7350.0049.05

Kết Quả TAR@FAR

Kết quả TAR@FAR (%) trên IJB-B và IJB-C:

MethodIJB-B 1e-4IJB-B 1e-5IJB-C 1e-4IJB-C 1e-5
SphereFace89.1973.5891.7783.33
CosFace94.0189.2595.5692.68
MagFace94.3389.8895.8193.67
IResNet-1889.8281.3791.9086.67
IResNet-5091.3484.7593.4289.36
IResNet-50 Fine-tuning93.1581.2794.9988.84
IResNet-50 + Taylor Softmax93.7283.81--
ViT Fine-tuning94.0685.8895.7691.44
IResNet-18 + Gabor89.0779.7291.1485.34
IResNet-50 + Gabor92.7780.5794.6288.14
ViT + Gabor93.3684.9295.3190.53
IResNet-18 + HOG0.640.160.560.19
IResNet-50 + HOG0.680.160.580.21
ViT + HOG0.680.160.580.21

Đường cong ROC:

ROC on IJB-B

ROC on IJB-C

Triển Khai Hệ Thống

Hệ thống được mô tả theo mô hình Client-Server gồm:

  • GUI hiển thị camera và kết quả nhận diện.
  • Backend API/WebSocket xử lý khung hình theo thời gian thực.
  • Vector database FAISS để lưu và truy vấn embedding.

Luồng xử lý:

  1. Enrollment: thu thập nhiều ảnh của mỗi người dùng, phát hiện/căn chỉnh khuôn mặt, trích xuất embedding 512 chiều và lưu vào cơ sở dữ liệu.
  2. Inference: nhận frame từ camera, trích xuất embedding, so khớp cosine similarity với cơ sở dữ liệu, trả về danh tính nếu điểm tương đồng vượt ngưỡng.

Workflow

Ghi Chú

  • Model và dataset cần được tải từ các link Google Drive ở mục Tài Nguyên.
  • Khi train trên Colab, nếu gặp lỗi hết VRAM hãy giảm BATCH_SIZE.
  • Nếu muốn train từ đầu, đặt CHECKPOINT = ''.
  • Nếu muốn fine-tuning, giữ PRE_TRAINED_PATH trỏ tới checkpoint pretrained phù hợp.