Xây dựng model dự đoán tuổi qua khuôn mặt – Age Prediction model

Hello xin chào anh em, hôm nay chúng ta sẽ cùng nhau xây dựng model dự đoán tuổi qua khuôn mặt – Age Prediction model nhé.

Chắc hẳn các anh em đã nghe nói và xem SharkTank Việt Nam thấy có vụ startup làm một kios bán hàng, khi khách hàng đến đứng trước camera sẽ dự đoán được tuổi, giới tính của khách để suggest những mặt hàng phù hợp đúng không? Phải nói là mình rất thú vị và ấn tượng với bài toán đó của họ và hôm nay chúng ta sẽ cùng làm thử nhé.

Phần 1. Chuẩn bị nguyên vật liệu

Chúng ta tạo thư mục MiAI_Age_Prediction để lưu bài làm nhé. Sau đó các bạn chạy lệnh git sau để lấy mã nguồn về:

git clone https://github.com/thangnch/MiAI_Age_Prediction .

Sau đó các bạn tạo các thư mục sau trong folder MiAI_Age_Prediction

  • data: Thư mục này chứa dữ liệu ảnh để train
  • models: Thư mục này chứa các model pretrain, và train của bài toán

Rồi, bây giờ tiến hành tải các dữ liệu cần thiết nhé:

  • Tải dữ liệu ảnh: Chúng ta sẽ sử dụng kho ảnh của WIKI để train. Dữ liệu khá đầy đủ cả mặt ,cả ngày tháng năm sinh và tuổi tác để train. Các bạn tải file tại đây và giải nén, sau đó chỉ copy file các file và folder bên trong (bỏ folder wiki_crop đi nhé) vào thư mục data
  • Tải file xml của haarcascade để phát hiện khuôn mặt tại đây và đặt vào trong thư mục models
  • Tải pretrain weights của mạng VGGFace tại đây và cũng cho vào thư mục models luôn.

Đã xong, giờ tiến hành cài đặt thư viện nào, lại lệnh thần thánh sau:

pip install -r setup.txt

Pha cốc cà phê ngồi tán chuyện chờ cài xong là chơi tiếp.

Phần 2. Tư tưởng bài toán

Bài toán này sẽ thực hiện như sau, khá đơn giản thôi!

Với bước train:

  • Load dữ liệu train vào và tính toán, xử lý dữ liệu cho phù hợp
  • Sử dụng mạng VGGFace và có customize thêm vài layer cuối kết thúc bằng layer softmax để Predict tuổi (từ 0-100).
  • Đưa dữ liệu vào train cho tới khi model có hàm loss hội tụ.

Với bước test:

  • Đọc ảnh từ webcam
  • Crop lấy khuôn mặt, convert thành tensor và đưa vào mạng đã train để predict
  • Hiển thị khung quanh mặt và tuổi kèm theo.

Okie, giờ đến bước cụ thể hóa bằng code.

Phần 3. Tiến hành code model dự đoán tuổi qua khuôn mặt

Các bạn để ý sẽ có 2 file là train_model.py và test_model.py. Như tên gọi của nó, 1 file để train còn 1 file để test.

Các hàm, các dòng lệnh mình đã comment đầy đủ trong code, các bạn mở ra xem và kết hợp với phần tư tưởng ở trên là hiểu được code nhé.

dự đoán tuổi

Nếu có khó khăn gì , hoặc có gì cần hỏi thêm các bạn cứ post lên Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup để cùng thảo luận nhé.

Phần 4. Train model

Các bạn đã có ảnh trong thư mục data, có các pretrain model trong thư mục models. Giờ các bạn chạy file train_model.py bằng lệnh

python train_model.py

Sau đó ngồi đợi cho model train xong, tùy cấu hình máy, tùy vào ý đinh của các bạn mà các bạn có thể điều chỉnh số epochs train cho phù hợp nhé.

dự đoán tuổi

Phần 5. Test model dự doán tuổi

Ngon rồi, giờ các bạn đã train xong, các bạn sẽ thấy có một file age_model_weights.h5 trong thư mục models, đó chính là file saved model đó. Bạn nào ngại train có thể tải luôn file pretrain mình để ở đây và ném vào thư mục models là xong.

Bây giờ chúng ta chạy lệnh:

python test_model.py 

và đưa khuôn mặt vào webcam đi nào. Nó sẽ nịnh bạn tý nhé, bạn sẽ được dự đoán trẻ hơn thường lệ. Đố các bạn biết tại sao lại thế 😀

Vâng, như vậy là đã hết bài rồi, trong bài này mình tổng kết lại các bạn đã biết dùng VGGFace, biết sử dụng pretrain weights, biết customize mạng để gắn thêm softmax phục vụ nhu cầu của mình.

Chúc các bạn thành công!

Hãy tham gia cộng đồng Mì AI nhé:

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube

Related Post

