You are on page 1of 53

TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT

VIỆN KỸ THUẬT – CÔNG NGHỆ

BÁO CÁO TỔNG KẾT

ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN CẤP ĐƠN VỊ

NĂM HỌC 2021-2022

ỨNG DỤNG HỌC MÁY VÀO NHẬN DIỆN BIỂU CẢM CỦA
SINH VIÊN ĐẠI HỌC THỦ DẦU MỘT SAU BUỔI HỌC

Thuộc nhóm ngành khoa học: Trí tuệ nhân tạo và khoa học dữ liệu

Bình Dương, tháng 04 năm 2022


TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT
VIỆN KỸ THUẬT – CÔNG NGHỆ

BÁO CÁO TỔNG KẾT

ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN CẤP ĐƠN VỊ

NĂM HỌC 2021-2022

ỨNG DỤNG HỌC MÁY VÀO NHẬN DIỆN BIỂU CẢM CỦA
SINH VIÊN ĐẠI HỌC THỦ DẦU MỘT SAU BUỔI HỌC

Thuộc nhóm ngành khoa học: Trí tuệ nhân tạo và khoa học dữ liệu

Ghi
STT Họ và tên MSSV Lớp Khoa
chú

1 Phạm Thái Bảo 2024802050007 D20TTNT01 KT-CN

Mai Đặng Sơn


2 2024801030059 D20KTPM02 KT-CN
Tùng

3 Phan Thúy Thanh 2124802050020 D21TTNT01 KT-CN

4 Lục Tấn Khoa 2124802050022 D21TTNT01 KT-CN

Người hướng dẫn: ThS. Hồ Ngọc Trung Kiên

Bình Dương, tháng 04 năm 2022


i
UBND TỈNH BÌNH DƯƠNG CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT Độc lập – Tự do – Hạnh phúc

THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI

1. Thông tin chung:

- Tên đề tài: Ứng dụng máy học vào nhận diện biểu cảm của sinh viên đại học thủ dầu
một sau buổi học

- Sinh viên/ nhóm sinh viên thực hiện:

Năm thứ/
STT Họ và tên MSSV Lớp Khoa Số năm
đào tạo

1 Phạm Thái Bảo 2024802050007 D20TTNT01 KT-CN 2/4

2 Mai Đặng Sơn Tùng 2024801030059 D20KTPM02 KT-CN 2/4

3 Phan Thúy Thanh 2124802050020 D21TTNT01 KT-CN 1/4

4 Lục Tấn Khoa 2124802050022 D21TTNT01 KT-CN 1/4

- Người hướng dẫn: ThS. Hồ Ngọc Trung Kiên

2. Mục tiêu đề tài:

Xây dựng hệ thống nhận diện biểu cảm của sinh viên thông qua đó giúp cho
giảng viên đánh giá buổi học, dễ dàng điều chỉnh và lựa chọn phương pháp giảng dạy
phù hợp, khoa học.

3. Tính mới và sáng tạo:

Thêm bộ lọc và hệ thần kinh nhằm cải thiện độ nhạy khi nhận diện biểu cảm tức
giận.

4. Kết quả nghiên cứu:

ii
Xây dựng mô hình huấn luyện và thử nghiệm nhận diện biểu cảm khuôn mặt.
Nhận diện được biểu cảm khuôn mặt cơ bản hạnh phúc, đau buồn, sợ hãi, tức giận,
ngạc nhiên, bình thường.

5. Đóng góp về mặt kinh tế - xã hội, giáo dục và đào tạo, an ninh, quốc phòng và
khả năng áp dụng của đề tài:

Giáo dục: hỗ trợ giảng viên cải thiện phương pháp giảng dạy cho sinh thấy được
nhiều cách tiếp cận nâng cao sự chủ động của sinh viên trong việc nghiên cứu học tập.

6. Công bố khoa học của sinh viên từ kết quả nghiên cứu của đề tài (ghi rõ họ tên
tác giả, nhan đề và các yếu tố về xuất bản nếu có) hoặc nhận xét, đánh giá của cơ sở
đã áp dụng các kết quả nghiên cứu (nếu có):

Ngày tháng năm 2022

Sinh viên chịu trách nhiệm chính

thực hiện đề tài

(ký, họ và tên)

Nhận xét của người hướng dẫn về những đóng góp khoa học của sinh viên thực
hiện đề tài (phần này do người hướng dẫn ghi):

iii
Ngày tháng năm

Xác nhận của lãnh đạo khoa Người hướng dẫn

(ký, họ và tên) (ký, họ và tên)

iv
UBND TỈNH BÌNH DƯƠNG CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

TRƯỜNG ĐẠI HỌC THỦ DẦU MỘT Độc lập – Tự do – Hạnh phúc

THÔNG TIN VỀ SINH VIÊN

CHỊU TRÁCH NHIỆM CHÍNH THỰC HIỆN ĐỀ TÀI

I. SƠ LƯỢC VỀ SINH VIÊN:


Ảnh 4x6
Họ và tên: Phạm Thái Bảo

Sinh ngày: 19 tháng 03 năm 2002

Nơi sinh: Ninh Thuận

Lớp: D20TTNT01 Khóa: 2020-2025

Khoa: Viện kĩ thuật – công nghệ

Địa chỉ liên hệ: 424/39/8 tổ 4, khu phố 4, Phường Phú Hoà, tp Thủ Dầu Một, tỉnh Bình
Dương.

Điện thoại: 0369430009 Email: baophth@gmail.com

II. QUÁ TRÌNH HỌC TẬP (kê khai thành tích của sinh viên từ năm thứ 1 đến năm
đang học):

* Năm thứ 1:

Ngành học: Trí tuệ nhân tạo và khoa học dữ liệu Khoa: Viện kĩ thuật – công
nghệ

Kết quả xếp loại học tập: giỏi

Sơ lược thành tích:

Ngày tháng năm 2022

v
Xác nhận của lãnh đạo khoa Sinh viên chịu trách nhiệm chính

(ký, họ và tên) thực hiện đề tài

(ký, họ và tên)

vi
MỤC LỤC
MỤC LỤC.................................................................................................................. vii
DANH MỤC NHỮNG TỪ VIẾT TẮT.....................................................................ix
DANH MỤC BẢNG BIỂU..........................................................................................x
DANH MỤC HÌNH....................................................................................................xi
A. PHẦN MỞ ĐẦU......................................................................................................1
1. Lí do chọn đề tài....................................................................................................1
2. Mục tiêu nghiên cứu..............................................................................................1
3. Đối tượng nghiên cứu............................................................................................1
4. Phạm vi nghiên cứu...............................................................................................1
5. Phương pháp nghiên cứu.......................................................................................1
6. Ý nghĩa đề tài........................................................................................................2
B. PHẦN NỘI DUNG..................................................................................................3
CHƯƠNG 1. CƠ SỞ LÍ THUYẾT.............................................................................3
1.1. Tổng quan tình hình nghiên cứu..........................................................................3
1.2. Một số khái niệm.................................................................................................5
1.2.1. Machine learning..........................................................................................5
1.2.2. Deep learning...............................................................................................8
1.2.3. Training set.................................................................................................10
1.2.4. Validation...................................................................................................10
1.2.5. Testing set...................................................................................................12
CHƯƠNG 2. MÔ HÌNH BÀI TOÁN.......................................................................14
2.1. Quy trình thực hiện............................................................................................14
2.2. Mô hình bài toán................................................................................................15
2.2.1. Train model.................................................................................................15
2.2.2. Thuật toán được sử dụng............................................................................16
2.2.3. Test model...................................................................................................19
CHƯƠNG 3. THỰC NGHIỆM VÀ ĐÁNH GIÁ.....................................................22
3.1. Chuẩn bị............................................................................................................22
3.1.1. Cấu hình máy..............................................................................................22
3.1.2. Phần mềm...................................................................................................22
3.1.3. Ngôn ngữ lập trình......................................................................................23
3.1.4. Các thư viện được sử dụng.........................................................................25

vii
3.1.5. Mô tả bộ dữ liệu..........................................................................................29
3.2. Tiến hành...........................................................................................................30
3.2.1. Train model.................................................................................................30
3.2.2. Test model...................................................................................................33
3.3. Kết quả..............................................................................................................36
3.4. Đánh giá............................................................................................................37
C. PHẦN KẾT LUẬN...............................................................................................38
1. Kết quả đạt được.................................................................................................38
2. Khuyến nghị........................................................................................................38
TÀI LIỆU THAM KHẢO.........................................................................................40

viii
DANH MỤC NHỮNG TỪ VIẾT TẮT
Viết tắt Tiếng anh Tiếng việt
Machine learning Máy học
Deep learning Học sâu
Train Huấn luyện
Model Mẫu

ix
DANH MỤC BẢNG BIỂU
Bảng 3.1: Phân chia tập dữ liệu...................................................................................30

x
DANH MỤC HÌNH
Hình 1.1: Machine learning workflow(website).......................................................6
Hình 1.2: Supervised learning(website)....................................................................7
Hình 1.3: Unsupervised learning(website)................................................................8
Hình 1.4: Deep learning(website).............................................................................9
Hình 1.5: Validation...............................................................................................11
Hình 1.6: Testing set(website)................................................................................12
Hình 2.1: Quy trình thực hiện(website)..................................................................14
Hình 2.2: Khởi tạo các lớp player...........................................................................15
Hình 2.3: Quy trình train model..............................................................................16
Hình 2.4: Cấu trúc mạng CNN(website).................................................................18
Hình 2.5: Xử lí của mạng CNN(website)................................................................19
Hình 2.6: Quy trình thử nghiệm nhận diện biểu cảm..............................................20
Hình 3.1: Máy được sử dụng(website)....................................................................22
Hình 3.2: Phần mềm sử dụng..................................................................................23
Hình 3.3: Python(website)......................................................................................24
Hình 3.4: Numpy(website).....................................................................................26
Hình 3.5: Keras(website)........................................................................................26
Hình 3.6: Tensorflow(website)...............................................................................27
Hình 3.7: OpenCV(website)...................................................................................28
Hình 3.8: Pillow(website).......................................................................................28
Hình 3.9: Matplotlib(website).................................................................................28
Hình 3.10: Tkinter(website)....................................................................................29
Hình 3.11: Mô tả các biểu cảm có trong tập dữ liệu FER2013s..............................29
Hình 3.12: Nhận diện biểu cảm..............................................................................37

xi
A. PHẦN MỞ ĐẦU
1. Lí do chọn đề tài
Với tình hình hiện nay hình thức học trực tuyến là giải pháp giúp chúng ta có thể
tiếp nhận thông tin dễ dàng chỉ với một chiếc điện thoại, máy tính hoặc máy tính bảng
có kết nối Internet. Như vậy, học sinh có thể học tập từ xa mà không cần phải đến
trường học. Mặt khác hình thức này làm giảm khả năng truyền và đạt sự nhuyệt huyết
trong công tác giảng dạy, khó khăn trong việc tương tác qua lại giữa giảng viên, sinh
viên. Như vậy giảng viên khó có thể nắm bắt được tình hình học tập của sinh viên và
đưa ra phương pháp giảng dạy phù hợp. Ngoài ra nếu giảng dạy trong một lớp quá
đông giảng viên chỉ biết được tổng thể biểu cảm sinh viên và chưa thấy được từng các
biểu cảm khác. Bởi vì lí do đó, cần xây dựng hệ thống có thể nhận biết được biểu cảm
của sinh viên sau buổi học giúp cho giảng viên đưa ra phương pháp giảng dạy phù
hợp. Đó cũng là lý do nhóm nghiên cứu sinh chọn đề tài “ứng dụng máy học vào nhận
diện biểu cảm của sinh viên đại học thủ dầu một sau buổi học” làm đề tài nghiên cứu
khoa học.

2. Mục tiêu nghiên cứu


Nhận diện biểu cảm khuôn mặt thông phân tích hình ảnh được lấy từ webcam
hoặc băng ghi hình. Đưa hình ảnh lấy được đưa vào thuật toán phân tích và đưa ra biểu
cảm khuôn mặt trong đó. Từ đây nhận diện được biểu cảm của khuôn mặt và báo cáo
cho người dùng thông tin tươn ứng và độ chính xác của dữ liệu.

3. Đối tượng nghiên cứu


Tập trung nghiên cứu nhận diện biểu cảm khuôn mặt người. Như các bạn đã biết
biểu cảm là sự biểu lộ, thể hiện tình cảm, tư tưởng của con người nhờ ngôn ngữ hay
một số phương tiện khác. Bởi lẽ trong cuộc sống, con người sẽ trải qua rất nhiều
những niềm vui, nỗi buồn, có tình yêu thương nhưng cũng có lòng căm giận… Và có
lẽ họ cũng muốn được bộc lộ, được chia sẻ những tình cảm, biểu cảm của mình. Thế
nên, biểu cảm chính là một nhu cầu tất yếu của con người trong cuộc sống hằng ngày.

4. Phạm vi nghiên cứu


Phạm vi nghiên cứu chỉ tập trung trong khối sinh viên lớp D20TTNT01,
D21TTNT01.

1
5. Phương pháp nghiên cứu
Phương pháp nghiên cứu lý thuyết:

- Tìm hiểu ngôn ngữ lập trình Python cơ bản, tìm hiểu các thư viện keras,
opencv, tensorflow và các khái niệm, một số các thuật toán liên quan đến machine
learning, deep learning. Thời gian thực hiện chiếm khoảng 50% thời gian nghiên cứu.
Cần tìm hiểu kĩ lưỡng về cách thực thi của các hàm, các tham số được truyền vào và
các giá trị đầu ra.

- Tìm kiếm bài báo liên quan đến nhận diện biểu cảm bằng nhiều phương pháp
khác nhau. Để tham khảo và kế thừa sự phát triển về nhận diện biểu cảm khuôn mặt và
công nghệ liên quan.

- Tìm hiểu về thuật toán convolutional neural network(CNN), supper vector


machine(SVN).

Phương pháp thực nghiệm: Lập trình xây dựng ứng dụng học sâu

6. Ý nghĩa đề tài
Kết quả nghiên cứu của đề tài “ứng dụng học máy vào nhận diện biểu cảm khuôn
mặt của sinh viên Thủ Dầu Một sau giờ học” sẽ là căn cứ hỡ trợ giảng viên xác định
được biểu cảm của từng sinh trong quá trình giảng dạy. Từ đó cải thiện phương pháp
giảng dạy phù hợp cho sinh viên.

2
Chương 1. Cơ sở lí thuyết

B. PHẦN NỘI DUNG


CHƯƠNG 1. CƠ SỞ LÍ THUYẾT
1.1. Tổng quan tình hình nghiên cứu
Nhận dạng biểu cảm trên khuôn mặt là quá trình xác định các biểu cảm trên
khuôn mặt của con người thông qua khuôn mặt. Mọi người rất khác nhau với độ chính
xác khác nhau trong việc nhận biết biểu cảm của người khác. Trong sự lan rộng của
các độ chính xác khác nhau này, công nghệ có thể chứng minh kênh nhận dạng biểu
cảm cũng như phát triển một số mô hình để xác định biểu cảm khuôn mặt chính xác
của con người. Các phương tiện giao tiếp bao gồm cử chỉ cơ thể, nét mặt,… ngoài lời
nói. Cử chỉ cơ thể giúp điều chỉnh giao tiếp trong lời nói, trong khi nét mặt thể hiện
biểu cảm của con người theo phản xạ. Nhận dạng biểu cảm khuôn mặt có ứng dụng
trong nhiều lĩnh vực khác nhau bao gồm khoa học lâm sàng, khoa học hành vi,… Phát
hiện nét mặt cũng là điều kiện tiên quyết ngày nay đối với giao diện người - máy.
Trong vài năm qua, một số tiến bộ đã được thực hiện trong lĩnh vực phát hiện nét mặt,
như kỹ thuật trích xuất các đặc điểm trên khuôn mặt và phân loại biểu cảm. Nhưng vẫn
phải phát triển một hệ thống phát hiện biểu cảm khuôn mặt tự động. Dự án này thực
hiện nhận dạng khuôn mặt theo nhiều cách, bằng cách sử dụng bộ mô tả (Histogram
Of Orientation Gradient) và SVM (Máy vectơ hỗ trợ) cho mô hình đầu tiên trong khi
với các chiến lược đầu vào khác nhau cho Mạng nơ-ron tích chập Convolutions Neural
Network (CNN) trong các mô hình khác. Sau đó, CNN và SVM dự đoán nhãn theo
một trong các biểu cảm trên khuôn mặt sau: bình thường, hạnh phúc, sợ hãi, buồn bã,
chán ghét, tức giận, ngạc nhiên. Động cơ của việc kết hợp hai hoặc nhiều kỹ thuật và
tiền xử lý để đạt được kết quả có thể so sánh được thành công
Bài toán phát hiện biểu cảm khuôn mặt đã có lịch sử nghiên cứu lâu dài. Từ năm
1964, Bledsoe là người đầu tiên xây dựng chương trình nhận dạng khuôn mặt tự động
kết hợp với hệ thống máy tính, bằng cách phân loại khuôn mặt trên cơ sở mốc chuẩn
được nhập vào bằng tay. Các thông số để phân loại là khoảng cách chuẩn, tỉ lệ giữa
các điểm như góc, mắt, miệng, chóp mũi và chóp cằm. Sau này, tại Bell Labs đã phát
triển một kĩ thuật dựa trên vector với 21 thuộc tính khuôn mặt được phát hiện bằng
cách sử dụng kỹ thuật phân loại tiêu chuẩn mẫu. Các thuộc tính được lựa chọn đánh
giá chủ yếu là: màu tóc, chiều dài của đôi tai, độ dày môi... Năm 1986, hệ thống
WISARD dựa trên mạng nơron đã có thể nhận biết được tình trạng và biểu cảm khuôn
mặt một cách hạn chế.
Phát hiện biểu cảm khuôn mặt là bước phát triển tiếp sau của việc phát hiện
khuôn mặt, tuy nhiên có nhiều quan điểm trong việc định nghĩa khái niệm biểu cảm,
3
Chương 1. Cơ sở lí thuyết

vốn rất không rõ ràng. Matsumoto phân chia biểu cảm khuôn mặt thành 7 nhóm thể
hiện chính: Vui vẻ, Ngạc nhiên, Hài lòng, Buồn bực, Cáu giận, Phẫn nộ và Sợ hãi. Tuy
nhiên, nhóm của Mase và Pentland cho rằng chỉ 4 loại biểu cảm được thể hiện một
cách rõ ràng là Hạnh phúc, Ngạc nhiên, Giận giữ và Căm phẫn; các loại biểu cảm khác
thường không rõ ràng và tùy thuộc nhiều vào kinh nghiệm của người quan sát (tức là
không thể định lượng một cách chính xác). Cơ sở dữ liệu Radboud Faces Database thì
phân chia biểu cảm khuôn mặt thành 8 loại: Tức giận, Căm phẫn, Sợ hãi, Hạnh phúc,
Buồn rầu, Bất ngờ, Khinh miệt và Trung lập. Dataset Kaggle FER-F2013 thì lại chỉ có
7 loại biểu cảm: Giận dữ, Căm phẫn, Sợ hãi, Hạnh phúc, Buồn rầu, Bất ngờ và Trung
lập.
Hiện nay vấn đề này vẫn đang được rất nhiều người quan tâm bởi tính hấp dẫn
cùng những vấn đề phức tạp của nó. Tính đến hiện nay đã nhận diện được 8 trạng thái
cơ bản gồm vui vẻ, rầu rĩ, sợ hãi, ghê tởm, giận dữ, ngạc nhiên, hy vọng và tin tưởng
bằng một số công cụ được Microsoft áp dụng. Ngoài ra phòng nghiên cứu của công ty
Fujistu đã phát triển nhận diện thêm những trạng thái mới như hồi hộp hoặc bối rối.
Bằng việc xác định 2 thực hiện “gò má được nâng lên” và “phía góc môi được kéo
giãn” xảy ra cùng lúc, AI sẽ đưa ra kết luận trạng người dùng. Nhận dạng biểu cảm
dựa trên nhận diện các thành phần chính (PCA) truyền thống ngoài ra còn kết hợp với
một số thuật toán như mạng noron, cây quyết định,…

