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é.
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é.
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
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))
Lỗi lạ nhỉ. Bác post lên group Mì AI kèm theo hình để mọi ng cùng xem nhé.
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
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
Đúng rồi. Nếu máy có ít RAM thì nên load theo batch. Em search Keras batch image generator
Cảm ơn anh!
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.
File đó là file weights lưu tạm sẽ sinh ra trong quá trình train em. Em cần gì thêm thì post Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup để trao đổi thêm nhé!
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
Em chụp màn hình và post lên group Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!
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?
Cụ thể như nào em nhỉ? Em lên group post để trao đổi cho tiện nha. Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
Anh ơi, a dùng python mấy đấy ạ? Em dùng 3.6 toàn bị lỗi ạ
Anh dùng 3.7.9. Có lỗi gì em cứ post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé!
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
Lâu quá mình cũng ko nhớ chính xác nữa. Bạn cứ post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup rồi cùng chia sẻ thêm nha!
anh ơi, sao em k thấy chỗ tải file setup.txt vậy ak
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!
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)
Em post lên https://facebook.com/groups/miaigroup trao đổi cho dễ nhé!
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
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé trao đổi cho tiện!