1. Trang chủ
  2. » Luận Văn - Báo Cáo

NHẬN DẠNG KHUÔN MẶT NGƯỜI DỰA TRÊN MỘT PHẦN THÔNG TIN KHUÔN MẶT

21 156 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 2,39 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

GIỚI THIỆU Nhận diện khuôn mặt là một trong những bài toán được quan tâm nhất hiện nay, làmột trong những vấn đề mà các công ty công nghệ lớn trên thế giới thức sự quan tâm.Vậy hệ thống

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

KHOA ĐIỆN TỬ

NHẬN DẠNG KHUÔN MẶT NGƯỜI DỰA TRÊN MỘT PHẦN THÔNG TIN

KHUÔN MẶT

GIÁO VIÊN HƯỚNG DẪN: Ts TỐNG VĂN LUYÊN

THÀNH VIÊN: LÊ ANH QUÂN MSV :1141250051

NGUYỄN VĂN THÀNH MSV :1141250035

NGUYỄN NGỌC LONG MSV:1141250067

PHẠM VĂN THUẤN MSV:1141250074

Trang 2

Mục lục

Mục lục 2

DANH MỤC HÌNH 3

LỜI MỞ ĐẦU 4

1 GIỚI THIỆU 5

2 Các vấn đề liên quan 6

2.1 Nhận dạng khuôn mặt 6

2.2 Mã hóa khuôn mặt 10

2.2.1 Giới thiệu Triplet Loss 10

2.2.2 Nhược điểm 11

2.3 Tìm kiếm khuôn mặt từ tệp đã mã hóa 11

3 Xây dựng hệ thống nhận dạng khuôn mặt 11

3.1 Xác định khuôn mặt trong ảnh và Dlib 11

3.2 Biểu diễn các khuôn mặt dưới dạng vector 13

3.3 Mô hình học sâu CNN 13

3.3.1 ConvNet 14

3.3 Triplet là gì? 15

3.3.1 Triplet loss 15

3.4 Huấn luyện mô hình 15

Tài liệu tham khảo 20

Trang 3

DANH MỤC HÌNH

Hình 1Ảnh mặt người đen trắng 6

Hình 2 Ảnh từng pixel 6

Hình 3A,B VECTOR TỪ CÁC ĐIỂM ẢNH 7

Hình 4BIỂU DIỄN CƠ BẢN CẤU TRÚC MẶT NGƯỜI HOG 8

Hình 5 HOG 9

Hình 6 xác định khuôn mặt 9

Hình 7 Triplet 10

Hình 8A,B Trước và sau khi chạy 13

Hình 9 Mô hình Cnn 14

Hình 10 mô hình convnet 14

Hình 11 ham triplet loss 15

Trang 4

2 Trình bày một số vấn đề liên quan đến nhận diện khuôn mặt

3 Xây dựng hệ thống nhận diện khuôn mặt

Trang 5

1 GIỚI THIỆU

Nhận diện khuôn mặt là một trong những bài toán được quan tâm nhất hiện nay, làmột trong những vấn đề mà các công ty công nghệ lớn trên thế giới thức sự quan tâm.Vậy hệ thống nhận dạng khuôn mặt là gì?

Hệ thống nhận dạng khuôn mặt là một công nghệ có khả năng xác định hoặc xác minhmột người qua các ảnh kỹ thuật số hoặc khung hình từ video

Đây là một bài toán khá phức tạp, nó đòi hỏi một loạt các vấn đề cần được giả quyết:

 Việc làm đầu tiên đó là cần phải tìm kiếm tất cả những khuôn mặt có trong bứchình Sau đó đưa ra nhũng đặc trưng về khuôn mật

 So sánh những đặc trưng với những người khác để chúng ta có thể biết được têncủa họ

 Bộ não của con người có rất nhiều các neural thân kinh để làm tất cả những điềunày tự động và ngay lập tức Quả thật, con người đã quá giỏi nhưng với máy tính,

nó không có khả năng cao cấp như vậy Do đó chúng ta cần phải dạy cho nó cáchlàm từng bước một cách riêng biệt

Trang 6

2 Các vấn đề liên quan

2.1 Nhận dạng khuôn mặt

Vấn đề đầu tiên chúng ta cần tìm hiểu chính là “làm sao để xác định được một

khuôn mặt trong một khung hình” Có thể thấy rõ ràng chúng ta cần phải xác định vị trí

khuôn mặt trong một bức hình trước khi có thể nói cho người khác có những ai trong bứchình đó

Để giải quyết vấn đề này, ta cần làm cho bức hình trở thành ảnh đen trắng

Như chúng ta đã biết, hiện nay, một pixel thường sẽ được thể hiện bởi mô hình RBG(24bit) , mỗi giá trị sẽ chạy từ 0 – 255[CITATION 1 \l 1033 ], vậy nếu chúng ta phân tíchpixel một cách trực tiếp thì sẽ phải phân tích một ma trận 3 chiều, vậy bằng cách chuyểnhình ảnh về dạng xám, chúng ta có thể giảm lượng giữ liệu mà máy tính phải phân tích,đơn giản hóa các công thức,…

Trang 7

Hình 1 Ảnh mặt người đen trắngSau đó, chúng ta cùng nhìn vào mỗi pixel trong hình ảnh và những pixel xung quanh nó.

Hình 2 Ảnh từng Pixel

Trang 8

Mục tiêu của chúng ta là tìm ra độ đậm của điểm ảnh hiện tại so với các điểm ảnh xungquanh, sau đó vẽ một vector chỉ hướng mà bức ảnh trở nên tối hơn.

Hình 3A,B Vector từ các điểm ảnh

Việc này được lặp đi cho mỗi pixel trong hình ảnh, và kết thúc khi toàn bộ các pixel đượcthay thế bởi các mũi tên Những mũi tên này được gọi là gradients[CITATION 2 \l 1033 ]

và chúng bắt đầu từ các điểm sáng tới tối trên toàn bộ hình ảnh

Nếu chúng ta phân tích pixel trực tiếp, hình ảnh tối và hình ảnh sáng của cùng một người

sẽ có các giá trị pixel hoàn toàn khác nhau Nhưng nếu chúng ta chỉ xem xét hướng thayđổi độ sáng tối Thì như vậy với một bức ảnh thuần tối, hoặc thuần sáng sẽ kết thúc vớicùng một mô tả vector Do đó vấn đề trên của chúng ta đã có thể dẽ dàng giải quyết hơnnhiều

Để thực hiện việc này, chúng ta sẽ chia nhỏ hình ảnh thành những ô vuông nhỏ Trongmỗi ô vuông, ta sẽ đếm bao nhiêu gradients trong mỗi hướng chính (bao nhiêu điểm lên,điểm lên-phải, điểm sang phải, vv ) Sau đó, chúng ta sẽ thay thế ô vuông đó trong hìnhảnh bằng hướng mũi tên mạnh nhất

Kết quả cuối cùng là chúng ta biến hình ảnh ban đầu thành một biểu diễn đơn giản đểnắm bắt cấu trúc cơ bản của khuôn mặt một cách đơn giản:

Trang 9

Hình 4.Biểu diễn cơ bản cấu trúc mặt người HOG

Để tìm khuôn mặt trong hình ảnh này, tất cả những gì chúng ta phải làm là tìm một phầnhình ảnh trông giống nhất với các hình ảnh mẫu đã biết được trích ra từ một loạt các

khuôn mặt đã được training khác, ờ đây chúng tôi sẽ sử dụng HoG (histogram of oriented

gradients)

Trang 10

Hình 5 HOGViệc sử dụng công nghệ này, có thể giúp bạn dễ dàng xác định các khuôn mặt trong bất

2.2.1 Giới thiệu Triplet Loss

