Tải bản đầy đủ

Biometric image processing

ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG

BÁO CÁO BÀI TẬP LỚN MÔN XỬ LÝ ẢNH
Đề Tài
Biometric Image Processing: Face Detection using Haar Classifier

Giảng viên hướng dẫn: PGS.TS Nguyễn Hoàng Lan
Nhóm sinh viên thực hiện:

Nguyễn Văn Sơn

- MSSV 20143863 – KSTN CNTT K59

Trương Quang Toàn - MSSV 20134028 – KSTN CNTT K58

Hà Nội ngày 20 tháng 12 năm 2017
1


MỤC LỤC

I.

GIỚI THIỆU CHUNG ................................................................................................ 3

II. BÀI TOÁN PHÁT HIỆN KHUÔN MẶT........................................................................ 4
1. Khái quát bài toán ..................................................................................................... 4
2. Sơ đồ khối chức năng của hệ thống Haar Classifier .................................................. 4
2.1. Training ............................................................................................................. 4
2.2. Test. …………………………………………………………………………………………………………….5
III. NGUYÊN LÝ HOẠT ĐỘNG ....................................................................................... 5
1. Huấn luyện và xây dựng hệ thống ............................................................................. 5
1.1. Trích xuất đặc trưng ......................................................................................... 5
1.2. Integral Image .................................................................................................. 7
1.3. Thuật toán phân loại ........................................................................................ 9
1.4. Cấu trúc phân tầng ......................................................................................... 14
2. Test và độ đo hiệu năng hệ thống ........................................................................... 19
IV. CÀI ĐẶT THỰC NGHIỆM ....................................................................................... 19
V. KẾT LUẬN ............................................................................................................ 23
VI. TÀI LIỆU THAM KHẢO .......................................................................................... 24

2


I.

GIỚI THIỆU CHUNG

Phát hiện khuôn mặt (Face detection) là một trong những chủ đề được nghiên cứu
nhiều nhất trong lĩnh vực thị giác máy tính. Mục đích của bài toán phát hiện khuôn mặt là
xác định xem có khuôn mặt người hay không trong một bức ảnh bất kì, và nếu có, trả lại
vị trí và một khung nhìn với mỗi khuôn mặt.
Một số ứng dụng của bài toán xác định khuôn mặt là: hệ thống tương tác giữa
người và máy (điều kiển máy tính qua các cử động của khuôn mặt), hệ thống nhận dạng
người (giúp cho các cơ quan an ninh quản lý con người), hệ thống quan sát theo dõi, hệ
thống quản lý việc ra vào cho các cơ quan và công ty, hệ thống kiểm tra người lái xe có
ngủ gật hay không, hệ thống phân tích cảm xúc trên khuôn mặt, và hệ thống nhận dạng
khuôn mặt cho các máy ảnh kỹ thuật số...
Con người có thể xác định khuôn mặt một các dễ dàng, nhưng đây là một nhiệm
vụ rất khó khăn với máy tính vì các lí do như kích thước ảnh, vị trí, góc nhìn, độ sáng tối.
Hiện nay có rất nhiều phương pháp nhận dạng khuôn mặt người, dựa vào các tính chất


của các phương pháp, ta có thể chia ra làm bốn hướng tiếp cận chính như sau: Hướng
tiếp cận dựa trên tri thức: mã hoá hiểu biết của con người về các loại khuôn mặt và tạo
ra các tập luật để xác định khuôn mặt. Hướng tiếp cận dựa trên đặt tả không thay đổi:
mục tiêu các thuật toán tìm ra các đặt trưng mô tả cấu trúc khuôn mặt người (các đặt
trưng không thay đổi với tư thế, vị trí đặt thiết bị thu hình, độ sáng tối thay đối...). Hướng
tiếp cận dựa trên so khớp mẫu: dùng các mẫu chuẩn hay các đặt trưng của khuôn mặt
người. Hướng tiếp cận dựa trên diện mạo: phương pháp học từ một tập ảnh huấn luyện
mẫu để xác định khuôn mặt người.
Trong báo cáo này, chúng em sẽ trình bày chi tiết một hệ thống dựa trên hướng
tiếp cận diện mạo, đó là hệ thống Haar Classifier do Voila-Jones đề xuất. Đây là một hệ
thống có ảnh hưởng khá lớn vì nó có thể phát hiện khuôn mặt nhanh chóng và cho độ
chính xác cao. Báo cáo này sẽ tập trung tìm hiểu chi tiết các kiến thức có liên quan và một
vài thử nghiệm phát hiện khuôn mặt với hệ thống này.
Nội dung tiếp theo của báo cáo như sau: phần II trình bày khái quát bài toán phát
hiện khuôn mặt và sơ đồ khối chức năng của hệ thống; phần III trình bày chi tiết về các
bước xây dựng hệ thống, bao gồm các vấn đề như trích xuất đặc trưng, phương pháp biểu
diễn ảnh “Integral Image”, thuật toán phân loại dựa trên Adaboost, mô hình phân tầng;
phần IV là cài đặt và thực nghiệm hệ thống Haar Classifier, phần V là phần kết luận.
3


II.
1.

BÀI TOÁN PHÁT HIỆN KHUÔN MẶT
Khái quát bài toán

Bài toán phát hiện khuôn mặt có thể xem là bài toán con của bài toán phát hiện
vật thể. Nhiệm vụ của bài toán phát hiện vật thể là xác định vị trí và kích cỡ của tất cả các
vật thể cùng loại trong một bức ảnh.
Bài toán phát hiện khuôn mặt thực chất là một bài toán phân loại. Đầu vào của hệ
thống phát hiện khuôn mặt là một bức ảnh, hệ thống cần cho biết trong bức ảnh có tồn
tài khuôn mặt hay không. Do đó, để có thể giải quyết bài toán này, ta có thể áp dụng các
kĩ thuật học máy, sử dụng một tập các bức ảnh được gán nhãn (có mặt người và không
có mặt người) để tìm ra các đặc trưng có ích cho quá trình xác định mặt người. Sau đó, sử
dụng những đặc trưng này để xác định trong ảnh có mặt người hay không.
2.

Sơ đồ khối chức năng của hệ thống Haar Classifier

Hệ thống Haar Classifier có 2 pha, đó là pha huấn luyện (training) và pha kiểm tra (test)
2.1.

Training

Hệ thống được huấn luyện với tập dữ liệu rất nhiều các ảnh dữ liệu có kích thước 24x24.
Cụ thể gồm có 4916 ảnh chứa khuôn mặt (mặt chụp ở góc chính diện) và 350 triệu ảnh
không có mặt.
Về sơ đồ khối có thể tổng quát như gồm các bước sau:

Hình 1: Sơ đồ khối pha huấn luyện hệ thống

4


2.2.

Test

Sau khi đã hoàn thành pha Training, thu được một mô hình quyết định để sử dụng cho
pha Test.
Với một ảnh đầu vào mới, sẽ được chia thành các sub-windows 24x24 giống như kích
thước ảnh dữ liệu trong tập training, mô hình này sẽ accepted hoặc discarded những
sub-window này tương ứng sub-window này có mặt người hay không, từ đó xác định vị
trí có khuôn mặt người trong ảnh ban đầu

Hình 2: Sơ đồ khối pha test của hệ thống

III.

NGUYÊN LÝ HOẠT ĐỘNG

Trước hết chúng ta cùng tìm hiểu chi tiết các phần trong pha huấn luyện (training) của hệ
thống Haar Classifier.
1.
1.1.

Huấn luyện và xây dựng hệ thống
Trích xuất đặc trưng

a) Các đặc trưng Haar-like
Trong phần này, chúng ta sẽ tìm hiểu một khái niệm được gọi là các đặc trưng Haar-like.
Trước hết là các đặc trưng Haar-like cơ bản, do Viola và Johns công bố, gồm những cửa
sổ hình chữ nhật có các dạng như sau (Loại thứ nhất là đặc trưng hai hình chữ nhật. Các
vùng chữ nhật này có kích thước giống nhau. Loại thứ hai là đặc trưng ba hình chữ. Cuối
cùng là đặc trưng bốn hình chữ nhật , các vùng đen trắng có thể đổi ngược nhau):

Hình 3: Các đặc trưng Haar-like cơ bản

Để sử dụng các đặc trưng này vào việc phát hiện khuôn mặt người, các đặc trưng
cơ bản trên đã được mở rộng thành nhiều dạng, có thể chia thành 3 tập như sau:
5


Tập các đặc trưng cạnh (edge features):

Tập các đặc trưng đường (line features):

Tập các đặc trưng xung quanh tâm (center-surround features):

Hình 4: Các đặc trưng Haar-like mở rộng

b) Trích xuất đặc trưng
Sử dụng các đặc trưng Haar-like cơ bản, tiến hình trích xuất các feature từ tập ảnh dữ
liệu training như sau.
Các ảnh đang xét là ảnh đa mức xám với kích thước 24x24. Với mỗi đặc trưng Haarlike cơ bản trên (kích thước có thể thay đổi), chúng ta đặt tại các vị trí khác nhau trên ảnh
24x24, mỗi kích thước và mỗi cách đặt như vậy được gọi là một feature. Số lượng
features thu được là khá lớn, chẳng hạn xét 4 dạng trên với tất cả kích thước và vị trí đặt
có thể thì số features đạt được hơn 160 000, vượt xa số lượng pixel là 24x24=576.

Hình 5: Minh họa cho một số features

Giá trị của mỗi feature trên từng ảnh dữ liệu cụ thể là khác nhau, và được tính bằng
tổng các pixel nằm ở trên vùng chữ nhật trắng trừ tổng các pixel nằm ở trên vùng chữ
nhật đen.

6


Hình 6: Giá trị của một số features trên ảnh cụ thể

