You are on page 1of 62

ĐẠI HỌC QUỐC GIA TP.

HCM

TRƯỜNG ĐẠI HỌC BÁCH KHOA

CHHOEUNG YEAN

THIẾT KẾ ASIC CHO BỘ LỌC FIR


CÔNG SUẤT THẤP

Chuyên ngành: Kỹ thuật điện tử

Mã số: 1678001

LUẬN VĂN THẠC SĨ

1
TP.HỒ CHÍ MINH, tháng 12 năm 2018

CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI


TRƯỜNG ĐẠI HỌC BÁCH KHOA –ĐHQG -HCM

Cán bộ hướng dẫn khoa học : .....................................................................


(Ghi rõ họ, tên, học hàm, học vị và chữ ký)

Cán bộ chấm nhận xét 1 : ...........................................................................


(Ghi rõ họ, tên, học hàm, học vị và chữ ký)

Cán bộ chấm nhận xét 2 : ...........................................................................


(Ghi rõ họ, tên, học hàm, học vị và chữ ký)

Luận văn thạc sĩ được bảo vệ tại Trường Đại học Bách Khoa, ĐHQG Tp. HCM
ngày . . . . . tháng . . . . năm . . . . .

Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm:
(Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ luận văn thạc sĩ)
1. ..............................................................
2. ..............................................................
3. ..............................................................
4. ..............................................................
5. ..............................................................

Xác nhận của Chủ tịch Hội đồng đánh giá LV và Trưởng Khoa quản lý chuyên
ngành sau khi luận văn đã được sửa chữa (nếu có).

CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA …………

2
ĐẠI HỌC QUỐC GIA TP.HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập
TRƯỜNG ĐẠI HỌC BÁCH KHOA - Tự do - Hạnh phúc

NHIỆM VỤ LUẬN VĂN THẠC SĨ

Họ tên học viên: Chhoeung Yean MSHV: 1678001


Ngày, tháng, năm sinh: 12/11/1987 Nơi sinh: Campuchia
Chuyên ngành: Kỹ thuật điện tử Mã số: 60520203

I. TÊN ĐỀ TÀI: THIẾT KẾ ASIC CHO BỘ LỌC FIR CÔNG SUẤT THẤP
II. NHIỆM VỤ VÀ NỘI DUNG: Thiết kế được một con chip có thể tối ưu được
công suất với thuật toán bộ lọc FIR bằng trễ và diện tích của CMOS trong vi mạch
số

III. NGÀY GIAO NHIỆM VỤ : 15/01/2018


IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 30/12/2018
V. CÁN BỘ HƯỚNG DẪN: TS Trương Quang Vinh

Tp. HCM, ngày . . . . tháng .. . . năm 20....


CÁN BỘ HƯỚNG DẪN CHỦ NHIỆM BỘ MÔN ĐÀO TẠO
(Họ tên và chữ ký) (Họ tên và chữ ký)

TRƯỞNG KHOA….………
(Họ tên và chữ ký)

Ghi chú: Học viên phải đóng tờ nhiệm vụ này vào trang đầu tiên của tập thuyết minh LV

3
LỜI CÁM ƠN

Được sự phân công của nhà trường, khoa điện – điện tử và sự đồng ý của giáo
viên hướng dẫn TS. Trương Quang Vinh, em đã thực hiện luận văn thạc sĩ chuyên
ngành kỹ thuật điện tử với đề tài “Thiết kế ASIC cho bộ lọc FIR công suất thấp
trên công nghệ CMOS 90NM”. Qua trang viết này em xin gửi lời cảm ơn tới những
người đã giúp đỡ em trong thời gian học tập, nghiên cứu luận văn thời gian qua.

Trước hết, em xin gửi lời cảm ơn chân thành đến TS. Trương Quang Vinh. Thầy
là người đã trực tiếp hướng dẫn và tận tình chỉ bảo trong công việc nghiên cứu, tìm
kiếm tài liệu, xử lý và phân tích vấn đề của luận văn. Nhờ thầy mà em có thể hoàn
thành luận văn cao học.

Ngoài ra, em cũng xin chân thành cảm ơn quý đồng nghiệp, gia đình và bạn bè
cùng khóa đã luôn động viên và hỗ trợ em trong suốt quá trình nghiên cứu và hoàn
thành luận văn này.

TÁC GIẢ

Chhoeung Yean

4
TÓM TẮT

Tiếng Việt:

Ngày nay các thiết bị di động như điện thoại di động, máy tính xách tay, hay các
thiết bị y sinh cầm tay ngày càng trở nên phổ biến và một phần tất yếu trong cuộc
sống. Bô lọc FIR , hay bộ lọc đáp ứng xung hữu hạn (Finite Impulse Response) được
sử dụng rất rộng rãi trong các thiết bị y sinh, xử lý tiếng nói, xử lý hình ảnh, và xử lý
video. Bộ lọc này, sử dụng các nguồn năng lượng để xử lý các quá trình trên rất nhiều
năng lượng. Không chỉ có độ ổn định điện áp và dòng điện mà nó còn có hiệu suất lọc
năng lượng cao. Sự lọc năng lượng từ bộ lọc FIR cấp điệc cho một thiết bị hoạt động
với điện áp thấp hơn thương thông qua các nguồn điện của tín hiệu, tín hiệu hình ảnh,
tín hiệu video, tín hiệu tiếng nói. Việc sử dụng bộ lọc FIR nhằm tạo ra nhiều mức điện
áp khác nhau phục vụ cho các khối chức năng mạch, thiết bị và các ứng dụng trong
cùng một hệ thống. Yêu cầu bộ lọc đáp ứng xung hữu hạn, hiệu năng sau khi được lọc
có độ gợn năng lượng tháp để đảm bảo cho hệ thống ổn định theo ngõ ra cho phép.

Luận văn này trình bày các vấn đề liên quan đến bộ lọc FIR giảm hiệu suất tín
hiệu bằng phương pháp xung, thực hiện trên mô phỏng hoạt động vi mạch trên nên
tảng công nghệ 180nm. Trong báo cáo này,...............................

Luận văn đã thực hiện thành công mô phỏng bộ lọc FIR trên cấp độ dạng khối
trên Matlab và mô phỏng vi mạch bằng phần mềm Synopsis sử dụng mã bù bộ cộng
CIA 4bit, và bô cộng Ripple 16bit. Kết mô phỏng so sánh hai bộ công này là 70%
nhanh hơn so với bộ cộng Ripple 16 bit và tiêu thụ năng lượng hiều hơn 24,7%. Mô
phỏng thực hiện trên thư viện vi mạch 180nm CMOS TSMC 1p6M cho hiệu suất 80%
có khả năng ......................................................

5
ABSTRACTS

In the 21st century, the fast growing demand of portable and filter electronic
system has driven the efforts to reduce power consumption or to improve the
efficiency of these electronic equipments. Regulator are essential for most electrically
powered system which include the prevalent filter equipments and singal processing.
Regulators are required to reduce the power varriation from DSP system,

6
LỜI CAM ĐOAN

Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi. Các số liệu, kết quả
trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây.
Tất cả những tham khảo và kế thừa cho việc thực hiện luận văn này đã được cảm ơn
và các thông tin trích dẫn trong luận văn đã được chỉ rõ nguồn gốc và được phép công
bố.

TP.HCM, ngày tháng năm

Học viên thực hiện

Chhoeung Yean

7
Mục lục
1. Tổng quan:..................................................................................................................................... 9

1.1. Giới thiệu về đề tài .................................................................................................................. 9


1.2. Đặc trưng của mặt người.......................................................... Error! Bookmark not defined.
1.2.1 Yêu cầu về nhận dạng khuôn mặt. .................................................................................... 10
1.2.2 Các biểu cảm cảm xúc trên mặt người .............................................................................. 10
1.3. Mục tiêu, nhiệm vụ và phạm vi đề tài ................................................................................... 10
1.3.1 Mục tiêu của đề tài ........................................................................................................ 10
1.3.2 Nhiệm vụ của đề tài ...................................................................................................... 10
1.3.3 Phạm vi của đề tài ......................................................................................................... 11
1.4. Tổ chức luận văn ................................................................................................................... 11
2. Tình hình nghiên cứu trong và ngoài nước .............................................................................. 12

3. Mạng nơ-ron tích chập (Convolution neural network - CNN) ............................................... 19

3.1. Tổng quan ............................................................................................................................. 19


3.2. Mạng nơ-ron tích chập .......................................................................................................... 20
4. Thiết kế hệ thống và mô phỏng thử nghiệm ............................................................................. 25

4.1. Kiến trúc hệ thống nhận diện cảm xúc khuôn mặt sử dụng mạng nơ-ron tích chập (CNN) . 25
4.2. Dữ liệu sử dụng cho huấn luyện mạng (Training dataset) .................................................... 33
4.3. Huấn luyện cho kiến trúc mạng nơ-ron tích chập ................................................................. 35
4.4. Thiết kế giao diện chương trình (GUI) ................................................................................. 46
4.5. Mô phỏng và thực nghiệm .................................................................................................... 47
5. Hướng phát triển đề tài .............................................................................................................. 58

6. Tài liệu tham khảo ...................................................................................................................... 59

8
1. Tổng quan
1.1. Giới thiệu về đề tài

Trong những năm gần đây, cùng với sự phát triển nhanh của vi mạch số, nó
được thiết kế bởi hai quá trình, một là thiết kế Front – End và hai là thiết kế Back
– End. Cả hai qua trình thiết kế nhà thiết kế ngày càng dòi hỏi công suất thấp và
thông lượng cao của mức tiêu thụ năng lượng. Những các nhà thiết kế vi mạch số
sử dụng rất nhiều toán học cần thiết để thực hiện trong qua trình thiết kế để thu
được vi mạch có công suất thấp, và độ trễ rất ít.

Luận văn này xin trình bày một quá trình thiết kế vi mạch số của bộ lọc đáp
ứng xung hữu hạn (FIR). Quà trình thiết kế thực hiện các chức năng chính: Thiết
kế bộ lọc đáp ứng xung hữu hạn, dựa vào toán học của bộ lọc đáp ứng xung hữu
hạn thiết kế một vi mạch số bằng phần mềm synopsis. Vi mạch đã thiết kế có thể
tối ưu được mức tiệu thụ năng lượng.

Cốt lõi của phương pháp tiếp cận của luận văn đưa ra được dựa trên việc:

 Lựa chọn bài toán học để thiết kế


 Sử dụng phương pháp bộ lọc đáp ứng xung hữu hạn (FIR)
 Thiết kế bộ lọc đáp ứng xung hữu hạn công suật thấp

1.2. Đặc trưng của quá trình thiết kế ASIC cho bộ lọc FIR
Vi mạch số là trọng tâm chính trong mối quan hệ giao tiếp trong mọi lĩnh vực,
đó vai trò quan trọng trong việc thiết kế vi mach số có thể tối ưu được công suốt
và tối tiểu được chi phí sản suất cũng như chi phí tiêu thụ năng lượng của người
dùng. Để thiết kế được điều đó, chúng ta thiết kế vi mạch cho một bộ lọc đáp ứng
xung hữu hạn (FIR). Điều này khá là rõ nét, Bộ lọc đáp ứng xung hữu hạn là một
bộ lọc tính toán nhanh và tối tiểu con CMOS cho qua trình thiết kế ASIC. Nhũng
bài toán đã xử trong bộ lọc FIR này gồm có:

1. Cửa số
2. Mẫu tần số
3. Lặp tối ưu

9
1.2.1 Yêu cầu về thiết kế ASIC cho bộ lọc FIR
Tối ưu số Area của Cell
Tối ưu chi phí sản xuất
Tối ưu công suất

1.2.2 Các biểu cảm cảm xúc trên mặt người


Con người có nhiều cách để truyền đạt thông tin với nhau: ngôn ngữ, cử chỉ,
lời nói… Biểu hiện cảm xúc trên khuôn mặt cũng là một cách để truyền đạt thông
tin, nó có thể biểu hiện một nhận định của con người trước sự vật, hiện tường.
Hình bên dưới là 7 cảm xúc cơ bản cử con người mà đề tài này đề cập tới – nhận
dạng, phân biệt được 7 loại cảm xúc cơ bản của con người. Tiến sĩ Paul Ekman đã
trình bày 7 cảm xúc cơ bản và được con người ở mọi nền văn hóa thể hiện giống
nhau trong Emotions Revealed (2003).

1.3. Mục tiêu, nhiệm vụ và phạm vi đề tài


1.3.1 Mục tiêu của đề tài

Nhận diện cảm xúc trên khuôn mặt người là một trong những đề tài thiết thực và
cần thiết đối với sự phát triển giao tiếp người-máy hiện nay, vì vậy:

 Cảm xúc trên khuôn mặt người được máy nhận biết một cách tự động

 Thông tin về cảm xúc có thể được ghi nhận để làm dữ liệu cho những phân
tích về thị trường, mức độ hài lòng của khách hàng

 Từ việc phân tích dữ liệu trên, một vài hành động có thể được đưa ra nhằm
nâng cao chất lượng dịch vụ hoặc điều chỉnh chất lượng sản phẩm

1.3.2 Nhiệm vụ của đề tài

 Phát hiện và trích xuất khuôn mặt từ ảnh / video thời gian thực

 Tính toán và ước lượng cảm xúc trên khuôn mặt ở khung ảnh hiện tại

 Trích xuất cảm xúc trên khuôn mặt và hiển thị kết quả

10
1.3.3 Phạm vi của đề tài

Đề tài luận văn này sẽ được thực hiện với đáp ứng đầu vào là video và đầu ra
cũng là video cùng với cảm xúc trên khuôn mặt trên video với độ chính xác cao.
Hệ thống sẽ được thiết kế hoạt động trên các bộ dữ liệu video lấy từ thực tế, thời
gian thực

1.4. Tổ chức luận văn

Luận văn sẽ đi qua các mục chính sau:

- Xem qua các nghiên cứu trong và ngoài nước về đề tài của luận văn
- Phân tích thuật toán nhận dạng cảm xúc khuôn mặt (Mạng nơ-ron tích chập)
- Mô phỏng và thử nghiệm
- Kết luận và thảo luận về các cải tiến có thể trong tương lai

11
2. Tình hình nghiên cứu trong và ngoài nước

Nhận diện cảm xúc trên khuôn mặt người đang là một lĩnh vực được nghiên
cứu nhiều trong lĩnh vực thị giác máy tính. Trong phần luận văn này, em xin đưa
ra một số lĩnh vực nghiên cứu, một số phương pháp tiếp cận đặc trưng để người
đọc có thể kham thảo.

Năm 2010, tác giả Đinh Xuân Nhất trong khóa luận tốt nghiệp Đại học Công
nghệ - Đại học Quốc gia Hà Nội, “Nghiên cứu các thuật toán nhận dạng cảm
xúc trên khuôn mặt 2D”, đã đưa các so sánh 3 thuật toán nhận dạng cảm xúc
trên khuôn mặt gồm 5 cảm xúc cơ bản: vui, buồn, ghê tởm, giận dữ và tự nhiên.
Tác giả đã chỉ ra một số thuật toán học và áp dụng thuật toán này cho bài toán
phân lớp để nhận dạng cảm xúc.

Dữ liệu đầu vào mà đề tài sử dụng bao gồm có 75 ảnh khuôn mặt mẫu, độ
phân giải 600x800 điểm ảnh, tất cả đều là ảnh khuôn mặt một người và có độ sáng
đồng đều nhau. Tập ảnh này chỉ có 5 cảm xúc chính là: vui, buồn, ghê tởm, giận
dữ và bình thường. Trong 75 ảnh khuôn mặt mẫu, 40 ảnh bất kỳ chọn làm dữ liệu
huấn luyện cho mạng, còn 35 ảnh làm dữ liệu kiểm tra.

Những kết quả chính mà khóa luận đạt được:

 Giới thiệu chi tiết về phương pháp trích chọn đặc trưng (PCA) và Mạng
noron nhiều tầng truyền thẳng, đồng thời giới thiệu sơ lược về một giải
thuật phân lớp khác là cây quyết định.

 Áp dụng các giải thuật này cho bài toán nhận dạng cảm xúc.

Những vấn đề mà khóa luận chưa giải quyết được:

 Xây dựng tập huấn luyện lớn để đạt kết quả chính xác hơn

 Xây dựng một chương trình hoàn chỉnh có giao diện tương tác với người
sử dụng.

12
Kết quả nhận dạng thu được chưa cao, phân bố không đồng đều giữa các cảm
xúc với nhau:

Cảm xúc
Ghê Giận Bình Trung
Vui Buồn
tởm dữ thường bình
Phương pháp

PCA truyền thống 80% 70% 86% 55% 84% 75.00%


Mạng noron 100% 100% 67% 50% 80% 79.40%
Cây quyết định 60% 14.30% 16.70% 0% 60% 30.20%
Bảng 2.1: So sánh độ chính xác của một số phương pháp (1)

Năm 2010, Trong bài báo “Facial Expression Recognition Using AAM
Algorithm”, các tác giả Nguyen Duc Thanh, Nguyen Huu Tan, Nguyen Tan Luy
đến từ Bộ môn Tự động, Đại học Bách Khoa TP.HCM đã đề xuất 2 phương pháp,
trong đó 1 là AAM kết hợp mạng thần kinh cho kết quả chính xác hơn nhưng tốc
độ xử lý chậm, và phương pháp kia là AAM kết hợp tương quan điểm với tốc độ
đặc biệt nhanh.

Độ chính xác
Cảm xúc
AAM kết hợp mạng nơ-ron AAM kết hợp tương quan điểm
Vui 82.66% 85.33%
Buồn 96.00% 90.66%
Ngạc nhiên 85.33% 81.33%
Giận dữ 84.00% 82.66%
Trung bình 87.00% 85.00%
Bảng 2.2: So sánh độ chính xác của một số phương pháp (2)

Năm 2011, Tại Hội nghị Quốc tế về Công nghệ tiên tiến áp dụng cho Truyền
thông, với bài báo “Toward a Vietnamese facial expression recognition system
for human-robot interaction” các tác giả Le Thi-Lan và Dong Van-Thai đến từ
Đại học Bách Khoa Hà Nội đã trình bày kết quả nghiên cứu về nhận dạng cảm
xúc khuôn mặt người Việt Nam, trong đó bao gồm việc xây dựng database, phát
hiện khuôn mặt và nhận dạng biểu hiện khuôn mặt. Đóng góp chính trong bài báo
là database biểu hiện khuôn mặt của người Việt Nam, và kết quả sơ bộ về phát
hiện và nhận dạng biểu hiện cảm xúc trên khuôn mặt.

13
Kết quả phát hiện khuôn mặt với độ chính xác là 83% với hình ảnh nhiều
khuôn mặt và 94% với hình ảnh một khuôn mặt.

Hình 2.1: Các thành phần cơ bản của khuôn mặt

Một nghiên cứu Liyuan Zhen và Shifeng Zhu, “Convolutional Neural Network
for Facial Expression Recognition” chỉ ra kết quả triển khai của một số kiến trúc
của mạng nơ ron tích chập mà nhóm đã thực hiện. Tuy nhiên kết quả đạt được
chưa cao.

 Đối với kiến trúc nơ ron tích chập tiêu chuẩn: 5 × 5 Conv(ReLU) → 2 × 2