Triplet Loss là một thuật toán cho các hệ thống mạng neural nhân tạo, trong đó cầnđưa vào 3 đầu vào:

 Khuôn mặt đã biết (anchor)

 Khuôn mặt khác của người đó (positive)

Trang 11

 lấy tiếp khuôn mặt của một người mà bạn chưa xác định (negative)

Sau đó, thuật toán sẽ kiểm tra các phép đo mà nó hiện đang tạo ra cho mỗi khuôn mặt,tinh chỉnh mạng neural, tính ra khoảng cách giữa các khuôn mặt, đảm bảo các phép đo nótạo ra cho hình ảnh #1 và #2 là thấp nhất có thể và các phép đo cho hình ảnh #2 và #3 lớnnhất có thể[CITATION 3 \l 1033 ], xem hình 7

Hình 7.Triplet

Sau khi lặp lại bước này rất rất nhiều lần cho nhiều người khác nhau, mạng neural sẽ tạo

ra 128 phép đo cho mỗi người

2.2.2 Nhược điểm

FaceNet, một cấu trúc áp dụng triplet loss huấn luyện với một số lượng lớn hình ảnh(hơn 200 triệu ảnh của 8 triệu đối tượng), lớn gấp 3 lần so với các bộ dữ liệu hiện có Đểxây dựng bộ dữ liệu lớn như vậy rất khó thực hiện trong các phòng thiết bị, học thuật dođòi hỏi kiến trúc máy lớn

2.3 Tìm kiếm khuôn mặt từ tệp đã mã hóa

Đây là bước đơn giản nhất trong quá trình Tại bước này, chúng ta cần phải tìm

Trang 12

Về cơ bản các vấn đề nêu trên sẽ giúp bạn tạo ra một hệ thống nhật dạng khuôn mặt Ởphần sau tôi sẽ hướng dẫn các bạn tạo ra một hệ thống dựa trên những vấn đề trên.

3 Xây dựng hệ thống nhận dạng khuôn mặt

3.1 Xác định khuôn mặt trong ảnh và Dlib

Điều cần làm đầu tiên với bức ảnh/ khung hình chúng ta có đó chính là xác định xemtrong bức ảnh/ khung hình đó có sự xuất hiện của bao người, bao nhiêu khuôn và vị trícủa chúng trong bức ảnh Bài toán trở nên rất giống với bài toán xác định vật thể (ObjectDetection) Đây là một trong những bài toán khá khó bởi chúng ta sẽ cần nhiều kinhnghiệm cũng như lý thuyết về xử lý ảnh để có thể giải quyết được bước này

Dlib là một chương trình của thư viện OpenCV, hỗ trợ người dùng trong việc xác địnhkhuôn mặt Thuật toán mà Dlib cung cấp mà chúng ta sẽ sử dụng đó là HOG (Histogram

of Oriented Gradients) và SVM (Support Vector Machine)

import time

import dlib

import cv2

# Đọc ảnh đầu vào

image = cv2.imread('/your_dir /image.jpg')

# Khai báo việc sử dụng các hàm của dlib

Trang 13

# Vẽ một đường bao màu xanh lá xung quanh các khuôn mặt được xác định ra bởi HOG + SVM for face in faces_hog:

dlib.get_frontal_face_detector: hàm sử dụng HOG + SVM để xác định khuôn mặt

Hình 8A,B.Trước và sau khi chạy

Trang 14

chúng ta sẽ quy về bài toán Tính khoảng cách giữa các vector Dù là trong xử lý âm

thanh hay xử lý ảnh hay xử lý ngôn ngữ tự nhiên, việc chuyển về vector để tính khoảngcách đều là một lựa chọn rất tốt Và trong bài viết này, chúng ta sẽ biến các khung hìnhkhuôn mặt về các vector có 128 chiều

Vấn đề quan trọng nhất ở đấy chính là:

Cần có một mô hình chuyển từ khung hình khuôn mặt sang vector, sao cho ảnh 2 khuônmặt gần nhau thì 2 vector tương ứng cũng phải có khoảng cách gần nhau ảnh 2 khuônmặt khác nhau thì 2 vector tương ứng cũng phải xa nhau hơn

Và để giải quyết vấn đề này, chúng ta sẽ sử dụng mô hình học sâu ConvNet sử dụng hàm Triplet loss.

3.3 Mô hình học sâu CNN

Hình vẽ dưới đây đã biểu diễn rất rõ ràng kiến trúc của 1 mạng CNN

Ta có ảnh input đầu vào Qua hàng loạt các Convolutional Layer cùng Max Pool Layer, cuối cùng là 2 fully connected.

Hình 9.Mô hình CNN

3.3.1 ConvNet

Đây là một mạng học sâu với cấu trúc 3 nhánh Với 1 ảnh đưa vào, chúng ta sẽ thu được

1 vector cuối cùng đầu ra

Trang 15

Hình 10.Mô hình ConvNet

3.3 Triplet là gì?

Tiếng việt của Triplet có thể tạm được dịch ra là "bộ ba" Với rất nhiều các bài toán kháctrước đây của các mô hình học sâu, thông thường chúng ta sẽ cho lần lượt từng ảnh mộtvào để mô hình học, tuy nhiên với bài toán lần này, chúng ta sẽ phải sử dụng từng "bộba"

Bộ ba của chúng ta bao gồm: 1 ảnh mặt của 1 người bất kỳ (anchor), 1 ảnh mặt khác củangười đó (positive), 1 ảnh mặt của người khác (negative) Với việc huấn luyện mô hìnhnhư thế, chúng ta sẽ có thêm thông tin về mối quan hệ giữa các ảnh, điều này giúp môhình chúng ta phù hợp hơn nhiều với bài toán

3.3.1 Triplet loss

Với f(p) là vector biểu diễn p D là khoảng cách giữa 2 vector Hàm loss của chúng ta sẽ

Trang 16

và tăng khoảng cách giữa Anchor Image và Negative Image! Đây là điều chúng ta đangmuốn mô hình học được.

3.4 Huấn luyện mô hình

first_conv = Conv2D( 96 , kernel_size = ( 8 , 8 ), strides = ( 16 , 16 ), padding = 'same' )(first_input)

first_max = MaxPool2D(pool_size = ( 3 , 3 ), strides = ( 2 , 2 ), padding = 'same' )(first_conv)

first_max = Flatten()(first_max)

first_max = Lambda( lambda x: K.l2_normalize(x, axis = 1 ))(first_max)

Trang 17

merge_one = concatenate([first_max, second_max])

merge_two = concatenate([merge_one, convnet_model.output])

emb = Dense( 4096 )(merge_two)

emb = Dense( 128 )(emb)

l2_norm_final = Lambda( lambda x: K.l2_normalize(x, axis = 1 ))(emb)

Giờ chúng ta sẽ code hàm triplet loss đúng theo công thức

Trang 18

_EPSILON = K.epsilon()

def _loss_tensor(y_true, y_pred):

y_pred = K.clip(y_pred, _EPSILON, 1.0 - _EPSILON)

Trang 19

pos = np.where(labels == labels[i])[ 0 ]

neg = np.where(labels != labels[i])[ 0 ]

Trang 20

deep_rank_model.fit_generator(generator = image_batch_generator(X, y, batch_size),

steps_per_epoch = len(X) // batch_size,

(4) Xây dựng hệ thống kiểm soát nhận dạng khuôn mặt với OpenCV Dlib và DeepLearning – Phạm Hoàng Anh

Trang 21

F Schroff, D Kalenichenko and J Philbin, "Facenet: A unified embedding for facerecognition and clustering," Proceedings of the IEEE Conference on Computer Visionand Pattern Recognition, pp 815-823, 2015.

Ngày đăng: 22/05/2020, 21:15

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w