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 7102014. 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.
Trang 1MER GEFO RMA
T 20
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 khuôn 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 Quý HoàngLớp: IT6043.5 Khóa: K14 Nhóm: 25
Hà Nội - Năm 2022
Trang 2MER GEFO RMA
T 20
MỤC LỤC
3 Nhận diện khuôn mặt với thời gian thực 20
Trang 3MER GEFO RMA
T 20
Bảng phân chia công việc:
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 Quý Hoàng Thành viên nhóm Viết code, thu thập
dữ liệu, viết báo
cáo.
Trang 4MER GEFO RMA
T 20
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
Trang 5MER GEFO RMA
T 20
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
Trang 6MER GEFO RMA
T 20
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
Trang 7MER GEFO RMA
T 20
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 toá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 toá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,
Trang 8MER GEFO RMA
T 20
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 toá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
● Ngoà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ì?
Trang 9MER GEFO RMA
T 20
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
Trang 10MER GEFO RMA
T 20
● 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 đã hoàn
tất tính toán và quét 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 toá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
Trang 11MER GEFO RMA
T 20
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
Trang 12MER GEFO RMA
T 20
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
Trang 13MER GEFO RMA
T 20
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 đã hoàn tất tính
toán và quét 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)
Trang 14MER GEFO RMA
T 20
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 khuôn mặt và cắt ảnh khuôn mặt theo kích thước (200x200) rồi lưu vào thư
Trang 15MER GEFO RMA
T 20
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
Trang 16MER GEFO RMA
T 20
● Thêm lớp tiền sử lí cho quá 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
quá 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
Trang 17MER GEFO RMA
T 20
● Show cấu trúc của model VGG19
Trang 18MER GEFO RMA
T 20
Trang 19MER GEFO RMA
T 20
● 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
Trang 20MER GEFO RMA
T 20
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 quá trình xác định xem có khuôn mặt nào trong góc cam không
Trang 21MER GEFO RMA
T 20
● Sau khi xác định được khuôn 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
Trang 22MER GEFO RMA
T 20
● Một số kết quả khi chạy ứng dụng
Trang 23MER GEFO RMA
T 20
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ô