Max-Pooling → Fully-Connected(ReLU) → Softmax, kết quả đạt được chỉ
ở 48%

 Với kiến trúc CNN 6 lớp, độ chính xác ở mức 52.72%

 Đối với kiến trúc học sâu hơn (Depper CNN): 3 × 3 Conv(ReLU) - 2 × 2
Max-Pooling with dropout rate of 0.25 → 3 × 3 Conv(ReLU) - 2 × 2 Max-
Pooling with dropout rate of 0.25 → 3 × 3 Conv(ReLU) - 2 × 2 Max-
Pooling with dropout rate of 0.25 → Fully-Connected(ReLU) with dropout
rate of 0.5 → Softmax., độ chính xác được cải thiện ở mức 61.19%

14
Tác giả sử dụng dữ liệu từ cuộc thi nhận dạng cảm xúc khuôn mặt Kaggle
(Kaggle facial expression challenge) bao gồm 28709 ảnh và cho việc huấn luyện
và 3589 ảnh cho việc kiểm tra, các ảnh này là ảnh khuôn mặt người có kích thước
48x48 pixels và được định dạng ở ảnh xám.

Hình 2.2: Cảm xúc trên khuôn mặt và thống kê dữ liệu trong Kaggle

Arushi Raghuvanshi và Vivek Choksi đã giới thiệu đề tài “Facial


Expression Recognition with Convolutional Neural Networks” sử dụng mạng
nơ ron tích chập 5 lớp để giải quyết bài toán nhận diện cảm xúc khuôn mặt trên
ảnh. Baseline classifier cũng được sử dụng trong đề tài này để đưa ra kết quả tính
toán về cảm xúc khuôn mặt.

Nhóm sử dụng dữ liệu từ cuộc thi nhận dạng cảm xúc khuôn mặt Kaggle
(Kaggle facial expression challenge) để triển khai và kiểm tra hệ thống, kết quả
triển khai của 5 mô hình dựa trên mạng nơ-ron tích chập không cao

Độ chính xác
Mô hình Huấn luyện Test
Baseline 0.25 0.24
Five-layer CNN 0.46 0.39
Deeper CNN 0.6 0.48
VGG16 fine-tuned CNN - -
VGGFace fine-tuned CNN 0.37 -
Bảng 2.3: So sánh độ chính xác của một số phương pháp (3)

15
Năm 2017, các tác giả Minh-An Quinn, Grant Sivesind, Guilherme Reis
của đại học Stanford đã giới thiệu nhiều mô hình nhân dạng cảm xúc khuôn mặt
trong đề tài: “Real-time Emotion Recognition From Facial Expressions”, thực
hiện trên một số tập dữ liệu, trong đó có FER2013. Trong đó có mô hình mạng
nơ-ron tích chập với 10 lớp và độ chính xác đạt được 66,67% trên tập FER2013.
Độ chính xác tập trung chủ yếu ở các cảm xúc vui, ngạc nhiên, giận và tự nhiên.
Kết quả này hoàn toàn trùng khớp khi thực hiện giải thuật này trên video thời gian
thực.

Hình 2.3 Ma trận cảm xúc của đề tài (1)

16
Bảng 2.4: So sánh độ chính xác của một số phương pháp (4)

Ngày 20 tháng 10 năm 2017, các tác giả Octavio Arriaga, Matias Valdenegro-
Toro, Paul Plöger giới thiệu một nghiên cứu mang tên “Real-time Convolutional
Neural Networks for Emotion and Gender Classification”. Nghiên cứu này
thực hiện các công việc: nhận diện khuôn mặt, nhận diện cảm xúc kết hợp với giới
tính xử lý thời gian thực.

17
Hình 2.4 Mô hình được giới thiệu trong đề tài

Hình 2.5 Ma trận cảm xúc của đề tài (2)

18
Hệ thống được thiết kế với các lớp cơ bản của một hệ thống mạng nơ-ron tích
chập, tuy nhiên, không sử dụng lớp kết nối đầy đủ trong mạng. Hệ thống được
huấn luyện với IMDB dataset với 460,723 hình ảnh RGB về giới tính, độ chính
xác đạt được là 96%, 35,887 hình ảnh từ FER2013 với độ chính xác khoản 66%.

Trên đây là một số nghiên cứu trong và ngoài nước liên quan đến việc nhận
dạng cảm xúc khuôn mặt, mỗi nghiên cứu đều có ưu điểm và nhược điểm riêng,
hầu hết các nghiên cứu đều dùng hình ảnh để làm tập huấn luyện và tập kiểm tra
độ chính xác của hệ thống. Phần tiếp theo của đề tài sẽ là phần phân tích thuật
toán nhận dạng cảm xúc khuôn mặt sử dụng mạng nơ-ron tích chập (CNN).

3. Mạng nơ-ron tích chập (Convolution neural network - CNN)


3.1. Tổng quan
Mạng nơ-ron truyền thẳng nhiều lớp là một kỹ thuật có sức mạnh và tầm ảnh
hưởng lớn trong máy học (machine learning) với việc được huấn luyện dựa như là
một hàm không tuyến tính để giải quyết một số bài toán thực tế. Tuy nhiên việc
lựa chọn thủ công thuật toán trích xuất đặt trưng và thuật toán phân loại thường
dựa theo kinh nghiệm, dẫn đến bài toán không tối ưu. Do đó, hướng giải quyết tốt
nhất là đưa mạng nơ-ron lên dữ liệu thô ban đầu và để cho thuật toán huấn luyện
tìm ra đặt trưng tối ưu bằng cách thay đổi các trọng số tương ứng.

Vấn đề của cách tiếp cận này là số chiều của dữ liệu đầu vào tương đối lớn
đồng thời là một lượng lớn liên kết giữa các phần tử ẩn và lớp ngõ vào (input
layer). Thông thường con số này đạt khoảng 10,000 hoặc lớn hơn tùy vào từng
ứng dụng cụ thể. Số lượng lớn mẫu dùng để huấn luyện có thể tương đối nhỏ so
với kích thước mẫu sẽ dẫn đến mạng nơ-ron truyền thẳng sẽ trở nên phức tạp, và
cũng dẫn đến hiện tượng quá khớp dữ liệu.

Một điểm không thuận lợi của nữa mạng nơ-ron truyền thẳng đó là dữ liệu ngõ
vào phải có kích thước không đổi và các mẫu ngõ vào phải được định dạng đúng
theo một yêu cầu nào đó của lớp ngõ vào, điều này khó thực hiện được trong thực
tế.

19
Mạng nơ-ron tích chập (CNN) không những sẽ giải quyết các vấn đề đã nêu ở
trên mà còn cho có thể áp dụng giải quyết các bài toán nhận dạng phức tạp với
hiệu xuất cao.

3.2. Mạng nơ-ron tích chập


Mạng nơ-ron tích chập (Convolutional Neural Network – CNN) là một trong
những mô hình máy học (machine learning) tiên tiế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. CNN trong nhận dạng
cảm xúc khuôn mặt cũng là một trong những giải pháp trong thị giác máy tính,
giao tiếp người – máy trong xu thế hiện nay.
Cấu trúc cơ bản của một mạng nơ-ron tích chập (CNN) thường bao gồm các
lớp: Lớp tích chập (Convolution layer), lớp Pooling (Pooling layer), lớp hiệu
chỉnh tuyến tính (Rectified linear units layer - ReLU) và lớp kết nối đầy đủ (Fully
connected layer). Độ phức tạp của kiến trúc mạng tích chập còn tùy từng ứng
dụng cụ thể mà người thiết kế có thể lựa chọn một hoặc nhiều lớp để xây dựng.
Dưới đây là phần giới thiệu các lớp cơ bản có trong một mạng nơ-ron tích chập
và các thành phần chính trong hệ thống của đề tài.
a. Lớp tích chập (Convoluation layer)
Lớp này sẽ sử dụng một bộ các bộ lọc có kích thước nhỏ so với ảnh áp vào một
vùng trong ảnh và tiến hành tính tích chập giữa bộ filter và giá trị điểm ảnh trong
vùng cục bộ đó. Bộ lọc sẽ lần lượt được dịch chuyển theo một giá trị bước trượt
và quét toàn bộ ảnh. Các thông số của bộ lọc này sẽ được khởi tạo một cách ngẫu
nhiên và sẽ được cập nhật dần trong quá trình huấn luyện cho mạng.
Giả sử fk là bộ lọc có kích thước n  m được áp dụng trên ngõ vào x. n  m là số
lượng liên kết ngõ vào mà mỗi nơ-ron có. Phép tích chập giữa fk và ngõ vào x cho
ta kết quả như sau:

n 1 m 1
O( xu ,v )   f k (i, j ) xu i ,v  j
(3.1)
i 0 j 0

Để có được nhiều đặt trưng đại diện từ dữ liệu đầu vào, ta có thể áp dụng nhiều
bộ lọc fk với k  lên ngõ vào x. Bộ lọc fk được thực hiện bằng cách chia sẻ trọng

20
số của các nơ-ron lân cận. Điều này có ý nghĩa tích cực cho việc cập nhật các
trọng số thấp, trái ngược với mạng nơ-ron truyền thẳng, và các trọng số có sự ràng
buộc với nhau.

Hình 3.1: Tích chập giữa ngõ vào và cửa sổ chập

b. Lớp Pooling (Pooling layer)

Mục tiêu của lớp pooling là làm giảm kích thước của ảnh nhưng vẫn giữ các
thông tin quan trọng nhất trong đó. Sử dụng một hàm kích hoạt tương ứng với
mục đích của người thiết kế để. Các phương thức lấy phổ biến trong lớp Pooling
là MaxPooling (lấy giá trị lớn nhất), MinPooling (lấy giá trị nhỏ nhất) và
AveragePooling (lấy giá trị trung bình). Khác với lớp tích chập, lớp Pooling
không tính tích chập mà tiến hành lấy mẫu (subsampling).

Max pooling là phương pháp giảm kích thước mẫu với hàm kích hoạt là
Maximun được áp dụng trên ngõ vào x. Giả sử m là kích thước của cửa sổ trượt,
kết quả thu được khi áp dụng hàm kích hoạt Maximun như sau:

m m
M ( xi )  max{xi  k ,i l | k  , l  ; k,l  } (3.2)
2 2
Lớp pooling này có tính bất biến đối với kích thước của cửa sổ trượt.

21
Hình 3.2: Hoạt động của max-pooling
c. Lớp hiệu chỉnh tuyến tính (Rectified Linear Unit – ReLU layer)

Lớp này có nhiệm vụ chuyển toàn bộ giá trị âm trong kết quả lấy từ lớp tích
chập thành giá trị 0 mà vẫn giữ được sự tin cậy toán học của mạng. Ý nghĩa của
lớp này này chính là tạo nên tính phi tuyến cho mô hình. Ngoài ra, nó còn có tác
dụng giảm lượng tính toán cho các lớp tiếp theo, và ngăn chặn việc triệt tiêu sai số
gradient vì gradient là một hàm tuyến tính hoặc là 0.

Tương tự như trong mạng truyền thẳng, việc xây dựng dựa trên các phép biến
đổi tuyến tính sẽ khiến việc xây dựng đa tầng đa lớp trở nên vô nghĩa. Có rất
nhiều cách để khiến mô hình trở nên phi tuyến như sử dụng các hàm kích hoạt
sigmoid, tanh, … nhưng hàm R(x) = max(0,x) dễ tính toán nhanh mà vẫn hiệu quả

Hình 3.3: Hoạt động của lớp hiệu chuẩn tuyến tính

22
Lớp kết nối đầy đủ (Fully connected layer)
Lớp kết nối đầy đủ được biết đến như là mạng nơ-ron nhiều tần, các nơ-ron
trong mạng kết nối tất cả các nơ-ron của lớp trước. Giả sử ngõ vào x có kích
thước k và l là số lượng nỏ-ron có trong lớp kết nối đầy đủ này. Kết quả trong ma
trận Wlk

F ( x)   (W  x) (3.3)

Trong đó,  là hàm kích hoạt. Ở đề tài này, hàm kích hoạt là hàm softmax

Với mỗi phần tử 1  j  N , ngõ được tính như sau:


xj
e
 j  S ( x) j  N

 e
i 1
xi

(3.4)

d. Lớp ngõ ra (Output Layer)


Lớp output là một vector biểu diễn các lớp được định nghĩa ở hình ảnh ngõ
vào. Ở đề tài này, output là một vector bao gồm dữ liệu đại diện cho 7 cảm xúc
trên khuôn mặt của hình ảnh cần nhận dạng cảm xúc.

C ( x)  {i|ij  i:x j  xi } (3.5)

e. Drop out
Mặt dù có nhiều thành công nhưng mạng nơ-ron vẫn tồn tại những nhược điểm
nhất định. Sự tồn tại của các lớp ẩn phi tuyến làm cho mạng trở nên phức tạp và
chiếm nhiều tài nguyên, quá trình huấn luyện cho mạng cũng mất khá nhiều thời
gian. Bên cạnh đó, sự phù hợp quá mức (Overfitting) cũng gây nhiều cản trở cho
sự phát triển của mạng nơ-ron.
Drop-out là một kỹ thuật dùng để loại bỏ một số thành phần cùng với kết nối
của nó ra khỏi mạng trong quá trình huấn luyện nhằm ngăn chặn sự phù hợp quá
mức của mạng, nghĩa là tạm thời loại bỏ một vài thành phần cùng với các kết nối

23
của nó ra khỏi mạng. Các phần tử được loại bỏ trong mạng được lựa chọn một
cách ngẫu nhiên

Hình 3.4: Kỹ thuật drop-out trong CNN


f. Chia sẻ trọng số
Chia sẻ trọng số là một trong những nguyên tắt quan trọng trong CNN, có
nghĩa rất lớp làm giảm các tham số cần được cập nhật trong quá trình huấn luyện
cho mạng. Hơn nữa, chia sẻ trọng số còn giúp việc huấn luyện cho mạng trở nên
hiệu quả hơn, đặt biệt là trường hợp một số kiến trúc cục bộ xuất hiện ở không
gian ngõ vào.

Hình 3.5: Kỹ thuật chia sẽ trọng số trong CNN

24
4. Thiết kế hệ thống và mô phỏng thử nghiệm
4.1. Kiến trúc hệ thống nhận diện cảm xúc khuôn mặt sử dụng mạng nơ-ron tích
chập (CNN)
Một kiến trúc mạng có được hiệu quả tốt cho quá trình nhận dạng được hình
thành từ nhiều yếu tố, trong đó việc lựa chọn số lượng các lớp cơ bản cũng như
các thống số hay hàm kích hoạt cho từng lớp chiếm vài trò quan trọng, sao cho nó
đảm bảo được các yêu cầu nhận dạng được đề ra.
Trong đề tài này, hệ thống được thiết kế bao gồm 2 phần chính: Phần trích xuất
đặt trưng và phân phân loại cảm xúc.

Hình 4.1: Cấu trúc hệ thống mạng nơ-ron tích chập

25
Phần trích xuất đặt trưng bao gồm 4 lớp tích chập và 2 lớp pooling, cụ thể
như sau:
- Data: là dữ liệu ngõ vào của hệ thống. Dữ liệu huấn luyện cho mạng là tập
dữ liệu gồm các hình ảnh được định dạng ở mức xám, có kích thước
48x48 pixels. Kích thước này cũng là kích thước ngõ vào của mạng khi
thực thi hệ thống. Ảnh từ video / webcam sẽ được chuyển đổi kênh màu
và định dạng lại sao cho phù hợp với kích thước đã khai báo.
- Conv_1: là lớp tích chập đầu tiên của hệ thống, sử dụng 96 bộ lọc với
cùng kích thước 3x3 pixels. Ở lớp đầu tiên này, không có bộ lọc được áp
dụng.
- Pooling_1 là lớp pooling ngay sau lớp conv_1, với kích thước cửa sổ là
3x3 pixels.
- Conv_2a là lớp tích chập thứ 2 sử dụng 108 bộ lọc có kích thước 2x2
pixels. Đi cùng với nó là hàm kích hoạt ReLU.
- Pooling_2 là lớp pooling thứ 2 trong mạng, tuy nhiên kích thước bộ lọc
chỉ là 2x2 pixels, và mỗi lần trượt của cửa sổ là 1 pixel.
- Tiếp theo là 2 lớp tích chập liên tiếp với kích thước tương ứng là 208 bộ
lọc 2x2 và 64 bộ lọc 2x2. Cả 2 lớp tích chập này đều sử dụng hàm ReLU
để làm hàm kích hoạt.
- Tiếp theo là phần phân loại cảm xúc, bao gồm thành phần chính là 3 lớp
fully connected với kích thước khác nhau, tương ứng là 512, 256 và 7. Kỹ
thuật drop out được áp dụng trên 2 lớp đầu tiên với tỉ lệ 0.3, tức là có 30%
nơ-ron của 2 lớp này bị tắt trong quá trình huấn luyện, nhằm hạn chế hiện
tượng quá khớp (overfitting) vốn là một nhược điểm lớn trong các mạng
nơ-ron nhân tạo. Hàm mất mát softmax cross-entropy được sử dụng để
phản hồi thông tin trong quá trình huấn luyện mạng.
- Tương ứng với kiến trúc đã nêu ở trên, kích thước ngõ ra của hệ thống cho
từng lớp được liệt kê ở bảng bên dưới.

26
Layer Kích thước ngõ ra
Dữ liệu ngõ vào 48x48
Convolution 1 96x48x48
ReLU 96x48x48
Pooling_1 96x24x24
Convolution 2a 108x24x24
ReLU 108x24x24
Pooling_2 108x24x24
Convolution 2b 208x24x24
ReLU 208x24x24
Convolution 2c 64x24x24
ReLU 64x24x24
Flatten 36864
Fully connected_1 512x1
Fully connected_2 256x1
Fully connected_3 7x1

Bảng 4.1: Kích thước ngõ ra của các lớp trong mạng
a. Input layer
Những phương thức trong module tf.layer cho viê ̣c ta ̣o ra lớp convolutional và
lớp pooling đối với dữ liê ̣u ảnh 2 chiều chấ p nhâ ̣n ngõ vào là một tensor có shape
là [batch_size, image_width, image_height, channels]. Trong đó:
- batch_size: số lượng mẫu đươ ̣c dùng khi thực hiê ̣n thuâ ̣t toán gradient descent
cho viê ̣c tố i ưu trong quá triǹ h huấ n luyê ̣n.
- image_width: chiề u rô ̣ng của bức ảnh.
- image_height: chiề u dài của bức ảnh.
- channels: là số kênh màu của ảnh. Nế u ảnh trắng đen thì channels = 1, nế u là
ảnh RGB thì channels = 3.
̀ h ảnh trắ ng đen
Trong dữ liệu huấn luyện FER2013, mô ̣t mẫu là mô ̣t hin
(channels = 1) đươ ̣c có kích thước 48x48 pixels, do đó cho ̣n shape cho input layer
là [batch_size; 48, 48, 1] và đồ ng thời input layer phải resize các mảng 1 chiề u về
mảng 2 chiều kích thước 48x48 tương ứng với kích thước không gian của ảnh.
b. Lớp tích chập
Trong lớp tích châ ̣p đầ u tiên, 95 bô ̣ lo ̣c 3x3 đươ ̣c sử du ̣ng để áp du ̣ng cho input
layer, với activation function là hàm ReLU. Phương thức con2d() trong module
layer đươ ̣c sử du ̣ng để ta ̣o lớp tić h châ ̣p đầ u tiên, được đặt tên Conv2d_1

