Huấn luyện phân loại nam nữ là bài toán classification: hình ảnh thuộc loại nào? Bài toán nhận diện giới tính thuộc loại bài toán đơn giản nhất, phù hợp với người mới.
Các bài lý thuyết, giải thích nguyên lý có rất nhiều ở các diễn đàn khác rồi. Hôm nay mình chia sẻ phương pháp phân lớp theo kiểu thực hành, quan tâm kết quả nhiều hơn vì sao lại thế?
Bài viết này sử dụng Deep Learning để huấn luyện và phân loại. Deep Learning sẽ tự học, công việc của bạn chỉ là “dạy sao cho đúng” mà thôi, tức là bỏ ảnh vào đúng folder. Đừng bỏ nhầm ảnh nam vào folder nữ và ngược lại là được.
Chuẩn bị
Đầu tiên download Python 3.6.5 Chọn phiên bản Windows x86-64 executable installer. Sau khi cài đặt xong restart máy tính.
Tiếp theo là chuẩn bị dữ liệu khuôn mặt nam nữ để huấn luyện và phân loại. Bài viết ở blog Viblo.asia có hướng dẫn cách download ảnh khuôn mặt đã crop của nhiều người khác nhau. Trong bộ ảnh đó có đa dạng khuôn mặt, độ tuổi, cảm xúc để máy học.
Các bạn download về rồi phân loại ra 2 folder đặt tên 0 để chứa ảnh nữ, 1 để chứa ảnh nam. Sau đó các bạn làm 1 bộ nam & nữ nữa để đánh giá kết quả training.
Cài đặt Tensorflow
Các bạn sẽ cài đặt Tensorflow và Keras bằng lệnh pip, chạy cmd và copy paste các command bên dưới:
pip install tensorflow==2.3.1
pip install keras==2.4.3
Lưu ý: nếu các bạn có GPU chạy được CUDA thì các bạn có thể cài thêm tensorflow-gpu. Khi phát hiện ra thư viện CUDA được cài đặt thì code sẽ chạy tensorflow-gpu để tăng tốc độ.
Lưu ý card màn hình của các bạn phải là NVIDIA có compute Capability từ 3.5 trở lên mới chạy được ví dụ trong bài này. Các bạn tham khảo tại trang https://developer.nvidia.com/cuda-gpus để xem có chạy được hay không.
pip install tensorflow-gpu==2.3.1
Card đời cũ của mình là GTX 660 có compute Capability là 3.0 nên không chạy được, sau đó mua card RTX 2060 thì chạy OK.
Source code
Các bạn download 2 file bên dưới về, sửa file bằng Visual Studio Code để sửa đường dẫn folder cho ảnh cho đúng.
Chạy file training.py để training, khi training sẽ hiện ra như bên dưới
Sau khi train xong sẽ lưu được file model.h5, hiểu đơn giản là file chứa các đặc trưng của nam/nữ mà máy đã học được.
Và đây là biểu đồ cũng như biểu diễn dữ liệu của bộ ảnh giới tính sẽ hiện lên sau khi train xong.
Sau đó các bạn chạy file predict.py, nhớ là sửa đường dẫn folder ảnh cho đúng. Mình đã viết sẵn code in ra kết quả nếu đúng, nếu sai sẽ in chữ wrong
Giải thích về biểu đồ
Biểu đồ bên trái thể hiện độ chính xác thu được trong quá trình training và độ chính xác khi kiểm tra lại (validation). Biểu đồ thứ 2 bên phải thể hiện sai số khi training và sai số khi kiểm tra lại.
Trục x – hoành thể hiện số lần train (epochs), trong code example là 10. Trục y – tung thể hiện tỉ lệ từ 0.0 -> 1.0 (tương ứng 0 -> 100%) nhưng được giản lược các giá trị không đáng giá.
Đường màu xanh bên trái thể hiện độ chính xác khi train, càng nhiều epochs thì tỉ lệ càng chính xác (đường leo núi). Đường màu xanh bên phải thể hiện sai số, train càng nhiều càng ít sai số.
Đường màu cam bên trái thể hiện độ chính xác khi kiểm tra, ta có thể thấy tỉ lệ đúng không vượt qua được 0.9 (hay 90%). Đường màu cam bên phải thể hiện sai số, ta thấy sai số không nhỏ hơn 0.3 (hay 30%).
Bạn có thể xem lại các thông số được vẽ ở biểu đồ đã được in ra trong quá trình train.
Kết luận
Bài viết này được viết theo cách dễ hiểu nhất để mọi người làm quen. Các bạn có thể sử dụng để huấn luyện nhiều bộ ảnh khác như độ tuổi, cảm xúc, vật thể, động vật,…