[Real-Time Emotion Detection] Xây dựng mạng nhận diện cảm xúc khuôn mặt cho người mới bắt đầu

Tram Ho

1. Introduction

Xin chào các bạn, kết thúc 2 bài viết về object segmentation với MaskRCNN sẽ là các bài viết về Face Detection, thì hôm nay trong bài viết đầu tiên trong series mình xin giới thiệu tới các bạn cách xây dựng mạng cho bài toán nhận diện cảm xúc. Bài toán không còn xa lạ với mọi người nhưng mình nghĩ nó rất thiết thực với các bạn mới tìm hiểu về AI có thể tiếp cận dễ dàng hơn. Mình hi vọng qua bài toán này sẽ giúp các bạn hiểu về các bước khi mà training một mô hình sẽ như thế nào cũng như tiếp cận dễ với keras hoặc tensorflow2.

2. Dataset

Trong bài viết này mình sử dụng bộ dataset FER2013, một bộ dataset phổ biến với 35,887 grayscale ảnh khuôn mặt có kích thước 48×48 pixels. Bộ data gồm 7 loại: Angry, Disgust, Fear, Happy, Sad, Surprise, and Neutral. Các bạn có thể dowload bộ dữ liệu theo link phía dưới của mình

Những hình ảnh dữ liệu này thì đã được lưu trữ dưới dạng file csv
Hàng đầu tiên sẽ là là tên 3 cột: emotion, pixels, usage. Còn lại 35,887 row sẽ lưu thông tin của từng ảnh với các chỉ số sau: (0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral ).
LInk dowload dataset: https://www.kaggle.com/deadskull7/fer2013

3. Xây dựng và training mô hình

Bài viết của mình muốn hướng tới các bạn mới tìm hiểu cũng như tiếp cận với AI nên mình sẽ hướng dẫn các bạn cụ thể từng bước, nếu bạn nào biết rồi thì có thể bỏ qua nhé. Mình sử dụng google colab để training các bạn có thể training.

B1: Mount drive

Sau đó các bạn ấn đường link phía dưới, chọn drive mình muốn liên kết rồi copy mã là oki.

B2: Import các thư viện cần dùng

Trong bài viết này mình sử dụng thư viện keras

Sau khi gọi xong các thư viện mình cần sử dụng thì bước tiếp theo chúng ta sẽ xử lý data, thì trong bộ dữ liệu đã được chia sẵn dữ liệu training và dữ liệu test.

Sau khi load xong dữ liệu và chia dữ liệu thành training và test thì mình cần xử lý dữ liệu và chuyển y thành dạng category:

B3: Khởi tạo mô hình

Các bạn có thể thử tạo thêm các lớp convolution cũng như các lớp nhé:
Sau đó mình sẽ summary xem kiến trúc mô hình mình vừa tạo:

B4: Training mô hình


Trong bài viết tiếp theo mình sẽ cùng các bạn thảo luận kĩ hơn về các kĩ thuật training mô hình để tránh overfitting cũng như tăng độ chính các của mô hình.
Sau khi training xong mô hình thì mình sẽ save weight lại 1 file h5

4. Detecting Real-Time Emotion

Như mình đã nói ở trên thì trong bài viết này mình sẽ dùng mô hình đã training được để phát hiện cảm xúc khuôn mặt real-time.
Trước tiên thì bạn cần load weight mà đã được lưu, việc detect khuôn mặt thì mình đã dùng 1 hàm của opencv2 đó là cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’) thì trong bài viết sau mình sẽ cùng các bạn xây dựng 1 mô hình nhận diện khuôn mặt, hãy follow để xem bài viết tiếp theo của mình nhé.

Vậy là đã xong cùng tận hưởng thành quả. Bài viết của mình tới đây là kết thúc, cảm ơn các bạn đã theo dõi bài viết của mình. Đừng tiếc 1 nút click để upvote cũng như follow để mình có thêm động lực viết bài nhé.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo