Professional Documents
Culture Documents
HCM
CHHOEUNG YEAN
Mã số: 1678001
1
TP.HỒ CHÍ MINH, tháng 12 năm 2018
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ó).
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
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ố
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ố.
Chhoeung Yean
7
Mục lục
1. Tổng quan:..................................................................................................................................... 9
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
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:
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
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
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
- 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.
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.
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
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.
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%
Đố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
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.
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
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).
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.
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.
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 Wlk
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
e
i 1
xi
(3.4)
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
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.
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
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:
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.
Ở đâ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).
Ở 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]
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]
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.
Ngõ ra cuố i cùng của ma ̣ng CNN là tensor có shape [batch_size, 7].
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
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.
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.
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.
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 đó.
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
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)
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
Mà
E E si
w ji si w ji
(4.8)
Do đó, ta có:
E
( yi ti )hi
w ji
(4.9)
E
wupdate w
w (4.10)
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)
Và
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)
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)
Và
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.
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
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
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
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
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
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
- 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
[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
[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
[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