Một số phương pháp giải quyết bài toán nhận dạng khuôn mặt

Một phần của tài liệu Nghiên cứu, thiết kế hệ thống nhận diện khuôn mặt sử dụng trí tuệ nhân tạo (Trang 25)

Hiện nay, bài toán nhận diện khuôn mặt người (face recognition) đã trở thành một chủ đề được nghiên cứu một cách nghiêm túc và sâu rộng. Chính vì vậy có rất nhiều phương pháp cũng như thuật toán có thể áp dụng để giải quyết vấn đề đưa ra. Mỗi một phương pháp lại có những ưu nhược điểm riêng và thích hợp với mỗi nhu cầu cụ

12

(2.1)

(2.2)

thể. Tuy nhiên trong phạm vi nghiên cứu của học phần, nhóm sinh viên chỉ áp dụng thực hiện 3 phương pháp để đánh giá:

- Sử dụng thuật toán SVM - Sử dụng mô hình CNN

- Sử dụng mô hình CNN kết hợp hàm Triplet loss

2.3.3.1 Thuật toán SVM

Trong không gian 2 chiều ta biết rằng khoảng cách từ một điểm có toạ độ (𝑥0; 𝑦0) tới đường thẳng có phương trình 𝑤1𝑥 + 𝑤2𝑦 + 𝑏 = 0 được xác định bởi:

|𝑤1𝑥0 + 𝑤2𝑦0+ 𝑏| √𝑤12+ 𝑤22

Trong không gian 3 chiều khoảng cách từ một điểm có toạ độ (𝑥0; 𝑦0; 𝑧0) tới mặt phẳng có phương trình 𝑤1𝑥 + 𝑤2𝑦 + 𝑤3𝑧 + 𝑏 = 0 được xác định bới:

|𝑤1𝑥0+ 𝑤2𝑦0+ 𝑤3𝑧0+ 𝑏| √𝑤12 + 𝑤22+ 𝑤32

Việc này có thể được tổng quát lên không gian nhiều chiều: Khoảng cách từ một điểm (vector) có toạ độ 𝑥0 tới siêu mặt phẳng (hyper-plane) có phương trình 𝑤𝑇𝑥 + 𝑏 = 0 được xác định bởi:

13

(2.3) |𝑤𝑇𝑥0+ 𝑏|

‖𝑤‖2

Với ‖𝑤‖2 = √∑𝑑 𝑤𝑖2

𝑖=1 với d là số chiều của không gian

Support Vector Machine (SVM) là một thuật toán giám sát, nó có thể sử dụng cho cả việc phân loại hoặc đệ quy. Tuy nhiên nó được sử dụng chủ yếu cho việc phân loại. Trong thuật toán này, chúng ta vẽ đồ thị dữ liệu là các điểm trong n chiều ( ở đây n là số lượng các tính năng bạn có) với giá trị của mỗi tính năng sẽ là một phần liên kết. Sau đó chúng ta thực hiện tìm "đường bay" (hyper-plane) phân chia các lớp.

Hyper-plane được hiểu đơn giản là 1 đường thẳng có thể phân chia các lớp ra thành hai phần riêng biệt.

Tuy nhiên sẽ có rất nhiều hyper-plane có thể được tìm thấy để phân chia các lớp. Vậy bài toán cần giải quyết sẽ là tìm ra hyper-plane tối ưu nhất

14

“Margin” là khoảng cách giữa siêu phẳng đến 2 điểm dữ liệu gần nhất tương ứng với các phân lớp. Bài toán tối ưu trong SVM chính là tìm các giá trị trong phương trình đường hyper-plane để margin đạt giá trị lớn nhất.

Đối với bài toán đa lớp thuật toán SVM sẽ xử lý theo 2 phương pháp là 1 vs all, 1vs1 Phương pháp 1-vs-all xây dựng c mô hình SVM nhị phân, mô hình thứ ci tách lớp ci (lớp dương) ra khỏi các lớp khác (âm). Phương pháp 1-vs-1 xây dựng c(c-1)/2 mô

hình SVM nhị phân, mỗi mô hình tách một cặp 2 lớ p.

Cách ứng dụng thuật toán SVM vào phân loại dữ liệu khuôn mặt sẽ được trình bày trong phần tiếp theo của bài báo cáo.

Hình 10: Đường hyper-plane trong thuật toán SVM

15

Kết luận: SVM là một phương pháp hiệu quả cho bài toán phân lớp dữ liệu. Nó là một công cụ đắc lực cho các bài toán về xử lý ảnh, phân loại văn bản, phân tích quan điểm.

Một số ưu điểm của thuật toán có thể kể đến như:

 Xử lý trên không gian số chiều cao: SVM là một công cụ tính toán hiệu quả trong không gian chiều cao, trong đó đặc biệt áp dụng cho các bài toán phân loại văn bản và phân tích quan điểm nơi chiều có thể cực kỳ lớn.  Tiết kiệm bộ nhớ: Do chỉ có một tập hợp con của các điểm được sử dụng

trong quá trình huấn luyện và ra quyết định thực tế cho các điểm dữ liệu mới nên chỉ có những điểm cần thiết mới được lưu trữ trong bộ nhớ khi ra quyết định.

 Tính linh hoạt - phân lớp thường là phi tuyến tính. Khả năng áp dụng Kernel mới cho phép linh động giữa các phương pháp tuyến tính và phi tuyến tính từ đó khiến cho hiệu suất phân loại lớn hơn.

Bên cạnh đó thuật toán SVM cũng tồn tại nhược điểm:

Chưa thể hiện rõ tính xác suất: Việc phân lớp của SVM chỉ là việc cố gắng tách các đối tượng vào hai lớp được phân tách bởi siêu phẳng SVM. Điều này chưa giải thích được xác suất xuất hiện của một thành viên trong một nhóm là như thế nào.

2.3.3.2 Convolutional Neural Network (mạng thần kinh tích chập)

Convolutional Neural Network (CNN) là một trong những mô hình của Deep Learning – tập hợp các thuật toán để có mô hình dữ liệu trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý cấu trúc phức tạp. Hiểu đơn giản, CNN là một lớp của mạng nơ-ron sâu , được áp dụng phổ biến nhất để phân tích hình ảnh trực quan. CNN phân loại hình ảnh bằng cách lấy 1 hình ảnh đầu vào, xử lý và phân loại nó theo các hạng mục nhất định.

16

Hình 12: Mô hình mạng CNN

Trải qua hơn 20 năm đã có rất nhiều mạng CNN được thiết kế để ngày càng phục vụ sự phát triển nhanh chóng của ngành khoa học thị giác máy tính. Có thể kể đến một số mạng CNN tiêu biểu như:

 LeNet-5 (1998)  AlexNet (2012)  VGG-16 (2014)  GoogleNet - Inception-V1 (2014)  GoogleNet - Inception-V3 (2015)  ResNet-50 (2015)  DenseNet (2016)

Về cơ bản tất cả các mô hình CNN đều bao gồm 3 tầng sau:  Tầng tích chập (convolution)

 Tầng tổng hợp (max pooling)

 Tầng kết nối hoàn toàn (fully connected)

Theo toán học, tích chập là phép toán tuуến tính, cho ra kết quả là một hàm bằng ᴠiệc tính toán dựa trên hai hàm đã có. Đối ᴠới phép lọc ảnh, phép tích chập giữa ma trận lọc ᴠà ảnh, cho ra kết quả ảnh đã được хoá nhiễu (làm mờ).

Thành phần không thể thiếu của phép tích chập là ma trận kernel (bộ lọc). Điểm neo (anchor point) của kernel ѕẽ quуết định ᴠùng ma trận tương ứng trên ảnh để tích chập, thông thường anchor point được chọn là tâm của kernel. Giá trị mỗi phần tử trên

17

kernel được хem như là hệ ѕố tổ hợp ᴠới lần lượt từng giá trị độ хám của điểm ảnh trong ᴠùng tương ứng ᴠới kernel.

Phép tích chập được hình dung thực hiện bằng ᴠiệc dịch chuуển ma trận kernel lần lượt qua tất cả các điểm ảnh trong ảnh, bắt đầu từ góc bên trái trên của ảnh. Và đặt anchor point tương ứng tại điểm ảnh đang хét. Ở mỗi lần dịch chuуển, thực hiện tính toán kết quả mới cho điểm ảnh đang хét bằng công thức tích chập.

Một ví dụ được thể hiện ở hình bên dưới

Phép tích chập nhân từng phần tử bên trong ma trận 3×3 với ma trận bên trái. Kết quả được một ma trận gọi là Convoled feature được sinh ra từ việc nhận ma trận Filter với ma trận ảnh 5×5 bên trái.

18

Trong ba lớp của Convolutional Neural Network, Convolutional Layer được xem là lớp có vai trò quan trọng nhất. Bởi vì Convolutional Layer sẽ đại diện CNN thực hiện mọi phép toán.

Khi nhắc đến lớp Convolutional Layer, chúng ta cần làm rõ một số khái niệm đó là: Filter Map, Stride, Padding, Feature Map.

Filter Map (ma trận Kernel)

CNN sử dụng những Filter để áp vào các vùng của hình ảnh. Những Filter Map này có thể xem là một ma trận 3 chiều, bao gồm những con số và các con số chính là Parameter.

Stride

Trong Convolutional Neural Network, Stride được hiểu là khi chúng ta dịch chuyển Filter Map theo Pixel và dựa vào giá trị từ trái sang phải. Stride đơn giản là biểu thị sự dịch chuyển này.

Padding

Padding chính là những giá trị 0 được thêm vào lớp Input.

Feature Map

Đây là kết quả hiển thị sau mỗi lần Filter Map quét qua Input.

19

Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng các hàm nonlinear activation như ReLU để kích hoạt các trọng số trong các node. ReLU viết tắt của Rectified Linear Unit, là 1 hàm phi tuyến. Với đầu ra là: ƒ (x) = max (0, x)

Sự kết hợp của 1 hình ảnh với các bộ lọc khác nhau có thể thực hiện các hoạt động như phát hiện cạnh, làm mờ và làm sắc nét bằng cách áp dụng các bộ lọc. Ví dụ dưới đây cho thấy hình ảnh tích chập khác nhau sau khi áp dụng các Kernel khác nhau.

Hình 15: Hàm ReLU

20

Lớp gộp - Pooling Layer sẽ giảm bớt số lượng tham số khi hình ảnh quá lớn. Không gian pooling còn được gọi là lấy mẫu con hoặc lấy mẫu xuống làm giảm kích thước của mỗi map nhưng vẫn giữ lại thông tin quan trọng. Các pooling có thể có nhiều loại khác nhau:

- Max Pooling - Average Pooling - Sum Pooling

Fully Connected Layer thường sử dụng để đưa ra các kết quả. Sau khi các lớp Convolutional Layer và Pooling Layer nhận được các ảnh đã truyền qua chúng, bạn sẽ thu được kết quả là Model đã đọc được khá nhiều thông tin về ảnh. Do đó, để có thể liên kết các đặc điểm này lại và cho ra Output, bạn cần dùng đến Fully Connected Layer.

Kiến trúc mạng CNN được sử dụng để encoding ảnh thành véc tơ embedding. Sau đó chúng ta đưa các véc tơ vào hàm loss function để đo lường sự khác biệt giữa chúng.

2.3.3.3 Hàm Triplet loss

Hàm mất mát (Loss function) là một hàm trả về giá trị là một số thực không âm thể hiện sự chênh lệch giữa hai đại lượng x và y. Trong đó x là lable được dự đoán còn y là lable đúng. Trong trường hợp lý tưởng x = y, hàm loss function sẽ trả về giá trị cực tiểu bằng 0.

21

(2.4)

(2.5) Hàm Triplet loss là một hàm Loss function trong đó một đầu vào tham chiếu sẽ được so sánh với một đầu vào phù hợp (đầu vào tích cực) và đầu vào không phù hợp (đầu vào tiêu cực). Khoảng cách từ đầu vào tham chiếu đến đầu vào tích cực sẽ được giảm thiểu, ngược lại khoảng cách từ đầu vào tham chiếu đến đầu vào tiêu cực sẽ được tối đa hoá.

Kí hiệu ảnh Anchor, Positive, Negative lần lượt là: A, P, N

Mục tiêu của hàm loss function là tối thiểu hóa khoảng cách giữa 2 ảnh khi chúng là negative và tối đa hóa khoảng cách khi chúng là positive. Như vậy chúng ta cần lựa chọn các bộ 3 ảnh sao cho:

Ảnh Anchor và Positive khác nhau nhất: cần lựa chọn để khoảng cách d(A,P) lớn tương ứng với nghiệm:

𝑎𝑟𝑔𝑚𝑎𝑥𝑷𝑖(𝑑(𝑨𝑖, 𝑷𝑖))

Ảnh Anchor và Negative giống nhau nhất: cần lựa chọn để khoảng cách d(A,N) nhỏ tương ứng với nghiệm:

𝑎𝑟𝑔𝑚𝑖𝑛 𝑵𝑗(𝑑(𝑨𝑖, 𝑵𝑗))

22 (2.6) (2.9) (2.8) (2.7) (2.6) (2.1.1) Với 𝑖, 𝑗 là nhãn của người trong ảnh.

Triplot loss function lấy 3 bức ảnh làm input và trong mọi trường hợp ta kì vọng: 𝑑(𝑨, 𝑷) < 𝑑(𝑨, 𝑵)

Để làm cho khoảng cách giữa vế trái và vế phải lớn hơn, chúng ta sẽ cộng thêm vào vế trái một hệ số 𝛼 không âm rất nhỏ. Khi đó công thức trên trở thành:

𝑑(𝑨, 𝑷) + 𝛼 ≤ 𝑑(𝑨, 𝑵) Công thức (2.7) có thể được viết thành:

‖𝑓(𝑨) − 𝑓(𝑷)‖22+ 𝛼 ≤ ‖𝑓(𝑨) − 𝑓(𝑵)‖22

→ ‖𝑓(𝑨) − 𝑓(𝑷)‖22− ‖𝑓(𝑨) − 𝑓(𝑵)‖22+ 𝛼 ≤ 0

Như vậy hàm loss function sẽ là:

ℒ(𝑨, 𝑷, 𝑵) = ∑‖𝑓(𝑨𝒊) − 𝑓(𝑷𝒊)‖22− ‖𝑓(𝑨𝒊) − 𝑓(𝑵𝒊)‖22+ 𝛼

𝑛

𝑖=0

Trong đó: n là số lượng các bộ ba hình ảnh được đưa vào huấn luyện

Như vậy khi áp dụng Triple loss vào các mô hình convolutional neural network chúng ta có thể tạo ra các biểu diễn véc tơ tốt nhất cho mỗi một bức ảnh. Những biểu diễn véc tơ này sẽ phân biệt tốt các ảnh Negative rất giống ảnh Positive. Và đồng thời các bức ảnh thuộc cùng một label sẽ trở nên gần nhau hơn trong không gian chiếu euclidean.

Một chú ý quan trọng khi huấn luyện mô hình siam network với triplot function đó là chúng ta luôn phải xác định trước cặp ảnh (A,P) thuộc về cùng một người. Ảnh N sẽ

23

được lựa chọn ngẫu nhiên từ các bức ảnh thuộc các nhãn còn lại. Do đó cần thu thập ít nhất 2 bức ảnh/1 người để có thể chuẩn bị được dữ liệu huấn luyện.

Chiến lược lựa chọn Triple images sẽ có ảnh hưởng rất lớn tới chất lượng của mô hình Facenet. Nếu lựa chọn Triplet images tốt, Facenet sẽ hội tụ nhanh hơn và đồng thời kết quả dự báo chuẩn xác hơn. Lựa chọn ngẫu nhiên dễ dẫn tới thuật toán không hội tụ.

24

CHƯƠNG 3 THIẾT KẾ HỆ THỐNG HỆ THỐNG NHẬN DIỆN KHUÔN MẶT SỬ DỤNG TRÍ TUỆ NHÂN TẠO 3.1 Sơ đồ tổng quát hệ thống

25

3.2 Sơ đồ cấu trúc chức năng quá trình xử lý ảnh

3.3 Hệ thống nhận diện khuôn mặt sử dụng thuật toán SVM

Xây dựng hệ thống nhận diện khuôn mặt sử dụng thuật toán SVM bao gồm 2 bước chính: Training và Test

