Mạng nơ-ron trong đề tài này được sử dụng để mã hóa khuôn mặt. cụ thể là dùng để tính 128 giá trị định lượng của khuôn mặt. Quá trình đào tạo mạng nơron được thực hiện như Hình 3.12 bằng cách để máy tính nhìn ba bức ảnh cùng một thời điểm: 2 ảnh của cùng một người, và 1 ảnh còn lại là của một người khác. Sau đó, thuật toán sẽ khởi tạo
44
ngẫu nhiên 128 giá trị đo lường. Sau đó nó sẽ thay đổi các trọng số này từ từ để giá trị tìm ra từ ảnh (#1) và (#2) ngày càng giống nhau, và giá trị từ ảnh (#2) ngày càng khác ảnh (#3) [18].
Hình 3.12: Quá trình đào tạo mạng nơ-ron
Sau khi lặp lại quá trình này hàng triệu lần với hàng triệu bức ảnh của hàng ngàn người khác nhau, mạng nơ-ron học được cách tạo ra 128 đo lường cho mỗi người. Bất kể 10 ảnh khác nhau nào của 1 người sẽ cho kết quả gần giống nhau.Vector 128 chiều hay còn gọi là 128 giá trị định lượng khuôn mặt này được gọi là embedding. Ý tưởng giảm chiều dữ liệu thô sang đại diện đo lường tạo ra từ máy tính xuất hiện rất nhiều trong học máy đặc biệt là trong dịch thuật.
Quá trình đào tạo mạng nơ-ron tích chập để gắn mã cho khuôn mặt yêu cầu rất nhiều dữ liệu và năng lượng máy tính. Thậm chí, với một thẻ đồ họa NVida Telsa đắt tiền cũng cần phải đợi 24h đào tạo liên tục để có một kết quả tốt. Nhưng một khi mạng đã được đào tạo nó có thể tạo ra đo lường cho bất kỳ khuôn mặt nào, thậm chí khuôn mặt chưa từng nhìn thấy trước đây. Quá trình này chỉ cần làm một lần và thật may mắn, OpenFace
45
đã thực hiện điều đó. Họ đã công bố một vài mạng nơ-ron đã được đào tạo và chúng ta có thể sử dụng trực tiếp.
Việc cần làm là truyền hình ảnh khuôn mặt vào mạng nơ-ron đã được đào tạo đó để lấy ra 128 đo lường cho mỗi khuôn mặt. Mạng nơ-ron sử dụng trong đề tài này là một model ResNet được cung cấp bởi Dlib, nó dựa trên nền tảng là mạng ResNet-34 được lấy từ bài báo “Deep Residual Learning for Image Recognition”[25] được công bố bởi Kaiming He và các đồng nghiệp, nhưng nó sử dụng 27 lớp tích chập và số bộ lọc thì giảm một nửa.
Mạng nơ-ron trên được đào tạo bởi Davids King với một tập dữ liệu gần 3 triệu hình ảnh. Các dữ liệu ảnh huấn luyện của mạng nơ-ron nói trên được lấy từ The Face Scrub Dataset, The VGG Dataset và một số còn lại thì được lấy từ Internet, tất cả chúng đều được chọn lựa dựa trên Labeled Faces các khuôn mặt được dán nhán trong tiêu chuẩn Wild (LFW)[22], so sánh với các mạng nơ-ron hiện có thì mạng nơ-ron của Davids King có độ chính xác tương đối ấn tượng với độ chính xác là 99.38%. Hình 3.13 dưới đây là kết quả khi sử dụng mô hình trên cho việc trích xuất các giá trị đặc trưng của khuôn mặt.
Hình 3.13: Một ví dụ về mã hóa khuôn mặt sử dụng mạng ResNet
Phương pháp trích chọn đặc trưng sử dụng các lớp mạng nơ-ron học sâu Facenet. Đây là mô hình có khả năng học từ tập mẫu cho trước nhằm tự động phát hiện các đặc trưng
46
quan trọng nhất để nhận dạng đối tượng. Ý tưởng chính của hướng tiếp cận này dựa trên việc học một không gian Euclidean nhúng ứng với mỗi ảnh sử dụng một cấu hình mạng nơ-ron tích chập học sâu. Mạng được huấn luyện sao cho khoảng cách L2 bình phương trong không gian nhúng là tương ứng trực tiếp với độ tương tự của khuôn mặt. Cụ thể là các khuôn mặt của cùng một người sẽ có khoảng cách nhỏ và các khuôn mặt cùa các người khác nhau sẽ có khoảng cách lớn.
Hình 3.14: Cấu trúc mạng Facenet
Cấu trúc mô hình, mạng bao gồm khối lớp vào (batch), đi qua cấu trúc mạng nơ-ron tích chập sau đó chuẩn hóa theo 𝐿2 và đưa vào hệ thống nhúng. Trong quá trình huấn luyện có sử dụng bộ ba sai số.
47
Hình 3.15: Kiến trúc của mạng ResNet34
Hình 3.15 mô tả kiến trúc của mạng ResNet34 được sử dụng trong hệ thống nhận dạng khuôn mặt đã được tác giả David King sử dụng để đưa vào mô hình nhận dạng khuôn
48
mình. Mô hình mạng gồm có 34 lớp, sử dụng 5 tầng lớp tích chập với số lượng từng kernel trượt trong mỗi lớp tích chập được thể hiện ở hình 3.16 bên dưới:
Hình 3.16: Số lượng các kernel chập trong mỗi lớp tích chập của mô hình mạng ResNet34
Ý tưởng chính của ResNet là sử dụng kết nối tắt đồng nhất để xuyên qua một hay nhiều lớp. Một khối như vậy được gọi là một residual block như trong hình 3.17 dưới đây.
Hình 3.17: ResNet sử dụng kết nối tắt xuyên qua một hay nhiều lớp
Với việc xếp chồng các lớp sẽ không làm giảm hiệu suất mạng. Kiến trúc mạng ở đây có thể đơn giản xếp chồng các ánh xạ đồng nhất lên mạng hiện tại và hiệu quả của kiến trúc không thay đổi. Điều này giúp cho kiến trúc sâu ít nhất là không kém hơn kiến trúc nông. Hơn nữa, với kiến trúc này, các lớp ở phía trên có được thông tin trực tiếp hơn từ các lớp dưới nên sẽ điều chỉnh trọng số hiệu quả hơn.ResNet gần như tương tự với các mạng gồm có convolution, pooling, activation và fully-connected layer. Hình ảnh bên trên 3.17 hiển thị khối dư (Residual block) được sử dụng trong mạng ResNet. Xuất hiện
49
một mũi tên cong xuất phát từ đầu và kết thúc tại cuối khối dư. Với H(x) là giá trị dự đoán, F(x) là giá trị thật (nhãn), và tác giả của mô hình mạng mong muốn H(x) bằng hoặc xấp xỉ F(x) , nghĩa là H(x)= F(x)+x.
3.4.2.2 Hệ thống nhận dạng cảm xúc
3.4.2.2.1 Lưu đồ xử lý của hệ thống nhận dạng cảm xúc
Hình 3.18: Lưu đồ xử lý của hệ thống nhận dạng cảm xúc
Dữ liệu ngõ vào là ảnh hoặc video có sẵn được lưu trữ trong kit Raspberry Pi 4 hoặc luồng video trực tuyến được quay bởi camera được kết nối với Raspberry Pi. Nếu là video hoặc luồng video trực tuyến thì sau khi qua quá trìnhtiền xử lý, video được cắt ra thành những khung ảnh tĩnh. Các ảnh này tiếp tụcđược xử lý đưa về ảnh xám, nhận dạng
50
và tách khuôn mặt ra khỏi ảnh bằng phươngpháp Haar-like của OpenCV[24]. Qua giai đoạn tiền xử lý, hình ảnh khuôn mặt trả về ma trận có tọa độ gồm chiều dài, chiều rộng và chiều cao, sau đó giảm độ phân giải của ảnh xuống phù hợp với mô hình của mạng CNN và chuyển đổi ảnh xámsang ảnh nhị phân. Từ ảnh nhị phân, hệ thống sẽ lấy ra các đặc trưng riêng của từng cảm xúc. Tiếp theo, các đặc trưng đó sẽ được đưa vào mạng CNN để tiến hành so sánh với các dữ liệu đã được huấn luyện trước và dự đoán cảm xúc trong hình ảnh đó. Cuối cùng, mô hình xuất ra hình ảnh đã được gắn nhãn cảm xúc và hiển thị lên màn hình.
3.4.2.2.2 Mô hình mạng CNN được dùng để nhận dạng cảm xúc
Hinh 3.19: Kiến trúc mạng CNN được dùng trong hệ thống
Ảnh đầu vào là ảnh xám nhị phân chứa khuôn mặt người có kích thước 48x48. Ảnh qua xử lý trở thành ma trận 2 chiều được đưa vào mô hình CNN. Quá trình huấn luyện trong CNN là sự kết hợp của các lớp như lớp chập, lớp ReLU, lớp MaxPooling, lớp chuẩn hóa (Batch normalization) và lớp chập tách biệt (Separable Conv2D). Lớp kết nối đầy đủ trong mô hình CNN truyền thống được xóa bỏ trong mô hình này. Với việc bỏ đi lớp kết nối đầy đủ giúp cắt giảm số lượng tham số ở cuối trong mô hình CNN truyền thống nhằm tăng tốc thời gian chạy thuật toán và khái quát hóa tốt hơn (quá cao số lượng tham số so với kích thước tập huấn luyện có thể gây ra quá khớp)
51
Đầu tiên, ảnh đầu vào được chập với 8 bộ lọc kích thước 3x3. Bộ lọc sẽ lần lượt được dịch chuyển với một bước trượt chạy dọc theo ảnh và quét toàn bộ ảnh. Tiếp theo, toàn bộ ảnh được thêm vào lớp chuẩn hóa giúp bình thường hóa đầu ra, các hệ số trở nên cân bằng hơn (không quá nhỏ hoặc quá lớn) vì thế sẽ giúp mô hình dễ hội tụ hơn. Sau đó kích hoạt lớp ReLU được đính kèm để phi tuyến, sau quá trình này thu được 8 ma trận phi tuyến có kích thước 24x24. Lớp chập và lớp chuẩn hóa thứ hai thực hiện tương tự, đầu ra sau xử lý vẫn là 8 ma trận có kích thước 24x24. Kết quả ở ngõ ra sau lớp chập thứ hai sẽ được xử lý gồm: lớp chập tách biệt tích chập theo chiều sâu với 16 bộ lọc 3x3, sau đó được chuẩn hóa bởi lớp chuẩn hóa, kích hoạt lớp ReLU, thực hiện thêm một lần chập tách biệt với 16 bộ lọc 3x3 và lớp chuẩn hóa trước khi đưa vào lớp MaxPooling là một ma trận có kích thước 3x3 với bước trượt bằng 2, sau quá trình này thu được 16 ma trận có kích thước 12x12; ở nhánh còn lại thêm một lượng tích chập với 16 bộ lọc 1x1, ở quá trình của nhánh này cũng thu được 16 ma trận có kích thước 12x12 với mục đích điều chỉnh trọng số của đặc trưng khi tính gộp kết quả với quá trình tính chập tách biệt. Sau quá trình ở khối A thu được 16 ma trận có kích thước 12x12. Thực hiện tương tự và lặp lại ở khối A lần lượt với số lượng các bộ lọc 3x3 là 32, 64 và 128, kết quả sau khi qua các lần lặp lại ở khối A là 32 ma trận có kích thước 6x6, 64 ma trận có kích thước 3x3 và 128 ma trận có kích thước 2x2. Đem kết quả cuối cùng đem chập với 7 bộ lọc (tương ứng 7 loại cảm xúc). Kết quả tính toán của CNN được chuyển vào khối giá trị trung bình toàn cục (chuyển kết quả 2D thành vector), kết quả này được xử lý qua một lớp softmax để trả về xác suất của từng loại cảm xúc.
3.4.2.2.3 Tập dữ liệu
3.4.2.2.3.1 Tập dữ liệu mẫu có sẵn
Tập dữ liệu mẫu có sẵn được sử dụng trong hệ thống nhận dạng cảm xúc này là tập dữ liệu FERC-2013[2]. Tập dữ liệu này chứa khoảng 35.000 hình ảnh trắng đen có độ phân giải thấp chỉ chứa khuôn mặt cho cảm xúc tự nhiên, tập dữ liệu này được sử dụng
52
cho cuộc thi “Thách thức nhận dạng cảm xúc thông qua khuôn mặt” vì vậy nên đảm bảo được yêu cầu về số lượng tập mẫu, chất lượng và độ sạch của hình ảnh. Đối với mỗi hình ảnh dùng cho quá trình kiểm tra, cá nhân thực hiện đề tài sử dụng bộ đặc trưng Haar- Cascade của open-cv để phát hiện khuôn mặt. Khuôn mặt sau khi được phát hiện sẽ được cắt hình ảnh chỉ chứa khuôn mặt, sau đó thay đổi kích thước và được chuyển đổi thành ảnh đen trắng có kích thước là 48x48.
Hình 3.20: Một số hình ảnh trong tập dữ liệu mẫu
Tập dữ liệu với định dạng “.csv” chứa hai cột là cảm xúc và pixel. Cột cảm xúc có chứa các số từ 0 đến 6, đại diện cho 7 cảm xúc cơ bản hiện diện trong hình ảnh. Cột pixel chứa một chuỗi dữ liệu được bỏ trong dấu ngoặc kép cho mỗi hình ảnh. Nội dung của chuỗi này là các giá trị pixel được phân tách bằng dấu cách.
Bảng 3.1: Bảng phân loại số lượng cảm xúc trong tập dữ liệu mẫu FERC-2013[2] Số thứ tự Cảm xúc Số lượng ( hình ảnh ) Tỉ lệ ( % )
1 Giận dữ 4954 13.81 2 Khó chịu 547 1.52
53 3 Sợ hãi 5121 14.27 4 Vui vẻ 8989 25.05 5 Buồn 6077 16.93 6 Ngạc nhiên 4002 11.15 7 Bình thường 6198 17.27 8 Tổng 35888 100
Hình 3.21: Biểu đồ số lượng cảm xúc trong tập dữ liệu mẫu FERC-2013[2]
3.4.2.2.3.2 Tập dữ liệu riêng
Tập dữ liệu riêng được tạo ra nhằm mục đích kiểm tra độ chính xác của mô hình CNN được huấn luyện. Tập dữ liệu riêng bao gồm: tập dữ liệu A và tập dữ liệu B. Trong đó, tập dữ liệu A là hình ảnh được lấy từ webcam máy tính, điện thoại và các thiết bị hỗ trợ chụp ảnh khác. Tập dữ liệu bao gồm 10 người trong đó có 3 nữ và 7 nam. Mỗi hình ảnh
54
là một cảm xúc với cường độ khác nhau và sự mở rộng các góc cạnh của khuôn mặt. Với số lượng người tham gia thực nghiệm trên, tập dữ liệu sẽ có tổng cộng 310 hình ảnh được chia cho 7 loại cảm xúc. Hình ảnh dùng cho quá trình kiểm tra là hình ảnh màu trong các điều kiện môi trường khác nhau. Tập dữ liệu B là hình ảnh được lấy từ tập dữ liệu CK+ [21]. Tập dữ liệu bao gồm 700 hình ảnh được lựa chọn từ tập dữ liệu trên. Hình ảnh dùng cho quá trình kiểm tra là hình ảnh xám với những người được khảo sát có giới tính và màu da khác nhau. Số lượng hình ảnh trong tập dữ liệu riêng được thể hiện ở bảng 3.2 và hình 3.5.
Bảng 3.2: Bảng phân loại số lượng cảm xúc trong tập dữ liệu riêng Số thứ tự Cảm xúc Số lượng hình ảnh tập mẫu A Số lượng hình ảnh tập mẫu B 1 Giận dữ 30 100 2 Khó chịu 10 10 3 Sợ hãi 30 60 4 Vui vẻ 80 150 5 Buồn 40 80 6 Ngạc nhiên 40 80 7 Bình thường 80 140 8 Tổng 310 620
55
Hình 3.22: Biểu đồ phân loại số lượng cảm xúc trong tập dữ liệu riêng