Phát hiện khuôn mặt với thuật toán ADABOOST
Trang 1ĐỒ ÁN MÔN HỌC I
Trang 2ninh phải tìm kiếm trên từng màn hình camera theo dõi Ngày nay, công việc này
đã được thực hiện tự động nhờ hệ thống nhận diện mặt người Phát hiện mặt ngườitrong ảnh là một phần quan trọng của hệ thống nhận dạng mặt người đó, giải quyếttốt việc phát hiện mặt người sẽ giúp tiết kiệm thời gian và nâng cao chính xác củaviệc nhận dạng khuôn mặt
Trong nhận diện khuôn mặt, đầu tiên ta phải lấy khuôn mặt ra một cách thủcông, rồi đem đi nhận dạng xem đó là ai Để việc nhận dạng khuôn mặt một cách
tự động, tức là đưa vào một bức ảnh phải xác định xem trong ảnh có những ai, rõ
ràng điều kiện cần thực hiện trước đó là phát hiện mặt người.
Việc phát hiện khuôn mặt còn được ứng dụng trong đếm số người Baonhiêu khuôn mặt là có bấy nhiêu người Việc đếm số người có vai trò quan trong
giao thông (đếm số lưu lượng người tham gia giao thông hằng ngày), trong thương mại ( đếm số khách hàng ra vào siêu thị ) hay trong giáo dục ( thầy giáo
điểm danh số sinh viên trong lớp học ) Chính vì thế mà việc phát hiện khuôn mặtngười là hết sức cần thiết
Phát hiện mặt người là một bài toán đơn giản, hệ thống chỉ cần phân loại đốitượng đưa vào có phải mặt người hay không phải mặt người Ở mức độ cao hơn,các khuôn mặt sau khi phát hiện được sẽ đem đi so sánh với các khuôn mặt cótrong dữ liệu để nhận dạng xem khuôn mặt đấy là của ai ( thường nhận dạng tộiphạm )
Với mục tiêu chính là tìm hiểu thuật toán Adaboost (Adaptive Boost), các đặc trưng haar-like, mô hình Cascade of Classifiers, áp dụng đồng thời vào bài
toán phát hiện khuôn mặt người trong ảnh, đồ án được trình bày trong các chương
cụ thể như sau:
Chương I: Cơ sở lý thuyết: tìm hiểu thuật toán Adaboost Giới thiệu các đặc
trưng về haar-like và cách tính thông số đặc trưng Sử dụng mô hình Cascade ofclassifiers và cách áp dụng vào bài toán đã đề ra
Chương II: Ứng dụng thực nghiệm: Dựa vào cơ sở thư viện mã nguồn mở
OpenCV, xây dựng chương trình phát hiện khuôn mặt người trong ảnh và trênvideo kết hợp với phân tích chương trình đó
Chương III: Tổng kết và hướng phát triển: đánh giá kết quả và hướng nghiên
cứu phát triển
Trang 3Chương I: CƠ SỞ LÝ THUYẾT
1. Mở đầu về phương pháp phát hiện khuôn mặt Haar-like và Adapboost:
Phát hiện mặt người là bài toán cơ bản được xây dựng từ nhiều năm nay, cónhiều phương pháp được đưa ra như sử dụng template matching, neuronnetwork Cho tới nay bài toán này hầu như được giải quyết dựa trên phươngpháp sử dụng phương pháp Haar-like- Adapboost (HA) của hai tác giả PaulViola và Micheal J.Jones xác định mặt người dựa theo hướng tiếp cận trên diệnmạo Phương pháp này được cho là đơn giản và kết quả phát hiện là tương đốicao, lên tới trên 98%, Các hãng sản xuất máy ảnh như Canon, Samsung cũng
đã tích hợp nó vào trong các sản phẩm của mình
Hướng tiếp cận trên diện mạo tức là hệ thống nhận dạng khuôn mặt sẽ được họccác mẫu của khuôn mặt từ một tập ảnh mẫu Sau khi quá trình học hay quá trìnhhuấn luyện này (training) thực hiện xong, hệ thống sẽ rút ra được những tham
số để phục vụ cho quá trình nhận dạng.Vì vậy tiếp cận trên diện mạo còn đượcbiết đến với tên gọi tiếp cận theo phương pháp học máy Bài báo cáo tập trungchủ yếu vào quá trình nhận dạng (sau khi đã thực hiện quá trình học)
Về tổng quan, phương pháp HA được xây dựng dựa trên sự kết hợp, lắp ghépcủa 4 thành phần, đó là:
- Các đặc trưng Haar-like: các đặc trưng được đặt vào các vùng ảnh để tính
toán các giá trị của đặc trưng, từ những giá trị đặc trưng này đưa vào bộ phânloại Adaboost ta sẽ xác định được ảnh có khuôn mặt hay không
- Ảnh tích hợp (Integral Image): thực ra đây là một công cụ giúp việc tính
toán các giá trị đặc trưng Haar-like diễn ra nhanh hơn
- Adaboost (Adaptive Boost): bộ phân loại (bộ lọc) hoạt động dựa trên nguyên
tắc kết hợp các bộ phân loại yếu để tạo lên bộ phân loại mạnh Adaboost sửdụng giá trị đặc trưng Haar-like đã tính được để phân loại ảnh là mặt hay khôngphải mặt
- Cascade of Classifiers: bộ phân loại tầng với mỗi tầng là một bộ phân loại
Adaboost, có tác dụng tăng tốc độ phân loại
Trang 4Như vậy bài toán xác định mặt người trong ảnh cũng chính là bài toán phân loạiảnh thành hai lớp: có mặt hoặc không phải mặt.
2) Tiền xử lí:
Phương pháp HA được thực hiện trên ảnh xám (gray image) Mỗi điểm ảnh(pixel) có giá trị từ 0-255 (không gian màu 8 bit) Ảnh màu sẽ được chuyển vềảnh xám để nhận dạng, việc chuyển đổi này khá đơn giản, được thực hiện bằngmột hàm chuyển đổi và sử dụng với chỉ một câu lệnh trong OpenCV
Sau khi chuyển thành ảnh xám, ảnh lại tiếp tục được chuyển thành “ảnh tíchhợp” (sẽ trình bày ở phần sau) và trong bước đầu tiên của quá trình nhận dạng,các đặc trưng Haar-like sẽ làm việc trực tiếp trên ảnh tích hợp
- Vùng hai mắt sẽ tối hơn vùng má và vùng chán, tức mức xám của vùng này caohơn vượt trội so với hai vùng còn lại
- Vùng giữa sống mũi cũng tối hơn vùng hai bên mũi
- …
Và còn rất nhiều những đặc điểm khác của khuôn mặt và các đặc trưng Haar
like dựa vào các đặc điểm này để nhận dạng
Về tổng quát, các đặc trưng Haar like không chỉ được sử dụng để nhận dạng
khuôn mặt mà có thể dùng để nhận dạng bất kì một đối tượng nào trên ảnh ( thânngười, tay, chân, ô tô, đồ vật,….) Bởi vì cũng giống như khuôn mặt, mỗi đốitượng có những đặc điểm riêng biệt đặc trưng bởi các vùng điểm ảnh, công việccủa đặc trưng Haar-like là tính toán các giá trị tương quan giữa các vùng ảnh đó.Đây chỉ là bước ban đầu về cách áp dụng đặc trưng để phân loại cửa sổ con, chi tiếtcách phân loại của bộ Adaboost và Cascade of Classifiers sẽ trình bày ở mục sau
Trang 5+ Đặc trưng xung quanh tâm (centured-surrounded features)
Để tính giá trị các đặc trưng haar-like, ta tính sự chênh lệch giữa tổng của các pixelcủa các vùng đen và các vùng trắng như trong công thức sau:
f(x) = Tổng vùng đen (pixel) - Tổng vùng trắng (pixel)
Trang 6Vậy khi được đặt lên một vùng ảnh, đặc trưng Haar-like sẽ tính toán và đưa ra giá trị đặc trưng h(x) của vùng ảnh đó.
c) Cách áp dụng đặc trưng haar-like để phát hiện khuôn mặt trong ảnh:
trưng Haar-like để phát hiện khuôn mặt trong ảnh.
Để phát hiện khuôn mặt, hệ thống sẽ cho một cửa sổ con (sub-window) có kíchthước cố định quét lên toàn bộ ảnh đầu vào Như vậy sẽ có rất nhiều ảnh con ứngvới từng cửa sổ con, các đặc trưng Haar-like sẽ được đặt lên các cửa sổ con này để
từ đó tính ra giá trị của đặc trưng Sau đó các giá trị này được bộ phân loại xácnhận xem khung hình đó có phải khuôn mặt hay không
Hình dưới là một ví dụ: khung màu xanh là cửa sổ con, một đặc trưng Haar-likevới kích thước và vị trí đặt như trong hình sau:
Ứng với mỗi một đặc trưng như trên, một bộ phân lớp yếu (weak classifier)
được định nghĩa như sau:
Trong đó:
X : cửa sổ con cần xét
: ngưỡng
: giá trị của đặc trưng Haar-like
: hệ số quyết định chiều của bất phương trình
Trang 7Ta hiểu công thức trên đơn giản như sau: khi giá trị của đặc trưng Haar-like k : tại
cửa sổ con x vượt qua một ngưỡng thì bộ phân lớp sẽ kết luận cửa sổ con x làkhuôn mặt (=1), còn không vượt qua ngưỡng đó thì không là khuôn mặt
Ngưỡng là giá trị đã rút ra sau qua trình huấn luyện bộ phân lớp, sẽ trình bày sau.
Như trong phần đối tượng nhận dạng, ta thấy đặc trưng Haar-like k có kích thước
và vị trí đặt trong cửa sổ con x trên hình sẽ có giá trị rất lớn (vì mức xám ở vùngmắt lớn hơn rất nhiều vùng má ) Giá trị này lớn hơn nhiều với hầu hết các giá trịkhác khi ta di chuyển cửa sổ con x sang các vị trí khác (quét trên toàn ảnh đầuvào), và với ngưỡng phù hợp, kết quả bộ phân lớp ) sẽ cho cửa sổ con ở vị trí nhưtrên là khuôn mặt còn ở vị trí khác thì không
Đương nhiên sẽ có những vị trí khác trên ảnh đầu vào vô tình cho ra vượt ngưỡng
và bộ phân lớp yếu) kết luận đấy là khuôn mặt, nhưng ta không chỉ dùng một đặctrưng Haar-like mà dùng rất nhiều đặc trưng ở những vị trí và kích thước khácnhau trong cửa sổ con làm giảm đi sự trùng hợp ngẫu nhiê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ínhtổ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ưngHaar-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 ( theo như 2 tác giả là Viola vàJones đã tính toán thì với mỗi cửa sổ con ở kích thước 24 x 24 pixel thì số lượngđầy đủ các đặc trưng haar-like là hơn 160000) Do đó Viola và Jones đưa ra một
khái niệm gọi là Integral Image trong mục tiếp theo để tính toán nhanh cho khác
feature cơ bản
4) Intergral Image: (Ảnh tích hợp)
Viola và Jones đưa ra một khái niệm gọi là Integral Image để tính toán nhanh cho khác feature cơ bản Sau này, Lienhart kế thừa gọi Integral Image là SAT – Summed Area Table và đưa ra thêm khái niệm RSAT – Rotated Summed Area Table dùng để tính toán nhanh cho các đặc trưng xoay 1 góc 45o 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êntrái đến vị trí dưới, phải của ảnh, việc tính toán này đơn thuần chỉ đựa trên phépcộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh
Trang 8A C
4
1 3 D
Hình 1: Cách tính Integral Image của ảnh
Sau khi đã tính được Integral Image, việc tính tổng điểm ảnh của một vùngbấ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ínhtổng điểm ảnh của vùng D như trong hình 2):
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: Ví dụ cách tính nhanh tổng các điểm ảnh của vùng D trên ảnh
Hình 3: Ví dụ cách tính nhanh tổng điểm ảnh của vùng D trên ảnh
với các đặc trưng xoay 45 o
Trang 9Với các đặc trưng Haar-like xoay 45o Integral Image tại một điểm (x, y) được
tính theo công thức:
Tổng pixel của một vùng bất kỳ trên ảnh vẫn được tính theo cách sau:
D = A + B + C + D – (A+B) – (A+C) + A
Như vậy tổng các điểm ảnh trong một hình chữ nhật (kể cả trường hợp xoay
45º) bất kì đều có thể được tính nhanh dựa trên integral image tại 4 đỉnh của nó :
Sum (D ) = 4 - 2 – 3 + 1
5) Thuật toán Adaboost:
a) Khái quát về Adaboost:
Kỹ thuật Boosting: nguyên tắc cơ bản của Boosting là kết hợp các bộ phân lớn yếu( hay các bộ phân lớp cơ sở ) để tạo nên bộ phân lớp mạnh Các bộ phân lớp yếunày thậm chỉ chỉ cần nhỉnh hơn phương pháp random một chút Bằng cách này, tanói bộ phân lớp đã được “boost”
Adaboost là 1 thuật toán sử dụng kỹ thuật Boosting được đưa ra bởi Freund vàSchapire vào 1996 Thuật toán này được sử dụng rất phổ biến cho bài toán kỹ thuậtphát hiện khuôn mặt
b) Thuật toán:
Điểm cải tiếng của Adaboost là ta sẽ gán mỗi mẫu 1 trọng số Ý nghĩa của nó nhưsau:
Trang 101 Cho một tập gồm n mẫu có đánh dấu (x 1 ,y 1 ), (x 2 ,y 2 ),… (x n ,y n ) với x k ∈ (x k1 , x k2 , … , x km ) là vector đặc trưng và y k ∈ (-1, 1) là nhãn của mẫu (1
ứng với object, -1 ứng với background).
2. Khởi tạo trọng số ban đầu cho tất cả các mẫu: với m là số mẫu đúng (ứng với object và y = 1) và l là số mẫu sai (ứng với background và y =
: Hệ số dùng để đưa về đoạn [0,1] (normalization factor)
4 Strong classifier được xây dựng :
c)Sơ đồ khối:
Trang 11Bắt đầu huấn luyện Khởi tạo tập đặc trưng ban đầu
Xác định các đặc trưng trong từng mẫu, xây dựng các bộ phân loại yếu tương ứng Đặc trưng haar-like
Tính toán giá trị lỗi cho mỗi đặc trưng (false alarm)
Xác định ngưỡng
Chọn weak classifier có giá trị lỗi bé nhất Lưu weak classifier được chọn False alarm ≤ max false alarm
Tập các mẫu và trọng số Tập các mẫu
Mẫu sai Mẫu đúng
Cập nhật lại trọng số
Sai Kết thúc, strong classifier đuợc xây dựng
Đúng
Quá trình huấn luyện bộ phân loại được thực hiện bằng một vòng lặp mà ở
mỗi bước lặp, thuật toán sẽ chọn ra weak classifier ht thực hiện việc phân loại với
lỗi ε t nhỏ nhất (do đó sẽ là bộ phân loại tốt nhất) để bổ sung vào strong classifier.
Mỗi khi chọn được 1 bộ phân loại h t , Adaboost sẽ tính giá trị α t theo công thức ở
trên α t cũng được chọn trên nguyên tắc làm giảm thiểu giá trị lỗi ε t
Hệ số α t nói lên mức độ quan trọng của h t:
• Trong công thức của bộ phân loại H(x):
Trang 12Ta thấy tất cả các bộ phân loại h t đều có đóng góp vào kết quả của bộ phân loại H(x), và mức độ đóng góp của chúng phụ thuộc vào giá trị α t
tương ứng: h t với α t càng lớn thì nó càng có vài trò quan trọng trong H(x).
• Trong công thức tính α t:
Dễ thấy giá trị α t tỉ lệ nghịch với ε t Bởi vì h t được chọn với tiêu chí đạt ε t
nhỏ nhất, do đó nó sẽ đảm bảo giá trị α t lớn nhất.
Sau khi tính được giá trị α t, Adaboost tiến hành cập nhật lại trọng số của các
mẫu: tăng trọng số các mẫu mà h t phân loại sai, giảm trọng số các mẫu mà h t phânloại đúng Bằng cách này, trọng số của mẫu phản ánh được mức độ khó nhận dạng
của mẫu đó và h t+1 sẽ ưu tiên học cách phân loại những mẫu này
Vòng lặp xây dựng strong classifier sẽ dừng lại sau T lần lặp Trong thực tế
cài đặt, người ta ít sử dụng giá trị T vì không có công thức nào đảm bảo tính được
giá trị T tối ưu cho quá trình huấn luyện Thay vào đó, người ta sử dụng giá trị max false positive hay max false alarm (tỉ lệ nhận dạng sai tối đa các mẫu background).
Tỉ lệ này của bộ phân loại cần xây dựng không được phép vượt quá giá trị này Khi
đó, qua các lần lặp, false alarm của strong classifier Ht (x) xây dựng được (tại lần
lặp thứ t) sẽ giảm dần, và vòng lặp kết thúc khi tỉ lệ này thấp hơn max false alarm.
6) Mô hình Cascade of classifier:
a) Khái quát:
Ta thấy quá trình huấn luyện, bộ phân loại phải duyệt qua tất cả các đặc trưng
của các mẫu trong tập training Việc này tốn rất nhiều thời gian Tuy nhiên, trong
các mẫu đưa vào, không phải mẫu nào cũng thuộc loại khó nhận dạng, có những
mẫu background rất dễ nhận ra (ta gọi đây là những mẫu background đơn giản).
Đối với những mẫu này, ta chỉ cần xét một hay vài đặc trưng đơn giản là có thểnhận diện được chứ không cần xét tất cả các đặc trưng Nhưng đối với các bộ phânloại thông thường thì cho dù mẫu cần nhận dạng là dễ hay khó thì nó vẫn sẽ xét tất
Trang 13cả các đặc trưng mà nó rút ra được trong quá trình học Do đó, chúng tốn thời gian
xử lý một cách không cần thiết
Cascade of Classifiers được xây dựng chính là nhằm rút ngắn thời gian xử lý, giảm thiểu false alarm cho bộ phân loại Cascade tree gồm nhiều stage (hay còn gọi là layer), mỗi stage của cây sẽ là một stage classifier Một mẫu để được phân loại là đối tượng thì nó cần phải đi qua hết tất cả các stages của cây Các stage classifiers ở stage sau được huấn luyện bằng những mẫu negative mà stage classifier trước nó nhận dạng sai, tức là nó sẽ tập trung học từ các mẫu background khó hơn, do đó sự kết hợp các stage classifiers này lại sẽ giúp bộ phân loại có false alarm thấp Với cấu trúc này, những mẫu background dễ nhận diện sẽ bị loại ngay
từ những stages đầu tiên, giúp đáp ứng tốt nhất đối với độ phức tạp gia tăng của
các mẫu đưa vào, đồng thời giúp rút ngắn thời gian xử lý
b) Thuật toán:
Trang 14F là giá trị false alarm và d là độ chính xác của weak classifier ở mỗi stage
F target: Giá trị max false alarm.
P, N là số lượng mẫu positive và negative.
P i , N i là tập positive và negative cho bộ phân lớp ở tầng thứ i.
F i , D i : Giá trị false alarm và độ chính xác của cascade trước khi đến tầng thứ
N = { số mẫu sai ở stage hiện tại phân loại sai }.
P = { số mẫu positive mà stage hiện tại phân loại dúng }