[YOLO Series] Train và detect sử dụng YOLO model trên Windows

Xin chào anh em hội Mì AI, chúc anh em một cuối tuần vui vẻ nhé! Trong tuần vừa qua mình nhận được nhiều comment và request của các anh em về việc train YOLO theo bài viết trước của mình trên Windows khó quá, toàn bị gặp lỗi. Mình dùng MacOS nên cũng không hỗ trợ được anh em nhiều, điều đó làm mình rất áy náy và khó chịu trong lòng. Do đó, hôm nay mình sẽ làm một bài guide để các bạn có thể train YOLO trên windows đỡ vất vả hơn nhé.

Bài viết này mình tập trung vào guide trên Window nhé, mặc dù repo này dùng cho Linux cũng okie , ko vấn đề gì. Bài viết sẽ gồm các phần như sau:

  • Phần 1. Chuẩn bị mã nguồn, môi trường
  • Phần 2. Chuẩn bị dữ liệu train và gán nhãn
  • Phần 3. Sửa file config và Biên dịch mã nguồn Darknet/YOLO
  • Phần 4. Tiến hành train model
  • Phần 5. Detect thử các object trong ảnh

Nào, bắt đầu nhé!

Phần 1. Chuẩn bị môi trường

Bước 1. Các bạn tạo một thư mục MiAI_Yolo_Win (để tránh nhẫm lẫn nhé). Sau đó các bạn mở Command line chuyển vào trong foler này bằng lệnh cd MiAI_Yolo_Win và tiến hành lấy mã nguồn darknet về nhé:

git clone https://github.com/AlexeyAB/darknet

Các bạn lưu ý github này khác với github lần trước của mình nhé (bản này hỗ trợ window). Các bạn ngồi đợi cho chạy xong là trong thư mục MiAI_Yolo_Win sẽ có folder darknet nhé.

train YOLO trên windows

Bước 2. Cài đặt các món cần thiết để biên dịch mã nguồn. Các bạn tiến hành cài đặt các món sau nhé:

  1. Công cụ CMake dùng để biên dịch mã nguồn C++ trên Window. Các bạn tải tại đây, dùng bản có giao diện cho tiện (kéo xuống phần Binary distributions rồi tải nhé, ko cần tải source về làm chi cho cực).
  2. Cài đặt OpenCV nếu bạn chưa cài. Gõ lệnh pip install opencv-python nhé.
  3. Cài đặt bộ công cụ Visual Studio 2015/2017 hoặc 2019 tùy các bạn có sẵn bộ cài nào nhé.
  4. Nếu máy các bạn có GPU thì cài đặt các thư viện hỗ trợ thêm như:

Rồi, hãy đảm bảo các bạn cài dặt đủ các món bên trên nhé. Nếu đã đủ ta tạm nghỉ chút, quay sang đi gán nhãn cho ảnh nhé.

Phần 2. Chuẩn bị dữ liệu train và gán nhãn

Riêng phần này, các bạn có thể tham khảo bài viết Số 2 – https://ainoodle.vn/2019/08/09/yolo-series-2-cach-train-yolo-de-detect-cac-object-dac-thu/ , Bươc 2 và Bước 3 nhé. Chỉ khác một chút là các bạn nhấn Change Save Dir và chọn luôn vào thư mục chứa hình ảnh, chứ không chọn sang thư mục labels như repo trước nữa (Chú ý đoạn này)

Phần 3. Sửa file config và biên dịch mã nguồn

Phần này các bạn dùng Window rất hay bị lỗi, nên các bạn chú ý kỹ phần này nhé.

Các bạn dùng công cụ CMake đã tải ở trên để biên dịch nhé. Các bạn chạy giao diện GUI của CMake và thực hiện cấu hình y như ảnh bên dưới nhé.

train YOLO trên windows
Nguồn: AlexAB

