Nhận dạng khuôn mặt với thuật toán AdaBoost

Một phần của tài liệu LUẬN VĂN ĐIỀU KHIỂN TỰ ĐỘNG ROBOT TRÁNH CHƯỚNG NGẠI VẬT (Trang 64)

Giới thiệu

Mục tiêu của quá trình nhận dạng là phân loại phân loại ảnh nhận được dựa trên giá trị

của các thuộc tính đơn giản. Có nhiều lý do đểđưa đến việc dùng các thuộc tính thay cho phân

tích trên các pixel, lý do chính đó là các thuộc tính có thể được dùng để mã hóa thành dạng

kiến thức học mà nếu thực hiện dựa trên pixel sẽ chậm hơn rất nhiều. Paul Viola và Michael

Johns đã trình bày một phương pháp phát hiện khuôn mặt bằng cách áp dụng chuỗi phân loại

với thuật toán Adaboost trong bài báo "Rapid Object Detection using a Boosted Cascade of Simple Features " [4].

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 56

Hình 5.8 Dạng thuộc tính Haar-like được dùng trong quá trình phát hiện khuôn mặt : thuộc

tính 2 hình chữ nhật ở hình A và B có tác dụng với cạnh, 3 hình chữ nhật ở hình C có tác dụng với đường và 4 hình chữ nhật ở hình C có tác dụng với đường chéo

Các thuộc tính đơn giản được sử dụng gợi nhớ đến các hàm cơ bản của Haar. Chi tiết hơn chúng ta sử dụng 3 dạng thuộc tính như trên hình 5.8 . Giá trị của thuộc tính 2 hình chữ

nhật là hiệu của tổng các pixel trong phần xám và các pixel trong phần trắng. Hai hình chữ

nhật này có thể nằm theo chiều dọc hoặc ngang nhưng với cùng kích thước. Thuộc tính 3 hình chữ nhật tính tổng 2 phần ngoài rồi trừ cho tổng phần trong. Cuối cùng, thuộc tính 4 hình chữ

nhật tính hiệu của tổng 2 cặp hình chữ nhật theo đường chéo.

Giả sử rằng độ phân giải cơ bản của bộ phát hiện là 24x24, một bộ thuộc tính đầy đủ thì khá lớn, trên 180000 thuộc tính. Khác với cơ sở Haar, một tập các thuộc tính như vậy là “quá

đầy đủ” vì lý do: một tập cơ sở không có sự phụ thuộc tuyến tính giữa các phần tử như hình

ảnh cần xử lý sẽ có số phần tử tương ứng với số pixel là 576, quá nhỏ so với tập các thuộc tính !

5.2.1 Ảnh tích phân ( Integral Image):

Các thuộc tính hình chữ nhật có thể được tính tóan rất nhanh sử dụng cách biểu diễn trung gian gọi là ảnh tích phân cho đối tượng ảnh. Ảnh tích phân tại vị trí (x,y) chứa đựng tổng các pixel ở trên và bên trái của (x,y) cụ thể là:

' , ' ( , ) ( ', ') x x y y ii x y i x y < < = ∑

Với ii(x,y) là ảnh tích phân và i(x,y) là ảnh gốc. Sử dụng công thức lặp sau :

( , ) ( , 1) ( , ) ( , ) ( 1, ) ( , ) s x y s x y i x y ii x y ii x y s x y = − + = − +

Với s(x,y) là tổng tích lũy hàng, s(x,-1) = 0, và ii(-1,y) = 0, ảnh tích phân có thểđược tính khi quét qua ảnh gốc chỉ một lần.

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 57

Hình 5.9 Thuật toán tính ảnh tích phân: sau khi tính toán pixel tại vị trí 1 bằng tổng các pixel trên và bên trái trong ảnh gốc tức A, giá trị tại vị trí 2 là A+B, vị trí 3 là A+C, vị trí 4 là

A+B+C+D. Tổng các pixel trong D là : ( 4+1)-(2+3)

Với ảnh tích phân thì tổng của hình chữ nhật bất kì đều có thể tính dựa vào giá trịở 4

đỉnh. Hiệu giữa các tổng hình chữ nhật có thể được tính dựa trên 6 giá trị đỉnh trong trường hợp thuộc tính 2 hình chữ nhật kề, 8 cho trường hợp 3 hình chữ nhật và 9 cho trường hợp 4 hình chữ nhật.

Các thuộc tính hình chữ nhật thì còn sơ khai nếu so với các phương pháp khác, khi mà

việc phát hiện biên và các thuộc tính cơ bản của ảnh số còn hạn chế. Tuy nhiên, tập hợp các thuộc tính hình chữ nhật cung cấp một tập dữ liệu dồi dào cho việc học hiệu quả. Khi kết hợp với ảnh tích phân, hiệu quả của tập các thuộc tính hình chữ nhật sẽ bù lại phần nào mặt hạn chế của nó.

5.2.2 Các hàm học phân loại

Với một tập thuộc tính và một tập huấn luyện các ảnh dương và ảnh âm thì bất cứ

phương pháp học máy nào cũng có thể dùng để phân lọai. Trong hệ thống này, một biến thể

của AdaBoost được dùng để chọn một tập nhỏ các thuộc tính cũng nhưđể huấn luyện bộ phân loại. Trong dạng nguyên thủy, thuật toán AdaBoost dùng để tăng tốc độ quá trình phân loại trên một thuật toán học đơn giản (nhiều khi còn yếu). Như phần trên đã nói, chúng ta có 18000 thuộc tính cho một khung hình cần nhận dạng, lớn hơn nhiều số pixel. Mặc dù mỗi thuộc tính

được tính rất nhanh, để tính tóan hết tập thuộc tính đó cũng là một vấn đề. Giả thuyết đặt ra là: chỉ một số lượng rất nhỏ các thuộc tính được đưa vào bộ phân loại, việc cần làm là tìm ra các thuộc tính này.

Để hỗ trợ việc này, một thuật toán học đơn giản được thiết kế để lựa chọn 1 thuộc tính hình chữ nhật phân lọai tốt nhất ảnh dương và ảnh âm. Với mỗi thuộc tính, thuật tóan này tìm ra hàm phân lọai ngưỡng tối ưu nhất. Một bộ phân lọai h xj( ) bao gồm một thuộc tính f xj( ), một ngưỡng θj( )x và một phân cực pj chỉ ra hướng của dấu bất đẳng thức :

1 ( ) 0 j h x  =   if if p f xj j( ) pj j otherwise θ <

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 58

AdadBoost cho việc học phân loại, mỗi vòng boosting lựa chọn một thuộc tính từ 18000 thuộc tính:

§ Cho một tập vào ra ( ,x yi i) với yi =0,1 cho ngõ ra ảnh âm hay ảnh dương

§ Khởi tạo các trọng số : 1, 1 ,1 2 1 i w m l = với yi =0,1 và m,l là số mẫu âm và dương. § Cho t=1,...,T 1. Chuẩn hóa các trọng số: , , , 1 t i t i n t j j w w w = ← ∑ do đó wt i, là phân bố xác suất

2. Đối với từng thuộc tính j, huấn luyện bộ phân loại hj giới hạn theo một thuộc tính. Sai sốđược tính ứng với trọng số wt : ( ) j i i j i i E =∑ w h xy 3. Chọn bộ phân lọai htvới sai số ít nhất. 4. Cập nhật trọng số: 1 1, , i e t i t i t w w β − + =

trong đó ei =0 nếuxi được phân loại đúng, e1=1 nếu ngược lại và 1 t t t e e β = − § Bộ phân lọai cuối cùng là : 1 ( ) 0 h x  =   1 1 1 ( ) 2 T T t t t t=α h xt=α ∑ ∑ với 1 log t t α β =

Trên thực tế, không một thuộc tính đơn lẻ nào được phân lọai với sai số thấp. Thuộc tính

được lưa chọn trong những vòng đầu thuật tóan cho sai số trong khỏang 0.1-0.3. Thuộc tính

được chọn trong những vòng sau, khi công việc trở nên khó hơn, cho sai số trong khoảng 0.4-

0.5 .

Đối với mục đích nhận dạng khuôn mặt người, những thuộc tính hình chữ nhật đầu tiên

được thuật toán AdaBoost chọn phải thật rõ ràng và dễđể nhận thấy. Thuộc tính đầu tiên được chọn phản ánh tính chất vùng mắt thường tối hơn vùng mũi và vùng má. Kích thước để nhận biết thuộc tính này tương đối lớn so với khung ảnh phụ và không nên phụ thuộc vào kích thước và vị trí của khuôn mặt. Thuộc tính thứ hai dựa trên tính chất vùng mắt thường tối hơn vùng sống mũi.

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 59

Hình 5.10 Hai thuộc tính đầu tiên được lựa chọn trong thuật toán AdaBoost

5.2.3 Chuỗi phân loại tập trung (Attentional Cascade)

Phần này mô tả thuật toán để xây dựng một chuỗi các bộ phân loại nhằm tăng hiệu quả

phát hiện đồng thời giảm triệt để thời gian tính toán. Chìa khóa của vấn đề là một bộ phân loại kích thước nhỏ nhưng hiệu quả có thểđược xây dựng qua việc loại bỏ các khung hình phụ âm (negative sub-window) trong khi tìm kiếm trong tất cả các trường hợp dương ( chẳng hạn điều chỉnh ngưỡng của bộ phân loại để các trường hợp bị phát hiện nhầm là âm giảm về không). Các bộ phân loại đơn giản thì được sử dụng trước tiên để loại bỏ phần lớn các khung hình phụ