Chú ý rằng trong hình trên, chúng ta đã trích xuất được giá trị của hai features
mang thông tin quan trọng: feature thứ nhất tập trung vào tính chất trên khuôn mặt người
vùng mắt thường tối hơn vùng dưới mũi và má, còn feature thứ hai dứa vào tính chất
vùng mắt tối hơn phần sống mũi. Với mỗi bức ảnh 24x24 chúng ta có hơn 160 000 features
nhưng đa số trong đó không mang nhiều ý nghĩa cho việc phát hiện khuôn mặt, chẳng hạn
như các feature ở vùng má không có nhiều ý nghĩa vì không có vùng nào sáng hay tối hơn
vùng khác, vì thế cần một phương pháp hoặc một thuật toán có thể giúp chọn ra những
features tốt nhất, vừa đảm bảo hiệu quả phát hiện, đồng thời chi phí tính toán được giảm
đi rất nhiều. Cụ thể vấn đề này sẽ được thảo luận ở các phần sau.
Như vậy theo cách trên với mỗi ảnh dữ liệu trong tập training chúng ta thực hiện
tính toán giá trị các features theo cách trên. Và đây được gọi là bước trích xuất đặc trưng
(extract features) của hệ thông Haar Classifier.

1.2.

Integral Image

Trong phần trước chúng ta đã tìm hiểu về việc trích xuất đặc trưng của các ảnh dữ liệu
trong tập training bằng các sử dụng các đặc trưng Haar-like cơ bản. Vấn đề đặt ra khá rõ
ràng là việc tính toán giá trị các features trên mỗi bức ảnh là quá tốn kém nếu theo cách
thông thường. Do đó trong phần này chúng ta sẽ tìm hiểu một cách biểu diễn ảnh, được
gọi là Integral Image, cho phép tính toán rất nhanh giá trị các features trong mỗi bức ảnh.
Xét một ảnh 24x24 bất kỳ trong tập training. Giả sử giá trị pixel tại điểm điểm
(𝑥, 𝑦) là 𝑖(𝑥, 𝑦), thì Integral Image có cùng kích thước và có giá trị tại điểm (𝑥, 𝑦) là:
𝑖𝑖 (𝑥, 𝑦) =

∑ 𝑖(𝑢, 𝑣)
𝑢≤𝑥, 𝑣≤𝑦

tức là giá trị của integral image tại điểm (𝑥, 𝑦) bằng tổng các pixel nằm trong hình chữ
nhật có góc trên cùng bên trái là (0,0) và góc dưới bên phải là (𝑥, 𝑦) của ảnh ban đầu.
Sử dụng công thức đệ quay sau cho phép tính toán nhanh các giá trị của Integral Image.
7


Đặt 𝑠(𝑥, 𝑦) = ∑1≤𝑢≤𝑦 𝑠(𝑥, 𝑢) ta được:
𝑠(𝑥, 𝑦) = 𝑠(𝑥, 𝑦 − 1) + 𝑖(𝑥, 𝑦)
𝑖𝑖 (𝑥, 𝑦) = 𝑖𝑖 (𝑥 − 1, 𝑦) + 𝑠(𝑥, 𝑦)
Với quy ước 𝑠(𝑥, −1) = 0, 𝑖𝑖 (−1, 𝑦) = 0.

Hình 7: Minh họa cách biểu diễn từ ảnh ban đầu sang ảnh integral.

Ta có một nhận xét quan trọng sau: với cách biểu diễn thành Integral Image, thì
mỗi vùng hình chữ nhật trong ảnh ban đầu có thể được tính toán với nhiều nhất 4 lần
tham chiếu đến Integral Image. Thật vậy, xét ví dụ minh họa sau:

Hình 8

Giả sử ảnh ban đầu có các vùng A,B,C,D và tổng giá trị pixel trong mỗi vùng, chẳng hạn
vùng A được ký hiệu là 𝑝(𝐴). Khi đó ta có:
𝑝(𝐴) = 𝑖𝑖 (1), 𝑝(𝐴 + 𝐵) = 𝑖𝑖 (2), 𝑝(𝐴 + 𝐶 ) = 𝑖𝑖 (3), 𝑝(𝐴 + 𝐵 + 𝐶 + 𝐷 ) = 𝑖𝑖(4)
Suy ra:
𝑝(𝐶 ) = 𝑖𝑖 (3) − 𝑖𝑖 (1), 𝑝(𝐵) = 𝑖𝑖 (2) − 𝑖𝑖 (1), 𝑝(𝐷) = 𝑖𝑖 (4) − 𝑖𝑖 (2) − 𝑖𝑖 (3) + 𝑖𝑖(1)
hay tổng giá trị pixel trên vùng các vùng A,B,C,D của ảnh ban đầu được với với nhiều nhất
4 lần tham chiếu đến Integral Image.
Từ đó dễ thấy giá trị các features có dạng 2 vùng hình chữ nhật có thể tính trong 6 lần
tham chiếu, 3 vùng trong 8 lần và 4 vùng trong 9 lần.
8


Hình 9

Ví dụ: 𝑓 = −𝑖𝑖 (𝑥1 , 𝑦1 ) + 𝑖𝑖 (𝑥2 , 𝑦2 ) + 2𝑖𝑖 (𝑥3 , 𝑦3 ) − 2𝑖𝑖 (𝑥4 , 𝑦4 ) − 𝑖𝑖 (𝑥5 , 𝑦5 ) + 𝑖𝑖(𝑥6 , 𝑦6 )

1.3.

Thuật toán phân loại

