Eigenface là gì

Privacy & Cookies

This site uses cookies. By continuing, you agree to their use. Learn more, including how to control cookies.

Xin chào, trong bài viết này chúng ta sẽ tìm hiểu một chút về lịch sử của các thuật toán Face Recognition và hai thuật toán được sử dụng phổ biến: Eigenfaces và LBPs.

FACE RECOGNITION LÀ GÌ?

Phối hợp với Face Detection, một kỹ thuật dùng để phát hiện sự hiện diện của khuôn mặt trong một bức ảnh, Face Recognition [Nhận dạng khuôn mặt] được sử dụng để xác định xem khuôn mặt vừa được phát hiện là của ai. Với mục đích nhận diện người, Face Recognition được sử dụng rất phổ biến trong các hệ thống an ninh/giám sát.

Kỹ thuật Face Recogtion có thể được chia thành 2 bước:

  1. Phát hiện khuôn mặt có trong bức ảnh với các phương pháp như Haar-cascades, HOG + Linear SVM, deep learning,
  2. Áp dụng các thuật toán để định danh các khuôn mặt đã được phát hiện ở bước 1 và.

Các hệ thống Face Recognition thuở sơ khai dựa trên các Facial Landmarks của khuôn mặt như vị trí và kích thước của mắt, mũi, miệng, gò má, Tuy nhiên, vì kỹ thuật thời đó chưa phát triển nên các hệ thống này rất nhạy cảm và dễ bị lỗi do các đặc trưng này được trích xuất và gán nhãn một cách thủ công.

Hình 1 Các Facial Landmarks

Các hệ thống Face Recognition ngày nay dựa trên các kỹ thuật Feature Extraction và Machine Learning để train một bộ classifier nhằm nhận dạng các khuôn mặt các nhau.

Tiếp theo chúng ta sẽ tìm hiểu về hai thuật toán Face Recognition phổ biến, đó là Eigenfaces và LBPs.

THUẬT TOÁN EIGENFACES

Được giới thiệu vào năm 1987, thuật toán Eigenfaces tuy đã cũ nhưng vẫn rất đáng để tìm hiểu. Cần biết rằng thuật toán Eigenfaces không hề bị giới hạn trong bài toán Face Recognition, nó có thể được áp dụng cho bất kỳ tập hợp đối tượng nào.

Dataset chúng ta cần có là một tập hợp các bức ảnh chứa khuôn mặt của những người cần nhận diện, càng nhiều ảnh cho mỗi người càng tốt. Mỗi bức ảnh cần có kích thước giống nhau và vị trí của các đặc trưng trên khuôn mặt phải tương ứng trên từng bức ảnh.

Chú ý: các bức ảnh khuôn mặt phải được resize về một kích thước đồng nhất trước khi áp dụng Eigenfaces.

Để thực hiện Eigenfaces, mỗi bức ảnh có kích thước W x H trong dataset sẽ được chuyển về dạng vector [WxH]-dim, xem hình 1 và 2. Nếu dataset chứa N bức ảnh thì chúng ta sẽ tạo được một ma trận M có kích thước N x [WxH].

Hình 2 Matrix 4×3
Hình 3 Vector 12-dim sau khi flatten matrix 4×3

Khi đã có được ma trận M chứa tất cả các vector biểu diễn khuôn mặt trong dataset, chúng ta sẽ áp dụng Principal Component Analysis [PCA] [1] để giảm chiều dữ liệu xuống còn K-dim thay vì [WxH]-dim [với K nhỏ hơn nhiều so với WxH]. Như vậy ma trận M sẽ được biến đổi thành ma trận Z mới có kích thước N x K.

Chú ý: số chiều dữ liệu K được giữ lại phải thỏa mãn điều kiện: K < min[N, WxH]