3.3.1Sử dụng thuật toán SVM để training dữ liệu

Trước khi tiến hành training thì chúng ta cần có bộ dữ liệu ảnh chụp khuôn mặt các đối tượng. Dữ liệu có thể được lấy ngẫu nhiên từ các ảnh có chứa đối tượng. Tuy nhiên phương pháp này khuôn mặt của đối tượng cần nhận diện có thể sẽ không được rõ nét, bị nhỏ, bị mờ, bị che khuất,... Vì vậy nhóm đã tiến hành chụp trực tiếp khuôn mặt đối tượng bằng một chương trình khác. Đối tượng cần nhận diện sẽ được chụp ảnh liên tục và được yêu cầu thay đổi góc độ khuôn mặt để thu được bộ dữ liệu đa dạng hơn.

26

Mỗi đối tượng nhận diện sẽ cần khoảng 100 ảnh chụp các góc độ, độ chiếu sáng khác nhau.

Ở phương pháp này, đối tượng nhận diện là những bạn sinh viên khác. Do tình hình dịch bệnh nên nhóm sinh viên chỉ có thể thu thập dữ liệu từ 20 đối tượng khác nhau.

Hình 22: Dữ liệu training sử dụng thuật toán SVM

27

Ảnh chụp của mỗi đối tượng sẽ được lưu riêng ở một folder để tiếp tục bước training tiếp theo.

Thuật toán SVM được ứng dụng trong bài toán này sẽ phân loại n lớp đối tượng (n- số người cần nhận diện). Chúng ta coi tập hợp ảnh chụp của mỗi người sẽ là tập hợp những điểm thuộc cùng một lớp. Mỗi một khuôn mặt sẽ có những đặc trưng riêng, thuật toán SVM sẽ dựa vào những đặc trưng này để tìm ra sự khác nhau lớn nhất giữa các đối tượng làm tiền đề phân loại. Hay nói cách khác, thuật toán SVM sẽ dựa vào những đặc trưng khuôn mặt để tìm ra đường hyper-plane tối ưu nhất phân loại các đối tượng với nhau.

Thư viện Open CV hỗ trợ thuật toán SVM bằng các gọi một hàm định sẵn. Hàm nhân (Kernel functions) được sử dụng để tính toán là “linear”. Hệ số C sẽ được thử nghiệm nhiều lần để tìm ra giá trị tối ưu nhất.

Quá trình training kết thúc sau khoảng 10 phút trả về hệ số C tối ưu nhất và độ chính xác cao nhất của quá trình phân loại với cấu hình máy tính như sau:

Kết quả trả về:

3.3.2Kết quả nhận diện khi áp dụng thuật toán SVM

Sau khi quá trình training kết thúc chúng ta sẽ thu được một model phân loại và sử dụng kết quả này để tiến hành thử nghiệm bằng camera của laptop. Thuật toán sẽ tiến hành xác định khuôn mặt người từ ảnh thu nhận được sau đó tiến hành so sánh với model đã training để tiến hành nhận diện.

28 Kết quả nhận diện:

Nếu độ chính xác trả về có giá trị nhỏ hơn 70%, kết quả nhận diện sẽ hiển thị “unknow”.

Nhận xét: Độ chính xác của đối tượng giảm đáng kể trong trường hợp góc nghiêng lớn, khuôn mặt bị che khuất hoặc do cường độ sáng kém. Trong trường hợp lý tưởng, độ chính xác của hệ thống đạt trên 94%.

3.4 Hệ thống nhận diện khuôn mặt sử dụng mạng CNN

Từ những kết quả đạt được sau khi nghiên cứu sử dụng thuật toán SVM, nhóm sinh viên tiếp tục tìm hiểu cách ứng dụng mô hình mạng CNN vào đề tài. Hai loại mạng CNN được sử dụng trong bài báo cáo là VGG-16 và ResNet-50.

3.4.1Training với VGG-16

VGG16 là một Kiến trúc mạng nơ-ron liên kết (CNN) đơn giản và được sử dụng rộng

Một phần của tài liệu Nghiên cứu, thiết kế hệ thống nhận diện khuôn mặt sử dụng trí tuệ nhân tạo (Trang 25)