Trong nước có nhiều nghiên cứu về chủ đề nhận diện biểu cảm như: tổng quan về
ước lượng mức độ biểu cảm của người qua biểu cảm khuôn mặt và hướng tiếp cận
dựa trên ảnh nhiệt [1], Mô hình khai phá ý kiến và phân tích biểu cảm khách hàng trực
tuyến trong ngành thực phẩm [2], sử dụng phương pháp support vector machine và
convolutional neural network để phân loại biểu cảm của khuôn mặt [3], sử dụng
phương pháp support vector machine và convolutional neural network để phân loại
biểu cảm của khuôn mặt [4],…

Ngoài nước có rất nhiều nghiên cứu về vấn đề nhận diện biểu cảm như:
Leveraging Recent Advances in Deep Learning for Audio-Visual Emotion
Recognition [5], Multimodal Emotion Recognition using Deep Learning Architectures
[6], A Robust Method for Face Recognition and Face Emotion Detection System using
Support Vector Machines [7],...

4
Chương 1. Cơ sở lí thuyết

Hiện nay trên thị trường đã có phần mềm nhận diện biểu cảm như là: “MAL Face
Emotion” ra mắt vào ngày 01/04/2020, nhận diện được 5 loại biểu cảm của từng
khuôn: bình thường, vui, buồn, giận dữ và ngạc nhiê

1.2. Một số khái niệm


1.2.1. Machine learning
Machine learning theo định nghĩa cơ bản là ứng dụng các thuật toán để phân tích
cú pháp dữ liệu, học hỏi từ nó, và sau đó thực hiện một quyết định hoặc dự đoán về
các vấn đề có liên quan. Vì vậy, thay vì code phần mềm bằng cách thức thủ công với
một bộ hướng dẫn cụ thể để hoàn thành một nhiệm vụ cụ thể, máy được “đào tạo”
bằng cách sử dụng một lượng lớn dữ liệu và các thuật toán cho phép nó học cách thực
hiện các tác vụ. Điển hình là thuật toán support vector machine(SVM).

Một trong những lĩnh vực ứng dụng tốt nhất cho Machine learning trong nhiều
năm qua là computer vision, mặc dù nó vẫn đòi hỏi rất nhiều kỹ năng code thủ công để
có thể hoàn thành công việc. Mọi người vẫn sẽ viết các lớp phân loại bằng tay như các
bộ lọc để chương trình có thể xác định nơi mà một đối tượng bắt đầu và kết thúc. Phát
hiện hình dạng để xác định nếu nó có tám mặt. Một phân loại để nhận dạng các chữ cái
“S-T-O-P”. Từ tất cả những ứng dụng phân loại, họ sẽ phát triển các thuật toán để làm
cho hình ảnh và “học” khả năng nhận diện dấu hiệu liệu nó có phải là kí hiệu stop hay
không?

Một số khái niệm trong machine learning:

- Dataset (còn gọi là data corpus hay data stock): là tập dữ liệu ở dạng nguyên
thủy chưa qua xử lý mà bạn đã thu thập được ở bước data collection. Một dataset sẽ
bao gồm nhiều data point.

- Data point: là điểm dữ liệu, mỗi điểm dữ liệu biểu diễn cho một quan sát. Mỗi
data point có nhiều đặc trưng hay thuộc tính khác nhau, được chia làm hai loại: dữ liệu
số (numerical) và dữ liệu không phải số (ví dụ như chuỗi) (non-numerical/categorical).
Data point được biểu diễn thành dòng tương ứng, mỗi dòng có thể có 1 hoặc nhiều dữ
liệu (chính là các đặc trưng).

5
Chương 1. Cơ sở lí thuyết

- Training data và test data: dataset thường sẽ được chia làm 2 tập này, training
data dùng để huấn luyện cho mô hình, test data dùng để dự đoán kết quả và đánh giá
mô hình. Có bài toán người ta sẽ cho sẵn hai tập này thì bạn không cần phải chia nữa,
đối với bài toán chỉ cho mỗi dataset thôi thì phải chia ra. Thường tỷ lệ giữa tập train và
test sẽ là 8/2.

- Features vector: là vector đặc trưng, mỗi vector này sẽ biểu diễn cho một điểm
dữ liệu trong dataset. Mỗi vector có n chiều biểu diễn các đặc trưng của điểm dữ liệu,
mỗi đặc trưng là một chiều và phải là dữ liệu số. Các mô hình chỉ có thể huấn luyện
được từ các vector đặc trưng này, do đó dataset cần phải chuyển về dạng một tập các
vector đặc trưng (features vectors).

- Model: là các mô hình được dùng để training trên một training data theo thuật
toán của mô hình đó. Sau đó mô hình có thể dự đoán hoặc đưa ra các quyết định dựa
trên những gì chúng đã được học.

Machine learning workflow là các bước cụ thể trong machine learning như:

Hình 1.1: Machine learning workflow(website)


- Data collection – thu thập dữ liệu: để máy tính có thể học được bạn cần có
một bộ dữ liệu (dataset), bạn có thể tự thu thập chúng hoặc lấy các bộ dữ liệu đã được
công bố trước đó. Lưu ý là bạn phải thu thập từ nguồn chính thống, có như vậy dữ liệu
mới chính xác và máy có thể học một cách đúng đắng và đạt hiệu quả cao hơn.

- Preprocessing – tiền xử lý: bước này dùng để chuẩn hóa dữ liệu, loại bỏ các
thuộc tính không cần thiết, gán nhãn dữ liệu, mã hóa một số đặc trưng, trích xuất đặc

6
Chương 1. Cơ sở lí thuyết

trưng, rút gọn dữ liệu nhưng vẫn đảm bảo kết quả… Bước này tốn thời gian nhất tỉ lệ
thuận với số lượng dữ liệu bạn có. Bước 1 và 2 thường chiếm hơn 70% tổng thời gian
thực hiện.

- Training model – huấn luyện mô hình: bước này là bước bạn huấn luyện cho
mô hình hay chính là cho nó học trên dữ liệu bạn đã thu thập và xử lý ở hai bước đầu.

- Evaluating model – đánh giá mô hình: sau khi đã huấn luyện mô hình xong,
chúng ta cần dùng các độ đo để đánh giá mô hình, tùy vào từng độ đo khác nhau mà
mô hình cũng được đánh giá tốt hay không khác nhau. Độ chính xác của mô hình đạt
trên 80% được cho là tốt.

- Improve – cải thiện: sau khi đã đánh giá mô hình, các mô hình đạt độ chính
xác không tốt thì cần được train lại, chúng ta sẽ lặp lại từ bước 3, cho đến khi đạt độ
chính xác như kỳ vọng. Tổng thời gian của 3 bước cuối rơi vào khoảng 30% tổng thời
gian thực hiện.

Có rất nhiều cách phân loại machine learning, thông thường thì machine learning
sẽ được phân làm hai loại chính sau:

- Supervised learning(học có giám sát) là việc cho máy tính học trên dữ liệu đã
được gán nhãn (label), hay nói cách khác, với mỗi đầu vào Xi, chúng ta sẽ có nhãn Yi
tương ứng.

Hình 1.2: Supervised learning(website)

7
Chương 1. Cơ sở lí thuyết

- Unsupervised learning(học không giám sát) là cho máy tính học trên dữ liệu
mà không được gán nhãn, các thuật toán machine learning sẽ tìm ra sự tương quan dữ
liệu, mô hình hóa dữ liệu hay chính là làm cho máy tính có kiến thức, hiểu về dữ liệu,
từ đó chúng có thể phân loại các dữ liệu về sau thành các nhóm, lớp (clustering) giống
nhau mà chúng đã được học hoặc giảm số chiều dữ liệu (dimension reduction).

Hình 1.3: Unsupervised learning(website)


Ngoài ra, machine learning còn có thể phân làm các loại sau: Semi-supervised
learning(học bán giám sát), Deep learning(học sâu về một vấn đề nào đó), Reinforce
learning(học củng cố/tăng cường)

1.2.2. Deep learning


Deep Learning là một nhánh của Machine Learning sử dụng mạng lưới thần kinh
với nhiều lớp. Một mạng lưới thần kinh sâu phân tích dữ liệu với các biểu diễn đã học
tương tự như cách một người nhìn vào một vấn đề của họ. Và nó có tác dụng hỗ trợ
cho máy tính tự huấn luyện chính nó để có thể thực hiện mọi tác vụ tương tự như con
người. Điều này chính là giúp máy tính bắt chước con người cách học hỏi và suy nghĩ.
Điển hình là thuật toán convolutional neural network(CNN).

8
Chương 1. Cơ sở lí thuyết

Hình 1.1: Deep learning(website)


Một phương pháp tiếp cận thuật toán khác từ cộng đồng machine-learning,
Artificial Neural Networks, được nhắc đến nhiều thập kỷ qua. Neural Networks được
lấy cảm hứng từ sự hiểu biết về sinh học của bộ não loài người – sự liên kết giữa các
nơ-ron. Tuy nhiên, không giống như một bộ não sinh học nơi mà bất kỳ nơ-ron nào
cũng có thể liên kết với các nơ-ron khác trong một khoảng cách vật lý nhất định, các
mạng thần kinh nhân tạo này có các lớp rời rạc, các kết nối, và các hướng truyền dữ
liệu.