trước khi các bộ phân lọai phức tạp được gọi.

Toàn bộ quá trình phát hiện có thểđược mô tả bằng một cây quyết định suy giảm dần mà ta gọi là chuỗi phân loại (cascade). Một kết quả dương của bộ phân loại trước sẽ kích họat việc đánh giá của bộ phân loại sau, và kết quả dương của bộ phân loại này lại kích hoạt bộ

phân loại sau nữa,…Bất cứ kết quả âm của tầng phân loại nào cũng sẽ loại bỏ khung hình phụ đó.

Ví dụ như tầng đầu tiên đạt hiệu quả cao được xây dựng từ bộ phân loại hai thuộc tính ‘mạnh’ bằng cách giảm ngưỡng để hạn chế mẫu bị nhầm là âm. Việc tính toán của tầng này sẽ

tốn mất 60 lệnh vi xử lý, do đó khó có thể tìm ra một bộ lọc đơn giản nào cho hiệu suất hơn.

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 60

Cấu trúc của chuỗi phát hiện phản ánh một điều là trong một ảnh đơn bất kỳ, một lượng lớn các khung hình phụ sẽ là âm. Do đó, chuỗi phát hiện cố gắng lọai bỏ càng nhiều khung hình âm ở những tầng đầu tiên càng tốt.

Do có hình dạng cây quyết định, các bộ phân loại sau sẽ được huấn luyện trên các mẫu

được thông qua ở tất cả các tầng trước. Kết quả là, công việc của tầng sau sẽ khó hơn ở tầng trước. Do các mẫu được đưa đến các tầng sau thường khó nhận dạng hơn các mẫu đển hình nên ở các tầng này tỉ lệ nhận dạng nhầm là sai cao hơn.

5.2.4 Huấn luyện một chuỗi phát hiện

Quá trình huấn luyện chuỗi phát hiện liên quan đến việc dung hòa hai vấn đề. Chuỗi phát hiện với nhiều thuộc tính hơn sẽ nhận dạng chính xác hơn và tỉ lệ nhận nhầm là âm sẽ thấp hơn. Tuy nhiên, chuỗi phát hiện với nhiều thuộc tính đòi hỏi thời gian tính toán nhiều hơn. Về

nguyên tắc, ta có thểđịnh nghĩa một cấu trúc tối ưu mà trong đó : số tầng, số thuộc tính mỗi tầng và ngưỡng của mỗi tầng phải được dung hòa để tối thiểu hóa số thuộc tính. Việc tìm ra cấu trúc tối ưu này rất là khó khăn.

Trên thực tế, một cấu trúc rất đơn giản để tạo ra một bộ phân loại hiệu suất cao. Mục tiêu

được chọn là giảm tối thiểu việc phân loại nhầm là dương và tối đa hiệu suất phát hiện đúng. Mỗi tầng được thêm các thuộc tính để cho đến khi tỉ lệ phân loại nhầm là dương và tỉ lệ tìm kiếm đúng đạt được và được kiểm tra lại bằng một tập mẫu kiểm chứng. Các tầng được thêm vào chuỗi phân loại cho đền khi đạt yêu cầu về tỉ lệ phát hiện nhầm là dương và phát hiện

đúng.

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 61

5.3 THƯ VIỆN XỬ LÝ ẢNH OPENCV CỦA INTEL : 5.3.1 Giới thiệu : 5.3.1 Giới thiệu :

OpenCV là thư viện mở dùng cho xử lý ảnh trên máy tính (computer vision) có sẵn trên

trang http://SourceForge.net/projects/OpenCVlibrary. OpenCV được thiết kếđể làm cho việc

tính toán trở nên thuận tiện hơn với các ứng dụng thời gian thực. Một trong những mục tiêu của OpenCV là cung cấp một cấu trúc thị giác máy tính dễ sử dụng cho người dùng để có thể

xây dựng các ứng dụng xử lý ảnh tương đối phức tạp một cách nhanh chóng. Thư viện

OpenCV chứa hơn 500 hàm có thểứng dụng trong nhiều lĩnh vực như giám sát nhà máy, phân

tích ảnh y khoa, an ninh và robotic. Do thị giác máy tính và việc học máy ( machine learning)

thường đi đôi với nhau nên OpenCV cũng kèm theo thư viện học máy đầy đủ Machine Learning Library (MLL). Thư viện phụ này vào việc nhận dạng ( recognition ) và việc xếp nhóm ( clustering).

5.3.2 Các thành phần chức năng của OpenCv:

§ CXCORE : chứa các định nghĩa về các kiểu dữ liệu cơ sở. Ví dụ các cấu trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h. CXCORE cũng

chứa các đại số tuyến tính ( linear algebra), phương pháp thống kê ( statistic method),

chức năng duy trì và điều khiển chuỗi. Một số ít các chức năng đồ họa để vẽ trên ảnh cũng đặt ởđây.

§ CV : chứa các thuật toán về xử lý ảnh và định kích cỡ camera, các chức năng hình họa

máy tính (computational geometry function) cũng được đặt ởđây.

§ CVAUX : được mô tả trong tài liệu của OpenCv là chứa các mã đã lỗi thời và các mã thử nghiệm. Tuy nhiên các giao diện đơn cho phần nhận diện khuôn mặt cũng trong module này.

§ HIGHGUI CVCAM được đặt trong cùng thư mục là "otherlibs"

HIGHGUI : chứa các giao diện vào ra cơ bản và các khả năng cửa sổđa nền tảng.

CVCAM : chứa các giao diện cho video truy cập qua DirectX trên nền Windows 32

bits.

5.3.3 Cấu trúc ảnh IplImage

IplImage là định dạng ảnh được giới thiệu và phát triển bởi Intel. Chuẩn IplImage được sử dụng rộng rãi trong xử lý ảnh, tối ưu hóa quá trình xử lý nhờ quản lý các nhóm dữ liệu dưới dạng các Field. Quá trình xử lý được thực hiện trên các trường làm tăng khả năng linh hoạt và tốc độ xử lý dữ liệu. Định dạng IplImage được dùng rộng rãi trong các bộ thư viện xử lý ảnh

như IPL ( Image Procesing Library) hay IPP ( Intergrated Performance Primitives), OpenCV,

AMM,...

Cấu trúc IplImage trong OpenCV như sau:

typedef struct _IplImage {

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 62

int nSize; int ID;

int nChannels;

int alphaChannel; // OpenCV không sử dụng

int depth;

char colorModel[4]; // OpenCV không sử dụng

char channelSeq[4]; // OpenCV không sử dụng

int dataOrder; int origin;

int align; // OpenCV không sử dụng

int width; int height;

struct _IplROI *roi;

struct _IplImage *maskROI; // bằng NULL trong OpenCV

void *imageId; //bằng NULL trong OpenCV

struct _IplTileInfo *tileInfo; //bằng NULL trong OpenCV

int imageSize; char *imageData; int widthStep;

int BorderMode[4]; // OpenCV không sử dụng

int BorderConst[4]; // OpenCV không sử dụng

char *imageDataOrigin; } IplImage; Các tham số: • nSize : kích thước của ảnh • ID : chỉ số version, luôn bằng 0

• nChannels : số kênh, các hàm của OpenCV đều hỗ trợ từ 1-4 kênh

• alphaChannel : OpenCV không sử dụng

• depth : chiều sâu của pixel theo bit, có các dạng sau :

IPL_DEPTH_8U : unsigned 8-bit integer IPL_DEPTH_8S : signed 8-bit integer IPL_DEPTH_16U : unsigned 16-bit interger …

• dataOder : 0 = IPL_DATA_ORDER_PIXEL các kênh màu đan xen nhau,

1 = các kênh màu tách rời

• origin : gốc tọa độ 0 = top-left origin, 1 = bottom-left origin ( kiểu Window

bitmap)

Chương 5 Xử lý ảnh số và OpenCv

———————————————————————————————————

Robot trán h hướng ngại vật - GVHD: TS.Nguyễn Đức Thành Trang 63

• height : chiều cao ảnh theo pixel

• roi Region of Interest (ROI) nếu bằng NULL thì chỉ có vùng ROI được xử lý

• imageSize : kích thước dữ liệu ảnh theo byte

• imageData : một pointer trỏ tới vùng địa chỉảnh

• widthStep : the size of an aligned image row, in bytes

5.3.4 Các hàm dùng trong luận văn :

§ Thu nhận ảnh từ camera :

CvCapture* cvCaptureFromCAM(int index);

Trong đó index là chỉ số camera được sử dụng, nếu có 1 camera, index = -1 Chức năng : thu nhận hình ảnh từ camera và trả về pointer có kiểu là CVCapture.

§ Giải phóng camera :

void cvReleaseCapture( CvCapture**capture);

Trong đó capture là địa chỉ của Pointer có kiểu cvCapture

§ Lấy hình từ camera :

Một phần của tài liệu LUẬN VĂN ĐIỀU KHIỂN TỰ ĐỘNG ROBOT TRÁNH CHƯỚNG NGẠI VẬT (Trang 64)