Như vậy với mỗi bức ảnh đầu vào trong tập training, bằng cách biểu diễn theo
integral image, ta đã tính được giá trị của mỗi features trên bức ảnh này một cách hiệu
quả. Bây giờ ta quan tâm đến việc các features này có vai trò gì trong hệ thống phát hiện
khuôn mặt đang xem xét?
Có rất nhiều phương pháp, đặc biệt là các phương pháp học máy, có thể sử dụng
chúng để học một hàm phân lớp cho mục đích phát hiện ảnh khuôn mặt như sử dụng mô
hình trộn Gaussian, Support Vector Machine, Decision Trees hay Neural Network… Tuy
nhiên trong hệ thống Haar Classifier đang xem xét, các tác giả sử dụng một biến thể của
thuật toán AdaBoost để lựa chọn các features tốt và xây dựng bộ phân loại.
Về AdaBoost có nhiều biến thể khác nhau, dạng gốc của nó được sử dụng để tăng
cường hiệu quả phân loại cho một số thuật toán học phân lớp đơn giản (đôi khi cũng gọi
là “weak”-yếu) như Perceptron Learning Algorithm (PLA) …
Và trong hệ thống Haar Classifier, cũng sử dụng ý tưởng tương tự như thế, trước
hết từ các features, các tác giả sẽ xây dựng là Weak Classifier, sau đó sử dụng AdaBoost
để lựa chọn và kết hợp các Weak Classifier lại thành một bộ phân lớp hiệu quả, được gọi
là Strong Classifier.
a) Weak classifiers
Nhắc lại rằng với mỗi ảnh dữ liệu đầu vào 24x24, sử dụng các hàm Haar cơ bản sẽ có hơn
16000 features, một features này có giá trị khác nhau trên các bức ảnh khác nhau. Sau

9


các đã xét trên, chúng ta đã trích xuất được giá trị các features này cho toàn bộ tập dữ
liệu training.
Tương ứng mỗi features, giả sử là 𝑓𝑗 , xây dựng một hàm phân lớp đơn giản, gọi là
Weak Classifier ℎ𝑗 , với một ngưỡng 𝜃𝑗 và một parity 𝑝𝑗 ∈ {+1, −1} thỏa mãn:
ℎ𝑗 (𝑥) = {

1 𝑛ế𝑢 𝑝𝑗 𝑓𝑗 (𝑥) < 𝑝𝑗 𝜃𝑗
0
𝑛𝑔ượ𝑐 𝑙ạ𝑖

Với 𝑥 là một ảnh 24x24 bất kỳ trong tập training và 𝑓𝑗 (𝑥) là giá trị feature 𝑓𝑗 trên ảnh 𝑥.
Có thể dễ dàng nhận thấy rằng, các Weak Classifiers này với bộ dữ liệu tổng quát không
thể có hiệu quả phân loại cao, bởi bản chất nó là một hàm tuyến tính. Đây là lý do mà các
bộ phân loại này được gọi là “weak”. Tuy nhiên chúng ta có thể chọn ngưỡng 𝜃𝑗 và một
parity 𝑝𝑗 ∈ {+1, −1} phù hợp để độ chính xác phân loại ít nhất là 50%. Vậy sẽ chọn như
thế nào?
Xét feature 𝑓𝑗 , tương ứng với Weak Classifier ℎ𝑗 , thực hiện tính giá trị 𝑓𝑗 (𝑥) với mọi
ảnh 𝑥 trong bộ training. Sau đó sắp xếp các giá trị này theo thứ tự tăng dần:

Hình 10: Chọn ngưỡng cho Weak Classifier

Ngưỡng sẽ được chọn giữa giá trị hai mẫu nào đó sao cho số mẫu phị phân loại sai là ít
nhất. Ta có một thuật toán cho việc lựa chọn ngưỡng thỏa mãn điều kiện trên như sau:
 Với một ảnh trong tập training có khuôn mặt, ta gọi là ảnh có trọng số dương,
ngược lại gọi là ảnh có trọng số âm.
 Đặt AFS (all-face-samples) là tổng số mẫu có trọng số dương và ABG (allbackground) là tổng số mẫu có trong số âm trong toàn bộ tập training.
 Với mỗi mẫu bất kỳ, gọi FS là tổng số mẫu có trọng số dương mà giá trị features
𝑓𝑗 đang xét nhỏ hơn hoặc bằng (nằm bên trái trên trục biểu diễn) và BG tương
ứng là tổng số mẫu có trọng số âm.
 Gán mỗi mẫu một giá trị error được định nghĩa như sau:
10


 Chọn mẫu có error nhỏ nhất trong tất cả các mẫu.
 Giá trị của feature 𝑓𝑗 tại mẫu đó được chọn làm ngưỡng 𝜃𝑗 .
Xét ví dụ:

Khi đó Giá trị của feature 𝑓𝑗 tại mẫu thứ 3 được chọn làm ngưỡng 𝜃𝑗 .
Như vậy chúng ta tìm hiểu cách xây dựng được các Weak Classifiers tương ứng với các
features cho hệ thống Haar Classifier. Và như đã nói ở trước, tiếp tục chúng ta sẽ tìm hiểu
cách sử dụng thuật toán Adaboost để chọn ra các Weak classifier tốt nhất tương ứng với
các features tốt nhất để tạo ra một Strong classifier.
Ý tưởng được minh họa dưới hình sau đây:

Hình 11: Minh họa xây dựng Strong Classifier từ các Weak Classifier

Cụ thể xem xét ở mục tiếp theo.

11


b) Thuật toán AdaBoost
Thuật toán AdaBoost giống như một phương pháp tham lam, ý tưởng là sẽ chọn ra các
Weak Classifier tốt nhất tương ứng với các features tốt nhất (tính tốt nhất ở đây sẽ trình
bày sau), tổ hợp tuyến tính theo các trọng số mà Weak Classifier nào càng tốt thì trọng số
càng cao. Dưới góc nhìn các features, AdaBoost được sửu dụng để chọn ra các features
tốt cho việc phân loại và loại bỏ những features không có ý nghĩa trong việc phân loại. Với
việc có hơn 160 000 features với chỉ 4 đặc trưng Haar-like cơ bản, thì việc loại bỏ bớt
những features không quan trọng có ý nghĩa rất lớn trong việc tăng hiệu quả phân loại
cũng như giảm tài nguyên, chí phí tính toán cho hệ thống.
Chi tiết thuật toán được mô tả như sau:
 Giả sử tập dữ liệu training gồm n bộ dữ liệu (𝑥1 , 𝑦1 ), … , (𝑥𝑛 , 𝑦𝑛 ) với 𝑥𝑖 là các ảnh
