7. Những nội dung và kết quả nghiên cứu được trong đề tài
2.2. Các yếu tố ảnh hưởng đến việc dò tìm khuôn mặt trên hình ảnh
Hình ảnh là những file phức tạp được lưu trữ trong máy tính với các định dạng như: JPG, PNG, PGM,… Mỗi loại định dạng có cách tổ chức, lưu trữ và phục vụ cho từng mục đích khác nhau. Do đó việc dò tìm khuôn mặt trên hình ảnh bị rất nhiều yếu tố ảnh hưởng đến như:
Định dạng của hình ảnh (JPG, PNG, PGM,...). Kích thước của hình ảnh. Bình thường để một thuật toán xử lý nhanh một hình ảnh, kích cở phù hợp nhất là từ 100x100 đến 500x500 pixel. Đối với việc dò tìm khuôn mặt trên hình ảnh, kích thước của hình ảnh rất quan trọng. Nếu quá nhỏ sẽ không dò tìm được khuôn mặt, còn nếu quá lớn sẽ ảnh hưởng đến tốc độ xử lý.
Biến đổi mặt phẳng ảnh (quay, hướng,... của khuôn mặt). Các vị trí của khuôn mặt trên hình ảnh thường là những vị trí sau.
SVTH: Phan Thanh Ngọc Trang 35/ 103 Chính giữa
Hình 2.2 Khuôn mặt chính giữa Quay sang trái
Hình 2.3 Khuôn mặt bên phải
Các vị trí trên có thể dò tìm khuôn mặt một cách dể dàng. Tuy nhiên nếu quay sang trái hay sang phải quá nhiều thì việc dò tìm khuôn mặt có thể không được.
Biến đổi độ sáng tối và ngữ cảnh. Việc thay đổi độ sáng tối và ngữ cảnh trên hình ảnh chỉ ảnh hưởng rất nhỏ đến việc dò tìm khuôn mặt trên hình ảnh. Tuy nhiên nó chỉ ít ảnh hưởng ở một mức độ nào đó. Nếu quá sáng hoặc quá tối hay ngữ cảnh dễ nhầm lẫn, nó sẽ dẫn đến việc dò tìm khuôn mặt không chính xác.
Biến đổi hình dáng của khuôn mặt (các sắc thái khác nhau của khuôn mặt). Khuôn mặt thường hay có những sắc thái, cảm xúc khác nhau (cười, nhắm mắt, mở mắt, ….) những sắc thái này thường ít ảnh hưởng đến việc dò tìm khuôn mặt trên hình ảnh.
Hình 2.4 Biến đổi sắc thái của khuôn mặt
Ngoài ra việc dò tìm khuôn mặt trên hình ảnh còn phụ thuộc vào nhiều yếu tố khác như thuật toán dùng để xử lý hay là hướng tiếp cận.
SVTH: Phan Thanh Ngọc Trang 36/ 103 2.3. AdaBoost
Như đã biết, AdaBoost (Adaptive Boost) là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cận Boosting được Freund và Schapire đưa ra vào năm 1995. AdaBoost hoạt động trên nguyên tắc kết hợp tuyến tính các weak classifier dựa trên các đặc trưng Haar- Line để hình thành một strong classifier.
Để có thể kết hợp các bộ phân loại yếu, Adaboost sử dụng một trọng số (weight) để đánh dấu các mẫu khó nhận dạng. Trong quá trình huấn luyện, cứ mỗi weak classifier được xây dựng, thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn bị cho việc xây dựng weak classifier tiếp theo: tăng trọng số của các mẫu bị nhận dạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi weak classifier vừa xây dựng. Bằng cách này, các weak classifier sau có thể tập trung vào các mẫu mà các weak classifier trước đó chưa thực hiện tốt. Sau cùng các weak classifier sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng để tạo nên một strong classifier.
Viola và Jones dùng AdaBoost kết hợp các bộ phân loại yếu sử dụng các đặc trưng Haar-like theo mô hình phân tầng (cascade) như sau:
Hình 2.5 Mô hình phân tầng kết hợp các bộ phân loại yếu để xác định khuôn mặt
SVTH: Phan Thanh Ngọc Trang 37/ 103
x: cửa sổ con cần xét Ok: ngưỡng (O = teta)
fk: giá trị của đặc trưng Haar-like
pk: hệ số quyết định chiều của phương trình
AdaBoost sẽ kết hợp các bộ phân loại yếu thành bộ phân loại mạnh như sau: H(x) = sign(a1h1(x) + a2h2(x) + ... + anhn(x)) (a = alpha)
Với: at >= 0 là hệ số chuẩn hoá cho các bộ phân loại yếu
Hình 2.6 Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh 2.4. Các đặc trưng Haar-like
Do Viola và Jones công bố, gồm 4 đặc trưng cơ bản để xác định khuôn mặt người. Mỗi đặc trưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật "trắng" hay "đen" như trong hình sau:
Hình 2.7 Bốn đặc trưng Haar-like cơ bản
Để sử dụng các đặc trưng này vào việc xác định khuôn mặt người, 4 đặc trưng Haar-like cơ bản được mở rộng ra, và được chia làm 3 tập đặc trưng như sau:
SVTH: Phan Thanh Ngọc Trang 38/ 103 2. Đặc trưng đường (line features)
3. Đặc trưng xung quanh tâm (center-surround features)
Hình 2.8 Các đặc trưng mở rộng của các đặc trưng Haar-like cơ bản
Dùng các đặc trưng trên, ta có thể tính được giá trị của đặc trưng Haar-like là sự chênh lệch giữa tổng của các pixel của các vùng đen và các vùng trắng như trong công thức sau:
f(x) = Tổngvùng đen(các mức xám của pixel) - Tổngvùng trắng(các mức xám của pixel)
Sử dụng giá trị này, so sánh với các giá trị của các giá trị pixel thô, các đặc trưng Haar-like có thể tăng/giảm sự thay đổi in-class/out-of-class (bên trong hay bên ngoài lớp khuôn mặt người), do đó sẽ làm cho bộ phân loại dễ hơn.
Như vậy ta có thể thấy rằng, để tính các giá trị của đặc trưng Haar-like, ta phải tính tổng của các vùng pixel trên ảnh. Nhưng để tính toán các giá trị của các đặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán khá lớn, không đáp ứng được cho các ứng dụng đòi hỏi tính run-time. Do đó Viola và Jones đưa ra một khái niệm gọi là Integral Image, là một mảng 2 chiều với kích thước bằng với kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử của mảng này được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó. Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh, việc tính toán này đơn thuần chỉ dựa trên phép cộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh.
SVTH: Phan Thanh Ngọc Trang 39/ 103 Hình 2.9 Cách tính Integral Image của ảnh
Sau khi đã tính được Integral Image, việc tính tổng các giá trị mức xám của một vùng bất kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau:
Giả sử ta cần tính tổng các giá trị mức xám của vùng D như trong hình 2.10, ta có thể tính như sau:
D = A + B + C + D – (A+B) – (A+C) + A
Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, tương tự như vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm P1. Vậy ta có thể viết lại biểu thức tính D ở trên như sau:
Hình 2.10 Ví dụ cách tính nhanh các giá trị mức xám của vùng D trên ảnh
Tiếp theo, để chọn các đặc trưng Haar-like dùng cho việc thiết lập ngưỡng, Viola và Jones sử dụng một phương pháp máy học được gọi là AdaBoost. AdaBoost sẽ kết hợp các bộ phân loại yếu để tạo thành một bộ phân loại mạnh. Với bộ phân loại yếu chỉ cho ra câu trả lời chính xác chỉ hơn việc
SVTH: Phan Thanh Ngọc Trang 40/ 103
đoán một cách ngẫu nhiên một chút, còn bộ phân loại mạnh có thể đưa ra câu trả lời chính xác trên 60%.
2.5. Hệ thống xác định vị trí khuôn mặt người
Hình 2.11 Hệ thống xác định vị trí khuôn mặt người (Face detection system)
Như trong hình trên, từ ảnh gốc ban đầu, ta sẽ tính được Integral Image, là mảng 2 chiều với phần tử (x, y) sẽ được tính bằng tổng của các phần tử (x', y') với x' < x và y' < y, mục đích là để tính nhanh tổng của các giá trị mức xám của một vùng hình chữ nhật bất kỳ trên ảnh gốc. Các vùng ảnh con này sẽ được đưa qua các hàm Haar cơ bản để ước lượng đặc trưng, kết quả ước lượng sẽ được đưa qua bộ điều chỉnh AdaBoost để loại bỏ nhanh các đặc trưng không có khả năng là đặc trưng của khuôn mặt người. Chỉ có một tập nhỏ các đặc trưng mà bộ điều chỉnh AdaBoost cho là có khả năng là đặc trưng của khuôn mặt người mới được chuyển sang cho bộ quyết định kết quả (là tập các bộ phân loại yếu có cấu trúc như trong hình 2.11). Bộ quyết định sẽ tổng hợp kết quả là khuôn mặt người nếu kết quả của các bộ phân loại yếu trả về là khuôn mặt người.
Mỗi bộ phân loại yếu sẽ quyết định kết quả cho một đặc trưng Haar-like, được xác định ngưỡng đủ nhỏ sao cho có thể vượt được tất cả các bộ dữ liệu mẫu trong tập dữ liệu huấn luyện (số lượng ảnh khuôn mặt trong tập huấn luyện có thể rất lớn). Trong quá trình xác định khuôn mặt người, mỗi vùng ảnh con sẽ
SVTH: Phan Thanh Ngọc Trang 41/ 103
được kiểm tra với các đặc trưng trong chuỗi các đặc trưng Haar-like, nếu có một đặc trưng Haar-like nào cho ra kết quả là khuôn mặt người thì các đặc trưng khác không cần xét nữa. Thứ tự xét các đặc trưng trong chuỗi các đặc trưng Haar-like sẽ được dựa vào trọng số (weight) của đặc trưng đó do AdaBoost quyết định dựa vào số lần và thứ tự xuất hiện của các đặc trưng Haar-like.
2.6. Ưu điểm, khuyết điểm của thuật toán AdaBoost 2.6.1. Ưu điểm 2.6.1. Ưu điểm
- Phương pháp cho độ chính xác khoảng 80%, dò tìm nhanh thích hợp cho việc dò tìm trong thời gian thực, trong video.
- Thích hợp cho việc huấn luyện dữ liệu bị nhiễu. - Phương pháp trích đặc trưng thực hiện khá nhanh.
2.6.2. Khuyết điểm
- Thuật toán huấn luyện khá chậm do tổ hợp các bộ phân loại yếu rất lớn.
- Không ít các tính chất của AdaBoost chưa được chứng minh chặt chẽ.
2.7. Thuật toán PCA 2.7.1. Giới thiệu về PCA 2.7.1. Giới thiệu về PCA
PCA là 1 phương pháp để nhận dạng các mẫu trong dữ liệu và biểu diễn dữ liệu bằng cách làm nổi bật sự giống và khác nhau. Khi các mẫu trong dữ liệu rất khó nhận ra trong không gian nhiều chiều thì PCA là một công cụ mạnh để phân tích chúng.
Các bước cơ bản trong PCA
Bước 1: Lấy dữ liệu
Bước 2: Trừ trung bình mẫu: Với mỗi chiều dữ liệu giả sử ở chiều
x, ta đều có 1 trung bình mẫu, công việc trong bước này là trừ tất cả giá trị trong chiều x cho trung bình mẫu x. Kết thúc bước này ta sẽ có trung bình mẫu ở tất cả các chiều là 0.
Bước 3: Tính ma trận hiệp phương sai.
Bước 4: Tính các vectơ riêng và giá trị riêng của ma trận hiệp
SVTH: Phan Thanh Ngọc Trang 42/ 103
Bước 5: Chọn các thành phần chính: Đây là bước cuối cùng trong
PCA. Trong bước này, tùy thuộc vào số lượng thành phần chính cần lấy, ta lấy lần lượt các thành phần (vectơ riêng) tương ứng với các giá trị riêng cao nhất.
2.7.2. Sử dụng JavaCV và thuật toán PCA để nhận dạng khuôn mặt
Nhận dạng khuôn mặt là quán trình tìm kiếm để gán một tên vào một khuôn mặt nào đó. Sau khi chúng ta dò tìm khuôn mặt bằng thuật toán Adaboost bây giờ chúng ta sẽ tìm chủ nhân của khuôn mặt đó là ai. Trước khi đi vào phần chính chúng ta hãy tìm hiểu một số khái niệm sau:
2.7.2.1. Eigenface là gì?
Eigenface là thuật toán đơn giản để nhận dạng khuôn mặt mà có thể dễ dàng được cài đặt (implements).
2.7.2.2. Cách nhận dạng khuôn mặt như thế nào?
Dưới đây sẽ cho thấy “nhận dạng khuôn mặt” làm việc như thế nào. Cho một ví dụ ta có một vài khuôn mặt và một số người, các bước để nhận dạng được tiến hành như sau:
1. Tính toán một khoảng cách “distance” giữa khuôn mặt cần nhận dạng với những khuôn mặt trong tập dữ liệu đã được học (training).
2. Chọn khuôn mặt trong tập dữ liệu đã học mà gần giống nhất với khuôn mặt cần nhận dạng (khuôn mặt này đã biết rõ thông tin).
3. Nếu khoảng cách nằm trong khoảng có thể chấp nhận được, kết luận khuôn mặt đã được nhận dạng, ngược lại khuôn mặt không được nhận dạng.
2.7.2.3. Làm thế nào để tính khoảng cách giữa 2 hình ảnh?
Khoảng cách trong các eigenface ban đầu là thước đo như là điểm tới điểm (point-to-point). Đây cũng có thể được gọi là khoảng cách Euclidean. Trong 2D (two dimensions), khoảng cách Euclidean giữa hai điểm P1 và P2 là:
SVTH: Phan Thanh Ngọc Trang 43/ 103
Trong 3D (three dimensions) khoảng cách đó là sqrt(dx2 + dy2 + dz2). Hình bên dưới cho chúng ta thấy khoảng cách trong 2D.
Hình 2.12 Khoảng cách Euclidean, d12, cho 2 điểm trong 2D
Trong không gian 2 chiều như hình trên, kích thước gồm trục x và trục y. Để trở thành 3D ta chỉ cần thêm trục tạo độ z vào.Nhưng cái gì là kích thước của khuôn mặt? Câu trả lời đơn giản nhất là eigenface, nó sẽ xem sét vị trí của từng pixel để phân chia kích thước.
2.7.2.4. Giảm kích thước bằng PCA (Dimensionality Reduction by PCA)
Có nhiều cách để giảm kích thước, trong số đó là sử dụng eigenface, nó được gọi là Principal Components Analysis (PCA). Chi tiết về thuật toán PCA đã được trình bày cụ thể trong phần trên.
2.7.2.5. Dòng phù hợp tối thiểu (Line Fitting and PCA)
Để có một trực giác về những gì mà PCA làm, hãy nhìn vào cách đặc biệt của PCA mà nó được gọi là “dòng phù hợp tối thiểu”. Ở hình thứ 1 bên tay trái cho chúng ta thấy một ví dụ gắn một dòng tới 3 điểm: vị trí bản đồ 2D cho Los Angeles, Chicago và Newyork.
Ba điểm của bản đồ là gần như giống nhau, nhưng không hoàn toàn trên một dòng duy nhất. Nếu bạn đang lập kế hoạch cho một chuyến đi, mối quan hệ đó sẽ là thông tin hữu ích cho bạn. Trong ý nghĩa đó một dòng duy nhất thể hiện một cái gì đó cần thiết về mối quan hệ của chúng. Một đường thẳng chỉ có một
SVTH: Phan Thanh Ngọc Trang 44/ 103
chiều, vì vậy nếu chúng ta thay thế vị trí 2D của điểm với các địa điểm dọc theo một đường duy nhất, chúng ta sẽ giảm được chiều của chúng.
Bởi vì chúng gần như là nằm trên một hàng, chúng có thể được nối với nhau bởi một đường thẳng với một lỗi nhỏ. Lỗi trên đường thẳng nối chúng là với nhau là thước đo dùng để thêm khoảng cách của hình vuông tới mỗi điểm của đường thẳng. Đường thẳng mà tốt nhất “best-fit line” là đường thẳng có lỗi nhỏ nhất.
Hình 2.13 Bên phải: đường thẳng nối ba điểm là cách đặc biệt của PCA. Bên trái: để chiếu những điểm từ bảng đồ 2D đến đường 1D, điểm của những nơi trên đường thẳng mà gần nhất đến điểm 2D. Bên đưới: không gian con 1D và khoảng cách giữa những điểm tới không gian con này.
2.7.2.6. Định nghĩa không gian con (Defining a Subspace)
Mặc dù dòng tìm thấy ở trên là một đối tượng 1D, nó nằm bên trong một không gian 2D lớn hơn, và có một định hướng (độ dốc). Độ dốc của dòng thể hiện một cái gì đó quan trọng về ba điểm. Nó chỉ ra hướng mà chúng đang trải ra nhiều nhất.
Nếu chúng ta định vị trí hình chữ nhật (x, y) để cho rằng nguồn gốc của nó là một nơi nào đó trên dòng này, chúng ta có thể viết phương trình đường một cách đơn giản y = mx, trong đó m là độ dốc của dòng: dy / dx. Khi chúng ta mô tả theo cách này, đường thẳng là một không gian con của không gian 2D xác định bởi hệ trục tọa độ (x, y). Mô tả này nhấn mạnh khía cạnh của dữ liệu chúng ta đang quan tâm, cụ thể là hướng giữ những điểm này tách ra khỏi nhau.
SVTH: Phan Thanh Ngọc Trang 45/ 103 2.7.2.7. Không gian con PCA(The PCA Subspace)
Hướng tách tối đa được gọi là thành phần chính thứ nhất của một tập dữ liệu. Hướng với sự tách biệt lớn tiếp theo là vuông góc. Đó là thành phần chính thứ hai.Trong một tập dữ liệu 2D, chúng ta có thể có nhiều nhất là hai thành phần chính.
Kích thước của hình ảnh càng lớn, chúng ta có thể có nhiều thành phần chính trong một tập dữ liệu của hình ảnh.
Tuy nhiên, số lượng các thành phần chính chúng ta có thể tìm thấy hầu như được giới hạn bởi số lượng các điểm dữ liệu. Để xem lý do tại sao, hãy nghĩ