Mỗi nơ-ron đảm nhiệm một chức năng – làm thế nào để biết chính xác liệu rằng
nó có liên quan đến nhiệm vụ đang được thực hiện. Vì vậy, suy nghĩ về điểm dừng là
một dấu hiệu. Các thuộc tính của một hình ảnh dấu hiệu “dừng” được cắt nhỏ và được
“kiểm tra” bởi các nơ-ron – dạng hình trụ, màu đỏ của các động cơ cháy, các chữ cái
đặc trưng, kích thước biển báo giao thông, và sự chuyển động hoặc sự thiếu hụt của
nó. Nhiệm vụ của mạng thần kinh là để kết luận liệu đây có phải là dấu hiệu dừng hay
không. Nó đi kèm với một “vector xác suất”. Trong ví dụ của chúng ta, hệ thống có thể
xác định chắc chắn đến 86% một dấu hiệu dừng, 7% rằng đó là một dấu hiệu giới hạn
tốc độ, và 5% còn lại là một con diều bị mắc kẹt trong cây,( hoặc cái gì đó tương tự)
vv … và kiến trúc mạng sau đó sẽ thông báo đến mạng nơron cho dù đó là đúng hay
sai.

9
Chương 1. Cơ sở lí thuyết

Ngày nay, khả năng nhận dạng hình ảnh của máy móc được luyện tập thông qua
deep learning trong một số tình huống tốt hơn so với con người. AlphaGo của Google
đã được huấn luyện chơi cờ vay – nó điều chỉnh mạng lưới thần kinh của mình bằng
cách tự mình chống lại chính mình.

1.2.3. Training set


Tập huấn luyện (training set) là tập dữ liệu được sử dụng để huấn luyện mô hình.
Các thuật toán học máy sẽ học các mô hình từ tập huấn luyện này. Việc học sẽ khác
nhau tùy thuộc vào thuật toán và mô hình sử dụng. Ví dụ, khi sử dụng môt hình Hồi
quy tuyến tính (Linear Regression), các điểm trong tập huấn luyện được sử dụng để
tìm ra hàm số hay đường phù hợp nhất mô tả quan hệ giữa đầu vào và đầu ra của tập
dữ liệu huấn luyện bằng cách sử dụng một số phương pháp tối ưu hóa như công thức
nghiệm ở bài trước hoặc các thuật toán tối ưu gần đúng như gradient descent hay
stochastic gradient descent. Trong thuật toán K-Nearest Neighbors (K-Hàng xóm gần
nhất), các điểm trong tập huấn luyện là những điểm có thể là hàng xóm của nhau (gần
nhau) được học theo các phương pháp tham lam. Trong thực tế, tập dữ liệu huấn luyện
thường bao gồm các cặp vectơ đầu vào và vectơ đầu ra tương ứng, trong đó vector đầu
ra thường được gọi là nhãn (label hoặc target). Các thuật toán nói chung sẽ tìm cách
tối ưu sai số dự đoán trên tập huấn luyện này đến mức đủ tốt. Trong trường hợp
overfitting sai số dự đoán của mô hình trên tập huấn luyện có thể rất thấp, thậm chí =
0%.
1.2.4. Validation
Việc sử dụng testing set giúp chúng ta đánh giá được hiệu quả của mô hình xây
dựng cuối cùng. Tuy nhiên, nếu kết quả đánh giá tệ thì sao? Rõ ràng chúng ta lại phải
cố gắng điều chỉnh để đưa ra các mô hình tốt hơn. Tức là testing set đang có vẻ ảnh
hưởng đôi chút đến việc huấn luyện mô hình. Điều này theo một mặt nào đó là có vẻ
không công bằng. Chúng ta đang cố gắng dự đoán những điều chưa biết, chuẩn bị cho
các tính huống xấu nhất cơ mà!!! Chứ không phải là đưa lại tình huống đã xảy ra đã
biết để hiệu chỉnh lại mô hình. Chính vì lí do đó, một tập dữ liệu khác sẽ được sử dụng
để đóng vai trò đưa ra các phản hồi nhằm hiệu chỉnh các mô hinh sau quá trình huấn
luyện. Tập dữ liệu này gọi là tập dữ liệu kiểm chứng (validation set). Thực ra, đây mới
nên dịch là tập kiểm thử còn testing set phải là tập kiểm định. Anh chạy thử xe, thử
thuốc các kiểu rồi thì mới được đưa ra cấp chứng nhận kiểm định (bài test cuối cùng)
trước khi đưa ra sử dụng. Tuy nhiên, các thuật ngữ đã được đưa khá nhiều trong các tài
liệu khác tiếng Việt, do đó, ở đây chúng ta không tìm cách sửa lại nó nữa. Chúng ta chỉ

10
Chương 1. Cơ sở lí thuyết

cần nắm được rằng, tập validation là tập cho phép lựa chọn mô hình huấn luyện cho
phù hợp, còn testing set là tập đánh giá lại mô hình lần cuối cùng. Điều này, cũng
giống như các bạn học trên lớp, có các bài kiểm tra miệng, bài tập, kiểm tra giữa kỳ để
đánh giá mức độ học của bạn, từ đó biết mình yếu phần nào, cần bổ sung phần nào để
chuẩn bị cho bài thi cuối cùng vậy. Và cũng do đó, nên các đoạn phía sau này, chúng
ta sẽ tạm dùng từ tiếng anh (Validation set và testing set) để giữ được nghĩa vốn có
này.
Tập dữ liệu kiểm chứng (validation set) cung cấp các đánh giá công bằng về sự
phù hợp của mô hình trên tập dữ liệu huấn luyện trong quá trình huấn luyện.
Validation set có chức năng như một sự kết hợp: nó vừa là dữ liệu huấn luyện được sử
dụng để thử nghiệm, nhưng không phải là một phần của quá trình huấn luyện cấp thấp
cũng không phải là một phần của thử nghiệm cuối cùng. Nó là một bước chung gian
cho phép lựa chọn mô hình phù hợp.
Validation set có tác dụng giúp tìm kiếm mô hình tốt nhất trong các ứng viên
được huấn luyện từ training set. Nó được sử dụng để so sánh hiệu suất của các mô
hình ứng viên này và quyết định cái nào sẽ là mô hình tốt nhất cuối cùng bằng cách so
sánh các độ đo hiệu suất như độ chính xác, độ nhạy cảm, độ hồi tưởng, RMSE, MSE,
… đạt được trên nó. Nó giúp cho quá trình điều chỉnh các siêu tham số của mô hình
chẳng hạn số lượng đơn vị ẩn (lớp và chiều rộng lớp) trong mạng nơron để đạt được
mô hình phù hợp.
Validation set cũng giúp phát hiện và dừng sớm (early stopping) quá trình huấn
luyện mô hình khi lỗi trên validation set tăng lên đột biến, vì đây là dấu hiệu của mô
hình overfitting. Kỹ thuật early stopping là một kỹ thuật được sử dụng khá phổ biến để
tránh việc overfitting. Mặc dù nhìn có vẻ khá đơn giản, nhưng việc thực hiện nó trên
thực tế lại khá phức tạp. Sỡ dĩ như vậy là do lỗi dự đoán trên validation set có thể dao
động trong quá trình huấn luyện, tạo ra nhiều cực tiểu địa phương. Sự phức tạp này đã
dẫn đến việc có rất nhiều các quy tắc đặc biệt được xây dựng và đề xuất để xác định
chính xác thời điểm overfitting thực sự bắt đầu dựa trên lỗi dự đoán trên tập validation
set.

11
Chương 1. Cơ sở lí thuyết

Hình 1.1: Validation


Như trên hình vẽ trên, ta thấy chúng ta có thể dừng việc huấn luyện tại vị trí có
sự thay đổi rõ rệt sai số trong tập validation set. Đây là thời điểm xảy ra overfitting.
1.2.5. Testing set
Mục tiêu của machine learning là tạo ra những mô hình có khả năng tổng quát
hóa để dự đoán tốt trên cả dữ liệu chưa thấy bao giờ (nằm ngoài tập huấn luyện), do
đó, để biết một thuật toán hay mô hình có tốt hay không thì sau khi được huấn luyện,
mô hình cần được đánh giá hiệu quả thông qua bộ dữ liệu kiểm thử (testing set). Bộ dữ
liệu này được sử dụng để tính độ chính xác hoặc sai số của mô hình dự đoán đã được
huấn luyện. Chúng ta biết nhãn thực của mọi điểm trong tập hợp dữ liệu kiểm thử này,
nhưng chúng ta sẽ tạm thời giả vờ như không biết và đưa các giá trị đầu vào của tập
vào mô hình dự đoán để nhận kết quả dự đoán đầu ra. Sau đó chúng ta có thể nhìn vào
các nhãn thực và so sánh nó với kết quả dự đoán của các đầu vào tương ứng này và
xem liệu mô hình có dự đoán đúng hay không. Việc tính tổng trung bình của toàn bộ
các lỗi này chúng ta có thể tính toán được lỗi dự đoán trên tập kiểm thử.
Các lỗi dự đoán này được đánh giá thông qua rất nhiều chỉ số khác nhau như độ
chính xác (precision), độ hồi tưởng (recall), F1-Score, RMSE, MAE,…Các chỉ số này
sẽ được trình bày chi tiết hơn trong bài tiếp theo. Một lưu ý là các chỉ số đo mức độ
hiệu quả của mô hình này trên tập kiểm thử có thể khác với các lossfunction hay
objective function sử dụng để tối ưu hóa mô hình trên tập huấn luyện. Nghĩa là quá
trình kiểm thử và quá trình huấn luyện là hoàn toàn độc lập với nhau, cả về bộ dữ liệu
lẫn cách thức so sánh chỉ số.
Tập dữ liệu kiểm thử tốt là một tập dữ liệu độc lập với tập dữ liệu huấn luyện (để
ngoài và không được tham gia vào quá trình huấn luyện), nhưng tuân theo cùng một

12
Chương 1. Cơ sở lí thuyết

phân phối xác suất như tập dữ liệu huấn luyện. Điều này giúp cho việc đánh giá không
bị thiên vị. Nếu một mô hình phù hợp với trainining set nhưng lại sai khác trên testing
set, thì việc rất có khả năng nó bị overfitting (xem hình bên dưới). Ngược lại, sai số
không quá nhiều thì thường chúng là một mô hình phù hợp.

Hình 1.1: Testing set(website)


Với mô hình màu xanh lá, lỗi dự đoán trên cả training set và testing set là không
chênh lệch nhau quá nhiều, ngược lại với mô hình màu cam, lỗi dự đoán trên testing
set lớn hơn rất nhiều so với trên training set. Do đó mô hình màu cam nhiều khả năng
bị overfitting hơn mô hình màu xanh. sỡ dĩ có điều này là do các mô hình overfitting
có các tham số có variance khá cao và vì vậy chỉ những sai khác nhỏ trên dữ liệu đầu
vào cũng có thể tạo ra những sai khác lớn trên giá trị đầu ra, điều đó dẫn đến sai số
trên tập testing sẽ cao hơn đột biến.

13
Chương 1. Cơ sở lí thuyết

CHƯƠNG 2.

14
Chương 2. Mô hình bài toán

CHƯƠNG 3. MÔ HÌNH BÀI TOÁN


3.1. Quy trình thực hiện
Bước 1: Tìm hiểu ngôn ngữ lập trình python và các khái niệm và thuật ngữ trong
machine learning, deep learning, training set, testing set, validation.

Bước 2: Tìm kiếm bài báo liên quan đến nhận diện biểu cảm bằng nhiều phương
pháp khác nhau. Để tham khảo và kế thừa sự phát triển về nhận diện biểu cảm khuôn
mặt và công nghệ liên quan.

Bước 3: Nắm kiến thức Python cơ bản, tìm hiểu các thư viện keras, opencv,
tensorflow và các khái niệm, một số các thuật toán liên quan đến machine learning,
deep learning. Thời gian thực hiện chiếm khoảng 50% thời gian nghiên cứu. Cần tìm
hiểu kĩ lưỡng về cách thực thi của các hàm, các tham số được truyền vào và các giá trị
đầu ra.

Bước 4: Tìm hiểu về thuật toán convolutional neural network(CNN), supper


vector machine(SVN).

Bước 5: Ứng dụng sử dụng bộ dữ liệu FER2013 trên Kaggle để huấn luyện và
kiểm tra độ chính xác cho hệ thống.

Bước 6: Chạy thử chương trình và cải thiện độ chính cho bộ dữ liệu hoặc mã
nguồn huấn luyện. Cung cấp thêm dữ liệu cho hệ thống hoặc thêm các bộ lọc và mạng
neural để tăng độ chính xác.

15
Chương 2. Mô hình bài toán

Hình 3.1: Quy trình thực hiện(website)


3.2. Mô hình bài toán
3.2.1. Train model
Bước 1: Thêm các thư viện cần dung như keras, opencv, tensorflow, numpy để
thực hiện các phép toán phức tạp và xử lí hình ảnh.

Bước 2: Truyền tập dữ liệu FER2013 được chia làm 2 phần train và test trên
Kaggle được chuẩn bị bởi Pierre-Luc Carrier và Aaron Courville vào chương trình để
làm cơ sở cho việc huấn luyện và thử.

Bước 3:

- Tạo biến emotion_model danh sách tuần tự rỗng.

- Thêm các bộ lọc dữ liệu vào emotion_model.

- Thêm các tổng hợp dữ liệu tối đa cho không gian 2D vào emotion_model.

- Bỏ một số bộ lọc khỏi emotion_model.

- Chuyển emotion_model trên thành một danh sách tuyến tính.

Hình 3.1: Khởi tạo các lớp player


Bước 4: Tạo mạng neural network và chạy chương trình huấn luyện bằng train,
emotion_model, test với số lần chạy 50, bước chạy 28709/64 và bước chạy của bộ
kiểm tra 7178/64. Trong đó bao gồm quá trình huấn luyện bằng bộ train và thử với bộ
test đồng thời biến một phần bộ train thành bộ test lặp cho đến đủ 50 lần.

16
Chương 2. Mô hình bài toán

Bước 5: Lưu model thành tập tin “model.h5”.

Hình 3.2: Quy trình train model


3.2.2. Thuật toán được sử dụng
Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một trong
những mô hình Deep Learning tiên tiến. Nó giúp cho chúng ta xây dựng được những
hệ thống thông minh với độ chính xác cao như hiện nay. So với những mạng nơ ron
thông thường, mạng CNN nhận đầu vào là một mảng hai chiều và hoạt động trực tiếp
trên hình ảnh thay vì tập trung trích xuất tính năng mà bạn thường thấy ở các mạng nơ
ron khác.

Convolutional 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 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.

CNN bao gồm các lớp cơ bản là:

17
Chương 2. Mô hình bài toán

- Convolutional layer 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. Những yếu tố là một phần quan trọng để hình thành
bài toán:

+ 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 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 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 được sử dụng khi đầu vào quá lớn, những lớp pooling layer sẽ
được xếp vào giữa 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 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.

18
Chương 2. Mô hình bài toán

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.

Hình 3.1: Cấu trúc mạng CNN(website)


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à:

19
Chương 2. Mô hình bài toán

- 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 đã 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.

Hình 3.2: Xử lí của mạng CNN(website)


3.2.3. Test model

20
Chương 2. Mô hình bài toán

Bước 1: Thêm các thư viện cần dung như keras, opencv, tensorflow, numpy để
thực hiện các phép toán phức tạp và xử lí hình ảnh.

Bước 2:

- Tạo biến emotion_model danh sách tuần tự rỗng.

- Thêm các bộ lọc vào dữ liệu vào emotion_model.

- Thêm các tổng hợp dữ liệu tối đa cho không gian 2D vào emotion_model.

- Bỏ một số bộ lọc khỏi emotion_model.

- Chuyển emotion_model trên thành một danh sách tuyến tính.

- Thêm các nhánh neural network cho emotion_model.

- Truyền model.h5 vào emotion_model.

Bước 3: Tạo danh sách emotion_dict kiểu dict để lưu tên biểu cảm. Bật cam bằng
opencv đọc hình ảnh vào biến thông qua webcam.

Bước 4: Nhân diện khuôn mặt trong ảnh được gán bào biến.

Bước 5:

- Chuyển ảnh mỗi lần chụp thành màu xám.

- Chỉnh sửa ảnh cho phù hợp.

- Bỏ ảnh vừa chỉnh sửa vào danh sách emotion_model để phân tích và đưa ra tỉ
lệ của ảnh này cho mỗi biểu cảm.

- Sau đó lấy ra key có giá trị lớn nhất và truyền cv2.putText() để hiện cảm xúc
trên khung nhận diện khuôn mặt.

Bước 6: Show ảnh đã được xử lí.

21
Chương 2. Mô hình bài toán

Hình 3.1: Quy trình thử nghiệm nhận diện biểu cảm
Trong quá trình thử nghiệm cần xem xét khả năng nhận diện biểu cảm của
chương trình được sử dụng “model.h5”. Phân tích độ accuracy(độ chính xác) và
loss(độ sai) của “model.h5” dựa trên đó để cải thiện khả năng nhận diện biểu cảm
chính xác hơn.

22
Chương 3. Thực nghiệm và đánh giá

CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNH GIÁ


4.1. Chuẩn bị
4.1.1. Cấu hình máy
Window 10 pro 64 bit

BIOS: FA506II.316

Processor: AMD Ryzen 5 4600H with Radeon Graphics

Memory: 8192 MB RAM

GPU 1: AMD Radeon(TM) Graphics

GPU 2: NVIDIA GeForce GTX 1650 Ti

Hình 4.1: Máy được sử dụng(website)


4.1.2. Phần mềm
Visual Studio code Là một trình biên tập lập trình code miễn phí dành cho
Windows, Linux và macOS, Visual Studio Code được phát triển bởi Microsoft. Nó
được xem là một sự kết hợp hoàn hảo giữa IDE và Code Editor. Visual Studio Code
hỗ trợ chức năng debug, đi kèm với Git, có syntax highlighting, tự hoàn thành mã
thông minh, snippets, và cải tiến mã nguồn. Nhờ tính năng tùy chỉnh, Visual Studio
Code cũng cho phép người dùng thay đổi theme, phím tắt, và các tùy chọn khác.

NVIDIA Nsight Compute 2022.1.0 là một trình biên dịch hạt nhân tương tác cho
các ứng dụng CUDA. Nó cung cấp các số liệu hiệu suất chi tiết và gỡ lỗi API thông
qua giao diện người dùng và công cụ dòng lệnh. Ngoài ra, tính năng cơ sở của nó cho
phép người dùng so sánh kết quả trong công cụ. Nsight Compute cung cấp giao diện

23
Chương 3. Thực nghiệm và đánh giá

người dùng có thể tùy chỉnh và theo hướng dữ liệu cũng như bộ sưu tập chỉ số và có
thể được mở rộng với các tập lệnh phân tích cho kết quả xử lý

NVIDIA Nsight Systems 2021.5.2 là một công cụ phân tích hiệu suất trên toàn
hệ thống được thiết kế để trực quan hóa các thuật toán của ứng dụng, giúp bạn xác
định các cơ hội lớn nhất để tối ưu hóa và điều chỉnh để mở rộng quy mô hiệu quả trên
mọi số lượng hoặc kích thước CPU và GPU; từ máy chủ lớn đến SoC nhỏ nhất.

