Quá trình huấn luyện một chuỗi phát hiện liên quan đến việc kết hợp của hai vấn đề. Chuỗi phát hiện với nhiều đặc trưng hơn sẽ nhận dạng chính xác hơn, tỉ lệ nhận dạng nhầm mẫu âm sẽ thấp hơn. Tuy nhiên chuỗi phát hiện với nhiều đặc trưng đòi hỏi thời gian tính toán nhiều hơn. Về nguyên tắc ta có thể định nghĩa một cấu trúc tối ưu mà trong đó số tầng, số đặc trưng mỗi tầng và ngưỡng của mỗi tầng phải được dung hòa để tối thiểu hóa số đặc trưng. Việc tìm ra cấu trúc tối ưu này là rất khó khăn.
Trên thực tế, một cấu trúc đơn giản để tạo ra một nhận dạng hiệu suất cao. Mục tiêu được chọn là giảm tối thiểu việc nhận dạng nhầm là dương và tối đa hiệu suất phát hiện đúng. Mỗi tầng được thêm các đặc trưng để cho đến khi tỉ lệ nhận dạng nhầm là dương và tỉ lệ tìm kiếm đúng đạt được, được kiểm tra bằng tập mẫu kiểm chứng.
Trong hầu hết các trường hợp xác định các đối tượng chúng ta chỉ sử dụng một phần nhỏ của bức ảnh. Theo đó để loại bỏ các vùng không phải là đối tượng được xác định nhanh chóng và chỉ tập trung vào những vùng liên quan, để kiểm tra tất cả các cửa sổ một cách triệt để. Cấu trúc lớp cho phép
cách tiếp cận như vậy. Toàn bộ quá trình phát hiện có thể mô tả bằng một cây quyết định suy giảm dần. Nó bao gồm N giai đoạn trong một loạt các lớp nhận dạng được kết nối dùng để phân biệt các đối tượng được xác định và nền ảnh. Mỗi kết quả dương của bộ nhận dạng trước sẽ kích hoạt việc đánh giá của các nhận dạng sau và kết quả dương của bộ nhận dạng này lại kích hoạt cho bộ nhận dạng sau nữa. Mỗi giai đoạn được training để đạt được tỉ lệ TP (True Positive) gần một và tỉ lệ FP (False Positive) giữ ở tầm 0,5. Các cửa sổ nhận dạng xác thực được thông qua các giai đoạn kế tiếp nhau. Bất cứ kết quả âm của tầng nhận dạng nào cũng sẽ loại bỏ khung hình đó.
Cấu trúc chuỗi phát hiện phản ảnh một điều là trong một ảnh đơn bất kỳ, một lượng lớn các khung hình phụ sẽ là âm. Do đó chuỗi phát hiện cố gắng loại bỏ càng nhiều khung hình âm trong những tầng đầu tiên càng tốt.
Do có dạng cây quyết định, các bộ phận sau sẽ được huấn luyện trên các mẫu thông qua ở tất cả các tầng trước. Kết quả là công việc của tầng sau sẽ khó hơn ở tầng trước do các mẫu đưa đến tầng sau thường khó nhận dạng hơn nên tỉ lệ nhận dạng nhầm ở các tầng này cao hơn so với tầng ban đầu.
1 T 2 T 3 T 4 T F F F F Further Processing
Reject Sub - Window All Sub - Window
Do tính chất nối tiếp, tỷ lệ phát hiện tổng thể là hàm mũ của các giai đoạn hiệu quả đơn lẻ.
i N i N i cas p p TP 1 i N i N i cas f f FP 1 2.2.1.5. Bộ nhận dạng Haar riêng lẻ
Trong quá trình nhận dạng có nhiều tính năng mở rộng, vì thế cần phải tìm cách để lựa chọn được một tập con nhỏ nhất các đặc trưng để đạt được tỉ lệ phát hiện mong muốn. Boosting là một khái niệm học máy kết hợp giữa việc thực thi trên nhiều “bộ nhận dạng yếu” (Weak Classifier). “Yếu” ở đây nghĩa là chỉ nhỉnh hơn một chút so với lựa chọn ngẫu nhiên vào trong một bộ nhận dạng tổng thể duy nhất là “bộ nhận dạng mạnh”(Strong Classifier).
Trong các bộ nhận dạng Haar (Haar Cascade Classifier - HCC) thì các cây hồi quy và nhận dạng (Classification And Regression Tree - CART) được sử dụng như là các bộ nhận dạng yếu. Kích cỡ của chúng chỉ giới hạn trong một vài tầng chia tách. Trong trường hợp đơn giản nhất (Single-Split CARTs) chỉ bao gồm có nguyên gốc của cây. Chúng chỉ là một đặc trưng duy nhất.
Sử dụng các bộ nhận dạng yếu phức tạp hơn một chút (ví dụ 4-Splits CARTs) thì chậm hơn trong việc training nhưng cho phép bảo vệ một số quan hệ giữa các đặc tính trong một bộ nhận dạng yếu. Ngay cả những nhận dạng phức tạp hơn cũng có thể không đạt được tỉ lệ phát hiện mong muốn. Để kết hợp các bộ nhận dạng yếu thành một bộ nhận dạng mạnh chúng ta sử dụng thuật toán AdaBoost. Theo Lienhart và các đồng nghiệp đã chứng minh phiên bản Gentle AdaBoost mang lại tỉ lệ phát hiện bị lỗi thấp hơn so với các phiên bản AdaBoost khác.
Thuật toán Gentle AdaBoost được thực hiện qua các bước sau: 1. Cho N mẫu (x1,y1)…(xN,yN) với xi € Rk, yi € (-1,1)
2. Bắt đầu với weight wi=1/N, i=1,…….,N
3. Lặp lại các bước sau cho đến khi đạt được p và f mong muốn, cho m chạy từ 1…….. M
3.1. Thực hiện hàm hồi quy của CART fm(x) với lần lượt các mẫu với độ nặng wi tương ứng
3.2. Đặt wi=wi.exp(-yi.fm(xi))
4. Đầu ra của bộ nhận dạng:signMm1fm(x)
2.2.1.6. Kiến trúc hệ thống
Hệ thống phát hiện của chúng ta chứa đựng ba giai đoạn. Ở giai đoạn đầu tiên xác định khuôn mặt với HCC được sử dụng cho ảnh của chúng ta. Những trả lại tích cực của láng giềng của HCC được kết hợp với nhau trong một kết quả xác định duy nhất. Nó có thể điều chỉnh tỉ lệ phát hiện bằng việc hạn chế tối thiểu số lượng các láng giềng (Nb). Các vùng được đưa ra cho việc phát hiện được tiếp tục xử lý độc lập. Ở giai đoạn thứ hai, các phát hiện HCC đối với mắt trái và mắt phải đã được sử dụng cho các vùng khuôn mặt tìm thấy trước đó và kết quả của chúng được lưu trữ trong hai danh sách. Cũng như bộ phát hiện khuôn mặt phải đối diện với những hạn chế về số láng giềng có thể thiết lập. Ngoài ra, thay vì tìm kiếm mắt trên khuôn mặt, việc tìm kiếm theo khu vực có thể được sử dụng. Điều này có nghĩa, áp dụng mắt trái để dò ngoài cùng bên phải và áp dụng mắt phải để dò ngoài cùng bên trái 60% của một nửa trên của khuôn mặt. Giai đoạn thứ ba là một luật dựa trên những hiểu biết đơn giản về sự kết hợp trong việc xác định mắt trái và phải trong một cặp mắt hợp lệ. Đối với mỗi sự kết hợp giữa mắt trái và phải, một hình chữ nhật bao quanh khuôn mặt được đưa ra với một góc quay ø được tính
toán. Ví dụ như những cặp mắt với góc quay ø>20 thì không hợp lý, không giống như thuộc khuôn mặt theo chiều thẳng đứng.
2.2.2. Xác định mắt, mũi, miệng và vùng bao quanh khuôn mặt
Theo như trên, sau khi đã xác định được các nhận dạng cho các đặc điểm cần xác định trên khuôn mặt ở đây bao gồm mắt, mũi, miệng và vùng bao quanh khuôn mặt.
Theo như các lớp nhận dạng được xây dựng trong bộ thư viện OpenCV chúng ta xác định được ba nhận dạng cho mắt, mũi và miệng với ba file xml.
Bảng 2.2: Bảng liệt kê các file xml
Vị trí Classifier
Vùng bao quanh khuôn mặt haarcascade_frontalface_alt.xml
Mắt haarcascade_eye.xml
Mũi haarcascade_mcs_nose.xml
Miệng haarcascade_mcs_mouth.xml
Sử dụng các nhận dạng này kết hợp với việc sử dụng một số phương thức để gọi file xml và thực hiện việc nhận dạng để có thể xác định các vị trí đã nêu trên một ảnh xác định. Kết quả của việc xác định sẽ là các hình chữ nhật với các màu khác nhau được vẽ bao quanh các điểm cần xác định.
Kết quả có thể được thấy như trong hình 2.15.
Hình 2.15: Kết quả sau khi phát hiện các đặc điểm
2.2.3. Tính toán góc quay theo 3 chiều
Sau khi áp dụng các kỹ thuật trên, chúng ta xác định được một số thành phần trên khuôn mặt như trong hình 2.15. Việc tiếp theo là từ những vị trí đã xác định sẽ thực hiện xác định các góc quay theo các chiều như trong mô hình 3D trên khuôn mặt đã đề cập trong các phần ở trên.
2.2.3.1. Xác định góc quay theo hƣớng
Biên trái của vùng khuôn mặt có thể được tính toán | ) ( ) ( |P x P x DML M FL (2.1)
Với PM(x) là vị trí theo chiều ngang của môi (đã xác định được) và PFL(x) là biên trái của môi (mép trái của môi). Biên phải của vùng khuôn mặt có thể được tính toán: | ) ( ) ( |P x P x DMR M FR (2.2)
Chúng ta có thể tính được
MR ML
HS P P
D (2.3)
Công thức mối liên hệ giữa góc alpha và DHS như sau:
b e k D D LR HS (2.4)
Với k, , b là các giá trị xác định. Chúng ta có thể tính toán được giá trị của chúng trong hai trường hợp góc quay đặc biệt như khi mặt thẳng đứng (góc =0) và khi quay tận sang phải (/2). Trong hai trường hợp đó chúng ta có thể tính toán đưa ra được hệ phương trình sau:
0 2 ) 0 ( ) 2 / 2 / ( k b D D k b D D D LR LR LR LR LR (2.5)
Từ đó tính được góc alpha theo công thức sau:
LR LR M D D x P 2 ( ) 2 (2.6) 2.2.3.2. Xác định góc quay theo hƣớng
Góc beta tính từ không và giới hạn trong khoảng từ -900
đến 900 khi đầu quay.
Tương tự chúng ta cũng sẽ tính toán được khoảng cách giữa môi và điểm biên trên cùng của khuôn mặt, có thể được tính toán bằng công thức:
| ) ( ) ( |P y P y DMT M FT (2.7)
Theo hướng dọc, điểm ở trên môi người thì không nằm ở trung tâm, vì vậy chúng ta phải dịch chuyển tọa độ của điểm môi sang điểm trung tâm: P’M(y)=PM(y) - DMC. Công thức tính toán đưa ra cho như sau:
TB VS D D 2 (2.8)
Trong đó: MC TB M MB MT VS D D P y D D D 2 ( ) 2 Hướng của đầu theo hướng y được tính như sau:
TB MC TB M D D D y P ( ) 2 2 2 (2.9)
Trong công thức (2.6), DLR là chiều rộng của vùng bao quanh khuôn mặt trong khi công thức (2.9) thì DTB là chiều cao của vùng khuôn mặt và PM(x,y) là vị trí của môi, DMC là một giá trị hằng số có thể được tính toán theo kinh nghiệm. Sử dụng dữ liệu khuôn mặt có thể tính toán được giá trị của DTB
được tìm thấy khoảng 7/40.
2.2.3.3. Xác định góc quay theo hƣớng γ Công thức tính toán: ) ) ( ) ( arctan( y P x P LR LR
Trong công thức trên: DLR(x) và DLR(y) là khoảng cách theo chiếu dọc và chiều ngang giữa hai mắt…. Chúng ta có thể định nghĩa như sau:
) ( ) ( ) (x P x P x DLR LE RE ) ( ) ( ) (y P y P y DLR LE RE
Với PLE(x,y) là vị trí của mắt trái và PRE(x,y) là vị trí của mắt phải. Chúng ta có thể đưa ra công thức cuối cùng tính toán góc quay theo hướng z như sau: ( ) ( ) arctan( ) ( ) ( ) LE RE LE RE P x P x P y P y
Như vậy, chúng ta đã xác định được các góc quay , , theo ba chiều của khuôn mặt dựa vào các đặc điểm đã được nhận dạng và trích chọn trên khuôn mặt. Do vậy việc nhận dạng và trích chọn các đặc trưng của khuôn mặt là vô cùng quan trọng. Nếu vì một lý do nào đó mà chương trình không xác
định được hoặc xác định thiếu các đặc trưng (mắt – mũi – miệng) trên khuôn mặt thì sẽ không xác định được giá trị các góc quay.
Với việc áp dụng thuật toán AdaBoost, Haar Feature, mô hình Cascade of Classifier, quá trình nhận dạng và trích chọn các đặc trưng của khuôn mặt có độ tin cậy và chính xác cao. Do đó việc xác định các góc quay của khuôn mặt so với tư thế chuẩn được thông qua các công thức trên. Giá trị các góc quay tính được luôn nằm trong ngưỡng sai số cho phép của bài toán.
CHƢƠNG 3: CHƢƠNG TRÌNH THỬ NGHIỆM 3.1. Bài toán phát hiện hƣớng mặt ngƣời trong ảnh
Như chúng ta đã biết, bài toán phát hiện hướng mặt người trong ảnh là một khía cạnh nhỏ trong nhận dạng khuôn mặt. Không phải quá trình nhận dạng nào cũng xử lý với các ảnh mẫu chuẩn mà đôi khi xuất hiện nhiều ảnh mẫu với những tư thế, trạng thái biểu cảm khác nhau của khuôn mặt. Với kết quả nghiên cứu, tác giả đã khắc phục được một số khó khăn, nhược điểm trong quá trình nhận dạng khuôn mặt. Trong luận văn, tác giả đã trình bày một số kỹ thuật nhằm xác định hướng mặt người trong ảnh, từ đó xây dựng chương trình thử nghiệm, đánh giá thuật toán đã sử dụng, thử nghiệm với tập dữ liệu ảnh đầu vào thu từ camera hoặc các tập dữ liệu có sẵn.
3.2. Tƣ thế khuôn mặt ngƣời
Kỹ thuật xác định hướng mặt người trong ảnh tập trung vào việc phát hiện các tư thế, trạng thái khác nhau của khuôn mặt so với tư thế chuẩn. Đối tượng cần phân tích là khuôn mặt của một người trong tư thế chuẩn và các tư thế thay đổi. Dựa vào các thành phần được phát hiện trên khuôn mặt (mắt – mũi – miệng) làm cơ sở phát hiện, xác định hướng khuôn mặt và các góc quay so với tư thế chuẩn ban đầu.
Hình 3.1: Khuôn mặt chuẩn và các tư thế thay đổi
a, Tư thế chuẩn c, Hướng sang phải e, Hướng xuống dưới
b, Hướng sang trái d, Hướng lên trên
3.3. Các tƣ thế khác nhau của khuôn mặt
Hình 3.2: Tư thế khuôn mặt khi hướng sang trái
Hình 3.3: Tư thế khuôn mặt khi hướng sang phải
Hình 3.4: Tư thế khuôn mặt khi hướng lên trên
Hình 3.6: Tư thế khuôn mặt khi hướng lên trên sang trái
Hình 3.7: Tư thế khuôn mặt khi hướng lên trên sang phải
Hình 3.8: Tư thế khuôn mặt khi hướng xuống dưới sang trái
3.4. Chƣơng trình thử nghiệm
Trong chương 2, tác giả đã trình bày hai kỹ thuật phát hiện hướng mặt người trong ảnh: phát hiện hướng mặt người trong ảnh dựa trên tâm mắt và dựa theo các đặc trưng Haar. Kỹ thuật phát hiện hướng mặt người dựa trên tâm mắt tuy đơn giản nhưng còn nhiều tồn tại và hạn chế. Kỹ thuật này chỉ làm việc với mô hình 2D của khuôn mặt, không xác định được đầy đủ các góc quay của khuôn mặt. Ngược lại, kỹ thuật phát hiện hướng mặt người dựa theo các đặc trưng Haar có nhiều ưu điểm hơn. Việc vận dụng linh hoạt các đặc trưng Haar, thuật toán AdaBoost, mô hình Cascade of Classifier vào quá trình nhận dạng và phát hiện hướng khuôn mặt. Kỹ thuật này cho phép xác định đầy đủ và chính xác các góc quay của khuôn mặt. Do vậy, tác giả đã xây dựng chương trình thử nghiệm theo kỹ thuật phát hiện hướng mặt người dựa theo các đặc trưng Haar. Trong quá trình xây dựng chương trình thử nghiệm, tác giả sử dụng công cụ Visual C++
của Microsoft và thư viện mã nguồn mở OpenCV của Intel. Dưới đây là giao diện chính của chương trình.
Hình 3.10: Giao diện chính của chương trình
Chương trình sử dụng tập dữ liệu đầu vào là các ảnh thu được từ camera. Các ảnh mẫu này lưu lại quá trình thay đổi trạng thái của khuôn mặt, mô tả các tư thế khác nhau như: khuôn mặt ở tư thế thẳng đứng, hướng sang trái, hướng sang phải, hướng xuống dưới, hướng lên trên, hướng lên trên sang