Hàng năm cứ đến mỗi độ hè về, khi ve kêu ve ve là lúc các bạn sinh viên đi tìm code đọc biển số xe & nhận diện khuôn mặt làm đề tài. Đây là 2 chủ đề kinh điển truyền từ thế hệ sinh viên này đến thế hệ khác. Nên mình chia sẻ bài này để giải thích, hướng dẫn để cho các bạn hiểu vì sao, làm thế nào để có thể huấn luyện được model.
Bài viết này đã chuẩn bị sẵn dữ liệu biển số xe, các bạn chỉ cần download 1 số file theo hướng dẫn là được.
Tổng quan các bước thực hiện
- Bước 1: vẽ khung hình chữ nhật bao lấy đối tượng cần phát hiện bằng tool labelImg. Trong bài có hướng dẫn cách cài đặt, cách sử dụng & format của file chỉ mục.
- Bước 2: build chương trình YOLO darknet exe dùng để training trên Windows
- Bước 3: download file yolov4-tiny.conv.29 bỏ vào cạnh file darknet.exe
- Bước 4: config file cfg
- Bước 5: chuẩn bị dữ liệu
- Bước 6: training
- Bước 7: lấy kết quả training test thử
Bước 1 và 2 trong mỗi bài đã viết chi tiết, bước 4,5,6 sẽ được giải thích bên dưới.
Lưu ý: file darknet.exe được build trong folder build\darknet\x64. Tất cả các file data, script,… đều để trong folder này.
Tất cả hình ảnh về biển số & file config để trong folder build\darknet\x64\data\bike_plate
Bước 4: config file cfg
Copy file yolov4-tiny.cfg và đổi tên thành yolov4-tiny-bike_plate.cfg. Trong file này sửa các tham số như sau:
- Tìm dòng subdivisions sửa thành 16 để giảm số ảnh xử lý trong mỗi batch
- max_batches bằng (số class)*2000 và không nhỏ hơn 6000, bài này chỉ train biển số nên max_batches=6000
- steps=0.8*max_batches, 0.9*max_batches, do max_batches=6000 nên steps=4800,5400
- classes: số lượng class đưa vào training, bài này classes=1
- filters: tính theo công thức filters=(số class+5)*, bài này filters=18
Sự khác biệt giữa 2 file cfg giống hình bên dưới
Bước 5: chuẩn bị dữ liệu
Để training cần có 2 file chứa đường dẫn ảnh tên là train.txt và valid.txt. Mình đã chuẩn bị sẵn cho các bạn, còn cách làm như sau:
Mở cmd tại folder chứa ảnh rồi gõ lệnh
dir /s/b *.jpg > train.txt
CMD sẽ tạo ra file train.txt chứa đường dẫn tuyệt đối của các ảnh *.jpg trong folder. Sau đó mở file train.txt lên xóa toàn bộ đường dẫn folder, tiếp theo cut 200 file ảnh qua file valid.txt là xong. Nếu không hiểu các bạn có thể xem file train.txt và valid.txt rồi làm theo tương tự là được.
Bước 6: traning biển số xe máy bằng YOLO tiny v4
Các bạn chạy file 2.training_bike_plate.bat để tiến hành training, trong file đó có lệnh:
darknet.exe detector train data/bike_plate/bike_plate.data data/bike_plate/yolov4-tiny-bike_plate.cfg yolov4-tiny.conv.29 -map > yolotinv4_lisenceplate.log
Chương trình sẽ chạy với các file config tương ứng:
- darknet.exe: tên chương trình
- detector train: command dùng để training
- data/bike_plate/bike_plate.data: đường dẫn đến file chứa các file chỉ mục chứa ảnh
- data/bike_plate/yolov4-tiny-bike_plate.cfg: file config
- yolov4-tiny.conv.29: file model pretrain
- yolotinv4_lisenceplate.log: file log quá trình training
Lưu ý training bằng PC sẽ rất chậm, sẽ cần 1-2 tiếng để train xong với máy có GPU. Máy không có GPU thì nên sử dụng Google Colab để train.
Quá trình training sẽ vẽ chart như bên dưới
Lấy kết quả training test thử
Sau khi training biển số xe bằng YOLO thành công các bạn sẽ được các file như bên dưới trong folder build\darknet\x64\backup.
Chạy file 1.predict_yolo_v4_bike_plate.bat để phát hiện biển số xe máy bằng YOLO, kết quả như bên dưới là thành công. Trên bounding box có hiển thị tên class và confident, confident quá cao (1.00 = 100%) nghĩa là dữ liệu quá nhỏ và quá đơn giản để nhận biết
Tham khảo: sách Deep Learning cơ bản v2