22 Replies to “Xây dựng model dự đoán tuổi qua khuôn mặt – Age Prediction model”

  1. Bác cho hỏi bị lỗi này khắc phục sao ạ. Cám ơn!
    Admin@PC1GHJ2AS3 MINGW64 /d/MiAI_Age_Prediction
    $ pip install -r setup.txt
    Requirement already satisfied: numpy in c:\users\admin\appdata\local\programs\python\python37-32\lib\site-packages (from -r setup.txt (line 1)) (1.17.2)
    Collecting keras (from -r setup.txt (line 2))
    Using cached https://files.pythonhosted.org/packages/ad/fd/6bfe87920d7f4fd475acd28500a42482b6b84479832bdc0fe9e589a60ceb/Keras-2.3.1-py2.py3-none-any.whl
    Collecting tensorflow (from -r setup.txt (line 3))
    ERROR: Could not find a version that satisfies the requirement tensorflow (from -r setup.txt (line 3)) (from versions: none)
    ERROR: No matching distribution found for tensorflow (from -r setup.txt (line 3))

  2. Anh cho hỏi bị lỗi MemoryError khi load ảnh có cách nào xử lý không? Em đọc một số nguồn thì ghi là chuyển sang load từng batch thay vì toàn bộ dataset (nhưng cũng không rõ làm như thế nào).

    MemoryError: Unable to allocate array with shape (224, 224, 3) and data type float32

  3. Anh cho em hỏi: trong folder models có 2 file .xml và .h5 (như hướng dẫn trên). Nhưng code train_model.py trên GitHub thì trong folder lại có thêm file classification_age_model.hdf5? Nếu có file thì classification_age_model.hdf5 tải ở đâu? Anh cho em xin link download.

  4. Anh ơi em bị lỗi này mà không biết sửa sao ạ ? Em làm đúng từng bước chỉ khi chạy file train thì nó hiện lỗi như bên dưới
    Traceback (most recent call last):
    File “D:/Nam 4/Machine Learning/MiAI_Age_Prediction/MiAI_Age_Prediction/train_model.py”, line 5, in
    import tensorflow as tf
    File “D:\DevPrograms\PythonPython38-32\lib\site-packages\tensorflow\__init__.py”, line 24, in
    from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import
    File “D:\DevPrograms\PythonPython38-32\lib\site-packages\tensorflow\python\__init__.py”, line 49, in
    from tensorflow.python import pywrap_tensorflow
    File “D:\DevPrograms\PythonPython38-32\lib\site-packages\tensorflow\python\pywrap_tensorflow.py”, line 58, in
    from tensorflow.python.pywrap_tensorflow_internal import *
    File “D:\DevPrograms\PythonPython38-32\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py”, line 114
    def TFE_ContextOptionsSetAsync(arg1, async):
    ^
    SyntaxError: invalid syntax

  5. a ơi cho em hỏi sao em tải data về thấy 100 folder nhưng folder nào cũng thấy cả già cả trẻ thế ạ, nó gán nhãn kiểu gì thế aj?

  6. Epoch 1/50
    1970/1970 [==============================] – 579s 273ms/step – loss: 4.2838 – accuracy: 0.0296 – val_loss: 3.8985 – val_accuracy: 0.0289
    Epoch 2/50
    1970/1970 [==============================] – 515s 262ms/step – loss: 3.9742 – accuracy: 0.0386 – val_loss: 3.8348 – val_accuracy: 0.0429
    Epoch 3/50
    1970/1970 [==============================] – 515s 261ms/step – loss: 3.9459 – accuracy: 0.0397 – val_loss: 3.8036 – val_accuracy: 0.0466

    Sau khi đọc bài hd của bạn. Mình có training lại tập wiki mới mô hình mạng (model) như bạn:
    1. Cho mình hỏi ban đầu độ loss cao và accuracy thấp vậy hả bạn
    2. Bạn traning mất bao nhiêu thời gian? dộ loss và độ chính xác như thế nào

  7. em gặp lỗi này không biết là do như nào thế a
    (venv) C:\Users\ADMIN\PycharmProjects\Age_Prediction\venv\Age Prediction>python test_model.py
    2022-07-21 11:21:26.680002: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library ‘cudart64_110.dll’; dlerror: cudart64_110.dll not found
    2022-07-21 11:21:26.680712: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
    Traceback (most recent call last):
    File “test_model.py”, line 6, in
    from keras.preprocessing.image import load_img, save_img, img_to_array
    ImportError: cannot import name ‘load_img’ from ‘keras.preprocessing.image’ (C:\Users\ADMIN\PycharmProjects\Age_Prediction\venv\lib\site-packages\keras\preprocessing\image.py)

  8. pip install -r setup.txt
    lỗi này xuất hiện sau khi nhấn lệnh trên ạ.E phải sửa như nào ạ?
    ERROR: Could not open requirements file: [Errno 2] No such file or directory: ‘setup.txt’

    [notice] A new release of pip available: 22.3.1 -> 23.1.2
    [notice] To update, run: python.exe -m pip install –upgrade pip

Leave a Reply

Your email address will not be published. Required fields are marked *