Trí tuệ nhân tạo đánh đánh giá độ đẹp trai, xinh gái của bạn ra sao…??? – Xây dựng Model Deep Learning cho bài toán Beauty Evaluate

Tram Ho

Làm thế nào để bạn biết mình đẹp trai, xinh gái ra sao nếu không dựa vào người khác đánh giá???

Và câu trả lời là AI sẽ làm điều đó cho bạn, hôm nay mình sẽ giới thiệu đến các bạn cách xây dựng một bài toán rất hay và thú vị mang tên “Beaty Evaluate”. Sử dụng deep learning train với bộ dữ liệu SCUT-FBP5500 để ra được model “tối thượng” để dự đoán được độ đẹp zai xinh gái của bạn như thế nào, code mình sẽ để ở dưới cuối bài viết nhá… Còn bây giờ thì let’s begin now =))

Lý thuyết

Tản mạn về DATASET

Bộ dữ liệu SCUT-FBP5500 gồm tổng 5500 mặt của nam, nữ, châu á, người nước ngoài, già, trẻ … và nhãn đa dạng (landmark, điểm số sắc đẹp trong 5 thang điểm, phân phối điểm số sắc đẹp) cho phép mô hình tính toán khác nhau với các mô hình dự đoán sắc đẹp khuôn mặt khác nhau. Bộ dữ liệu có thể được chia thành bốn tập hợp con với các chủng tộc và giới tính khác nhau, bao gồm 2000 phụ nữ châu Á (AF), 750 phụ nữ da trắng (CF) và 750 nam giới da trắng (CM). Hầu hết các hình ảnh của SCUT-FBP5500 được thu thập từ Internet.

Các bạn có thể đọc thêm chi tiết ở paper này tại đây và down bộ dữ liệu tại đây

Training/ Testing set split

Ở trong Dataset down về thì đã split cho chúng ta thành hai thử nghiệm:

  • 5-folds cross validation, với mỗi validation 80% samples (4400 ảnh) được sử dụng cho đào tạo và phần còn lại 20% (1100 ảnh) được sử dụng để thử nghiệm.
  • Thử nghiệm thứ 2 là chia thành 60% cho tập training và 40% cho tập testing.

Đây là label của bộ dữ liệu train, và như bạn đã thấy nó đều được gán nhãn với từng ảnh + số điểm sắc đẹp của họ bên cạnh.

Và đây là một số hình ảnh theo từng label tương ứng:

Thực Hành

Ô khê ô khê, xong phần lý thuyết thì giờ là đến phần mình thích viết nhất nào =))

Chia dữ liệu

Sử dụng hàm này để get labels và chỉ lấy mỗi đường dẫn ảnh trong file ALL_labels.txt và bỏ phần điểm số đi.

Ở đây mình dùng tập đã split thành 60% training và 40% testing

Dùng cv2.imread để đọc ảnh đầu vào và lưu vào trong RAM dưới dạng array. lưu ý: Mình chỉ sử dụng cách này tạm thời vì nó tiện :v , còn mình khuyến khích các bạn nếu mà code thì nên lưu nó vào dưới dạng một file để tiện lần sau lấy ra train luôn chứ ko phải thực hiện bước này nữa, nếu mà bạn dùng gg colab bạn sẽ hiểu mình ns thôi :v .

Cuối cùng là reshape lại để cho vào mạng train với kích cớ là 224×224 và 1 chà neo:

Loss function

Ở đây mình sẽ dùng RMSE để làm loss vì nó phù hợp với bài toán hay nói trắng ra là theo paper :v , các bạn có thể đọc về RMSE tại đây

Build Model

  • Model với ảnh đầu vào là 224×224 và 1 chà neo
  • 7 lớp conv2D và và tối đa 1024 filters cho một lớp
  • 7 2D MaxPools
  • 2 FC

Mạng ở đây mình dùng là của một thanh niên tung của(mình để ở phần RF cuối bài) nhưng mình đã chỉnh lại theo ý của mình bằng cách thêm một lớp Conv2D, đặt dropout và resized ảnh lên thành 224×224, mạng ban đầu của họ là 7 triệu tham số, sau khi mình chỉnh thì đã lên con số 30 triệu :v

Training

Mình cũng dùng sgd thay cho adam vì tính ổn định của nó( ban đầu mình cũng đã thử dùng adam nhưng loss nó nhảy cóc quá) , đặt EarlyStopping để khi nào val_loss không tăng thì quá 10 ep thì tự nó dừng và đặt checkpoint để lưu lại model tối ưu nhất

Đây là kết quả sau khi training của mình, loss ở con số khoảng 0.28 và mô hình khá là perfect fit :v
Một số bạn có thể thắc mắc tại sao không augmentation với ảnh để cho kết quả train tốt hơn, trả lời là mình đã thử rồi và nó chả tăng được là bao nhiêu 😃)

Result

sau khi đã có model thì ta phải xây dựng code để load model cũng như show kết quả, mình dùng opencv để detect kết quả vì nó nhanh =)), Mà ở đây ảnh sẽ được tính theo thang từ 1-5 (1 là xấu/đzai nhất 5 là xinh/đzai nhất :v)

Một số kết quả thu được:

Công chúa thuỷ tề Tùng Sơn :v

Tom Hiddleston với số điểm khá cao

Bà này mình chịu, gõ model trên gg xong ra :v

Các bạn có thể vào đây để test thử nhé: http://beauty.quangph.ml/

Link source code: Tại Đây

Bài viết của mình đến đây là hết rồi, có gì sai và không hiểu mong các bạn góp ý ở dưới cmt nhé, và hãy upvote cho mình vì một tương lai tươi đẹp nhất giữa chúng ta nhé, cảm ơn các bạn nhiều, hẹn các bạn trong bài viết tiếp theo 😃)

Reference

  1. https://github.com/HCIILAB/SCUT-FBP5500-Database-Release
  2. https://github.com/ustcqidi/BeautyPredict
  3. https://medium.com/datadriveninvestor/beauty-evaluator-with-cnn-how-do-you-compare-to-scarlett-johansson-d4f4cddce010
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo