Đồ án Nhận dạng khuôn mặt và nhận dạng giới tính bằng PCA

Hiện nay, cùng với sự phát triển của xã hội, vấn đề an ninh bảo mật đang được yêu cầu khắt khe tại mọi quốc gia trên thế giới. Các hệ thống nhận dạng con người được ra đời với độ tin cậy ngày càng cao. Một trong các bài toán nhận dạng con người rất được quan tâm hiện nay là nhận dạng khuôn mặt. Vì nhận dạng khuôn mặt là cách mà con người sử dụng để phân biệt nhau. Bên cạnh đó, ngày nay việc thu thập, xử lý thông tin qua ảnh để nhận biết đối tượng đang được quan tâm và ứng dụng rộng rãi. Với phương pháp này, chúng ta có thể thu nhận được nhiều thông tin từ đối tượng mà không cần tác động nhiều đến đối tượng nghiên cứu. Sự phát triển của khoa học máy tính tạo môi trường thuận lợi cho bài toán nhận dạng mặt người từ ảnh số. Các hệ thống nhận dạng offline đã ra đời và có độ tin cậy cao, tuy nhiên các hệ thống nhận dạng online lại chưa đáp ứng được nhiều. Trong khuôn khổ đồ án này, chúng em sẽ tiếp tục giải quyết bài toán nhận dạng offline. Trong đó đối tượng được thu thập thành các file dữ liệu và được chuyển về trung tâm. Tại đó, các số liệu sẽ được phân tích xử lý. Trong phần đầu, chúng em sẽ giải quyết bài toán nhận dạng thông thường, phần hai sẽ là phần nhận dạng giới tính.

