Tải bản đầy đủ (.docx) (22 trang)

Xây dựng chương trình nhận diện khuôn mặt bằng CNN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (897.49 KB, 22 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
------🙙🙙🙙-------

BÁO CÁO ĐỀ TÀI
Học phần: Trí Tuệ Nhân Tạo

Đề tài: Tìm hiểu về mạng CNN để xây dựng
hệ thống nhận diện khn mặt

Giáo viên hướng dẫn: ThS. Lê Thị Thủy
Nhóm sinh viên thực hiện:
1.

Nguyễn Danh Hịa

2.

Đặng Cơng Khả

3.

Nguyễn Q Hồng

Lớp: IT6043.5

Khóa: K14

Nhóm: 25

Hà Nội - Năm 2022




MỤC LỤC

Bảng phân chia công việc:
Họ và tên

Chức vụ

Công việc

Nguyễn Danh Hịa

Trưởng nhóm

Lên kế hoạch, chọn
cơng nghệ, viết
code, thu thập dữ
liệu, kiểm thử sản
phẩm, viết báo cáo.

Đặng Công Khả

Thành viên nhóm

Viết code, thu thập


dữ liệu, viết báo
cáo.

Nguyễn Q Hồng

Thành viên nhóm

Viết code, thu thập
dữ liệu, viết báo
cáo.

LỜI NÓI ĐẦU
1.

Lý do chọn đề tài
Trong xã hội hiện đại ngày nay, Robot đang ngày một phát triển, dần
dần đang được sử dụng để thay thế con người trong 1 số cơng việc. Ví dụ:


-

Nhà hàng It’s More Teatime Than Terminator tại Côn Sơn, Trung
Quốc có hàng chục Robot bé nhó dễ thương có thể nấu nướng và
phục vụ.

-

Công ty Moley Robotics tại London, Anh đã chế tạo ra Robot nấu
ăn đầu tiên.

-

Aiko Chihira, một Robot giống hệ người được Toshiba công bố tại

Triển lãm điện tử CEATEC ngày 7/10/2014. Aiko khơng chỉ nhìn,
di chuyển, nói tiếng Nhật một cách trơi chảy, mà cịn có thể sử
dụng thành thạo ngơn ngữ kí hiệu.

Khi làm việc, Robot sẽ luôn cần phải học hỏi chứ không phải chỉ làm
những việc như đã được lập trình ban đầu. Và để Robot có khả năng đó thì
cần có được một bộ não giống như con người, và đối với Robot, đó chính là
học máy, tiếng Anh là “Machine Learning” (ML). Một số lĩnh vực phổ biến
mà ML góp mặt:
1.

Xử lý ảnh

2.

Phân tích văn bản

3.

Khai phá dữ liệu

4.

Trị chơi điện tử & Robot

Trong bài báo cáo này, chúng tôi sẽ giới thiệu quá trình tìm hiểu và
xây dựng 1 hệ thống nhận dạng khuôn mặt bằng cấu trúc mạng CNN – một
cấu trúc mạng nổi tiếng, thường được sử dụng trong lĩnh vực xử lý ảnh và
Robot.



Chương I. Giới thiệu về cấu trúc mạng CNN
1.

Định nghĩa CNN là gì?
CNN là tên viết tắt của từ Convolutional Neural Network (hay cịn gọi là

CNNs_mang nơ ron tích chập). Đây là một trong những mơ hình Deep Learning
vơ cùng tiên tiến. CNN sẽ cho phép bạn xây dựng các hệ thống thơng minh với
độ chính xác vơ cùng cao. Hiện nay, CNN được ứng dụng rất nhiều trong
những bài toán nhận dạng object trong ảnh. Và kiến thức cụ thể về CNN đã
được lý giải như sau:


Convolutional
Đây là một loại cửa sổ dạng trượt nằm trên một ma trận. Những
convolutional layer sẽ có các parameter được học để điều chỉnh và lấy
ra những thơng tin chính xác nhất mà khơng cần phải chọn
feature. Convolution hay tích chập chính là nhân các phần tử trong ma
trận. Sliding Window còn được gọi là kernel, filter hoặc feature detect
và là loại ma trận có kích thước nhỏ.



Feature
Feature là đặc điểm, các CNN sẽ so sánh hình ảnh dựa theo từng mảnh
và những mảnh này được gọi là Feature. Thay vì phải khớp các bức
ảnh lại với nhau thì CNN sẽ nhìn ra sự tương động khi tìm kiếm thơ
các Feature khớp với nhau bằng 2 hình ảnh tốt hơn. Mỗi Feature được
xem là một hình ảnh mini có nghĩa chúng là những mảng 2 chiều nhỏ.

Các Feature này đều tương ứng với các khía cạnh nào đó của hình ảnh
và chúng có thể khớp lại với nhau.


2.

Các lớp cơ bản của mạng CNN


Convolutional layer
Đây là lớp quan trọng nhất của CNN, lớp này có nhiệm vụ thực hiện mọi
tính tốn. Những yếu tố quan trọng của một convolutional layer là: stride,
padding, filter map, feature map.


CNN sử dụng các filter để áp dụng vào vùng của hình ảnh. Những
filter map này được gọi là ma trận 3 chiều, mà bên trong nó là các con
số và chúng là parameter.



Stride có nghĩa là khi bạn dịch chuyển filter map theo pixel dựa vào
giá trị trừ trái sang phải. Và sự chuyển dịch này chính là Stride.



Padding: Là các giá trị 0 được thêm vào với lớp input.




Feature map: Nó thể hiện kết quả của mỗi lần filter map quét qua
input. Sau mỗi lần quét sẽ xảy ra quá trình tính tốn.



Relu Layer


Relu layer là hàm kích hoạt trong neural network và hàm này còn
được gọi là activation function. Hàm kích hoạt có tác dụng mơ phỏng
các neuron có tỷ lệ truyền xung qua axon. Trong activation function
thì nó cịn có hàm nghĩa là: Relu, Leaky, Tanh, Sigmoid,


Maxout,... Hiện nay, hàm relu được dùng phổ biến và vơ cùng thơng
dụng.


Nó được sử dụng nhiều cho các nhu cầu huấn luyện mạng neuron thì
relu mang lại rất nhiều ưu điểm nổi bật như: việc tính tốn sẽ trở nên
nhanh hơn,... Quá trình sử dụng relu, chúng ta cần lưu ý đến vấn đề
tùy chỉnh các learning rate và theo dõi dead unit. Những lớp relu layer
đã được sử dụng sau khi filter map được tính ra và áp dụng hàm relu
lên những giá trị của filter map.



Pooling layer
Khi đầu vào quá lớn, những lớp pooling layer sẽ được xếp vào giữa
những lớp Convolutional layer để làm giảm parameter. Hiện nay, pooling

layer có 2 loại chủ yếu là: max pooling và average.



Fully connected layer


Lớp này có nhiệm vụ đưa ra kết quả sau khi lớp convolutional layer và
pooling layer đã nhận được ảnh truyền. Lúc này, ta thu được kết quả là
model đã đọc được thông tin của ảnh và để liên kết chúng cũng như
cho ra nhiều output hơn thì ta sử dụng fully connected layer.



Ngồi ra, nếu như fully connected layer có được giữ liệu hình ảnh thì
chúng sẽ chuyển nó thành mục chưa được phân chia chất lượng. Cái
này khá giống với phiếu bầu rồi chúng sẽ đánh giá để bầu chọn ra hình
ảnh có chất lượng cao nhất.

3.

Cấu trúc của mạng CNN là gì?


Mạng CNN là một trong những tập hợp của lớp Convolution bị chồng
lên nhau cũng như sử dụng hàm nonlinear activation như ReLU và tanh để
kích hoạt trọng số trong node. Lớp này sau khi thơng qua hàm thì sẽ được
trọng số trong các node. Những lớp này sau khi đã thơng qua hàm kích hoạt
thì có thể tạo ra những thông tin trừu tượng hơn cho những lớp tiếp theo.
Trong mơ hình CNN có tính bất biến và tích kết hợp. Nếu như bạn có

cùng một đối tượng mà lại chiếu theo nhiều góc độ khác nhau thì độ chính
xác có thể sẽ bị ảnh hưởng. Với chuyển dịch, quay và co giãn thì pooling
layer sẽ được sử dụng để giúp làm bất biến những tính chất này. Vì vậy, CNN
sẽ đưa ra kết quả có độ chính xác tương ứng ở từng mơ hình.
Trong đó, pooling layer sẽ cho bạn tính bất biến đối với phép dịch
chuyển, phép co dãn và phép quay. Cịn tính kết hợp cục bộ sẽ cho bạn thấy
những cấp độ biểu diễn, thông tin từ thấp đến mức độ cao với độ trừu tượng
thơng qua convolution từ các filter. Mơ hình CNN có các layer liên kết được
với nhau dựa vào cơ chế convolution.
Những layer tiếp theo sẽ là kết quả từ những convolution từ layer trước
đó, vì thế mà bạn sẽ có các kết nối cục bộ phù hợp nhất. Vậy, mỗi neuron ở
lớp sinh ra tiếp theo từ kết quả filter sẽ áp đặt lên vùng ảnh cục bộ của một
neuron có trước đó. Trong khi huấn luyện mạng, CNN sẽ tự động học hỏi các
giá trị thông qua lớp filter dựa vào cách thức mà người dùng thực hiện.
Trong đó, cấu trúc cơ bản của CNN thường bao gồm 3 phần chính là:


Local receptive field (trường cục bộ): Lớp này có nhiệm vụ tách lọc dữ liệu,
thơng tin ảnh và lựa chọn các vùng ảnh có giá trị sử dụng cao nhất.




Shared weights and bias (trọng số chia sẻ): Lớp này giúp làm giảm tối đa
lượng tham số có tác dụng chính của yếu tố này trong mạng CNN. Trong mỗi
convolution sẽ có các feature map khác nhau và mỗi feature lại có khả năng
giúp detect một vài feature trong ảnh.




Pooling layer (lớp tổng hợp): Pooling layer là lớp cuối cùng và có tác dụng
làm đơn giản các thơng tin đầu ra. Có nghĩa là, sau khi đã hồn tất tính tốn
và qt qua các lớp thì đến pooling layer để lược bớt các thơng tin khơng cần
thiết. Từ đó, cho ra kết quả theo như ý mà người dùng mong muốn.

4.

Giới thiệu về kiến trúc VGG19
Architect của VGG19 bao gồm 19 layer :13 layer Conv (2 layer conv-conv,3

layer conv-conv-conv) đều có kernel 3×3, sau mỗi layer conv là maxpooling
downsize xuống 0.5, và 3 layer fully connection và 3 layer convolution ở 3

layer conv cuối (thành 4 conv stack với nhau)
VGG 19 sử dụng kernel 3×3 thay vì 11×11 ở alexnet(7×7 ZFNet). Kết hợp 2
conv 3×3 có hiệu quả hơn 1 cov 5×5 về receptive field giúp mạng deeper hơn lại
giảm tham số tính tốn cho model. 3 Conv 3×3 có receptive field same 1 conv 7×7.
Input size giảm dần qua các conv nhưng tăng số chiều sâu. Làm việc rất tốt cho
task classifier và localizer (rất hay được sử dụng trong object detection). Sử dụng
relu sau mỗi conv và training bằng batch gradient descent. Có sử dụng data
augmentation technique trong quá trình training.
VGG-19 cũng đã giành được ILSVRC năm 2014.


Hình minh họa cho kiến trúc VGG19
Mạng CNN là một trong những tập hợp của lớp Convolution bị chồng
lên nhau cũng như sử dụng hàm nonlinear activation như ReLU và tanh để
kích hoạt trọng số trong node. Lớp này sau khi thơng qua hàm thì sẽ được



trọng số trong các node. Những lớp này sau khi đã thơng qua hàm kích hoạt
thì có thể tạo ra những thông tin trừu tượng hơn cho những lớp tiếp theo.
Trong mơ hình CNN có tính bất biến và tích kết hợp. Nếu như bạn có
cùng một đối tượng mà lại chiếu theo nhiều góc độ khác nhau thì độ chính
xác có thể sẽ bị ảnh hưởng. Với chuyển dịch, quay và co giãn thì pooling
layer sẽ được sử dụng để giúp làm bất biến những tính chất này. Vì vậy, CNN
sẽ đưa ra kết quả có độ chính xác tương ứng ở từng mơ hình.
Trong đó, pooling layer sẽ cho bạn tính bất biến đối với phép dịch
chuyển, phép co dãn và phép quay. Cịn tính kết hợp cục bộ sẽ cho bạn thấy
những cấp độ biểu diễn, thông tin từ thấp đến mức độ cao với độ trừu tượng
thơng qua convolution từ các filter. Mơ hình CNN có các layer liên kết được
với nhau dựa vào cơ chế convolution.
Những layer tiếp theo sẽ là kết quả từ những convolution từ layer trước
đó, vì thế mà bạn sẽ có các kết nối cục bộ phù hợp nhất. Vậy, mỗi neuron ở
lớp sinh ra tiếp theo từ kết quả filter sẽ áp đặt lên vùng ảnh cục bộ của một
neuron có trước đó. Trong khi huấn luyện mạng, CNN sẽ tự động học hỏi các
giá trị thông qua lớp filter dựa vào cách thức mà người dùng thực hiện.
Trong đó, cấu trúc cơ bản của CNN thường bao gồm 3 phần chính là:


Local receptive field (trường cục bộ): Lớp này có nhiệm vụ tách lọc dữ liệu,
thơng tin ảnh và lựa chọn các vùng ảnh có giá trị sử dụng cao nhất.



Shared weights and bias (trọng số chia sẻ): Lớp này giúp làm giảm tối đa
lượng tham số có tác dụng chính của yếu tố này trong mạng CNN. Trong mỗi


convolution sẽ có các feature map khác nhau và mỗi feature lại có khả năng

giúp detect một vài feature trong ảnh.



Pooling layer (lớp tổng hợp): Pooling layer là lớp cuối cùng và có tác dụng
làm đơn giản các thơng tin đầu ra. Có nghĩa là, sau khi đã hồn tất tính tốn
và qt qua các lớp thì đến pooling layer để lược bớt các thơng tin khơng cần
thiết. Từ đó, cho ra kết quả theo như ý mà người dùng mong muốn.
Architect của VGG19 bao gồm 19 layer :13 layer Conv (2 layer conv-conv,3

layer conv-conv-conv) đều có kernel 3×3, sau mỗi layer conv là maxpooling
downsize xuống 0.5, và 3 layer fully connection và 3 layer convolution ở 3 layer
conv cuối (thành 4 conv stack với nhau)


Chương II. Xây dựng ứng dụng
1.

Thu thập dữ liệu mẫu


Tạo file “Collect Images.py” dùng để thu thập ảnh mẫu dùng
cho quá trình train và test



Import thư viện cv2, là thư viện chuyển dùng của
python trong xử lý ảnh




Sử dụng bộ dữ liệu mã nguồn mở
“haarcascade_frontalface_default.xml” đã được cộng
đồng lập trình viên xây dựng để hỗ trợ xác định khuôn
mặt.



Sau khi hệ thống xác định được khuôn mặt trong
camera, thực hiện khoanh vùng khn mặt và cắt ảnh
khn mặt theo kích thước (200x200) rồi lưu vào thư


mục Train/Test trong folder mang tên của người đang
chụp ảnh đã tạo sẵn.

2.

Train model
● Import các thư viện cần thiết cho quá trình train

● Cài đặt cấu hình cho bộ train và bộ test dữ liệu

● Cài đặt cấu hình cho tập dữ liệu training set và testing set


● Thêm lớp tiền sử lí cho q trình train, ở đây ta sử dụng cấu trúc VGG19

● Set up để hệ thống không train những layer đã được train rồi nhằm tối ưu
q trình train, tránh lãng phí tài nguyên


● Lấy danh sách các folder trong thư mục train\

● Setup các layer đầu ra

● Tạo model train


● Show cấu trúc của model VGG19



● Bắt đầu quá trình train với cấu hình model được set up như trong ảnh, sau
khi train xong lưu dữ liệu vào file “facefeatures_new_model.h5” để tái sử
dụng sau này.

● Quá trình train đang diễn ra


3.

Nhận diện khuôn mặt với thời gian thực
● Tạo file có tên “RealTime Check.py”
● Import các thư viện cần thiết

● Sử dụng hàm load_model trong thư viện Keras.model để load file dữ liệu
đã được train ở phần 2

● Load bộ dữ liệu mẫu để nhận dạng khuôn mặt


● Tạo list tên trùng tên với các folder chứa ảnh dùng để train và test

● Sử dụng camera để nhận dạng

● Thực hiện q trình xác định xem có khn mặt nào trong góc cam khơng


● Sau khi xác định được khn mặt trong hình, ta resize chúng về kích thước
200x200, cùng với kích thước của dữ liệu dùng để train, sau đó chuyển về
dạng vector rồi dùng hàm “predict” để đưa ra các dự đoán về độ giống
nhau giữa ảnh nhận dạng được với tệp dữ liệu đã được train.

● Ta lấy vị trí giá trị lớn nhất trong list pred ở trên, sau đó lấy tên từ list
class_labels ở phía trên với vị trí vừa lấy là được tên của người đang được
nhận dạng, cuối cùng là in ra màn hình tên người được nhận dạng, nếu
không nhận dạng được khuôn mặt nào, màn hình hiện “No face found”,
nhấn “q” để tắt cửa sổ ứng dụng.


● Một số kết quả khi chạy ứng dụng.


Chương III. Tổng kết
Qua những bước trên, chúng tôi đã trình bày từng bước quá trình xây dựng
một hệ thống nhận dạng khuôn mặt bằng công nghệ CNN, đây chỉ là một mơ hình
Machine Learning cơ bản, cịn nhiều sai số trong quá trình xử dụng nhưng là bước
đầu trong công cuộc nghiên cứu về công nghệ Machine Learning, rất mong sẽ nhận
được nhiều những nhận xét từ mọi người để chúng tơi có thể cải thiện sản phẩm
trong tương lai.
Ngoài ra, chúng em xin gửi lời cảm ơn tới cô Lê Thị Thủy, giảng viên trực

tiếp giảng dạy bộ mơn “Trí Tuệ Nhân Tạo” đã hỗ trợ chúng em trong quá trình xây
dựng đề tài này, chúng em xin chân thành cảm ơn cô.



×