NVIDIA Nsight Visual Studio Edition 2022.1.0.21343 là một môi trường phát
triển ứng dụng cho các nền tảng không đồng nhất, đưa tính toán GPU vào Microsoft
Visual Studio. NVIDIA Nsight ™ VSE cho phép bạn xây dựng và gỡ lỗi các nhân
GPU tích hợp và mã CPU gốc cũng như kiểm tra trạng thái của GPU và bộ nhớ.

NVIDIA PhysX System Software 9.21.0713 là trình điều khiển tích hợp các mã
hiệu build thời gian chạy mới nhất của giao diện lập trình ứng dụng PhysX của Nvidia.
Hỗ trợ người dùng tạo các bộ đồ họa chuẩn, tăng tốc các bộ GPU trong môi trường
3D.

NVIDIA Tools Extension SDK(NVTX) – 64 bit là Giao diện lập trình ứng dụng
(API) dựa trên C để chú thích các sự kiện, phạm vi mã và tài nguyên trong ứng dụng
của bạn. Các ứng dụng tích hợp NVTX có thể sử dụng NVIDIA Nsight, Tegra System
Profiler và Visual Profiler để nắm bắt và trực quan hóa các sự kiện và phạm vi này.

Python 3.9.10 (64 bit)

Python Laucher

Hình 4.1: Phần mềm sử dụng


4.1.3. Ngôn ngữ lập trình
Python đã được Guido van Rossum thai nghén vào những năm 1980 tại Trung
tâm Toán học – Tin học(Centrum Wiskunde & Informatica, CWI) ở Hà Lan như là
một ngôn ngữ kế tục ngôn ngữ ABC – một ngôn ngữ được lấy cảm hứng từ SETL, có

24
Chương 3. Thực nghiệm và đánh giá

khả năng xử lí ngoại lệ và giao tiếp với hệ điều hành Amoeba. Nó bất đầu được triển
khai vào tháng Mười Hai năm 1989. Van Rossum đã tự mình gánh vác trách nhiệm
cho dự án, với vai trò là nhà phát triển chính, cho đến ngày 12 tháng Bảy năm 2018,
khi ông thông báo rằng ông sẽ rời bỏ trách nhiệm của ông và cả danh hiệu "Nhà độc
tài nhân từ cho cuộc sống" của Python, một danh hiệu mà cộng đồng Python đã trao
tặng cho ông vì sự tận tuỵ lâu dài của ông với vai trò là người ra quyết định chính cho
dự án. Vào tháng Một năm 2019, các nhà phát triển phần lõi Python đã bầu ra một
"Hội đồng Chèo lài" gồm năm thành viên để dẫn dắt dự án. Python 2.0 được ra mắt
vào ngày 16 tháng Mười năm 2000, với nhiều tính năng mới mẻ, bao gồm một bộ don
rác phát hiện theo chu kỳ và khả năng hỗ trợ Unicode. Python 3.0 được ra mắt vào
ngày mùng 3 tháng Mười Hai năm 2008. Đây là một phiên bản lớn của Python không
tương thích ngược hoàn toàn. Nhiều tính năng lớn của nó đã được chuyển mã ngược
(backport) về loạt phiên bản Python 2.6.x và 2.7.x. Các bản phát hành của Python 3 có
đi kèm với công cụ 2to3, có tác dụng tự động hoá việc dịch mã Python 2 sang Python
3. Python 3.9.2 và 3.8.8 được xúc tiến vì tất cả các phiên bản trước của Python (bao
gồm cả 2.7) gặp một số vấn đề bảo mật, có thể dẫn đến thực thị mã từ xa và "đầu độc"
bộ nhớ đệm.

Hình 4.1: Python(website)


Python có cú pháp rất đơn giản, rõ ràng. Nó dễ đọc và viết hơn rất nhiều khi so
sánh với những ngôn ngữ lập trình khác như C++, Java, C#. Python làm cho việc lập
trình trở nên thú vị, cho phép bạn tập trung vào những giải pháp chứ không phải cú
pháp.

25
Chương 3. Thực nghiệm và đánh giá

Tự do sử dụng và phân phối Python, thậm chí là dùng nó cho mục đích thương
mại. Vì là mã nguồn mở, bạn không những có thể sử dụng các phần mềm, chương
trình được viết trong Python mà còn có thể thay đổi mã nguồn của nó. Python có một
cộng đồng rộng lớn, không ngừng cải thiện nó mỗi lần cập nhật.

Các chương trình Python có thể di chuyển từ nền tảng này sang nền tảng khác và
chạy nó mà không có bất kỳ thay đổi nào. Nó chạy liền mạch trên hầu hết tất cả các
nền tảng như Windows, macOS, Linux.

Giả sử một ứng dụng đòi hỏi sự phức tạp rất lớn, bạn có thể dễ dàng kết hợp các
phần code bằng C, C++ và những ngôn ngữ khác (có thể gọi được từ C) vào code
Python. Điều này sẽ cung cấp cho ứng dụng của bạn những tính năng tốt hơn cũng như
khả năng scripting mà những ngôn ngữ lập trình khác khó có thể làm được.

Không giống như C/C++, với Python, bạn không phải lo lắng những nhiệm vụ
khó khăn như quản lý bộ nhớ, dọn dẹp những dữ liệu vô nghĩa,... Khi chạy code
Python, nó sẽ tự động chuyển đổi code sang ngôn ngữ máy tính có thể hiểu. Bạn
không cần lo lắng về bất kỳ hoạt động ở cấp thấp nào.

Python có một số lượng lớn thư viện tiêu chuẩn giúp cho công việc lập trình của
bạn trở nên dễ thở hơn rất nhiều, đơn giản vì không phải tự viết tất cả code. Ví dụ: Bạn
cần kết nối cơ sở dữ liệu MySQL trên Web server? Bạn có thể nhập thư viện
MySQLdb và sử dụng nó. Những thư viện này được kiểm tra kỹ lưỡng và được sử
dụng bởi hàng trăm người. Vì vậy, bạn có thể chắc chắn rằng nó sẽ không làm hỏng
code hay ứng dụng của mình.

Mọi thứ trong Python đều là hướng đối tượng. Lập trình hướng đối tượng (OOP)
giúp giải quyết những vấn đề phức tạp một cách trực quan. Với OOP, bạn có thể phân
chia những vấn đề phức tạp thành những tập nhỏ hơn bằng cách tạo ra các đối tượng.

Làm việc trong ngành ML và AI yêu cầu xử lý một loạt dữ liệu một cách thuận
tiện và hiệu quả nhất. Với những điều kiện trên của Python đã giúp nhiều nhà khoa
học dữ liệu nhanh chóng tiếp nhận một ngôn ngữ lập trình và bắt đầu sử dụng nó để
phát triển AI mà không tốn quá nhiều công sức vào việc học. Ngôn ngữ lập trình
Python giống với ngôn ngữ tiếng Anh hàng ngày và điều đó giúp quá trình học dễ

26
Chương 3. Thực nghiệm và đánh giá

dàng hơn. Cú pháp đơn giản của nó cho phép bạn thoải mái làm việc với các hệ thống
phức tạp, đảm bảo mối quan hệ rõ ràng giữa các phần tử hệ thống.

4.1.4. Các thư viện được sử dụng


Numpy là một thư viện lõi phục vụ cho khoa học máy tính của Python, hỗ trợ
cho việc tính toán các mảng nhiều chiều, có kích thước lớn với các hàm đã được tối ưu
áp dụng lên các mảng nhiều chiều đó. Numpy đặc biệt hữu ích khi thực hiện các hàm
liên quan tới Đại Số Tuyến Tính.

Hình 4.1: Numpy(website)


Keras là một open source cho Neural Network được viết bởi ngôn ngữ Python.
Nó là một library được phát triển vào năm 205 bởi Francois Chollet, là một kỹ sư
nghiên cứu Deep Learning. Keras có thể sử dụng chung với các thư viện nổi tiếng như
Tensorflow, CNTK, Theano. Một số ưu điểm của Keras như:
- Dễ sử dụng, dùng đơn giản hơn Tensor, xây dựng model nhanh.
- Run được trên cả CPU và GPU.
- Hỗ trợ xây dựng CNN , RNN hoặc cả hai. Với những người mới tiếp cận đến
Deep như mình thì mình chọn sử dụng Keras để build model vì nó đơn giản,dễ nắm
bắt hơn các thư viện khác. Dưới đây mình xin giới thiệu một chút về API này.

Hình 4.2: Keras(website)


Tensorflow là thư viện mã nguồn mở cho machine learning nổi tiếng nhất thế
giới, được phát triển bởi các nhà nghiên cứu từ Google. Được dùng để tính toán
machine learning với quy mô lớn. TensorFlow kết hợp một loạt các mô hình và thuật
toán machine learning cùng deep learning, từ đó làm cho chúng trở nên hữu ích bằng
những phép toán. TensorFlow sử dụng Python để cung cấp một API front-end thuận

27
Chương 3. Thực nghiệm và đánh giá

tiện cho việc xây dựng các ứng dụng với framework, đồng thời thực thi các ứng dụng
đó bằng ngôn ngữ C++ để đạt hiệu suất cao hơn.
TensorFlow cho phép các nhà phát triển tạo một biểu đồ để thực hiện các tính
toán. Mỗi nút trong biểu đồ đại diện cho một phép toán và mỗi kết nối đại diện cho dữ
liệu. Do đó, thay vì xử lý các chi tiết nhỏ như tìm cách thích hợp để chuyển đầu ra của
một chức năng với đầu vào của chức năng khác, nhà phát triển có thể tập trung vào
logic tổng thể của ứng dụng.

Hình 4.3: Tensorflow(website)


