3.1.1 Tổng quan vềAdaBoost
AdaBoost là một thuật toán boosting, ý tưởng cơ bản của AdaBoost là kết hợp các bộ phân loại yếu để xây dựng bộ phân lớp mạnh.
3.1.2 Áp dụng AdaBoost cho bài toán phát hiện khuôn mặt
Để phát hiện khuôn mặt, các tiếp cận dựa trên AdaBoost gồm hai giai đoạn chính. Trong giai đoạn đầu, các bộ phân lớp mạnh được xây dựng từ các bộ phân lớp yếu. Trong giai đoạn hai, các bộ phân lớp mạnh sẽ được kết hợp tuần tự để tạo thành cascade of boosted classifier (cascade tree).
15 trang |
Chia sẻ: vietpd | Lượt xem: 5688 | Lượt tải: 2
Bạn đang xem nội dung tài liệu Áp dụng AdaBoost và LBP cho bài toán phát hiện mặt người, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
12
Chương 3. Áp dụng AdaBoost và LBP cho bài toán phát hiện
mặt người
3.1 AdaBoost
3.1.1 Tổng quan về AdaBoost
AdaBoost là một thuật toán boosting, ý tưởng cơ bản của AdaBoost là kết hợp các bộ
phân loại yếu để xây dựng bộ phân lớp mạnh.
3.1.2 Áp dụng AdaBoost cho bài toán phát hiện khuôn mặt
Để phát hiện khuôn mặt, các tiếp cận dựa trên AdaBoost gồm hai giai đoạn chính.
Trong giai đoạn đầu, các bộ phân lớp mạnh được xây dựng từ các bộ phân lớp yếu.
Trong giai đoạn hai, các bộ phân lớp mạnh sẽ được kết hợp tuần tự để tạo thành
cascade of boosted classifier (cascade tree).
3.1.2.1 Xây dựng các bộ phân lớp mạnh
Đầu vào: dữ liệu huấn luyện X, X = {x1, …, xn}. Với { } Xxxxx mkkkk ∈= ,...,, 21 là một
vector đặc trưng.
{ }1,1 +−=∈Yyk là một nhãn tương ứng (+1 tương ứng với khuôn mặt, -1 tương ứng
với không phải khuôn mặt). T các phân lớp yếu hj: X → {-1, +1}. Chúng tôi sử dụng
thuật toán AdaBoost để xây dựng một bộ phân lớp mạnh.
Đầu ra: Bộ phân lớp mạnh:
⎟⎟⎠
⎞
⎜⎜⎝
⎛= ∑
=
T
j
jj xhsignxH
1
)()( α (1)
13
Các bộ phân lớp yếu hj(x) là các đặc trưng Haar – like đơn giản. Một tập rất lớn các bộ
phân lớp yếu được sử dụng để phân lớp một cửa sổ ảnh là face hoặc non face. Viola và
Jones đề xuất 4 mẫu đặc trưng vô hướng cơ bản cho phát hiện khuôn mặt. Sau đó
Rainer Lienhart mở rộng thành 14 mẫu đặc trưng [3]. Trong [1], Viola và Jones đã đề
xuất một sự biễu diễn ảnh gọi là “hàm ảnh”, đề xuất này cho phép các đặc trưng Haar –
like được tính toán cực kì nhanh. Tuy nhiên, để đạt kết quả tốt, một hệ thống dựa trên
AdaBoost cần một số lượng khổng lồ các đặc trưng. Ví dụ, trong một cửa số quét kích
thước 20 × 20, có khoảng 10.000 các đặc trưng cho các hình dáng, kích thước và vị trí
khác nhau. Điều này làm giảm đáng kể tốc độ của bộ phát hiện nếu chúng ta sử dụng
nhiều strong classifier trong cascade tree. Hơn nữa, sự chính xác của bộ phân lớp cuối
cùng phụ thuộc vào các bộ phân lớp yếu (các đặc trưng Haar – like). Vì vậy nếu khả
năng phân tách (face/nonface) các mẫu background khó của các đặc trưng Haar – like
không tốt thì kết quả phát hiện thường có nhiều phát hiện sai.
3.1.2.2 Xây dựng cascade của các bộ phân lớp mạnh
Hầu hết các bộ phân lớp tốt cần nhiều thời gian để có các kết quả phân lớp bởi vì
chúng cần xem xét đến một số lượng lớn các đặc trưng của mẫu. Cấu trúc cascade của
các bộ phân lớp mạnh đã được đề xuất để giảm thời gian thực thi và giảm tỉ lệ phát
hiện sai.
Hình 1 minh họa cấu trúc cascade của các bộ phân lớp mạnh.
14
Hình 1. Cascade của các bộ phân lớp mạnh. Nơi một vùng ứng viên có thể bị loại
tại bất kì giai đoạn nào
Cascade tree có một số thuận lơi. Mỗi giai đoạn là một bộ phân lớp mạnh. Trong suốt
quá trình phát hiện khuôn mặt. Mỗi cửa sổ được phân tích tuần tự bởi mỗi bộ phân lớp
giai đoạn. Một cửa số có thể bị loại (kết luận non face) hoặc đi qua bộ phân lớp giai
đoạn này. Trong suốt quá trình huấn luyện, mỗi bộ phân lớp được huấn luyện bởi các
mẫu bị phân lớp sai ở bộ phân lớp trước. Nghĩa là chúng sẽ tập trung để học các mẫu
background khó. Vì vậy sự kết hợp của các bộ phân lớp trong cascade sẽ giảm tỉ lệ
phát hiện sai. Hơn nữa với cấu trúc này, các bộ phân lớp dễ dàng nhận ra các
background dễ và loại bỏ chúng ở các bộ phân lớp đầu. Vì vậy cấu trúc cascade giải
quyết được bài toán thời gian thực thi. Một cách tổng quát, cấu trúc cascade cải tiến
đáng kể thời gian thực thi và các kết quả phát hiện phụ thuộc hoàn toàn vào các bộ
phân lớp yếu hay các đặc trưng Haar – like.
3.2 Local Binary Pattern(Mẫu nhị phân cục bộ)
3.2.1 Local Binary Pattern
LBP là một toán tử kernel 3×3, nó tổng quát hóa cấu trúc không gian cục bộ của một
ảnh. Ojala và các đồng nghiệp [8] đã giới thiệu phương pháp LBP và chỉ ra khả năng
phân tách cao của chúng cho sự phân lớp vân. Tại một vị trí pixel (xc, yc) cho trước,
LBP được định nghĩa như một chuỗi nhị phân có trật tự dựa trên sự so sánh giá trị độ
xám của pixel trung tâm (xc, yc) và 8 pixel lân cận của nó. Như vậy mỗi pixel sẽ được
biểu diễn bởi một chuỗi nhị phân, giá trị thập phân của chuỗi nhị phân này chính là giá
15
trị của pixel trung tâm trong sự biểu diễn bởi toán tử LBP. Hình 2 minh họa sự tính
toán giá trị LBP.
Hình 2. Ví dụ sự tính toán LBP
Giá trị thập phân của của chuỗi LBP có thể được biểu diễn như sau:
( ) ( )∑
=
−=
7
0
2,
n
n
cncc ggsyxLBP
(2)
Với gc là giá trị độ xám của pixel trung tâm (xc, yc), gn là giá trị độ xám của pixel thứ n
trong lân cận 8 của pixel trung tâm. Hàm sn được định nghĩa như sau:
( )
⎩⎨
⎧
<
≥=
00
01
xif
xif
xs
(3)
Bằng cách định nghĩa này, toán tử LBP bất biến đối với bất kỳ sự biến đổi độ sáng đều
và bảo toàn trật tự mật độ các pixel trong một lân cận cục bộ.
Sau đó, Ojala và các đồng nghiệp [10] đã mở rộng toán tử LBP cũ đến một lân cận tròn
với các bán kính khác nhau. LBPP, R kí hiệu sự xem xét đến P pixels lân cận trên một
vòng tròn có bán kính R. Hình 3 minh họa toán tử LBPP,R.
16
Hình 3. Minh họa toán tử LBP mở rộng với các giá trị P và R khác nhau Giá trị
các pixel được nội suy cho các điểm không nằm trong tâm của một pixel.
Nếu tọa độ của pixel tâm là (xc, yc) thì tọa độ của P pixel lân cận trên đường tròn tâm
(xc, yc) bán kính R (tính theo đường tròn lượng giác) là:
( )
( ) 1}-P ,1, {0, p,/2sin
/2cos
…=Π+=
Π+=
PpRyy
PpRxx
cp
cp
(4)
Để xác định giá trị giá trị của các pixel lân cận không nằm trong tâm của một pixel,
chúng tôi sử dụng phép nội suy song tuyến tính. (Chi tiết được trình bày trong phụ lục
B).
Trong [10] các tác giả đã kết luận rằng: hầu hết các thông tin vân (texture) trong ảnh
được chứa trong một tập con của các mẫu LBP. Các mẫu này được gọi là các mẫu
đồng nhất (uniform patterns). Các mẫu đồng nhất chứa tối đa hai sự chuyển đổi bit từ 0
đến 1 hoặc từ 1 đến 0. 11111111, 00000110 hoặc 10000111 là ví dụ cho các mẫu đồng
nhất. Toán tử LBPP,R đồng nhất được kí hiệu là 2.u RPLBP . Với chuỗi LBP có chiều dài P
thì số mẫu có tối đa hai sự chuyển đổi (mẫu đồng nhất là) P(P-1). Có hai mẫu không có
sự chuyển đổi nào là mẫu toàn 0 hoặc 1. Việc sử dụng mẫu LBP đồng nhất có hai lợi
điểm quan trọng. Thứ nhất là tiết kiệm bộ nhớ, vì trường hợp LBP tổng quát chúng ta
có 2P mẫu có thể, nhưng nếu chỉ xét mẫu đồng nhất thì chúng ta có tối đa là P(P+1) + 2
17
nếu chúng ta sử dụng toán tử 2.u RPLBP . Lợi điểm thứ hai là LBP
u2
chỉ phát hiện những
mẫu vân cục bộ quan trọng như các điểm, các điểm cuối đường thẳng, biên cạnh và các
góc. Hình 4 minh họa một số mẫu vân quan trọng có thể được phát hiện bởi LBPu2.
Hình 4. Từ trái sang phải, các mẫu vân cơ bản: điểm chấm, điểm chấm nhạt, điểm
cuối đường thẳng, biên cạnh, góc được phát hiện bởi 2uLBP
Bởi vì khả năng phân tách và chi phí tính toán thấp, LBP trở nên rất phổ biến trong
nhận dạng mẫu LBP đã được áp dụng cho phát hiện khuôn mặt [2,17], nhận dạng
khuôn mặt [2, 15], xác thực khuôn mặt [18], truy vấn ảnh [16].
3.2.2 Áp dụng LBP cho bài toán phát hiện khuôn mặt
Trong [2], A. Hadid và các đồng nghiệp đã đề xuất một hệ thống phát hiện mặt người
dựa trên sự biểu diễn của LBP cho khuôn mặt. Họ đã đề xuất một cách biểu diễn mới
hiệu quả cho các ảnh có độ phân giải thấp. Sự đặc biệt của cách biểu diễn này là sử
dụng các vùng chồng lấp và toán tử LBP trong một lân cận 4 - 1,4LBP được tính toán
trong các vùng chồng lấp này. Thêm vào đó, họ tăng cường sự mô tả đặc trưng (vân)
của toàn bộ khuôn mặt bằng cách tính toán histogram 21,8uLBP toàn cục trên toàn bộ ảnh
khuôn mặt. Trong cách biểu diễn này, đặc trưng vân của toàn bộ ảnh khuôn mặt được
mã hóa bởi LBP trong khi đặc trưng hình dáng của khuôn mặt được phục hồi bởi sử kết
hợp các histogram LBP cục bộ. Trong luận văn này, chúng tôi xem xét một ảnh kích
thước 20×20 như độ phân giải chuẩn. Sự biểu diễn khuôn mặt trong luận văn dựa trên
ý tưởng chính trong [2], tuy nhiên chúng tôi phân chia ảnh 20×20 thành 9 vùng chồng
lấp, mỗi vùng có kích thước 10×10 pixels (kích thước chồng lấp = 5 pixel). Từ mỗi
vùng, chúng tôi tính toán 16 bin histogram (histogram có 16 thành phần) sử dụng toán
18
tử 1,4LBP , kết hợp các histogram của từng vùng chúng tôi được một histogram có 144
thành phần. Sau đó, chúng tôi áp dụng toán tử 21,8uLBP đến toàn bộ ảnh 20×20 và tính
toán được 58 bin histogram cho các mẫu đồng nhất, các giá trị không đồng nhất chứa
trong bin thứ 59. Như vậy ta có histogram có 59 thành phần. Kết hợp histogram 144
thành phần và histogram toàn cục 59 thành phần đã tính toán chúng tôi được histogram
có 59+144 = 203 thành phần. Histogram này được sử dụng như sự biễu diễn khuôn
mặt. Hình 5 minh họa cách sử dụng LBP để biểu diễn khuôn mặt trong luận văn.
Hình 5. Sự biễu diễn khuôn mặt: histogram đặc trưng được tạo bằng cách kết hợp
histogram LBP cục bộ và histogram LBP toàn cục.
3.3 Phân tích và đánh giá phát hiện mặt người sử dụng AdaBoost và LBP
3.3.1 Cơ sở dữ liệu cho huấn luyện phát hiện khuôn mặt với phương pháp AdaBoost
Để huấn luyện bộ phát hiện AdaBoost, một tập các ảnh khuôn mặt và không khuôn mặt
được sử dụng. Tập ảnh để huấn luyện khuôn mặt, chúng tôi lựa chọn 11000 ảnh từ
14051 ảnh khuôn mặt của cơ sở dữ liệu chuẩn FERET [13] và tập ảnh khuôn mặt của
MIT [24]. Với mỗi ảnh được lựa chọn, chúng tôi chọn vùng ảnh chứa khuôn mặt trong
ảnh và scale vùng ảnh này về độ phân giải chuẩn 20×20 pixel. Một vài ảnh huấn huyện
trong tập khuôn mặt được minh họa trong hình 6.
19
Hình 6. Ví dụ của các ảnh khuôn mặt được sử dụng để huấn luyện AdaBoost
Tập các ảnh huấn luyện non – face sử dụng để huấn luyện bộ phát hiện AdaBoost được
tạo từ 5717 ảnh mà không chứa bất kì khuôn mặt nào. Có khoảng 950 triệu cửa số kích
thước 20×20 trong tập các ảnh non – face. Mỗi bộ phân lớp mạnh trong cascade tree
được huấn luyện với 11000 ảnh khuôn mặt và 5000 ảnh non – face bị phân lớp sai từ
các bộ strong classifier trước nó (kích thước 20×20 pixel). Để huấn huyện AdaBoost,
chúng tôi sử dụng thư viện mã nguồn mở OpenCv [26] được tạo bởi Rainer Lienhart
[3]. Tuy nhiên kết quả đạt được sau khi huấn luyện không tốt bằng thư viện của
OpenCv. Vì vậy, trong luận văn này, các kết quả thống kê của AdaBoost được tính từ
kết quả của bộ phát hiện AdaBoost của OpenCv.
3.3.2 Kết quả thực nghiệm của phương pháp AdaBoost
Chúng tôi sử dụng mô hình cascade của các bộ phân lớp mạnh với số phân lớp mạnh
(số giai đoạn) lần lượt là 20 và 25. Hiệu suất của hệ thống được kiểm tra trên tập dữ
liệu MIT + CMU [7]. Đây là tập dữ liệu kiểm tra chuẩn được sử dụng để kiểm tra hiệu
năng của hầu hết các thuật toán phát hiện mặt người [1][2]. Bộ dữ liệu MIT + CMU
chứa 130 ảnh với 507 khuôn mặt. Bảng 1 chỉ ra kết quả của bộ phát hiện khuôn mặt
AdaBoost.
20
Bảng 1. HIỆU SUẤT CỦA BỘ PHÁT HIỆN ADABOOST TRÊN TẬP DỮ LIỆU MIT – CMU
Phương pháp Số phân lớp
mạnh
Tổng số đặc
trưng Haar –
like đã sử
dụng
Số khuôn mặt
phát hiện
chính xác
Số khuôn mặt
phát hiện sai
Tỉ lệ phát
hiện chính
xác
Tổng thời gian
xử lí 130 ảnh
(giây)
Thời gian
trung bình để
xử lí một ảnh
AB20 20 1925 467 202 92.11% 23.325 0.179
AB25 25 2913 452 40 89.15% 25.337 0.202
Trên bộ xử lí 2.0 GHz Pentium IV, RAM 1Gb, bộ phát hiện AdaBoost có thể xử lí một
ảnh kích thước 276×343 khoảng 0.172 giây. Tỉ lệ tăng và kích thước dịch chuyển của
cửa số trượt lần lượt là 1.2 và 2. Hình 7 minh họa một số kết quả từ bộ phát hiện
AdaBoost. Trong hình 7B, AB25 phát hiện chính xác 11 khuôn mặt (sót 3 khuôn mặt).
Thời gian để xử lí ảnh này là 0.278 giây. Trong khi đó, trong hình 7A, với AB20, số
khuôn mặt phát hiện chính xác là 12 (2 khuôn mặt bị sót), thời gian để xử lí ảnh với
AB20 là 0.230 giây < 0.278 giây của AB25. Trong cả hai trường hợp, số ảnh phát hiện
sai là 0. Trong hình 7D, mặt dù được xử lí với AB25 nhưng vẫn còn 2 phát hiện sai,
điều này có thể giải thích là do các đặc trưng Haar – like quá đơn giản để có thể phân
tách các background khó này.
21
22
23
Hình 7. Kết quả phát hiện khuôn mặt trên tập MIT + CMU. Nếu một số lượng
lớn bộ phân lớp mạnh được sử dụng trong cascade tree thì thời gian xử lí sẽ tăng và
một số khuôn mặt bị sót. Một vài background khó bị phân lớp sai là khuôn mặt (false
positive)
3.3.3 Cơ sở dữ liệu cho huấn luyện phát hiện khuôn mặt với phương pháp LBP
Tập ảnh khuôn mặt dùng để huấn luyện phương pháp LBP chứa 11000 ảnh từ 14501
ảnh khuôn mặt trong cơ sở dữ liệu FERET và tập ảnh khuôn mặt của MIT [24], (tương
tự như tập ảnh khuôn mặt dùng huấn luyện AdaBoost). Để thu thập các mẫu non – face
chúng tôi sử dụng thuật toán “boot trap” [12] trong 5 lần lặp. Đầu tiên, chúng tôi thực
24
thi bộ phát hiện được huấn luyện bởi thuật toán AdaBoost (mục 3.3.1) và thu thập 3000
mẫu non – face bị phân lớp sai (bị phân lớp là face). Kết hợp 3000 mẫu non – face này
với 3000 mẫu non – face được rút trích ngẫu nhiên từ tập các ảnh không chứa khuôn
mặt (minh họa trong hình 8).
Hình 8. Vài cửa sổ kích thước 20×20 được rút trích ngẫu nhiên từ một ảnh không
chứa khuôn mặt nào để tạo các mẫu non – face cho bộ phát hiện LBP
Như vậy, chúng tôi có 6000 mẫu non – face cho lần huấn luyện đầu tiên cho LBP. Sau
đó, tại mỗi lần lặp, chúng tôi huấn luyện hệ thống, chạy bộ phát hiện LBP và thu thập
3000 mẫu non – face bị phân lớp sai và sử dụng chúng cho lần huấn luyện tiếp theo.
Cuối cùng chúng tôi có 6000 + 15000 mẫu non – faces cho huấn luyện LBP. Để huấn
luyện và kiểm tra bộ phát hiện LBP, chúng tôi sử dụng phương pháp Artifical Neral
Network (ANN) (lí do sử dụng ANN sẽ được trình bày trong chương 4, mục 4.1).
ANN được sử dụng là mạng truyền thẳng 3 lớp với thuật toán học lan truyền ngược. Số
node nhập của ANN là 203; tương đương với số bin của histogram được trút trích bởi
phương pháp LBP. Số node xuất của ANN là 1; nó sẽ trả về 1 nếu cửa số quét chứa
khuôn mặt và trả về 0 trong trường hợp ngược lại. Số node ẩn của ANN được lựa chọn
25
dựa trên thực nghiệm; trong luận văn chúng tôi chọn là 12. Hàm truyền được chọn là
hàm Tanh.
( ) ( )( ) xx
xx
ee
ee
x
xx −
−
+
−==
cosh
sinhtanh
(5)
Tốc độ học cho mạng nơ ron là 0.3. Giá trị này được chọn dựa trên các kết quả thực
nghiệm.
Để phát hiện các khuôn mặt trong ảnh, một cửa số quét kích thước 20×20 quét qua ảnh
tại tất cả các tỉ lệ và các vị trí khác nhau. Tỉ lệ và độ dịch chuyển của cửa sổ lần lượt là
1.2 và 2 pixels. Tại mỗi lần lặp, biễu diễn LBP tính toán được từ cửa số quét sẽ là đầu
vào cho bộ phân lớp ANN để quyết định là face hoặc non – face. Trong [2], A. Hadid
và các đồng nghiệp đã thực hiện việc kiểm tra phương pháp rút đặc trưng LBP của họ
trên một phần tập dữ liệu CMU + MIT (227 khuôn mặt trong 80 ảnh), kết quả báo cáo
là LBP đạt hiệu suất phát hiện chính xác là 97.4%, số phát hiện sai là 0. Từ kết quả của
A. Hadid chúng ta có thể nhận thấy khả năng phân tách face – nonface rất tốt của LBP.
AdaBoost là thuật toán phát hiện mặt người nhanh nhất tính cho đến thời điểm hiện tại.
Tuy nhiên, cascade của các bộ phân lớp mạnh phụ thuộc hoàn toàn vào các bộ phân lớp
yếu (các đặc trưng Haar – like) do đó các kết quả phát hiện thường có nhiều phát hiện
sai. Trong số số lượng các bộ phân lớp mạnh trong cascade mà luận văn ước lượng,
AdaBoost đạt tỉ lệ phát hiện chính xác cao nhất với 92.11% khi sử dụng cascade của 20
bộ phân lớp mạnh. Tuy nhiên số phát sai quá nhiều với 202. Nếu chúng ta tăng số phân
lớp mạnh trong cascade tree lên 25, số lượng phát hiện sai sẽ giảm xuống nhưng thời
gian thực thi có thể tăng lên và quan trọng hơn là tỉ lệ phát hiện đúng có thể bị giảm
xuống. Mỗi cửa quét nên thông qua tất cả các bộ phân lớp mạnh trong cascade tree để
đưa ra quyết định là khuôn mặt. Các bộ phân lớp mạnh ở phía sau của cascade tree sẽ
26
tập trung vào các mẫu khó (difficult positive), do đó nếu một mẫu là khó, trong nhiều
trường hợp, nó rất có thể bị loại bởi các bộ phân lớp cuối trong cascade tree. Nghĩa là
nếu chúng ta sử dụng nhiều bộ phân lớp mạnh trong cascade tree thì tỉ lệ phát hiện
chính xác sẽ giảm xuống. Chúng tôi đã thực nghiệm với 15 bộ phân lớp mạnh trong
cascade tree, tỉ lệ phát hiện chính xác là 92.50% nhưng số phát hiện sai rất lớn: 1472.
Bộ phát hiện LBP trong thực nghiệm của chúng tôi tốn tới 27635 giây để xử lí tất cả
các ảnh trong tập MIT + CMU, và trung bình bộ phát hiện LBP cần 212.58 giây để xử
lí một ảnh. Tốc độ xử lí của LBP là rất chậm nếu so sánh với bộ phát hiện AdaBoost.
Do đó, nếu chỉ sử dụng LBP để phát hiện khuôn mặt thì chúng ta không thể áp dụng
trong ứng dụng yêu cầu thời gian thực.
Để thừa hưởng các thuận lợi của phương pháp AdaBoost về tốc độ xử lí; phương pháp
LBP về độ chính xác, và để giải quyết khuyết điểm của hai phương pháp, trong luận
văn chúng tôi đề xuất một mô hình kết hợp của AdaBoost và LBP trong chương 4.