Nhận diện khuôn mặt với 2 thuật toán viola jones, camshift
Trang 11
Trang 2Lời mở đầuTheo dõi các đối tượng tự động là một phương pháp của xử lý ảnh số, nó bao gồm việc tìm kiếm và theo dõi các đối tượng khác nhau di chuyển qua các khung hình
kế tiếp nhau theo trình tự của một video Chức năng này của computer vision được mở rộng và sử dụng trong các giao diện người dùng, robot, các thiết bị y tế, thiết bị giám sát… Và được quan tâm nhất là hệ thống theo dõi tự động được nhúng trong các nền tảng khác nhau Các công việc dưới đây mô tả một trong các triển khai như vậy Việc tạo
ra hệ thống theo dõi được nhúng trong các nền tảng gồm 2 vấn đề: một là chọn nền tảng thích hợp, hai là chọn thuật toán theo dõi tương ứng có độ tin cậy và tốc đô chấp nhận được
Hầu hết các thuật toán được phát triển gần đây đều dựa trên nguyên tắc sau: phương pháp tương quan, lưu lượng quang học, trừ nền, lọc hạt, phương pháp đánh giá mật độ xác suất,…Phương pháp tương quan và lưu lượng quang học được phân biệt với những tính toán phức tạp làm chúng khó phù hợp với những ứng dụng thời gian thực Việc trừ nền thì kém hiệu quả khi có tiếng ồn và không thể làm việc khi camera đang chuyển động Việc lọc hạt thì lại đánh đổi độ tin cậy với tốc độ Do đó trong bài tập lần này chúng em chọn sử dụng phương pháp tiếp cận dựa trên thuật toán ước lượng mật độ xác suất gọi là Camshift Kĩ thuật này có chi phí tính toán thấp và có thể dùng trong các ứng dụng thời gian thực Camshift có đủ độ tin cậy, có thể theo dõi các đối tượng không cứng nhắc khi máy quay di chuyển, cho thấy độ nhạy thấp với tiếng ồn
Phần sau đây của báo cáo, chúng em sẽ trình bày về thuật toán Camshift và mô hình thực hiện nó trên Matlab Simulink
Trang 3Thuật toán Viola-Jones
1 Đặ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 1: 4 đặt trưng Haar-like cơ
bản
Để sử dụng các đặt trưng này vào việc xác định khuôn mặt người, 4 đặt 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:
- Đặc trưng cạnh (edge features):
- Đặc trưng đường (line features):
- Đặc trưng xung quanh tâm (center-surround features):
Hình 2: Các đặc trưng mở rộng của các đặc trưng Haar-like cơ
sở3
Trang 4Dù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:
bộ nhận dạng của Adaboost, số lượng ảnh sai luôn phải tuơng đối nhiều để
nó loại trừ
- Mean shift là thuật toán tracking Tức là sau khi nó phát hiện được đối tượng nằm đâu nó chỉ theo dõi chuyển động của đối tượng đó Ở đây là khuôn mặt, sau khi xác đinh khuôn mặt, nếu khuôn mặt có lắc lư thì nó cũng sẽ theo dõi, chứ không cần dùng lại thuật toán để nhận dạng
Trang 6khá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ỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh
Hình 3: Cách tính Integral Image của ảnhSau 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:
Trang 7Giả 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 4, 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 4: Ví dụ cách tính nhanh các giá trị mức xám của vùng D trên ảnh
7
Trang 8Tiế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ện đoán một cách ngẫn 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%
3 AdaBoost
AdaBoost là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cậnboosting được Freund và Schapire đưa ra vào năm 1995 Adaboost cũng hoạt động trên nguyên tắc kết hợp tuyến tính các weak classifiers để hình thành một strong classifier
Là một cải tiến của tiếp cận boosting, AdaBoost sử dụng thêm khái niệm 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 classifiers đượ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 kế tiếp: 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 weak classifer sau có thể tập trung vào các mẫu mà các weak classifiers trước nó làm chưa tốt Sau cùng, các weak classifers sẽ được kết hợp tùy theo mức độ tốt của chúng để tạo nên 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ưngHaar-like theo mô hình phân tầng (cascade) như sau:
Hình 5: Mô hình phân tần kết hợp các bộ phân loại yếu để xác định khôn mặt
Trang 9Trong đó hk là bộ phận loại yếu, được biểu diễn như sau:
x: cửa sổ con cần xétO
Với: a
t >= 0 là hệ số chuẩn hoá cho các bộ phân loại yếu
Hình 6: Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh
4 Hệ thống xác định vị trí khuôn mặt người
9
Trang 10Hình 7: 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ẽ được tính 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 5) 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ẽ đượ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
Trang 11Thuật toán Camshift
Giải thuật Camshift (Continuously Adaptive Mean Shift) dựa trên nền tảng là giải thuật Mean Shift và được hiệu chỉnh để đạt mục đích theo vết động Sự cải tiến của Camshift so với Meanshift được minh họa ở bảng sau:
Thông số MeanShift Camshift
Trạng thái đối
tượng
Tĩnh, chỉ tịnh tiến
Động, có thể xoay
Phân bố màu liên tục cập nhật liên tục frame by frameKích thước
Dựa trên moment cấp 2
để tìm và dự đoán vector dị chuyển
So sánh MeanShift và Camshift
Thuật toán Camshift được phát triển cho việc theo dõi hiệu quả khuôn mặt và đầu trong các giao diện người dùng tri giác Phần chính của nó là một phương pháp phi tham số mạnh mẽ cho phép việc tăng dần các xác suất nhằm tìm ra đỉnh của mật độ xác suất Thuật toán này còn được gọi là mean-shift Thuật toán Camshift ban đầu sử dụng thuật toán Histogram một chiều như là mô hình các đối tượng bắt được Các biểu đồ bao gồm các kênh màu (H) trong không gian màu HSV Việc tìm kiếm được thực hiện thông qua việc tìm kiếm các phân bố xác suất lớn nhất thu được từ các biểu đồ trình chiếu lại (back projection) Để giảm lượng tính toán, các phân bố xác suất không quét trên toàn bộ không gian ảnh, thay vào đó là chỉ tính toán trên một không gian nhỏ xung quanh cửa sổ tìm kiếm hiện tại
Thuật toán Camshift gồm 3 phần:
1. Back projection
2. Meanshift
3. Track
Page 11
Trang 12Chi tiết về các phần trong Camshift:
1. Back projection
Back projection là phương pháp xử dụng các biểu đồ histogram của hình ảnh để hiển thị các xác suất xuất hiện của các màu trong mỗi điểm ảnh Bước đầu tiên của thuật toán này là chuyển đổi các không gian hình ảnh sang không gian HSV ( hoặc bất kì không gian ảnh nào bao gồm kênh H, đặc trưng cho màu sắc của mỗi điểm ảnh ) Sau đó chia kênh H ra, như một ảnh xám duy nhất, lấy histogram và bình thường hóa nó Bước cuối là sử dụng hàm tính toán back project của ảnh Bức ảnh back projection thu được thể hiện xác suất 1 điểm ảnh có thuộc đối tượng hay không
Ảnh đầu vào:
Chuyển sang không gian HSV và đây là kênh H:
Trang 13Histogram của ảnh kênh H:
Page 13
Trang 14Tính toán lại trọng lượng của từng màu sắc trong toàn bộ bức ảnh histogram và thay đổi giá trị mỗi điểm ảnh với trọng lượng màu sắc của nó trong toàn bộ bức ảnh Đây là hình ảnh sau khi thực hiện back projection.
2. Meanshift
Meanshift là thuật toán thực hiện trên một tập dữ liệu nhằm tìm ra các đại diện, sử dụng hàm mật
độ xác suất cơ bản PDF trên không gian RxN Đây là kĩ thuật phân nhóm không tham số, không đòi hỏi hiểu biết về các cluster, và cũng không hạn chế hình dạng các cluster
Thuật toán Meanshift là thuật toán theo dõi được phát triển từ phương pháp Gauss dùng ước lượng đối tượng trên một cửa sổ cố định, chia ảnh của đối tượng thành các ma trận điểm ảnh, sau
đó thực hiện ước lượng các điểm ảnh này bằng phương pháp Gauss, tính trung bình các pixel đó trên khung ảnh cố định của đối tượng Quá trình lặp lại cho đến khi hội tụ
Đầu vào của thuật toán là bức ảnh xám hay back projection
Đầu tiên nó sẽ tính toán centroid của tất cả các điểm ảnh trong ảnh Nếu các centroid này là “ weighted” thì các điểm ảnh sáng sẽ được gán một trọng lượng lớn hơn, các điểm ảnh màu đen thì
sẽ không có gì
Để dễ hiểu, hãy tưởng tượng chúng ta đang trong không gian d chiều ( d>2), và có rất nhiều điểm trong không gian này Mục đích của thuật toán meanshift trong trường hợp này là phân nhóm các điểm này Bây giờ chúng ta tạo ra một hình cầu mà tâm là một trong các điểm này, bán kinh h Vì chúng ta đang trong không gian high-demensional nên hình cầu chúng ta tạo ra cũng là high-demensional Khi đó, mỗi điểm chính là một vector , và tổng các vector này gọi là meanshift Với vector meanshift này, chúng ta sẽ có được khối lượng của vector trung tâm hiện tại
Trang 15Phần trên là phần lõi của thuật toán meanshift, sau đây sẽ là toàn bộ thuật toán:
• Khởi tạo hình cầu, bao gồm tâm và bán kính
• Tính toán các giá trị mass của tâm hiện tại
• Chuyển tâm hình cầu tới tâm mass
Page 15
Trang 16• Lặp lại bước 2,3 cho đến khi đạt giá trị hội tụ, là mass trung tâm hiện tại sau khi tính toán, cũng là tâm của hình cầu.
Quá trình này sẽ được lặp lại trong các khung hình của video
Điểm mạnh : thuật toán Meanshift theo dõi đối tượng hiệu quả hơn trong việc tìm kiếm đối tượng trong lân cận nơi chúng đã từng xuất hiện trong frame trước
Điểm yếu của Meanshift : là về kích thước cửa sổ tìm kiếm có kích thước không đổi nên điều này làm cho nó chỉ theo dõi được một phần của đối tượng, đưa ra một kết quả ước tính không chính xác về vị trí của nó
3. Track
Đây là bước cuối cùng trong tracking, khi chúng ta có sẵn một video hoặc các frame bắt được bởi camera, chúng ta sẽ áp dụng thuật toán meanshift lên từng frame ảnh, và khởi tạo cửa
sổ ban đầu cho mỗi khung là cửa sổ đầu ra của khung trước
Thuật toán Camshift giảm theo trình tự các bước sau đây:
o Thiết lập khu vực tính toán xác suất bằng nhau cho toàn bộ frame
o Chọn vị trí ban đầu cho cửa sổ tìm kiếm trung bình 2 chiều
o Tính phân phối màu sắc cho khu vực trung tâm 2D của cửa sổ tìm kiếm trong vùng lớn hơn kích cỡ cửa sổ tìm kiếm trung bình
o Thực hiện các tìm kiếm mật độ xác suất tối đa sử dụng các tham số dịch chuyển trung bình để hội tụ hoặc để thiết lập số lần lặp lại Lưu trữ các thời điểm không( vị trí hoặc kích cỡ) và các vị trí trung bình
o Trong những khung hình tiếp theo, đặt các cửa sổ tìm kiếm ở các vị trí trung bình cố đinh tìm được ở bước 4 và thiết lập cửa sổ về thời điểm gần nhất Trở lại bước 3
Trang 17Như đã đề cập, ở bước 2 , các phân bố xác suất được tính dựa vào thủ tục trình chiếu lại.Hoạt động ở mức thấp này đặt các giá trị điểm ảnh vào các bin Histogram đích tương ứng Đối với phân bố xác suất 2D rời rạc, giá trị trung bình( trọng tâm) trong cửa sổ tìm kiếm( bước 3,4) có thể được xác định như sau:
Với (x,y) là giá trị phân phối xác suất rời rạc tại điểm (x,y) trong hình ảnh sao lại, các giá trị x,y thay đổi trong một cửa sổ tìm kiếm - thời điểm không, và là các thời điểm đầu tiên là vị trí của một cửa sổ tìm kiếm (trọng tâm) Tính toán vị trí trung bình là việc lặp đi lặp lại các thay đổi cho đến khi đạt được sự thay đổi nhỏ nhất của điểm ảnh theo và Giá trị lớn nhất của số lần lặp được đưa ra thường là từ 10 đến 20 Quy mô và hình dạng của phân phối (quy mô và hình dạng của đối tượng) đều được tính toán bằng cách sử dụng phương trình sau:
Hai giá trị riêng đầu tiên (chiều rộng và chiều dài) của phân bố xác suất (tương ứng với đối tượng) được bắt bởi Camshift có thể tính được với công thức gần giống với công thức tính tại thời điểm trung tâm:
Các giới hạn của các bán trục w và l được tính theo công thức sau:
Page 17
Trang 18Định hướng đối tượng (chủ yếu theo trục nghiêng) có thể được tính theo công thức sau:
Nếu biểu đồ Histogram đích có chứa một số lượng đáng kể các đặc điểm thuộc về hình nền hoặc các đối tượng lân cận, khi đó vị trí và quy mô mục tiêu khó có thể được xác định chính xác Để đối phó với vấn đề này, chúng ta có thể áp dụng một kĩ thuật đơn giản: giảm khối lượng các bin của Histogram đích thuộc đồng thời cả Histogram của nền Nói cách khác là sử dụng tỉ lệ giữa các bin của Histogram đích với các bin Histogram của nền tương ứng (nền tương ứng với bên ngoài cửa sổ tìm kiếm ban đầu) – gọi là biểu đồ trọng lượng Biểu đồ trọng lượng có thể viết như sau:
Với là khối lượng Histogram (tỉ lệ biểu đồ), là Histogram đích, là Histogram nền
Trang 19Tại sao lại Là Matlab?
Matlab là ngôn ngữ lập trình thực hành bậc cao, dùng để giải các bài toán về kĩ thuật Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện người dùng dễ làm việc Dữ liệu cùng với thư viện được lập trình sẵn cho phép người sử dụng có thể thực hiện nhiều ứng dụng trong thực tế trong điều khiển, viễn thông, xử lý
âm thanh, hình ảnh, video…và những ứng dụng sau đây:
o Sử dụng các hàm có sẵn trong thư viện, các phép tính toán thông thường
o Cho phép lập trình tạo ra những ứng dụng mới
o Cho phép mô phỏng các mô hình thực tế
o Phân tích, khảo sát và hiển thị dữ liệu
o Với phần mềm đồ họa cực nhanh
o Cho phép phát triển, giao tiếp với một số phần mềm khác như : C++, Fortan
Tổng quan cấu trúc dữ liệu trong Matlab, các ứng dụng:
Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (không đòi hỏi về kích thước) Chúng cho phép giải quyết các vấn đề liên quan đến lập trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vector và có thể sử dụng ngôn ngữ C hoặc Fortan lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu lệnh gọi từ Matlab Matlab được viết tắt từ “ Matrix Laboratory” – thư viện về ma trận, từ đó phần mềm Matlab được viết nhằm cung cấp cho việc truy cập vào các phần mềm ma trận một cách
dễ dàng, phần mềm ma trận này được phát triển bởi các công trình Linpack hoặc Eispack Ngày nay Matlab được phát triển bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận
Dữ liệu trong Matlab:
Dữ liệu trong Matlab được thể hiện dưới dạng ma trận (hoặc mảng – tổng quát ) , và có các kiểu dữ liệu được liệt kê sau đây:
o Kiểu đơn single, kiểu này có lợi về bộ nhớ, vì nó đòi hỏi dữ liệu ít byte nhớ hơn, kiểu dữ liệu này ít được sử dụng trong tính toán vì độ chính xác kém hơn
o Kiểu double, kiểu này là thông dụng nhất trong Matlab
Trong Matlab kiểu double là được mặc định sử dụng trong các phép tính số học
Toolbox là một công cụ quan trọng trong Matlab:
Page 19