OpenCV là thư viện nguồn mở hàng đầu cho Computer Vision và Machine
Learning, và hiện có thêm tính năng tăng tốc GPU cho các hoạt động theo real-time.
OpenCV được phát hành theo giấy phép BSD (*), do đó nó miễn phí cho cả học
tập và sử dụng với mục đích thương mại. Nó có trên các giao diện C++, C, Python và
Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để
hỗ trợ hiệu quả về tính toán và chuyên dùng cho các ứng dụng real-time (thời gian
thực). Nếu được viết trên C/C++ tối ưu, thư viện này có thể tận dụng được bộ xử lý đa
lõi (multi-core processing).
OpenCV có một cộng đồng người dùng khá hùng hậu hoạt động trên khắp thế
giới bởi nhu cầu cần đến nó ngày càng tăng theo xu hướng chạy đua về sử dụng
computer vision của các công ty công nghệ. OpenCV hiện được ứng dụng rộng rãi
toàn cầu, với cộng đồng hơn 47.000 người, với nhiều mục đích và tính năng khác nhau
từ interactive art, đến khai thác mỏ, khai thác web map hoặc qua robotic cao cấp

28
Chương 3. Thực nghiệm và đánh giá

Hình 4.4: OpenCV(website)


Pillow là một fork từ thư viện PIL của Python được sử dụng để xử lý hình ảnh.
So với PIL thì Pillow được cập nhật thường xuyên và đánh giá cao hơn.

Hình 4.5: Pillow(website)


Matplotlib là một thư viện vẽ đồ thị rất mạnh mẽ hữu ích cho những người làm
việc với Python và NumPy. Module được sử dụng nhiều nhất của Matplotib là Pyplot
cung cấp giao diện như MATLAB nhưng thay vào đó, nó sử dụng Python và nó là
nguồn mở.
Một Matplotlib figure có thể được phân loại thành nhiều phần như dưới đây:

- Figure: Như một cái cửa sổ chứa tất cả những gì bạn sẽ vẽ trên đó.
- Axes: Thành phần chính của một figure là các axes (những khung nhỏ hơn để
vẽ hình lên đó). Một figure có thể chứa một hoặc nhiều axes. Nói cách khác, figure chỉ
là khung chứa, chính các axes mới thật sự là nơi các hình vẽ được vẽ lên.
- Axis: Chúng là dòng số giống như các đối tượng và đảm nhiệm việc tạo các
giới hạn biểu đồ.

29
Chương 3. Thực nghiệm và đánh giá

- Artist: Mọi thứ mà bạn có thể nhìn thấy trên figure là một artist như Text
objects, Line2D objects, collection objects. Hầu hết các Artists được gắn với Axes.

Hình 4.6: Matplotlib(website)


Tkinter là một gói trong Python có chứa module Tk hỗ trợ cho việc lập trình
GUI. Tk ban đầu được viết cho ngôn ngữ Tcl. Sau đó Tkinter được viết ra để sử dụng
Tk bằng trình thông dịch Tcl trên nền Python. Ngoài Tkinter ra còn có một số công cụ
khác giúp tạo một ứng dụng GUI viết bằng Python như wxPython, PyQt, và PyGTK.

Hình 4.7: Tkinter(website)


4.1.5. Mô tả bộ dữ liệu
Dự án sử dụng Tập dữ liệu FER2013 từ trang web Kaggle có chứa 35.887 (48
pixel * 48 pixel) hình ảnh xám mô tả các biểu cảm trên khuôn mặt. Tất cả các hình ảnh
đều có các khuôn mặt gần như chính giữa và chiếm một lượng không gian tương tự.
Tập dữ liệu có bảy lớp khác nhau và mỗi hình ảnh thuộc một lớp cụ thể của biểu cảm
trên khuôn mặt. Ví dụ, Hình 1 cho thấy bảy biểu cảm khác nhau trên khuôn mặt.

30
Chương 3. Thực nghiệm và đánh giá

Hình 4.1: Mô tả các biểu cảm có trong tập dữ liệu FER2013s


Các ảnh từ (a) đến (g) mô tả số lớp của hình ảnh và do đó biểu cảm trên khuôn
mặt lần lượt là tức giận, chán ghét, sợ hãi, vui vẻ, bình thường, buồn bã và ngạc nhiên.
Kích thước của tập dữliệu là (35887, 48, 48, 1). Mô tả phân loại của tập dữ liệu (số
lượng hình ảnh và biểu cảm khuôn mặt tương ứng. Tập dữ liệu đã được chia thành 2
tập riêng biệt, đó là tập huấn luyện (để huấn luyện mô hình) gồm 28709 tấm ảnh và tập
thử nghiệm (để kiểm tra mô hình) gồm 7178 tấm ảnh. Các hình ảnh của biểu cảm
khuôn mặt có số lượng được chia như sau trong cơ sở dữ liệu:

Bảng 4.1: Phân chia tập dữ liệu


FOLDER TRAIN FOLDER TEST

Angry(tức giận) 3995 958

Disgust(chán ghét) 436 111

Fear(sợ hãi) 4097 1024

Happy(vui vẻ) 7215 1774

Neutral(bình thường) 4965 1233

Sad(buồn bã) 4830 1247

Surprise(ngạc nhiên) 3171 831

Nhóm sử dụng bộ dữ liệu này cho mô hình thử nghiệm vì bộ dữ liệu có số mẫu
khá lớn, phù hợp với việc huấn luyện với mạng học sâu, vốn đòi hỏi nhiều mẫu hơn
các phương pháp học máy thông thường. Ngoài ra, bộ dữ liệu được cấu trúc dễ dàng
xử lý bởi thư viện Keras/TensorFlow và có nhiều kết quả đối chứng khi thực hiện so
sánh mô hình của chúng tôi với các kết quả của những nhóm nghiên cứu khác.

31
Chương 3. Thực nghiệm và đánh giá

4.2. Tiến hành


4.2.1. Train model
Chèn các lớp thư viên numpy, cv2 vào. Từ cá thư viện keras.model dùng
Sequential. Từ keras.layers chèn Dense, Dropout, Flatten, Conv2D, MaxPooling2d.
Xử lí hình ảnh với tensorflow.keras.optimizers chèn Adam. Cuối cùng là
keras.preprocessing.image chèn ImageDataGenerator.
Code:

import numpy as np

import cv2

from keras.models import Sequential

from keras.layers import Dense, Dropout, Flatten

from keras.layers import Conv2D

from tensorflow.keras.optimizers import Adam

from keras.layers import MaxPooling2D

from keras.preprocessing.image import ImageDataGenerator

Thêm bộ dữ liệu hình ảnh từ tập FER2013 và đưa qua hệ thống xử lí để chia tỉ lệ,
tăng cường bộ dữ liệu để thực hiện quá trình huấn luyện.

Code:
train_dir = 'train'

val_dir = 'test'

train_datagen = ImageDataGenerator(rescale=1./255)

val_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(

train_dir,

target_size=(48,48),

batch_size=64,

32
Chương 3. Thực nghiệm và đánh giá

color_mode="grayscale",

class_mode='categorical'

validation_generator = val_datagen.flow_from_directory(

val_dir,

target_size=(48,48),

batch_size=64,

color_mode="grayscale",

class_mode='categorical'

Tạo danh sách tuần tự Sequentail và thêm các bộ lọc dữ liệu 3x3 với số lượng 32,
64, 128, 256, 512. Sau đó ta đưa các bộ lọc về thành một danh sách một chiều. Kế đến
là thêm các mạng thần kinh hỗ trợ cho việc huấn luyện. Ngoài ra trong đây còn chưa
các MaxPooling2D để giảm kích cỡ hình xuống nhưng vẫn giữ đặc trưng, Dropout để
chặn một số bộ lọc và một mạng thần kinh để tranh tình trạng học tủ bộ dữ liệu. Sau
khi đã chuẩn bị xong ta chuyên đổi lại mã dữ liệu.

Code:
emotion_model = Sequential()

emotion_model.add(Conv2D(32, kernel_size=(3, 3), activation='relu',


input_shape=(48,48,1)))

emotion_model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Dropout(0.25))

emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

33
Chương 3. Thực nghiệm và đánh giá

emotion_model.add(Conv2D(256, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Conv2D(512, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Dropout(0.25))

emotion_model.add(Flatten())

emotion_model.add(Dense(1024, activation='relu'))

emotion_model.add(Dropout(0.5))

emotion_model.add(Dense(1024, activation='relu'))

emotion_model.add(Dropout(0.5))

emotion_model.add(Dense(7, activation='softmax'))

emotion_model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.0001
, decay=1e-6),metrics=['accuracy'])

Cuối cùng ta huấn luyện bằng bộ dữ liệu đã được xử lí trước đó với chu kì là 50
số bước chạy của bộ dữ liệu train là 28709/64 và số bước chạy của bộ dữ liệu test là
7178/64. Sau đó lưu lại những model thành file “model.h5”.

Code:
emotion_model_info = emotion_model.fit(

train_generator,

steps_per_epoch=28709 // 64,

epochs=50,

validation_data=validation_generator,

validation_steps=7178 // 64

emotion_model.save_weights('model.h5')

34
Chương 3. Thực nghiệm và đánh giá

4.2.2. Test model


Chèn các lớp thư viên numpy, cv2 vào. Từ cá thư viện keras.model dùng
Sequential. Từ keras.layers chèn Dense, Dropout, Flatten, Conv2D, MaxPooling2d.
Xử lí hình ảnh với tensorflow.keras.optimizers chèn Adam. Cuối cùng là
keras.preprocessing.image chèn ImageDataGenerator. Chèn thêm tkinter, polliw, os và
matplotlib.pyplot.

Code:
import tkinter as tk

from tkinter import *

import cv2

from PIL import Image, ImageTk

import os

import numpy as np

import cv2

from keras.models import Sequential

from keras.layers import Dense, Dropout, Flatten

from keras.layers import Conv2D

from tensorflow.keras.optimizers import Adam

from keras.layers import MaxPooling2D

from keras.preprocessing.image import ImageDataGenerator

import matplotlib.pyplot as plt

Tạo danh sách tuần tự Sequentail và thêm các bộ lọc dữ liệu 3x3 với số lượng 32,
64, 128, 256, 512. Sau đó ta đưa các bộ lọc về thành một danh sách một chiều. Kế đến
là thêm các mạng thần kinh hỗ trợ cho việc huấn luyện. Ngoài ra trong đây còn chưa
các MaxPooling2D để giảm kích cỡ hình xuống nhưng vẫn giữ đặc trưng, Dropout để
chặn một số bộ lọc và một mạng thần kinh để tranh tình trạng học tủ bộ dữ liệu.
Chuyên file “model.h5” đã train vào.

35
Chương 3. Thực nghiệm và đánh giá

Code:
emotion_model = Sequential()

emotion_model.add(Conv2D(32, kernel_size=(3, 3), activation='relu',


input_shape=(48, 48, 1)))

emotion_model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Dropout(0.25))

emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Conv2D(256, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Conv2D(512, kernel_size=(3, 3), activation='relu'))

emotion_model.add(MaxPooling2D(pool_size=(2, 2)))

emotion_model.add(Dropout(0.25))

emotion_model.add(Flatten())

emotion_model.add(Dense(1024, activation='relu'))

emotion_model.add(Dropout(0.5))

emotion_model.add(Dense(1024, activation='relu'))

emotion_model.add(Dropout(0.5))

emotion_model.add(Dense(7, activation='softmax'))

emotion_model.load_weights('model.h5')

Đọc hình ảnh bằng webcam gán vào biến của chương trình để xử lí. Đầu tiên là
nhận diện khuôn mặt và vẽ ô vuông bao quanh khi đã nhận dạng được. Sau đó đưa
biến chưa hình ảnh đó vào model để phân tích và đưa ra tỉ lệ biểu cảm khuôn mặt cao
nhất. Sau khi xác định được biểu cảm ghi đoạn chữ tương ứng lên khung nhận diện

36
Chương 3. Thực nghiệm và đánh giá

khuôn mặt. và hiện ra kết quả. Vì đây là chạy theo thời gian thực nên chương trình sẽ
lặp lại nhiều lần cho đến khi bấm kí tự ‘q’.
Code:
emotion_dict = {0: "Angry", 1: "Disgusted", 2: "Fearful", 3: "Happy", 4: "Neutral",
5: "Sad", 6: "Surprised"}

cap = cv2.VideoCapture(0)

while True:

ret, frame = cap.read()

if not ret:

break

bounding_box = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

num_faces = bounding_box.detectMultiScale(gray_frame,scaleFactor=1.3,
minNeighbors=5)

for (x, y, w, h) in num_faces:

cv2.rectangle(frame, (x, y-50), (x+w, y+h+10), (255, 0, 0), 2)

roi_gray_frame = gray_frame[y:y + h, x:x + w]

cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray_frame,
(48, 48)), -1), 0)