đầu vào 24x24 và 𝑦𝑖 ∈ {0,1} tương ứng với ảnh 𝑥𝑖 là không chứa/chứa khuôn mặt.


Ban đầu khởi tạo các trọng số: 𝑤1,𝑖 =

1

,

1

2𝑚 2𝑙

tương ứng với 𝑦𝑖 = 0,1, trong đó m

và l lần lượt là số ảnh không chứa và chứa khuôn mặt trong tập training.
 Giả sử T là số Weak Classifier (tương ứng với T features) mà chúng ta cần chọn.
 Với mỗi 𝑡 = 1, … , 𝑇:
𝑤𝑡,𝑖

1. Chuẩn hóa các trọng số: 𝑤𝑡,𝑖 ← ∑𝑛

𝑗=1 𝑤𝑡,𝑗

, khi đó 𝑤𝑡 = (𝑤𝑡,1 , … , 𝑤𝑡,𝑛 ) là một

phân phối xác suất.
2. Với mỗi features 𝑓𝑗 tương ứng với Weak Classifier ℎ𝑗 , tính hàm lỗi có trọng
số: 𝜀𝑗 = ∑𝑛𝑖=1 𝑤𝑡,𝑖 |ℎ𝑗 (𝑥𝑖 ) − 𝑦𝑖 |
3. Chọn ra Weak Classifier ℎ𝑡 với lỗi 𝜀𝑡 là bé nhất
1−𝑒𝑖

4. Thực hiện cập nhật trọng số: 𝑤𝑡+1,𝑖 = 𝑤𝑡,𝑖 𝛽𝑡

trong đó 𝑒𝑖 = 0 nếu mẫu 𝑥𝑖

được phân loại đúng, 𝑒𝑖 = 1 trong trường hợp ngược lại, và 𝛽𝑡 =

𝜀𝑡
1−𝜀𝑡

 Tổ hợp tuyến tính các Weak Classifiers đã chọn, ta được Strong Classifier như sau:
𝑇

𝑇

𝑡=1

𝑡=1

1
1 𝑛ế𝑢 ∑ 𝛼𝑡 ℎ𝑡 (𝑥) ≥ ∑ 𝛼𝑡
ℎ (𝑥 ) = {
2
0 𝑛ế𝑢 𝑛𝑔ượ𝑐 𝑙ạ𝑖
trong đó 𝛼𝑡 = 𝑙𝑜𝑔

1
𝛽𝑡

12


Ta có một số nhận xét như sau:
 Nếu Weak Classifier ℎ𝑡 có hàm lỗi có trọng số: 𝜀𝑡 = ∑𝑛𝑖=1 𝑤𝑡,𝑖 |ℎ𝑡 (𝑥𝑖 ) − 𝑦𝑖 | càng bé
thì 𝛽𝑡 càng bé và do đó 𝛼𝑡 càng lớn. Nói cách khác nếu ℎ𝑡 càng tốt thì trọng số trong
Strong Classifier ℎ càng lớn, tức là khả năng phân loại của ℎ𝑡 được ưu tiên hơn.
 Việc chuẩn hóa các trọng số để đưa về một phân phối xác suất nhằm mục đích tính
kỳ vọng (trung bình) lỗi phân loại.
 Phép cập nhật trọng số có tính chất: các mẫu bị phân loại sai bởi ℎ𝑡 ở thời điểm 𝑡
sẽ được đánh trọng số cao hơn nhằm nhấn mạnh cho lần phân loại ở thời điểm
tiếp theo.
Ví dụ minh họa:

Hình 11: Minh họa xây dựng Strong Classifier từ các Weak Classifier

c) Một số kết quả
Ban đầu, các tác giả (Viola, Jones) sử dụng một Strong Classifier loại gồm 200 đặc trưng
để thử nghiệm, tức là tổ hợp tuyến tính của 200 Weak Classifier (T=200).
Về hiệu quả của sự phát hiện, bộ phân loại này cho kết quả tương đối tốt (hình vẽ)
với tỉ lệ phát hiện đúng là 95% và tỉ lệ sai dương tính (không có mặt người nhưng cho kết
quả là mặt người) là 1/14084 trên bộ dữ liệu kiểm tra. Tuy nhiên, trong các ứng dụng thực
tế ta cần đạt tỉ lệ sai dương tính khoảng 1/1000000.

13


Hình 12 : Biểu đồ ROC của bộ Strong Classifier dùng 200 đặc trưng

Về khả năng tính toán, bộ Strong Classifier với 200 features có tốc độ khá nhanh,
mất 0.7 giây để có thể kiểm tra chính xác trong một bức ảnh 384x288 có khuôn mặt người
hay không.
Vấn đề đặt ra ở đây là nếu muốn bộ phân loại đáp ứng được các nhiệm vụ thực tế
(tức là cải thiện hiệu quả phát hiện, giảm tỷ lệ sai dương tính) thì kỹ thuật đơn giản nhất
là tăng số lượng features, nhưng thật không may, điều này lại trực tiếp tăng thời gian tính
toán lên nhiều. Để giải quyết vấn đề này, các tác giả đã đề xuất một cấu trúc phân tầng
(Cascade), vừa hiệu quả về mặt tính toán vừa cải thiện độ chính xác.

1.4. Cấu trúc phân tầng
a) Mô tả
Trong thực tế, đối với nhiệm vụ phát hiện khuôn mặt người trong một bức ảnh hoặc video,
phần lớn các vùng không gian là phông nền (không chứa mặt). Ý tưởng mấu chốt ở đây là
nếu sử dụng một Strong Classifier với 200 đặc trưng để phát hiện một vùng không chứa
mặt người là quá lãng phí thời gian tính toán, bởi lẽ các bộ phân loại sử dụng ít đặc trưng
có thể nhanh chóng loại bỏ những vùng này và những bộ phân loại phức tạp hơn (sử dụng
14


nhiều đặc trưng hơn) chỉ nên được sử dụng để phát hiện những vùng mà khả năng cao là
chứa khuôn mặt.
Về cấu trúc phân tầng, có thể xem hình vẽ minh họa sau:

Hình 13: Mô tả cấu trúc phân tầng

Trong cấu trúc này, mỗi tầng là một Strong Classifier được xây dựng bởi Adaboost. Các
tầng đầu là những bộ phân loại đơn giản, chỉ gồm vài features, nhiệm vụ của những tầng
này sẽ accept phần lớn các vùng chứa khuôn mặt và reject một phần các vùng không chứa
khuôn mặt. Các vùng được accept ở những tầng trước sẽ tiếp tục đến ở tầng sau, còn nếu
bị reject sẽ bị loại bỏ hoàn toàn. Cấu trúc này giống như một cây quyết định thoái hóa,
các tầng càng ở phía sau thì có bộ phân loại càng phức tạp (số features càng nhiều), và
nhiệm vụ cũng khó hơn các tầng trước.
Cấu trúc phân tầng phản ánh quan sát rằng trong một bức ảnh bất kì, hầu hết các
vùng trong bức ảnh đề là những vùng không có khuôn mặt. Do đó, cấu trúc phân tầng cố
gắng loại bỏ những vùng không có khuôn mặt càng sớm càng tốt. Nếu một bức ảnh có
khuôn mặt, nó sẽ đi qua tất cả các tầng nhưng so với các mẫu không chứa khuôn mặt thì
rất hiếm khi xảy ra trường hợp như vây.

15


Hình 14: Ví dụ minh họa cho hai đặc trưng có thể dùng cho tầng phân loại đầu tiên

Tuy nhiên làm thế nào để các tầng đầu tiên chỉ với một vài features có thể phát
hiện phần lớn các vùng chứa khuôn mặt và loại bỏ một phần các vùng không chứa mặt?
Điều này được thực hiện bằng cách điều chỉnh các tham số ngưỡng của các Strong
1

Classifier trong mỗi tầng. Ban đầu ngưỡng được lựa chọn trong AdaBoost là ∑𝑇𝑡=1 𝛼𝑡 ,
2