Chú ý các bước với các thông số sau nhé các bạn:

  • Bước 1. Chọn Sourcecode và Binaries: Là thư mục chữa mã nguồn (Mà bạn vừa tải về đó, nó là MiAI_Yolo_Win/darknet). Các bạn nhấn Browse Source và Browse Build.
  • Bước 2. Tick chọn vào ô Grouped
  • Bước 3. Các bạn chỉnh các tham số trên màn hình mà CMake tạo ra:
    • Nếu bạn có GPU thì check chọn chỗ ENABLE_CUDA
    • Nếu bạn muốn biên dịch OPENCV thì cũng check vào ENABLE_OPENCV nhé.
    • Cấu hình các đường dẫn đến thư mục CUDA, cuDNN nếu cần thiết.
  • Bước 4. Nhấn Configure (chỉ định bản Visual Studio và x64, x86 nếu có hỏi), đợi chút rồi nhấn thêm Generate.
  • Bước 5. Nhấn Open Project để mở VS lên và nhấn Build/Run trên VS để sinh ra file darknet.exe. Các bạn tìm file darknet.exe này ở trong MiAI_Yolo_Win/build/darknet/x64 hoặc x86 tùy các bạn chọn ở trên.
  • Bước 6. Copy file này ra thư mục MiAI_Yolo_Win/darknet cho tiện việc chạy sau này.
train YOLO trên windows
Nguồn: https://jamesbowley.co.uk

Phần 4. Tiến hành train model

Phần này các bạn train giống như bài Số 2 (https://ainoodle.vn/2019/08/09/yolo-series-2-cach-train-yolo-de-detect-cac-object-dac-thu/) nhé. Làm các bước 4 và bước 5.

Chỉ cần chú ý thay câu lệnh train trong bài cũ bằng lệnh train mới như sau (file exe vì là Windows):

darknet.exe detector train yolo.data cfg/yolov3.cfg darknet53.conv.74

Rồi, bây giờ ngồi đợi cho nó train và khi nào thấy loss của vòng lặp hiện tại và loss trung bình của model (avg loss) không giảm sau nhiều vòng lặp (có thể 50-100 vòng đi). Các phát hiện loss và avg loss, cũng như số vòng lặp ở đâu? Các bạn hãy để ý các output khi train sẽ thấy ngay. Ví dụ đây là 1 đoạn output

Region Avg IOU: 0.83243, Class: 0.19255, Obj: 0.174933, No Obj: 0.002383, Avg Recall: 1.000000, count: 10
Region Avg IOU: 0.800677, Class: 0.392181, Obj: 0.798890, No Obj: 0.004233, Avg Recall: 1.000000, count: 10
1005: 0.974467, 0.963678 avg, 0.001000 rate, 2.168000 seconds, 32464 images Loaded: 0.000000 seconds

Các bạn để ý sẽ thấy:

  • 1005 là số vòng lặp, theo ví dụ là được 1005 vòng rồi
  • Con số 0.974467 là loss của vòng lặp hiện tại còn 0.963678 là loss trung bình cho đến hiện tại.

Update: Cái model lần này còn có thể train trên nhiều GPU dành cho các bạn có máy khủng nhé. Thay câu lệnh train là okie. Ví dụ câu bên dưới là dùng 4 GPU từ 0->3.

darknet.exe detector train yolo.data cfg/yolov3.cfg darknet53.conv.74 -gpus 0,1,2,3

Phần 5. Detect thử các ảnh thôi.

Phần này các bạn sử dụng Bước 6 trong Bài 2 nhé ( https://ainoodle.vn/2019/08/09/yolo-series-2-cach-train-yolo-de-detect-cac-object-dac-thu/). Phần này mình gọi darknet từ Python (file YOLO.py, tải tại https://github.com/thangnch/yolo_beginner)

Nếu mọi thứ okie, các bạn sẽ lại thấy hình ảnh detect quen thuộc của YOLO hiện lên rõ ràng nhé!

train YOLO trên windows

Rồi, như vậy mình đã cùng các bạn ăn bát Mì AI có tên YOLO trên Window (train YOLO trên windows). Nếu các bạn có vướng mắc gì thì cứ post lên Group dể cả nhà cùng trao đổi nhé. Chúc các bạn thành công!

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

mm
Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

3 Replies to “[YOLO Series] Train và detect sử dụng YOLO model trên Windows”

  1. sau khi chạy lệnh train thì window hiện cửa sổ thông báo lỗi
    pthreadVC2.dll was not found…
    có cách nào khắc phục ko bác?

    1. Bác copy 2 file pthreadGC2.dll và pthreadVC2.dll trong thư mục 3rdparty\pthreads\bin ra cùng thư mục với file darknet.exe luôn là được.

Leave a Reply

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