Ví dụ: Chúng ta có một tập hợp gồm 200 bức ảnh khuôn mặt có kích thước 360×240, từng bức ảnh sẽ được chuyển về dạng vector 86400-d. Như vậy, bức ảnh này được biểu diễn bởi 86400 giá trị trong hệ cơ sở đơn vị, với kích thước vector như vậy thì thời gian tính toán sẽ rất lớn. Để khắc phục nhược này, chúng ta sử dụng PCA để giảm chiều dữ liệu, ví dụ ở đây chúng ta chọn giữ lại 100 chiều [K=100], lúc này các bức ảnh sẽ được biểu diễn lại bởi 100 giá trị ở một cơ sở khác được tạo bởi 100 Eigenvectors [còn gọi là Eigenfaces].

Khi kích thước chỉ còn K-dim, các vector có thể dễ dàng được phân loại bởi k-NN [sử dụng Euclidean distance] hoặc SVM classifier.

Để tạo model Eigenfaces dành cho Face Recognition, OpenCV đã cung cấp function cv2.face.EigenFaceRecognizer_create[].

Một số nhược điểm của Eigenfaces:

  • Điểm trừ lớn nhất của Eigenfaces là để nhận được kết quả tốt nhất, các bức ảnh khuôn mặt phải được căn chỉnh sao cho vị trí của các đặc trưng trên khuôn mặt phải tương ứng trên mọi bức ảnh trong dataset, và tất nhiên điều này là không thể trong thực tế;
  • Khi cần update, chúng ta buộc phải re-train bộ classifier.

THUẬT TOÁN LBP DÙNG CHO FACE RECOGNITION

Phương pháp LBPs for face recognition được giới thiệu vào năm 2006 và vẫn đang được sử dụng rất rộng rãi.

Đầu tiên, các bức ảnh sẽ được chia thành 7 x 7 = 49 vùng bằng nhau, tại mỗi vùng này chúng ta sẽ tính được một LBP histogram.

Chú ý: không nhất thiết phải resize các bức ảnh khuôn mặt về một kích thước đồng nhất.

Hình 4 Bức ảnh được chia thành 7 x 7 = 49 vùng

Bằng cách chia bức ảnh thành nhiều vùng và tính LBP histogram cho mỗi vùng, chúng ta đã có được thông tin về vị trí mắt, mũi, miệng trên khuôn mặt [locality and spatial infomation]. Các thông tin này còn cho phép chúng ta áp dụng trọng số lên histogram của các vùng chứa các đặc trưng quan trọng cho phép phân biệt giữa các khuôn mặt, xem hình 5.

Hình 5 Các vùng quan trọng trên khuôn mặt

Như ở hình 5, histogram của vùng hình ảnh chứa đôi mắt và miệng sẽ được nhân với trọng số lớn hơn các vùng có màu tối hơn.

Cuối cùng, histogram của 49 vùng hình ảnh sẽ được ghép lại với nhau thành một Feature Vector duy nhất. Lúc này chúng ta có thể sử dụng k-NN classifier [sử dụngdistance] với k=1 để phân loại các khuôn mặt.

Để tạo model LBPH dành cho Face Recognition, OpenCV đã cung cấp function cv2.face.LBPHFaceRecognizer_create[].

Khi cần update bộ recognizer, chúng ta chỉ cần thêm dữ liệu mới vào dataset mà không cần phải re-train.

SUMMARY

Qua bài viết này chúng ta đã tìm hiểu về hai giải thuật quan trọng được áp dụng cho Face Recognition là Eigenfaces và LBPs, trong đó LBPs cho kết quả tốt hơn so với Eigenfaces. Ở bài viết tiếp theo, chúng ta sẽ tìm hiểu cách áp dụng giải thuật LBPs.

Cảm ơn các bạn đã theo dõi bài viết.

Thân ái và quyết thắng.

Reference:
[1] Face Recognition with OpenCV.
[2] Principal Component Analysis algorithm.
[3] Principal Component Analysis machinelearningcoban.com.

Hãy để lại comment nếu có câu hỏi!

Video liên quan

Chủ Đề