emotion_prediction = emotion_model.predict(cropped_img)

maxindex = int(np.argmax(emotion_prediction))

cv2.putText(

frame, emotion_dict[maxindex],

(x+20, y-60), cv2.FONT_HERSHEY_SIMPLEX,

1, (255, 255, 255), 2, cv2.LINE_AA

37
Chương 3. Thực nghiệm và đánh giá

cv2.imshow('Video', cv2.resize(frame,(1200,860),interpolation =
cv2.INTER_CUBIC))

if cv2.waitKey(1) & 0xFF == ord('q'):

exit(0)

cap.release()

cv2.destroyAllWindows()

4.3. Kết quả


Thông mô hình huấn luyện triển khai viết chương trình sau khi chạy thu được tập
tin “model.h5” chứa đặc trưng của các biểu cảm.

Sử dụng tập tin “model.h5” chạy mẫu chương trình thử nghiệm thực tế cho thấy
chương trình đã nhận dạng được hầu hết các biểu cảm. Trong đó mô hình khá nhạy khi
nhận biết biểu cảm hạnh phúc (happy).

Hình 4.1: Nhận diện biểu cảm


4.4. Đánh giá
Kết quả thử nghiệm thực tế cho thấy mô hình khá nhạy khi nhận biết biểu cảm
vui vẻ(happy), khá kém với biểu cảm ghê tởm(disgust). Việc hầu hết các mô hình
được công bố với tập dữ liệu FER-2013 có accuracy(độ chính xác) là 0.9725 và
loss(độ sai) là 0.0839 điều này cho thấy khả năng nhận diện biểu cảm được dự đoạn
chính xác rất nhiều. Ngoài ra sau khi được cải thiện chương trình đã nhạy hơn trong
việc nhận diện biểu cảm tức giận(angry).

38
C. PHẦN KẾT LUẬN
1. Kết quả đạt được
Đã xây dựng được mô hình huấn luyện nhận diện biểu cảm khuôn mặt sử dụng
thuật toán CNN. Chương trình được thêm một số bộ lọc và mạng thần kinh để cải
thiện độ chính xác nhận diện được biểu cảm tức giấn dễ dàng hơn so với ban đầu. Đây
là một kiến trúc mô hình CNN ứng dụng vào việc phát hiện biểu cảm khuôn mặt người
được đề xuất, tập ảnh 48x48 điểm ảnh đa cấp xám được sử dụng trong thực nghiệm để
đánh giá mô hình. Đây là một bài toán có tính ứng dụng cao có thể áp dụng trong
nhiều vấn đề thực tế, đặc biệt liên quan đến việc cảm nhận phản hồi của sinh viên về
phương pháp giảng dạy.

Nhận diện được biểu cảm khuôn mặt cơ bản hạnh phúc, đau buồn, sợ hãi, tức
giận, ngạc nhiên, bình thường. Tuy biểu cảm ghê tởm vẫn chưa nhận diện được hoàn
toàn do còn hạn chế về dữ liệu và chất lượng phân loại biểu cảm khuôn mặt người
chưa cao. Tuy nhiên lợi thế là mô hình không quá lớn(dưới 4 MB) nên có thể tiếp tục
tối ưu để triển khai trên các thiết bị, mô hình cũng có thể cài đặt trên các thiết bị nhúng
vốn yêu cầu chặt chẽ về bộ nhớ.

2. Khuyến nghị
Đây là báo cáo nghiên cứu khoa học của nhóm sinh viên Đại học Thủ Dầu Một.
Do hạn chế về mặt thời gian thì nhóm chỉ mới nghiên cứu về việc nhận diện biểu cảm
khuôn mặt bằng tập tin “model.h5” đã được huấn luyện với độ chính xác tương đối và
đã phát hiện được một số biểu cảm cơ bản. Những vấn đề nhóm chưa làm được như:

- Cải thiện độ chính xác bằng cách tăng số lượng bộ dữ liệu, ứng dụng nhiều
thuật toán mới hoặc kết hợp chúng lại với nhau. Ngoài ra có thể ứng dụng nhiều công
nghệ mới tiên tiến để nhận diện nhiều các biểu cảm mới hơn như kinh hoàng, căm
ghét, Kính sợ, sợ hãi một cách buồn khổ, tức giận một cách buồn bã, tức giận một cách
sợ hãi, ngạc nhiên một cách vui vẻ, ngạc nhiên một cách buồn bã, ngạc nhiên một cách
sợ hãi, ngạc nhiên một cách tức giận, ngạc nhiên một cách ghê tởm, ghê tởm một cách
vui vẻ, ghê tởm một cách buồn bã, ghê tởm một cách sợ hãi, ghê tởm một cách giận
dữ.

39
- Từ ứng dụng có thể thiết kế lên hệ thống thành chương trình hoàn thiện để
nhận diện biểu cảm khuôn mặt của sinh viên Thủ Dầu Một sau buổi học. Và có các
chức năng như điểm danh, gửi biểu cảm của sinh viên, hỗ trợ đề xuất các phương pháp
giảng dạy hoặc thông báo cho giảng viên tình hình biểu cảm của lớp tổng quan,…

Những vẫn đề được nêu trên chỉ là một phần nhóm muốn thực hiện. Ngoài ra trên
thực tế vẫn còn rất nhiều mặt cần nghiên cứu.

40
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1]. ThS.Nguyễn Thị Ngọc An, giáo trình quản trị hành chính văn phòng, bộ giáo
dục và đào tạo.
[2]. Tổng quan về ước lượng mức độ biểu cảm của người qua biểu cảm khuôn
mặt và hướng tiếp cận dựa trên ảnh nhiệt - Nguyễn Phương Nam, Nguyễn
Viết Hưng
[3]. Mô hình khai phá ý kiến và phân tích biểu cảm khách hàng trực tuyến
trong ngành thực phẩm - Nguyễn Đặng Lập Bằng, Nguyễn Văn Hồ, Hồ
Trung Thành
[4]. sử dụng phương pháp support vector machine và convolutional neural
network để phân loại biểu cảm của khuôn mặt – Lê Thu Trang, Nguyễn Thu
Hương
Tiếng Anh
[5]. Leveraging Recent Advances in Deep Learning for Audio-Visual Emotion
Recognition - Liam Schonevelda, Alice Othmanib, Hazem Abdelkawyb
[6]. Multimodal Emotion Recognition using Deep Learning Architectures -
Hiranmayi Ranganathan, Shayok Chakraborty and Sethuraman
Panchanathan
[7]. A Robust Method for Face Recognition and Face Emotion Detection System
using Support Vector Machines - Rajesh K M, Rajesh K M
Website
[8]. https://hongtin.net/ai/nhan-dien-cam-xuc-khuon-mat-real-time-voi-python-
keras-va-opencv/

41

You might also like