mục đích để đạt được tỷ lệ lỗi thấp trên tập training. Rõ ràng nếu chọn một ngưỡng thấp
hơn thì tỷ lệ phát hiện sẽ cao hơn nhưng đồng thời sai dương tính cũng sẽ cao hơn. Vậy
thì giải quyết vấn đề này như thế nào?
Bằng cách sử dụng một phương pháp học máy kinh điển, là trích ra từ tập dữ liệu training
một tập con (khoảng 20%-30%), được một tập gọi là Validation set, sử dụng tập con này
như một giả tập test, chúng ta có thể điều chỉnh các ngưỡng của bộ phân loại một cách
hợp lý để tỷ lệ phát hiện các vùng chứa mặt người là gần 100%, và tỷ lệ sai dương tính là
khoảng 50%. Với tỷ lệ sai dương tính lớn như thế này rõ ràng là không chấp nhận được
với các nhiệm vụ thức tế, nhưng chúng ta cần lưu ý rằng đây chỉ là tỷ lệ trên một tầng, và
đồng nghĩa chúng ta có một kết quả khả quan là một nửa các vùng không chứa khuôn mặt
người sẽ bị loại bỏ ở mỗi tầng.
Do đó giả sử nếu ở mỗi tầng có ty lệ phát hiện vùng chứa khuôn mặt là 99% và tỷ lệ sai
dương tính là 30% thì nếu xây dựng 10 tầng, các tỷ lệ tương ứng của cả hệ thống là
0.9910 ≈ 0.9 và 0.310 ≈ 6.10−6 . Những thông số này là hoàn toàn phù hợp với các
nhiệm vụ thực tế.
Chi tiết sẽ phân tích trong phần dưới đây.
b) Huấn luyện cấu trúc phân tầng
Khi chúng ta xác định trước tỉ lệ lỗi sai dương tính và tỉ lệ phát hiện đúng cho cả cấu trúc
thì điều chỉnh được tỉ lệ sai dương tính và tỉ lệ phát hiện đúng cho từng tầng để đạt được
16


yêu cầu đó. Lý do là tỉ lệ sai dương tính của cả cấu trúc bằng tích tỉ lệ lỗi sai dương tính
của tất cả các tầng, tương tự, tỉ lệ nhận diện đúng bằng tích tỉ lệ nhận diện đúng của tất
cả các tầng.

Hình 15: Mô tả cấu trúc phân tầng

Cụ thể nếu cấu trúc phân tầng gồm có K tầng, tỷ lệ phát hiện vùng có khuôn mặt và tỷ lệ
sai dương tính ở tầng thứ i lần lượt là 𝑑𝑖 và 𝑓𝑖 . Khi đó tỷ lệ phát hiện và tỷ lệ sai dương
tính của cả hệ thống là:
𝐾
𝐷 = ∏𝐾
𝑖=1 𝑑𝑖 và 𝐹 = ∏𝑖=1 𝑓𝑖 (*)

Giả định cần thiết thế hệ thống với D và F xác định trước (chẳng hạn 𝐷 = 90%, 𝐹 =
10−6 ), thực hiện một quá trình huấn luyện cấu trúc phân tầng như sau:
 Xác định tỉ lệ lỗi sai dương tính và tỉ lệ phát hiện cho từng tầng để thỏa mãn công
thức (*). Các tỷ lệ này cần được xác định bằng cách sử dụng validation set như đã
nếu ở trên.
 Nếu tầng nào tỉ lệ trên chưa đạt được thì tiếp tục thêm các đặc trưng cho tầng
đó.
 Nếu tỉ lệ trên cả cấu trúc vẫn chưa đạt được, thêm tầng mới.
 Sử dụng các ảnh sai dương tính từ tầng này làm các mẫu âm tính cho tầng tiếp
theo.
Về dữ liệu huấn luyện, từ tập dữ liệu ban đầu gồm 4916 ảnh có mặt (mặt chụp ở góc chính
diện), 350 triệu ảnh không có mặt, các tác giả sử dụng toàn bộ 4916 ảnh có mặt này và
9544 ảnh không có mặt được dùng để phân loại mỗi tầng, với chú ý là các tầng sau sẽ
dùng các ảnh sai dương tính từ tầng ngay trước.
Chi tiết về thuật toán có thể xem ở paper [] trong mục Tài liệu tham khảo.
17


c) Một số kết quả
Các tác giả đã so sánh hiệu quả của bộ Strong Classifier với 200 features với cấu trúc
phân tầng gồm 20 tầng, mỗi tầng 10 features, kết quả được thể hiện trong hình sau:

Hình 16 : Biểu đồ ROC so sánh bộ Strong Classifier dùng 200 đặc trưng với cấu trúc 10 tầng,
mỗi tầng gồm 20 features

Về cơ bản, hai cấu trúc này có tỷ lệ phát hiện tốt ngang nhau, nhưng về tỷ lệ sai dương
tính thì cấu trúc phân tầng là nhỏ hơn.
Mặt khác về chi phí và thời gian tính toán, các tác giả đã chỉ ra cấu trúc phân tầng trên
có khả năng phát hiện chính xác bức ảnh 384x288 trong 0.067 giây, tức là nhanh gấp 10
lần so với Strong Classifier 200 features.
d) Cấu trúc cuối cùng của Haar Classifier
Các kết quả trên chỉ là một số trường hợp thử nghiêm, không phải là cấu trúc chính xác
của Haar Classifier.
Cụ thể các tác giả đã xây dựng cấu trúc gồm 38 tầng, với tổng toàn bộ số features là
6061, ví dụ một số tầng đầu tiên có số features là 1,10,25,50…
18


2. Test và độ đo hiệu năng hệ thống
Sau khi hoàn thành pha huấn luyện, chúng ta đã có một hệ thống phát hiện. Khi đưa vào
một bức ảnh có thể chứa một hoặc nhiều người, hệ thống này sẽ xác định trong bức ảnh
có bao nhiêu người, và định vị các khuôn mặt trong bức ảnh ấy.
Một bức ảnh đưa vào có thể được phân loại đúng hoặc sai, tương ứng có các trường
hợp sau:

Hình 17 : Một số loại kết quả test

Từ đây có một số độ đo hiệu năng hệ thống như sau:





IV.

Accuracy: (TP+TN)/(TP+TN+FP+FN)
True Positive rate: TP/(TP+FN)
False Positive rate: FP/(FP+TN)
Precision: TP/(TP+FP)

CÀI ĐẶT THỰC NGHIỆM

Quá trình cài đặt và thử nghiệm của chúng em sử dụng những thư viện OpenCV phiên
bản 3.2.0 và ngôn ngữ lập trình Python phiên bản 2.7 trên ứng dụng Jupyter notebook.

19


 Lấy dữ liệu đầu vào:

 Vì hệ thống làm việc với ảnh đa mức xám nên cần chuyển ảnh trên về ảnh đa mức
xám, rõ ràng việc nay không ảnh hưởng đến hiệu quả phát hiện khuôn mặt:

 Load bộ mô hình đã training dưới dạng file xml: haarcascade_frontalface_alt.xml,sử
dụng hàm detectMultiScale(image, scaleFactor, minNeighbors) là một hàm tổng quát
để phát hiện các đối tượng, trong trường hợp này là phát hiện khuôn mặt, về các tham
số của hàm này có thể tham khảo trên docs.opencv.org. Kết quả ta được như hình
dưới.
20


 Với bức ảnh có đặc thù gồm các khuôn mặt nhìn trực diện, hệ thống phát hiện rất
hiệu quả, kể cả với đám đông:

 Thậm chí cũng khá tốt với ảnh gồm các mặt nhìn nghiêng

21


 Tuy nhiên hệ thống ít chính xác trong điều kiện ánh sáng bị hạn chế

 Một số trường hợp sai dương tính có thể xảy ra, ví dụ trường hợp sau:

Giải quyết bằng cách thay đổi, thêm tham số tinh chỉnh:

22


 Đánh giá thời gian: trong ví dụ dưới đây thì mất cỡ 0.03s để hệ thống phát hiện một
khuôn mặt

 Nhận xét:
Ưu điểm:
• Phát hiện các khuôn mặt với độ chính xác cao
• Tỷ lệ sai dương tính nhỏ
Nhược điểm:
• Tính toán phức tạp
• Thời gian training dài
• Ít chính xác với các khuôn mặt tối, hoặc ảnh có tỷ lệ các khuôn mặt không
đồng đều do đứng trước đứng sau.
• Hiệu suất bị hạn chế trong điều kiện ánh sáng không tốt

V.

KẾT LUẬN

Báo cáo của nhóm chúng em tìm hiểu về hệ thống Haar Classifier do Viola và Jones
xây dựng, mục đích để phát hiện khuôn mặt. Hệ thống này cho kết quả chính xác cao đồng
thời có thể tính toán nhanh, do đó phù hợp với các ứng dụng trong thực tế.
Mặc dù đây là một hệ thống tương đối nổi tiếng, tuy nhiên có rất ít tài liệu tiếng
Việt viết về thuật toán này. Các tài liệu bọn em tham khảo chủ yếu là tài liệu tiếng Anh. Vì
nội dung báo cáo không thuộc vào nội dung chính của bài giảng trên lớp nên việc tìm kiếm
và lựa chọn những tài liệu cần thiết cũng đòi hỏi nhiều công sức và chắc chắn chúng em
không thể tránh khỏi những thiếu sót do kinh nghiệm và kiến thức còn hạn chế.
23


Nhóm chúng em xin cảm ơn sự giúp đỡ nhiệt tình của PGS.TS Nguyễn Thị Hoàng
Lan đã giúp đỡ chúng em nhiều để hoàn thành bài tập lớn này.

Phân chia công việc:

VI.

Nguyễn Văn Sơn

Trương Quang Toàn

Tìm hiểu nguyên lý hệ thống, các thuật
toán, tài liệu liên quan

Tìm hiểu nguyên lý hệ thống, các thuật
toán, tài liệu liên quan

Viết báo cáo, slide

Viết báo cáo, slide

Cài đặt thực nghiệm, xây dựng kịch bản

Cài đặt thực nghiệm, đánh giá

TÀI LIỆU THAM KHẢO

[1] Robust Real-Time Face Detection, Paul Viola Michael Jones
[2] Rapid Object Detection using a Boosted Cascade of Simple Features, Paul Viola
Michael Jones
[3] Face Detection via AdaBoost, Linda Shapiro-CSE 455
[4] Giáo trình Xử Lý Ảnh, PGS.TS Nguyễn Hoàng Lan
[5] http://www.ieev.org/2010/03/adaboost-haar-features-face-detection_22.html
[6] https://pythonprogramming.net/haar-cascade-face-eye-detection-python-opencvtutorial/
[7] docs.opencv.org
Danh mục hình vẽ tham khảo tương ứng với các tài liệu:
Hình 3,4,5,6, 14: [7]
Hình 10, 11, 13: [3]
Hình 12, 15, 16: [2]

24



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×