doc15 trang | Chia sẻ: oanhnt | Lượt xem: 2067 | Lượt tải: 5download
Bạn đang xem nội dung tài liệu Đồ án Nhận dạng khuôn mặt và nhận dạng giới tính bằng PCA, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lời mở đầu Hiện nay, cùng với sự phát triển của xã hội, vấn đề an ninh bảo mật đang được yêu cầu khắt khe tại mọi quốc gia trên thế giới. Các hệ thống nhận dạng con người được ra đời với độ tin cậy ngày càng cao. Một trong các bài toán nhận dạng con người rất được quan tâm hiện nay là nhận dạng khuôn mặt. Vì nhận dạng khuôn mặt là cách mà con người sử dụng để phân biệt nhau. Bên cạnh đó, ngày nay việc thu thập, xử lý thông tin qua ảnh để nhận biết đối tượng đang được quan tâm và ứng dụng rộng rãi. Với phương pháp này, chúng ta có thể thu nhận được nhiều thông tin từ đối tượng mà không cần tác động nhiều đến đối tượng nghiên cứu. Sự phát triển của khoa học máy tính tạo môi trường thuận lợi cho bài toán nhận dạng mặt người từ ảnh số. Các hệ thống nhận dạng offline đã ra đời và có độ tin cậy cao, tuy nhiên các hệ thống nhận dạng online lại chưa đáp ứng được nhiều. Trong khuôn khổ đồ án này, chúng em sẽ tiếp tục giải quyết bài toán nhận dạng offline. Trong đó đối tượng được thu thập thành các file dữ liệu và được chuyển về trung tâm. Tại đó, các số liệu sẽ được phân tích xử lý. Trong phần đầu, chúng em sẽ giải quyết bài toán nhận dạng thông thường, phần hai sẽ là phần nhận dạng giới tính. Giới thiệu chung về các phương pháp nhận dạng mặt người. Các phương pháp nhận dạng mặt người: Phương pháp nhận dạng hiện nay có 2 loại: Nhận dạng dựa trên các đặc trưng của các phần tử trên khuôn mặt (Feature based face recognition). Nhận dạng dựa trên xét tổng thể khuôn mặt (Appearance based face recognition). Ngoài ra còn có một số loại nhận dạng sử dụng mô hình về khuôn mặt, một số phương pháp được dùng cho loại này: Nhận dạng 2D: Elastic Bunch Graph, Active Appearance Model. Nhận dạng 3D: 3D Morphable Model. Nhận dạng dựa trên mối quan hệ giữa các phần tử: Đây là phương pháp nhận dạng khuôn mặt dựa trên việc xác định các đặc trưng hình học của các chi tiết trên một khuôn mặt (như vị trí, diện tích, hình dạng của mắt, mũi, miệng,…), và mối quan hệ giữa chúng (như khoảng cách của hai mắt, khoảng cách của hai lông mày,…). Ưu điểm của phương pháp này là nó gần với cách mà con người sử dụng để nhận biết khuôn mặt. Hơn nữa với việc xác định đặc tính và các mối quan hệ, phương pháp này có thể cho kết quả tốt trong các trường hợp ảnh có nhiều nhiễu như bị nghiêng, bị xoay hoặc ánh sáng thay đổi. Nhược điểm của phương pháp này là cài đặt thuật toán phức tạp do việc xác định mối quan hệ giữa các đặc tính đòi hỏi các thuật toán phức tạp. Mặt khác, với các ảnh kích thước bé thì các đặc tính sẽ khó phân biệt. Nhận dạng dựa trên xét toàn diện khuôn mặt: Nội dung chính của hướng tiếp cận này là xem mỗi ảnh có kích thước RxC là một vector trong không gian RxC chiều. Ta sẽ xây dựng một không gian mới có chiều nhỏ hơn sao cho khi biểu diễn trong không gian đó các đặc điểm chính của một khuôn mặt không bị mất đi. Trong không gian đó, các ảnh của cùng một người sẽ được tập trung lại thành một nhóm gần nhau và cách xa các nhóm khác. Hai phương pháp thường được sử dụng là PCA (Principle Components Analysis) và LDA (Linear Discriminant Analysis). Trong khuôn khổ đồ án này, chúng em sẽ sử dụng thuật toán PCA. Thuật toán PCA. Giới thiệu chung về thuật toán: PCA (Principle Components Analysis) là một thuật toán để được sử dụng để tạo ra một ảnh mới từ ảnh ban đầu. Ảnh mới này có kích thước nhỏ hơn rất nhiều so với ảnh đầu vào và vẫn mang những đặc trưng cơ bản nhất của ảnh cần nhận dạng. PCA không cần quan tâm đến việc tìm ra các đặc điểm cụ thể của thực thể cần nhận dạng và mối quan hệ giữa các đặc điểm đó. Tất cả các chi tiết đó đều được thể hiện ở ảnh mới được tạo ra từ PCA. Về bản chất, PCA tìm ra một không gian mới theo hướng biến thiên mạnh nhất của một tập hợp các vector trong không gian cho trước. Trong không gian mới, người ta hy vọng rằng việc phân loại sẽ mang lại kết quả tốt hơn so với không gian ban đầu. Hình 1. Không gian mới (p1,p2) theo hướng phân bố mạnh nhất của các vector trong không gian (x1,x2) tìm theo PCA. Ưu điểm của phương pháp PCA: Tìm được các đặc tính tiêu biểu của đối tượng cần nhận dạng mà không cần phải xác định các thành phần và mối quan hệ giữa các thành phần đó. Thuật toán có thể thức hiện tốt với các ảnh có độ phân giải cao, do PCA sẽ thu gọn ảnh thành một ảnh có kích thước nhỏ hơn. PCA có thể kết hợp với các phương pháp khác như mạng Noron, Support Vector Machine … để mang lại hiệu quả nhận dạng cao hơn. Nhược điểm của PCA: PCA phân loại theo chiều phân bố lớn nhất của tập vector. Tuy nhiên, chiều phân bố lớn nhất không phải lúc nào cũng mang lại hiệu quả tốt nhất cho bài toán nhận dạng. Đây là nhược điểm cơ bản của PCA. PCA rất nhạy với nhiễu. Nội dung thuật toán PCA: Không gian mới được tạo bởi PCA được cấu thành từ K vector đơn vị có chiều là N. Mỗi vector được gọi là một Eigenface. Phép biến đổi: với K<<N Theo công thức: W=T.A Với T là ma trận chuyển đổi, T có kích thước KxN Gọi M là số ảnh đầu vào, mỗi ảnh được chuyển thành vector N chiều. Ta có tập hợp đầu vào X={x1,x2,…,xM} (xi Є RN) Trung bình của các vector đầu vào: Sai lệch so với tâm: Gọi A=[Ф1,Ф2,…,ФM] ta có ma trận tương quan của A là: Gọi các giá trị riêng của C là λ1, λ2,…, λN sắp xếp theo thứ tự giảm dần, tương ứng với N vector riêng u1, u2,…, uN. Các vector riêng này trực giao từng đôi một. Mỗi vector riêng ui được gọi là một eigenface. Tập hợp các vector ban đầu được biểu diễn trong không gian tạo bởi N eigenface theo mô tả: Chọn lấy K vector riêng u tương ứng với K giá trị riêng λ lớn nhất, ta có: với K<<N Vector các hệ số khai triển [w1, w2, …, wK] chính là biểu diễn mới của ảnh được tạo ra trong không gian PCA. Ảnh mới vẫn giữ được các đặc điểm chính của ảnh đầu vào. Vector [w1, w2, …, wK] được tính theo công thức: Vấn đề cần giải quyết ở đây là ma trận tương quan C=A.AT có kích thước N2 . Với N=180x200=36000, khối lượng tính toán sẽ rất lớn. Do đó để tính được các eigenface mà không cần tính cả ma trận C, người ta đưa ra phương pháp tính nhanh dựa vào vector riêng và giá trị riêng của ma trận L=AT.A có kích thước MxM với M là số ảnh đầu vào. Ta có thể chứng minh như sau: gọi vi, µi lần lượt là vector riêng và giá trị riêng của ma trận L: AT.A.vi=µi.vi Nhân cả 2 vế với A ta có: A.AT.A.vi=µi.A.vi Ta thấy A.vi chính là vector riêng của C=A.AT ứng với giá trị riêng µi Áp dụng PCA vào trích chọn vector đặc tính cho bài toán nhận dạng mặt người: Một bức ảnh về khuôn mặt được coi như là một vector, nếu bức ảnh có kích thước là w*h pixels thì không gian chứa vector này có số chiều là N=w*h. Mỗi pixel sẽ được mã hóa bởi một thành phần của vector. Cấu trúc của vector được tạo từ ảnh có thể được hình dung như hình bên dưới. Hình 2. Dạng của vector tạo từ bức ảnh về khuôn mặt. Khâu quan trọng nhất trong bài toán nhận dạng đó là trích chọn vector đặc tính. Trong phần này, chúng em sẽ trình bày các bước trích chọn vector đặc tính mang những đặc tính riêng của mặt cần nhận dạng: Tạo một tập X gồm M ảnh (ảnh học), mỗi ảnh có kích thước N, các ảnh được chuyển thành vector N chiều. X={x1,x2,…,xM} Tính trung bình của tập trên: Tính sai lệch của ảnh đầu vào với giá trị trung bình trên: Tìm tập gồm M vector trực giao, u, biểu diễn chiều phân bố mạnh nhất của tập dữ liệu X. Tập các vector u được gọi là eigenface của tập dữ liệu học. Xây dựng các ảnh mới vi theo M vector u: Ω=[v1,v2,…,vM]T Trong đó là vector đặc tính của ảnh thứ i trong không gian mới. Ω ở đây là tập các eigenface, các thành phần cơ bản cho bức ảnh cần nhận dạng. Phân loại và nhận dạng: Sau khi trích chọn được vector đặc tính, chúng ta cần đối chiếu vector này với cơ sở dữ liệu, từ đó đưa ra kết quả nhận dạng. Trong bài toán, kết quả nhận dạng sẽ là nhận biết được hoặc chưa nhận biết được. Để thực hiện phân loại có rất nhiều phương pháp như khoảng cách Euclides, mạng Noron, SVM,… trong đó khoảng cách Euclides là phương pháp đơn giản nhất. Nó cho kết quả tốt đối với trường hợp đối tượng đã được tạo thành các nhóm cách xa nhau. Vector đặc tính của đối tượng cần nhận dạng sẽ được so sánh lần lượt với vector đặc tính của từng ảnh mẫu trong tập các ảnh học. Các khoảng cách ngắn nhất sẽ được lưu lại. εk=||Ω-Ωk|| với k=1,…M trong đó Ωk là vector của mặt thứ k trong cơ sở dữ liệu. Nếu εk nhỏ hơn threshold được xác định trước thì bức ảnh được nhận dạng là mặt thứ k trong cơ sở dữ liệu. Thuật toán nhận dạng dùng PCA. Nhận dạng mặt người: Như đã nói ở trên, việc nhận dạng khuôn mặt thông thường sử dụng giải thuật PCA trích chọn vector đặc tính. Sau đó, chúng ta sẽ so sánh vector đặc tính này với cơ sở dữ liệu hiện có. Khoảng cách Euclides được sử dụng để đánh giá mức độ giống nhau của vector đặc tính hay chính là sự giống nhau giữa ảnh cần nhận dạng và ảnh trong cơ sở dữ liệu. Sơ đồ minh họa cho thuật toán: Hình 3. Sơ đồ thuật toán nhận dạng mặt người dùng PCA Nhận dạng gái trai: Nhận dạng giới tính là một mặt sinh học đặc biệt quan trọng của con người. Việc xây dựng được một thuật toán nhận dạng giới tính là vấn đề đang được đặt ra cho các nhà nghiên cứu. Vấn đề này hiện vẫn chưa được làm sáng tỏ vì thông tin ảo mà con người sử dụng cho việc nhận dạng một mặt là nữ hay nam vẫn chưa được hiểu rõ. Có 2 loại thông tin ảo chính: dựa vào đo lường hoặc dựa vào pixel của các khuôn mặt. Bài báo cáo này sẽ sử dụng loại thứ 2. Quá trình nhận dạng có thể chia làm 2 phần: thứ nhất, pixel sẽ được chuyển vào face space, tiếp theo, thuật toán nhận dạng sẽ được áp dụng. Hai quá trình này sẽ được kiểm tra ở cùng một thời gian. Mục tiêu của bài báo cáo là nghiên cứu tỉ mỉ thuật toán PCA để tìm ra face space nào là tiêu biểu của khuôn mặt. Do vậy chỉ phần đầu của quá trình nhận dạng được sử dụng, quá trình nhận dạng nam nữ sẽ được hoàn thành khi sử dụng reconstruction error. Sử dụng reconstruction error: Đây là phương pháp kĩ thuật chứ không phải là một phương pháp sinh học, tuy nhiên bộ não cũng có thể làm việc theo cách thức này. Thay vì sử dụng chỉ một face space, phương pháp này sử dụng một space riêng cho mỗi một lớp: chia ra thành face space của nữ và nam. Việc tạo eigenface nữ và nam tương tự như quá trình tạo eigenface thông thường. Do đó trong quá trình tạo face space cho nữ và nam thì chỉ có mặt của lớp đó tham gia. Chúng ta sẽ giả sử rằng reconstruction error cho phần mặt nam được xây dựng từ face space nam sẽ nhỏ hơn reconstruction error của chính mặt này được xây dựng từ face space nữ. Như vậy, phương pháp nhận dạng sẽ trở nên đơn giản. Sơ đồ thuật toán được minh họa như hình bên dưới: Xây dựng cơ sở dữ liệu cho thuật toán. Cơ sở dữ liệu được sử dụng cho bài toán là bộ ảnh được lấy trên trang web được tạo bởi tác giả Libor Spacek. Một số thông số về cơ sở dữ liệu: Giới tính: bao gồm cả nam và nữ. Nguồn gốc: từ nhiều vùng trên thế giới. Tuổi: các bức ảnh đều của những người có độ tuổi từ 18-20. Đeo kính: có. Râu: có. Định dạng ảnh: 24bit JPEG, kích thước là 180x200 pixels. Camera được sử dụng là S-VHS camcorder. Độ sáng: nhân tạo, có sự pha trộn giữa đèn huỳnh quang và vonfram. Bộ dữ liệu được chọn sẽ bao gồm 20 người trong đó có 10 nam và 10 nữ, mỗi người 5 ảnh. Trong số 5 ảnh của mỗi người, ta chọn ngẫu nhiên 2 ảnh để tạo bộ số liệu học và 3 ảnh còn lại để kiểm tra mô hình. Cơ sở dữ liệu cho nhận dạng mặt người thông thường: Bộ ảnh này gồm 20 người, có 10 nam và 10 nữ, mỗi người 5 ảnh. Trong bộ ảnh này, các ảnh học được sắp xếp vào cùng một thư mục và đánh số thứ tự từ 1 đến 40. Các ảnh dùng để kiểm tra mô hình cũng được để chung vào một thư mục. Như vậy chúng ta sẽ có 2 thư mục: thư mục training chứa các ảnh học và thư mục test chứa các ảnh kiểm tra mô hình. Cơ sở dữ liệu cho nhận dạng gái trai. Cơ sở dữ liệu cho bài toán nhận dạng gái trai tương tự trên, tuy nhiên có một số thay đổi nhỏ: trong thư mục training, chúng ta chia ra làm 2 thư mục con: một thư mục chứa các ảnh nam và thư mục còn lại chứa các ảnh nữ. Hình 4. Một số ảnh trong cơ sở dữ liệu. Cài đặt thuật toán. Nhận dạng mặt người thông thường: Thực hiện: Dựa vào lý thuyết ở phần trước phần code chương trình nhận dạng được chia làm 4 phần: i) CreateDatabase.m là hàm tạo cơ sở dữ liệu cho bài toán. Chức năng của hàm này là chuyển các bức ảnh 2D trong cơ sở dữ liệu training thành dạng các vector cột, sau đó các vector này được đặt thành hàng của một ma trận 2D:T. Đầu vào là đường dẫn đến cơ sở dữ liệu training và đầu ra sẽ là ma trận T. Ở đây các bức ảnh có cùng kích thước MxN do đó kích thước của ma trận này là MNxP với P là số ảnh trong cơ sở dữ liệu. function T = CreateDatabase(TrainDatabasePath) % Input: TrainDatabasePath: đường dẫn đến cơ sở dữ liệu % Output: % Ma trận T: ma trận 2D, chứa tất cả các vector 1D của các ảnh % kích thước là MNxP với MxN là kích thước ảnh, P là số ảnh. ii) EigenfaceCore.m: hàm này được sử dụng để tính trung bình tập ảnh đầu vào, tính eigenface, tính ma trận A là tập các vector đầu vào mới sau khi so sánh với giá trị trung bình tập ảnh đầu vào. function [m, A, Eigenfaces] = EigenfaceCore(T) % % Input: T - Ma trận 2D kích thước MNxP % % Output: m - (M*Nx1): Trung bình của tập ảnh đầu vào % Eigenfaces - (M*Nx(P-1)): vector riêng của ma trận tương quan % trong cơ sở dữ liệu training % A - (M*NxP): Tập các vector đầu vào mới sau khi so sánh % với trung bình. iii) Recognition.m: hàm này được sử dụng để nhận dạng bức ảnh đầu vào. Nó so sánh 2 bức ảnh bằng cách đưa ảnh vào một không gian mới và tính khoảng cách Euclidean giữa chúng. function OutputName = Recognition(TestImage, m, A, Eigenfaces) % % Input: TestImage: Đường dẫn đến thư mục của ảnh cần kiểm tra % % m: (M*Nx1): Giá trị trung bình tập ảnh đầu vào % là đầu ra của hàm 'EigenfaceCore'. % % Eigenfaces: (M*Nx(P-1)): vector riêng của ma trận tương quan trong % training database, là đầu ra của hàm ’EigenfaceCore' % % A: (M*NxP): là đầu ra của hàm 'EigenfaceCore'. % % Output: OutputName: Tên của bức ảnh nhận dạng trong cơ sở dữ liệu training. iv) example.m: đây là chương trình ví dụ về nhận dạng một số bức ảnh. Nhận dạng gái trai: Theo sơ đồ thuật toán code của chương trình được chia làm 4 phần như phần code trước đã trình bày, tuy nhiên có một số thay đổi: CreateDatabase.m: Hàm này sẽ tạo ra cơ sở dữ liệu riêng cho nam và nữ. function [T1,T2] = CreateDatabase(TrainDatabasePath) % Input: TrainDatabasePath: đường dẫn đến cơ sở dữ liệu % Output: % Ma trận T1: ma trận 2D, chứa tất cả các vector 1D của các ảnh nữ % kích thước là MNxP với MxN là kích thước ảnh, P là số ảnh. % Ma trận T2: ma trận 2D, chứa tất cả các vector 1D của các ảnh nam % kích thước là MNxP với MxN là kích thước ảnh, P là số ảnh. EigenfaceCore.m: hàm này được sử dụng để tính trung bình tập ảnh đầu vào, tính eigenface, tính ma trận A là tập các vector đầu vào sau khi so sánh với giá trị trung bình tập ảnh đầu vào. Hàm này là phần chính của thuật toán PCA và được giữ nguyên. Recognition.m: Hàm này sử dụng để nhận dạng ảnh đầu vào. Hàm này sẽ so sánh khoảng cách Euclidean tính được từ 2 cơ sở dữ liệu nam và nữ, sau đó đưa ra kết quả nhận dạng bức ảnh đầu vào là nam hay nữ. Nó có 1 số thay đổi: function [OutputName,A,Recognized_index,Sex_indi] = Recognition(TestImage, m1, A1, Eigenfaces1,m2, A2, Eigenfaces2) % % Input: TestImage: Đường dẫn đến thư mục của ảnh cần kiểm tra % % m1, m2: (M*Nx1): Giá trị trung bình tập ảnh đầu vào % là đầu ra của hàm 'EigenfaceCore' của nữ và nam. % % Eigenfaces1, Eigenfaces2: (M*Nx(P-1)): vector riêng của ma trận tương quan % trong training database của nữ và nam , là đầu ra của hàm ’EigenfaceCore' % % A1, A2: (M*NxP): là đầu ra của hàm 'EigenfaceCore' tương ứng của nữ và % nam. % % Output: OutputName: Tên của bức ảnh nhận dạng trong cơ sở dữ liệu training. % Ma trận A. % Recognized_index: vị trí của bức ảnh thư mục training. % Sex_indi: giới tính. example.m: có một số thay đổi không đáng kể. 5)Kết quả nhận dạng. Với cơ sở dữ liệu là bộ mẫu có sẵn 20 người, mỗi người 5 ảnh , trong đó có 2 ảnh học và 3 ảnh để test.Do chỉ có 2 ảnh học cho mỗi người, nên với bộ dữ liệu này ta chỉ đưa ra 2 người gần đối tượng nhất.Kết quả nhận dạng như sau: Kiểm tra với đầu vào là các ảnh học: Số ảnh 40 Nhận dạng mặt người đúng:40, tỉ lệ 100% Nhận dạng giới tính đúng: 40, tỉ lệ 100%. Kiểm tra với các ảnh khác: Số ảnh:60 Nhận dạng đúng mặt người: 58, tỉ lệ 96,67% Nhận dạng giới tính đúng: 59, tỉ lệ 98,3%. Các đối tượng có kết quả nhận dạng đúng mặt người : Giá trị nhận dạng ứng với ảnh tìm được đều nhỏ hơn ngưỡng. a)Đối tượng cần nhận dạng b)Kết quả ở đầu ra. Kết quả nhận dạng sai mặt người: sai hoàn toàn, mặc dù ảnh có trong cơ sở dữ liệu nhưng trong kết quả lại đưa ra 1 ảnh khác hoàn toàn.Nguyên nhân dẫn đến sai là do nét mặt của người phụ nữ thay đổi( nhúm môi, nhăn nhó….). a) Ảnh đầu vào b)Kết quả nhận dạng Kết quả nhận dạng đúng giới tính bao gồm: Từ ảnh đầu vào, ở đầu ra ta đưa ra 2 bức ảnh có 2 khoảng cách Euclides khác nhau, trong đó có 1 bức ảnh đúng của đối tượng nhận dạng, so sánh 2 khoảng cách đó ta đưa ra được giới tinh chinh xác.Như ở hinh dưới a)ảnh đầu vào b)e=6.4323e+015 c)e=1.93644e+015 d)kết quả a)ảnh đầu vào b) e=6.62171e+014 c)e=4.59613e+015 d)kết quả đầu ra Từ ảnh đầu vào, ở đầu ra ta đưa ra 2 bức ảnh có 2 khoảng cách Euclides khác nhau, nhưng không có bức ảnh đúng của đối tượng nhận dạng, so sánh 2 khoảng cách đó ta đưa ra được giới tinh chinh xác.Như ở hinh dưới: a)Ảnh đầu vào b)e= 2.2716e+015 c)e= 8115e+016 d)Đầu ra Kết quả nhận dạng sai giới tính a)Ảnh đầu vào b)e= 7.02857e+015 c)e= 4.97964e+015 d)Đầu ra