27
conv_1 = conv_2d

(self.network, 96, 3, strides=1,

bias=True, padding=padding,

activation= ‘relu’,

name='Conv2d_1')

Tham số inputs tiế p nhâ ̣n đầu vào của lớp conv_1 và chỉ nhận tensor hợp lê ̣ nế u
có shape là [batch_size, image_width, image_height, channels]. Ở đây conv1
layer đươ ̣c kết nố i với input_layer có shape [batch_size; 48, 48, 1].

Tham số filters chỉ ra số lươ ̣ng bô ̣ lo ̣c đươ ̣c sử du ̣ng, ở đây là 96. Tham số tiếp
theo chỉ ra kić h thước của mỗi bô ̣ lo ̣c, ở đây sử du ̣ng [3,3].

Tham số strides chỉ mức độ trượt của cửa số tích chập trên ảnh ngõ vào, ở đây
mỗi lần trượt của cửa sổ tích chập là 1 pixel (strides=1).

Tham số padding nhận 2 giá tri ̣ hoặc “same” hoặc “valid”. Nế u giá trị truyề n
vào là “valid”, input được giữ nguyên để xử lý và dẫn đế n các feature map ở ngõ
ra của lớp conv có kić h thước nhỏ hơn đầ u vào. Nế u giá tri ̣ truyề n vào là “same”,
TensorFlow sẽ thêm các giá tri ̣ 0 vào input sao cho khi tính tích châ ̣p hoàn thành
sẽ cho ra feature map có cùng kić h thước với input.

Tham số activation chỉ ra hàm activation function nào sẽ đươ ̣c áp du ̣ng sau khi
tiń h tích châ ̣p để cho đầ u ra cuố i cùng, ở đây activation function là hàm ReLU

Ngõ ra của lớp conv_1 sẽ có shape là [batch_size, 84, 84, 96]: có cùng chiều
dài và chiều rộng với input nhưng số channels ở ngõ ra cho mỗi input là 96.

c. Lớp pooling

Lớp pooling thứ nhấ t sẽ kết nố i với lớp conv_1 vừa được ta ̣o ra. Phương thức
max_pooling2d() đươ ̣c sử du ̣ng để xây dựng lớp pooling sử du ̣ng thuâ ̣t toán
max_pooling với bộ lo ̣c 3x3, bước trươ ̣t bằ ng 2.

28
maxpool_1 = max_pool_2d(conv_1, 3,

strides=2, padding=padding,

name='MaxPool_1')

Tham số inputs chỉ ra ngõ vào của pool_1 với shape hơ ̣p lê ̣ là [batch_size,
image_width, image_height, channels]. Ở đây, input là ngõ ra của conv1 có shape
[batch_size; 48; 48; 96].

Tham số pool_size chỉ ra kić h thước của bộ lo ̣c lớp pooling, ở đây kić h thước
đươ ̣c sử dụng là 3x3.

Tham số strides chỉ ra bước trượt của bô ̣ lo ̣c, ở đây đươ ̣c cài đă ̣t bằ ng 2, nghĩa
là các vùng nhỏ được chia ra mỗi lầ n trươ ̣t phân cách với nhau bởi 2 pixel theo
chiều ngang và 2 pixel theo chiều dọc. Và vì kích thước bô ̣ lo ̣c là 2x2 nên mỗi
vùng nhỏ sẽ chỉ áp du ̣ng bô ̣ lo ̣c 1 lầ n (không có pixel chung giữa các vùng trong
mỗi lầ n lo ̣c).

Ngõ ra của pool_1 có shape là [batch_size, 24, 24, 96]: mỗi feature map đã
đươ ̣c giảm đi 50% kić h thước.

d. Lớp tích chập thứ 2, pooling thứ 2, lớp tích chập thứ 3 và thứ 4

Cũng với phương thức conv2d() và max_pooling2d(), 4 lớp tiếp theo thuộc
phần tích xuất đặt trưng được sử dụng với cấu hình khác nhau:

- conv_2a = relu(conv_2d(maxpool_1, 108, 2, strides=1, padding=padding,


name='Conv_2a’))
- maxpool_2a = batch_normalization(max_pool_2d(conv_2a, 2, strides=1,
padding=padding, name='MaxPool_2a'))
- conv_2b = relu(conv_2d(maxpool_2a, 208, 2, strides=1, padding=padding,
name='Conv_2b'))
- conv_2c = relu(conv_2d(conv_2b, 64, 2, strides=1, padding=padding,
name='Conv_2c'))

29
e. Lớp kết nối đầy đủ 1 (FC layer)

Lớp FC (với 512 nơ-ron và ReLU activation) đươ ̣c thêm vào mạng CNN để
thực hiện nhiệm vu ̣ phân loại dựa trên các đă ̣c trưng đã đươ ̣c trić h xuấ t bởi lớp
convolutional và pooling ở phía trước. Một điể m lưu ý ở đây là các feature map ở
ngõ ra của lớp pooling thứ 2 có shape là [batch_size; 24; 24; 64], tương ứng 1
mẫu ở ngõ ra của lớp conv_2c được trích xuấ t thành 64 ma trâ ̣n 2 chiề u kić h
thước 24x24. Trước khi đưa vào lớp FC, 64 ma trâ ̣n 2 chiề u (tương ứng với 1 đă ̣c
trưng) được phương thức flatten chuyển thành vector 1 chiề u có 36864 phần tử,
cũng chính là 36864 nơ-ron.

net = flatten(conv_2c, name='Net')

drop_net_1 = dropout(net, 0.1)

Ở đây, để tránh hiện tượng over fitting, kỹ thuật drop out được áp dụng cho lớp
flatten. Ngõ vào lớp dropout là ngõ ra của lớp flatten, tỉ lê ̣ dropout (rate) đươ ̣c đă ̣t
là 0.1, nghiã là trong suố t quá trình huấ n luyê ̣n, có 10% các nơ-ron trong lớp
flatten sẽ bi ̣ tắ t mô ̣t cách ngẫu nhiên (1 nơ-ron bi ̣ tắ t khi nó nhâ ̣n giá tri ̣ tro ̣ng số
bằ ng 0).

final_1 = fully_connected (drop_net_1, 512, activation = 'relu')

drop_net_2 = dropout (final_1, 0.5)

Ở lớp fully connected thứ nhất, 512 nơ-ron được sử dụng tham gia vào quá
trình phân loại của mạng, drop out cũng được áp dụng ở lớp này với tỉ lệ là 50%.

Ngõ ra của lớp FC thứ nhất này (sau khi áp dụng drop out) là mô ̣t tensor có
shape [batch_size, 512]

f. Lớp kết nối đầy đủ 2 (FC layer)

final_2 = fully_connected (drop_net_2, 256, activation = 'relu')

drop_net_3 = dropout(final_2, 0.5)

30
Tương tự như lớp FC thứ nhất, lớp FC thứ 2 này cũng sử dụng phương thức
fully_connected() với 256 nơ-ron tham gia vào quá trình phân loại, drop out vơi tỉ
lệ 50% cũng được áp dụng để tránh hiện tượng over fitting cho mạng trong quá
trình huấn luyện. Hàm kích hoạt vẫn là ReLU.

Ngõ ra của lớp FC thứ hai này (sau khi áp dụng drop out) là mô ̣t tensor có
shape [batch_size, 256]

g. Lớp kết nối đầy đủ 3 (FC layer)

Lớp này là lớp cuố i cùng trong ma ̣ng CNN là lớp sẽ trả về mô ̣t vector hàng
chứa các xác suấ t dự đoán của mô hình. Lớp FC cuố i cùng gồ m 7 nơ-ron tương
ứng với 7 cảm xúc mà hệ thống xử lý nhận dạng và activation function là softmax.

Loss = fully_connected(drop_net_3,7,activation='softmax', name='Total_loss')

Ngõ ra cuố i cùng của ma ̣ng CNN là tensor có shape [batch_size, 7].

h. Cấu hình hồi quy (regression)

Ngõ ra của lớp kết nối đầy đủ cuối cùng được đăng ký hồi quy với. Tflearn hổ
trợ phương thức đăng ký hồi quy cùng với việc định nghĩa tối ưu hàm mất mát
(loss fuction) và tốc độ học của mạng. Ở đây, hàm mất mát là hàm
ategorical_crossentropy và tốc độ học được đặt là 0.0001.

self.network = tflearn.regression
(Loss, optimizer = 'Adam' , loss='categorical_crossentropy',
learning_rate=0.0001)
i. Load dữ liệu cho huấn huyện và validation

Để huấn luyê ̣n mô hình bằng TensorFlow, dữ liệu toàn bô ̣ tâ ̣p training set và
toàn bô ̣ tâ ̣p testing set được lưu trong 4 mảng có kích thước lớn. Trong đó image
data và labels data sẽ được lưu riêng trong 2 mảng riêng biê ̣t nhưng vẫn đảm bảo
có thể trích xuấ t thành một că ̣p dữ liệu khi huấ n luyê ̣n.

31
Giá trị các pixel đươ ̣c lưu ở kiể u float32, giá trị các labels đươ ̣c lưu ở kiểu
int32. Cụ thể là 4 mảng data_labels_fer2013, data_set_fer2013,
test_labels_fer2013, test_set_fer2013

̀ h cho mode TRAIN


j. Cấ u hin

Sau khi đinh


̣ nghiã hàm mấ t mát (loss function) cho mô hình là hàm cross-
entropy thì cầ n phải chọn thuật toán để tố i ưu hóa (optimize) giá trị của hàm mấ t
mát trong quá triǹ h training.

Thuật toán tố i ưu hàm mấ t mát được sử du ̣ng nhiề u nhất trong Machine
Learning và đặc biê ̣t trong Deep Learning là Gradien Descent [10]. Có 2 thông số
quan trọng cần phải cấu hình cho thuâ ̣t toán Gradient Descent là điể m khởi đầu và
tốc độ ho ̣c (learning rate). Với điể m khởi đầ u tốt (gầ n điể m nghiê ̣m mà tại đó hàm
mấ t mấ t được tố i ưu), mô hình sẽ hô ̣i tụ nhanh và kế t thúc quá trình huấ n luyê ̣n
sớm. Tuy nhiên điểm bắt đầu có tính chấ t như vâ ̣y rấ t khó tìm, và nế u thuâ ̣t toán
tốt như Gradient Descent thì có thể cho ̣n ngẫu nhiên bấ t kì mô ̣t điể m làm nghiê ̣m
khởi đầ u.

Learning rate là thông số rấ t quan trọng, quyết đinh


̣ đến khả năng hô ̣i tu ̣ và tố c
độ hô ̣i tụ của mô hình. Mă ̣c dù vâ ̣y nhưng không có mô ̣t công thức cu ̣ thể để lựa
cho ̣n learning rate. Viê ̣c lựa chọn giá tri ̣ này phụ thuộc vào từng bài toán và phải
chạy thử nghiê ̣m mô hình cho mô ̣t vài giá tri ̣để cho ̣n đươ ̣c giá tri ̣tố t nhấ t.

k. Đánh giá mô hình

Một khi việc huấn luyện xong mô hình, viê ̣c đánh giá kế t quả của mô hình là
bắ t buô ̣c. Phương pháp đánh giá đươ ̣c sử du ̣ng trong đề tài là tính toán đô ̣ chiń h
xác (accuracy) của mô hình trên tập testing set.

Điểm khác với quá trình huấ n luyê ̣n là bước kiểm tra sẽ đưa lầ n lươ ̣t từng mẫu
vào mô hình đã được ho ̣c các bô ̣ trọng số (sau khi đươ ̣c huấ n luyê ̣n xong) chứ
không đưa vào cùng lúc mô ̣t nhóm mẫu (batch_size)

32
4.2. Dữ liệu sử dụng cho huấn luyện mạng (Training dataset)
Dữ liệu sử dụng cho việc huấn luyện mạng CNN trong đề tài này là tập dữ liệu
tử cuộc thi nhận diện khuôn mặt, dữ liệu mang tên FER2013.

Hình 4.1: 7 cảm xúc khuôn mặt cơ bản trong tập FER2013

FER2013 chứa các ảnh cảm xúc khuôn mặt định dạng ở mức xám có kích
thước 48x48. Các khuôn mặt được trích xuất một cách tự động sao cho khuôn mặt
tập trung ở phần trung tâm và chiếm cùng không gian trong mỗi ảnh. Các khuôn
mặt được phân loại thành 7 cảm xúc cơ bản của con người với cách đánh số tương
ứng: 0 = Giận, 1 = Ghê tỏm, 2 = Sợ, 3 = Vui, 4 = Buồn, 5 = Ngạc nhiên, 6 = Tự
nhiên. Tập dữ liệu được lưu dưới dạng file csv, bao gồm 3 cột: cột đầu tiên là
nhãn cảm xúc được đánh dấu từ 0 đến 6, ứng với 7 cảm xúc của mặt người, cột
thứ 2 là giá trị các điểm ảnh được trải dài thành 1 dòng, và cột cuối cùng để chỉ
định ảnh đó được sử dụng cho mục đích nào.

Hình 4.1: Cấu trúc của tập dữ liệu FER2013

33
Bộ dữ liệu FER được chia thành 3 nhóm chính:
- Training dataset là dữ liệu được dùng để huấn luyện cho mạng.
- Validation dataset là nhóm dữ liệu dùng để kiểm tra độ chính xác của hệ
thống trong quá trình huấn luyện, nghĩa là sau một khoản thời gian huấn
luyện, tùy vào người thiết kế có thể là 50 bước hoặc 100 bước, nhóm dữ
liệu này sẽ được sử dụng để kiểm tra độ chính xác của hệ thống 1 lần
- Test set: là nhóm dữ liệu dùng để đánh giá độ chính xác của hệ thống, sau
khi đã huấn luyện xong.

Cảm xúc Dữ liệu huấn luyện Publish test Private test


Giận 3995 467 491
Ghê tỏm 436 56 55
Sợ 4097 496 528
Vui 7215 895 879
Buồn 4830 653 594
Ngạc nhiên 3171 415 416
Tự nhiên 4965 607 626
Bảng 4.2: Thống kê dữ liệu trong tập FER2013
FER2013 là một tập dữ liệu cảm xúc khuôn mặt lớn sử dụng cho việc huấn
luyện mạng nơ-ron, tuy nhiên việc phân bố dữ liệu không đồng đều giữa các trạng
thái cảm xúc với nhau. Việc này có ảnh hưởng đến kết quả huấn luyện, sẽ được
trình bày ở phần kết quả thực nghiệm của thệ thống.

Hình 4.2: Phân bố dữ liệu trong tập FER2013


34
Bên cạnh đó, FER2013 cũng cho thấy đây là một tập dữ liệu mạng tính thách
thức vì bên cạnh những dữ liệu mang đúng nhãn cảm xúc thì có những ảnh mang
nhãn không đúng hoặc không thể nhận diện được khuôn mặt trong ảnh.

Hình 4.3: Một số ảnh không đúng nhãn trong tập FER2013

4.3. Huấn luyện cho kiến trúc mạng nơ-ron tích chập
4.3.1 Huấn luyện cho mạng CNN
Một mạng nơ ron được huấn luyện nhằm mục đích sao cho với một tập các
vector đầu vào X khi đi qua kiến trúc mạng, có khả năng tạo ra một tập vector ở
ngõ ra theo mong muốn của người thiết kế. Ở đề tài này, tập dữ liệu ngõ vào bao
gồm 11281 ảnh dùng để huấn luyện cho hệ thống.

35
Hình 4.3: Lưu đồ quá trình huấn luyện mạng
Quá trình huấn luyện này được gọi là quá trình huấn luyện có giám sát, nghĩa là
kết quả ở ngõ ra được biết trước, mạng có nhiệm vụ thay đổi các thông số sao cho
ngõ ra gần đúng với cái mong muốn khi có một ngõ vào tương ứng. Ngoài ra,
mạng còn sử dụng một tập gồm 1384 hình ảnh để kiểm tra trong quá trình huấn
luyện.

Sau khi huấn luyện, một tập dữ liệu bao gồm 1353 ảnh được sử dụng dùng để
kiểm tra độ chính xác của hệ thống.

36
Trong quá trình huấn luyện, hệ thống sẽ dựa vào các thông số được khởi tạo
ngẫu nhiên và kết quả sai số của ngõ ra và tập kiểm tra để ra quyết định cập nhật
lại các thông số sao cho sai số ở ngõ ra là nhỏ nhất, hoặc đạt đến một mức mong
muốn. Lan truyền ngược là thuật toán dùng để tính toán và cập nhật lại các thông
số trong mạng, dựa trên thuật toán gradient descent.

Gradient descent là một giải thuật dựa trên việc tính đạo hàm của hàm mất mát
(loss function) để tìm ra điểm cực tiểu của hàm đó.

Hình 4.4: Mô tả thuật toán gradient descent


Có 5 bước để thực hiện huấn luyện cho một mạng nơ-ron:
- Bước 1: Khởi tạo bộ tích chập / kernel với các trọng số ngẫu nhiên. Số
lượng bộ lọc, kiến trúc bộ lọc, kiến trúc… không thay đổi trong quá trình
mạng học, chỉ có trọng số kết nối được thay đổi.
- Bước 2: Bắt đầu dạy cho mạng với hình ảnh ngõ vào đầu tiên theo hướng
truyền tới. Chúng ta đã biết được kết quả của hình ảnh ngõ vào để dạy cho
mạng.
- Bước 3: Tính toán tổng lỗi (error) tại ngõ ra
- Bước 4: Sử dụng phương pháp lan truyền ngược để tính độ dốc
(gradients) của lỗi với lưu ý về trọng số của mạng, sau đó cập nhật trọng
số cho các bộ lọc / kernel để tìm ra lỗi nhỏ nhất ở ngõ ra.

37
- Bước 5: Lặp lại bước 2 đến bước 4 cho toàn bộ hình ảnh nằm trong dữ
liệu đào tạo đã được chuẩn bị sẵn.
Hệ thống được thiết kế với 5 lớp tích chập, 2 lớp kết hợp và một số lớp ReLU
và pooling (Hình 4.1). Lớp kết nối đầy đủ với hàm kích hoạt là softmax và sai số
dựa trên việc tối ưu hóa hàm sai số Crossentropy:

E   ti log( yi ) (4.1)
i

Trong đó, ti là ngõ ra mong muốn và yi là ngõ ra mà hệ thống dự đoán được.

a. Lan truyền ngược của lớp phân loại (classifier)


Lớp phân loại sử dụng hàm kích soft max với hàm mất mát (loss function)
được định nghĩa ở trên

Gọi hj là lớp nơ-ron ẩn trước đó, ta có:

s j   h j w ji
j 1
(4.2)

Chúng ta có thể tính toán đạo hàm của hàm lỗi đối với mỗi trọng số liên kết với
mỗi nơ-ron ở lớp ẩn phía trước bằng cách sử dụng quy tắc dây chuyền (Chain
rule) như sau:

E E si

w ji si w ji
(4.3)

Ta có:

E t
 i
yi yi (4.4)

38
  
2

 si  si 
 e  e  (i  k )
 N sj  N sj 
yi   e  e 
  j 1  j 1  (4.5)
sk 
e sk e si
 (i  k )
  N sj 
2

 e 
  j 1 

 y (1  yi ) (i  k )
 i (4.6)
 yi yk ( y  k)

Từ (4.4) và (4.6), ta có:

E N E yk

si k 1 yk si
E yi E yk
 
yi si k i yk si
 ti (1  yi )   tk yi
k i

 ti  yi  tk
k

 yi  ti (4.7)

39

E E si

w ji si w ji
(4.8)

Do đó, ta có:
E
 ( yi  ti )hi
w ji
(4.9)

Cập nhật trọng số:

 E 
wupdate  w  
 w  (4.10)

Với  là tốc độ học của mạng.


Tốc độ học của mạng là một siêu tham số quyết định đến việc mức điều chỉnh
trọng số của mạng khi tính toán thông số thông qua hàm mất mát. Với tốc độ học
càng nhỏ, thời gian để tối ưu hàm mất mát càng lớn, nghĩa là phải mất một thời
gian lớn để hàm mất mát đạt cực tiểu. Tuy nhiên, với một tốc độ học nhỏ sẽ giúp
chúng ta không bỏ qua điểm cực tiểu trên hàm mất mát.

Hình 4.5: So sánh tốc độ học của mạng

40
b. Lan truyền ngược của lớp kết nối đầy đủ (fully connected)
Lớp kết nối đầy đủ chỉ là một phép nhân giữa ma trận và vector

yk  w k * yk 1 (4.11)

Do đó

E E
 * wkT
yk 1 yk (4.12)

E E
 * yk 1
w k yk (4.13)

c. Lan truyền ngược của lớp hiệu chuẩn tuyến tính (ReLU)
Lớp này có nhiệm vụ chuyển toàn bộ giá trị âm trong kết quả lấy từ lớp tích
chập thành giá trị 0 mà vẫn giữ được sự tin cậy toán học của mạng. Ý nghĩa của
lớp này này chính là tạo nên tính phi tuyến cho mô hình. Ngoài ra, nó còn có tác
dụng giảm lượng tính toán cho các lớp tiếp theo

yk  max(0, yk 1 ) (4.14)

Do đó, ta có:

 0 ( y  0)
E 
  E
yk 1  (others)
 yk (4.15)

d. Lan truyền ngược của lớp pooling


Như đã đề cập ở phần trên, lớp pooling làm nhiệm vụ giảm kích thước của ảnh
nhưng vẫn giữ các thông tin quan trọng nhất trong đó. Các phương thức lấy phổ
biến trong lớp Pooling là MaxPooling (lấy giá trị lớn nhất), MinPooling (lấy giá
trị nhỏ nhất) và AveragePooling (lấy giá trị trung bình). Ở đề tài này, max-
pooling là hàm kích hoạt được sử dụng để thực hiện giảm kích thước dữ liệu
41
0 ( yk ( x, y )  yk 1 ( x  p, y  q)
E 
( x  p, y  q)   E (4.16)
yk 1  y ( x, y ) others
 k

e. Lan truyền ngược lớp tích chập (convolution layer)


Gọi X là ngõ vào, F là cửa sổ tích chập và O là ngõ ra của phép tích chập của X
và F.
n 1 m 1
O( xu ,v )   Fk (i, j ) X u i ,v  j
i 0 j 0 (4.17)

Hình 4.6: Lan truyền ngược của lớp tích chập

E
Quá trình lan truyền ngược ở lớp tích chập nhận sai hàm sai số từ lớp trước
O
đó. Theo nguyên tắt dây chuyền, ta có:

E E O
 *
X O X (4.18)

E E O
 *
F O F (4.19)

42
E
Trong đó, là gradient hàm mất mát của lớp tích chập sẽ được sử dụng cho
X
E
lớp tiếp theo và là gradient của sổ tích chập cần được cập nhật trong quá trình
F
huấn luyện cho mạng.

Tính toán gradient thành phần cho mỗi trọng số:

E N  n M  m E Oab

Fij a 0 b 0 Oab Fij
N n M m
E
  X ( a i )(b  j )
a 0 b 0 Oab (4.20)
Cập nhật trọng số cho cửa sổ tích chập với λ là tốc độ học của mạng

E
Fupdate  F  
F (4.21)

Tính toán sai số để truyền ngược về lớp trước đó. Ở quá trình tích chập theo
hướng truyền ngược này, cửa sổ tích chập phải được lật 180° theo cả chiều dọc
lẫn chiều ngang.

E n 1 m 1
E O( a i )(b j )
 
X ab i 0 j 0 O( a i )(b j ) X ab
n 1 m 1
E
  Fij
i 0 j 0 O( a i )(b j )
(4.22)

43
4.3.2 Kết quả huấn luyện trên tập dữ liệu FER2013
Với thiết kế như đã trình bày ở trên, hệ thống được huấn luyện sử dụng tập dữ
liệu FER2013 bao gồm một tập hình ảnh với kích thước 48x48 pixels được định
dạng ở mức xám. Quá trình huấn luyện được thực hiện qua 100 chu kỳ dữ liệu
(100 epoch) với tổng thời gian huấn luyện khoản 8 giờ.

Trong quá trình huấn luyện, các thông số của mạng được cập nhật liên tục sao
cho sai số ở ngõ ra đạt đến mức nhỏ nhất. Tốc độ học của mạng được đặt là
0.0001. Độ chính xác trong quá trình huấn luyện cũng tăng theo từng chu kỳ dữ
liệu, đạt đến khoản 87% đối với tập huấn luyện, và độ chính xác đối với tập dữ
liệu validation đạt 67% cho toàn bộ quá trình huấn luyện.

Hình 4.7: Độ chính xác trong quá trình huấn luyện và validation

Độ chính xác của quá trình huấn luyện tăng dần theo chu kỳ dữ liệu, trong khi
đó, độ chính xác của validation hầu như thay đổi không đáng kể ở các chu kỳ
huấn luyện về sau.

Sau khi huấn luyện kết thúc, hệ thống được kiểm tra lại với tập private test của
tập FER2013, độ chính xác trên tập này đạt 70.95%.

44
Hình 4.8: Mất mát trong quá trình huấn luyện và validation

Từ ma trận cảm xúc cho thấy, đối với mỗi cảm xúc mà hệ thống dự đoán đúng
chiếm một trọng số rất lớp so với các cảm xúc còn lại không nằm trong dự đoán
của hệ thống. Đối với cảm xúc vui, buồn và tự nhiên chiếm trọng số lớn hơn các
cảm xúc còn lại, do đó khả năng dự đoán cảm xúc của hệ thống với 3 loại cảm xúc
này có độ chính xác cao hơn so với các cảm xúc còn lại. Điều này phù hợp với kết
quả mô phỏng trên webcam được trình bày ở phần sau.

45
Hình 4.8: Ma trận cảm xúc trên tập Private test

4.4. Thiết kế giao diện chương trình (GUI)

Sử du ̣ng thư viê ̣n viện PyQt của Python, xây dựng một giao diện cho mô hình
nhận dạng cảm xúc trên khuôn mặt. Ứng du ̣ng có chức năng cho phép người dùng
load ảnh hoặc video từ webcam tích hợp trên máy tính, là dữ liệu cho quá trình
nhận dạng khuôn mặt. Bên cạnh đó, cảm xúc sẽ được ghi nhận chi tiết và lưu trên
file excel, làm dữ liệu chon những phân tích trong tương lai.
Giao diện được chia ra thành 3 phần cơ bản:
- Phần 1: Hiển thị hình ảnh và video, bao gồm việc hiển thị hình ảnh gốc và
hình ảnh đã dự đoán cảm xúc khuôn mặt
- Phần 2: là phần hiển thị kết quả dự đoán cảm khuôn mặt, bao gồm 2 tab:
tab trả về kết quả và tab trả về chi tiết kết quả dự đoán.
- Phần còn lại là phần thông tin chung và các đối tượng tương tác với người
dùng: load CNN model, load hình ảnh, load camera, cho phép dự đoán
cảm xúc, lưu cảm xúc vào file excel.

46
Hình 4.8: Ma trận cảm xúc trên tập Private test

4.5. Mô phỏng và thực nghiệm

Từ những lý thuyết và kết quả sơ khởi trong phần trên, luận văn này sẽ tiến
hành mô phỏng nhận diện cảm xúc khuôn mặt và thử nghiệm trên các bộ video và
webcam thực tế.
Hệ thống được xây dựng dựa trên nền tảng tensorflow, module TFLearn và
dùng ngôn ngữ python để lập trình. Quá trình mô phỏng được thực hiện trên máy
tính core i5 và sự hổ trợ của GPU NIVIA GeForce 830M
TFLearn là một thư viện sử dụng cho máy học có tính chất module và rõ ràng,
dễ sử dụng, được xây dựng dựa trên nền của Tensorflow. Nó được xây dựng để
cung cấp một cấp độ cao giao diện chương trình ứng dụng - API và làm cho thuận
tiện, đẩy nhanh thời gian thực hiện các thí nghiệm với lượng tính toán lớn.
Tensorflow mà một thư viện mã nguồn mở phát triển bởi Google, được sử dụng
cho những ứng dụng có lượng tính toán lớn. Nó là một kiến trúc linh hoạt phù hợp
với nhiều thiết kế trên nhiều nền tảng khác nhau (CPUs, GPUs, TPUs).
Về cơ bản, hệ thống mô phỏng hoạt động theo lưu đồ đầy đủ như sau:

47
Hình 4.9: Lưu đồ hoạt động của hệ thống nhận dạng cảm xúc
a. Phát hiện khuôn mặt
Khuôn mặt trong từng frame ảnh được trích xuất từ video sẽ được phát hiện
bằng thuật toán Haar cascade. Việc phát hiện nhiều khuôn mặt trong cũng một ảnh
sẽ là cơ sở dữ liệu cho các bước xử lý tiếp theo

Hình 4.10: Phát hiện khuôn mặt bằng Haar cascade

48
b. Trích xuất khuôn mặt
Khung ảnh được lấy vào với nhiều thông tin khác nhau, tuy nhiên vùng chứa
những thông tin cần thiết về khuôn mặt cho những bước xử lý sẽ được trích xuất
(ROI), còn những vùng còn lại sẽ được loại bỏ. Kích thước của ROI sẽ quyết định
đến tốc tính toán và khả năng của hệ thống. Kích thước của ROI càng nhỏ thì việc
xử lý càng nhanh. Ở để tài này, ROI có kích thước là 48x48

(a) Ảnh cần xử lý (b) Vùng ROI được trích xuất


Hình 4.11: Xác định và trích xuất khuôn mặt
c. Chuyển đổi không gian màu
Một bức ảnh thô được trích từ camera thông thường được cung cấp theo định
dạng màu RGB. Theo định dạng này, mỗi điểm ảnh chứa ba kênh màu là : đỏ,
xanh lá cây và xanh dương. Giá trị của ba kênh màu này được kết hợp, tạo thành
màu thật có điểm ảnh này.
Đối với bức ảnh RGB thì việc tính toán, xử lý sẽ phức tạp và khó khăn hơn. Do
đó mục địch của việc biến đổi không gian màu này nhằm nâng cao tốc dộ xử lý
ảnh.

(a) Ảnh RGB vùng ROI b) Ảnh xám vùng ROI

Hình 4.12: Chuyển đổi mức xám

49
d. Kết quả thực nghiệm trên ảnh
Một số ảnh với cảm xúc khuôn mặt có sẵn từ internet được đưa vào hệ thống.
Kết quả thu được từ hệ thống nhận diện cảm xúc như bên dưới.

Hình 4.13: Kết quả nhận diện cảm xúc Vui với tỉ lệ dự đoán là 100%
50
Hình 4.14: Kết quả nhận diện cảm xúc Vui với tỉ lệ dự đoán là 99.74%

Hình 4.15: Kết quả nhận diện cảm xúc Buồn với tỉ lệ dự đoán là 58.67%

51
Hình 4.16: Kết quả nhận diện cảm xúc Giận với tỉ lệ dự đoán là 92.29%

Hình 4.17 Kết quả nhận diện cảm xúc Ngạc nhiên với tỉ lệ dự đoán là 100%

52
Hình 4.18 Kết quả nhận diện cảm xúc Sợ với tỉ lệ dự đoán là 69.81%

Hình 4.19 Kết quả nhận diện cảm xúc nhiều khuôn mặt trên hình
53
e. Kết quả thực nghiệm trên webcam
Hệ thống lấy ngõ vào là video từ webcam tích hợp sẵn trên máy tính.

54
55
Hình 4.20 Kết quả nhận diện cảm xúc khuôn mặt trên video

f. Ghi nhận cảm xúc


Hệ thống được thiết kế có một chức năng cho phép người dùng ghi lại cảm xúc
mà hệ thống dự đoán được trên ảnh / video, các trạng thái cảm xúc được lưu lại
bằng file excel với định dạng như sau:
- Số thứ tự: là số thứ tự của cảm xúc được nghi nhận bởi hệ thống
- Emotions: là cảm xúc mà hệ thống nghi nhận được
- Time: thời gian mà cảm xúc được ghi nhận với định dạng: tháng ngày
năm giờ:phút và sáng hay chiều

Hình 4.21: Kết quả ghi nhận cảm xúc trên file excel

56
g. Nhận xét
Tuy đề tài đã bước đầu chỉ ra những cảm xúc cơ bản trên khuôn mặt người,
nhưng vẫn còn nhiều điểm bất cập:
- Đối với các cảm xúc trên ảnh: Vui, ngạc nhiên, bình thường và giận, hệ
thống nhận diện với tỉ lệ khá tốt (>90%), tuy nhiên đối với cảm xúc
buồn và sợ thì tỉ lệ dự đoán thấp hơn. Riêng cảm xúc ghê tỏm, hệ thống
có tỉ lệ dự đoán thấp nhất.
- Phát hiện khuôn mặt: Với thuật toán phát hiện khuôn mặt hiện tại, một
vài hình ảnh đã ghi nhận sai vị trí khuôn mặt hoặc không phát hiện được
khuôn mặt

Hình4.22 : Phát hiện sai vị trí khuôn mặt

- Sự phức tạp trên cảm xúc khuôn mặt người quá lớn (gần giống nhau
giữa các cảm xúc) nên hệ thống chưa thể nhận dạng đúng hoàn toàn cảm
xúc khuôn mặt người
- Đề tài chỉ mang tính nghiên cứu lý thuyết và mô phỏng trên máy tính.

57
5. Hướng phát triển đề tài
Từ những bất cập đã nêu, đề tài có thể được phát triển theo nhiều hướng khác
nhau một cách linh hoạt và thực tiễn hơn:

- Mặt dù số lượng hình ảnh trong tập dữ liệu FER2013 rất lớn, nhưng với
đặt trưng của tập dữ liệu, rất khó để có được hệ thống với độ chính xác
cao trên tập dữ liệu này. Do đó, để nâng cao độ chính xác, cần thay đổi
tập dữ liệu (CP+, MMI…) hoặc kết hợp thêm các bước tiền xử lý
- Sử dụng các thuật toán để nâng cao độ chính xác phát hiện khuôn mặt,
có thể sử dụng mạng nơ-ron tích chập để phát hiện khuôn mặt
- Xây dựng đề tài trên ứng dụng phần cứng

58
6. Tài liệu tham khảo
[1] Ole Helvig Jensen, “Implementing the Viola-Jones Face Detection
Algorithm”, Technical University of Denmark, 2008

[2] Đinh Xuân Nhất, “Nghiên cứu các thuật toán nhận dạng cảm xúc trên khuôn
mặt 2D”, Đại học Công nghệ - Đại học Quốc gia Hà Nội, 2010

[3] Le Thi-Lan và Dong Van-Thai, “Toward a Vietnamese facial expression


recognition system for human-robot interaction”, Tại Hội nghị Quốc tế về Công
nghệ tiên tiến áp dụng cho Truyền thông, 2011

[4] Arushi Raghuvanshi và Vivek Choksi, “Facial Expression Recognition with


Convolutional Neural Networks”, Stanford University, 2016

[5] Minh-An Quinn, Grant Sivesind, Guilherme Reis, “Real-time Emotion


Recognition From Facial Expressions”, Đại học standford, 2017

[6] Keiron Teilo O'Shea và Ryan Nash, “An Introduction to Convolutional


Neural Networks”, ResearchGrate, 2015

[7] Goodfellow I J, Bulatov Y, Ibarz J, et al. “Multi-digit number recognition


from street view ima gery using deep convolutional neural networks”. arXiv
preprint arXiv:1312.6082, 2013

[8] Lecun Y, Kavukcuoglu K, Farabet C. “Convolutional networks and


applications in vision”, Circuits and Systems (ISCAS), Proceedings of 2010
IEEE International Symposium on. IEEE, 2010:253 - 256.

[9] Sebastian Ruder, “An overview of gradient descent optimization


algorithms*”, arXiv:1609.04747v2 [cs.LG] 15 Jun 2017

[10] Ali Mollahosseini, David Chan, and Mohammad H. Mahoor “Going deeper
in facial expression recognition using deep neural networks”. CoRR,
abs/1511.04110, 2015

59
[11] Shrija Mishra, Geeta Ramani Bala Prasada, Ravi Kant Kumar và Goutam
Sanyal, “Emotion Recognition Through Facial Gestures - A Deep Learning
Approach”, India, tháng 11 năm 2017

[12] Izard, C.E.: “Human Emotions”, Springer, New York, 2013

[13] Lopes, A.T., de Aguiar, E., De Souza, A.F., Oliveira-Santos, T.: “Facial
expression recognition with Convolutional Neural Networks: coping with few
data and the training sample order”. Pattern Recogn. 61, 610–628, 2017

[14] LeCun, Y.: LeNet-5, Convolutional Neural Networks, 2015

[15] Adam P. Piotrowski , Jarosław J. Napiorkowski, “A comparison of methods


to avoid overfitting in neural networks training in the case of catchment runoff
modelling”, tạp chí Hydrology, 2013

[16] https://www.tensorflow.org/

[17] http://tflearn.org/

60
Cách chạy chương trình:
1. Yêu cầu cài đặt
- Tensorflow (for windows)
- Tflearn (mới nhất)
- Python 3.6.2
- OpenCV-python
- PyQt5
2. Mở command prompt, đi đến folder chứa file cnn.py
3. Chạy file cnn.py thông qua lệnh python cnn.py và enter

4. Click vào Load CNN trên giao diện, chương trình sẽ hiển thị thông báo bắt đầu
và kết thúc quá trình load model, click Ok.

61
5. Sau khi load cnn model, click Start webcam hoặc load picture (chọn 1 hình) để
chuẩn bị cho bước nhận diện cảm xúc
6. Click Start emotion REC, chương trình sẽ trả về cảm xúc dự đoán trên khuôn
mặt (sau 10 giây cho ảnh đầu tiên, các ảnh sau sẽ hiển thị ngay)

7. Click Record emotion, trên tab result sẽ hiển thị cảm xúc hiện tại trên khuôn
mặt, tab Detail of prediction (%) sẽ hiển thị tỉ lệ hệ thống dự đoán cảm xúc trên
khuôn mặt đó.
8. Sau khi kết thúc quá trình nhận diện cảm xúc, click Save emotions to file để
lưu cảm xúc được dự đoán vào file excel mang tên: Emotion_log.xlsx, được
lưu chung folder với cnn.py

62

You might also like