Computer Vision & Pi – Chương 4. Train model Tiny YOLOv3 để xem có đưa lên Pi được không?

Hê lô xin chào tuần mới tất cả các member yêu quý của Mì AI. Tiếp nối đợt bài về Pi thì hôm nay mình sẽ cùng nhau Train model Tiny YOLO v3 để xem có đưa lên Pi được không?

Về vấn để train yolo thì mình đã có cả 1 series rồi tại đây: Website: https://miai.vn?s=yolo . Tuy nhiên gần đây có một số bạn có inbox mình hỏi về cách train Tiny Yolo vì các bạn có muốn đưa Yolo lên các thiết bị có cấu hình yếu để chạy thử nên nhân series Pi này mình sẽ làm một bài về train Tiny Yolov3 luôn nhé.

tiny yolo
Cấu trúc mạng tiny-yolo

Phần 1 – Tổng quan quá trình train YOLO

Để hiểu được cần phải làm gì, chuẩn bị ra sao thì các bạn đọc qua tổng quan 9 bước train YOLO nhé.

  • Bước 1: Chuẩn bị dữ liệu train. Cụ thể là các file ảnh chứa vật thể cần nhận diện (ví dụ: đồng hồ, lá cây, ví tiền,….). Bạn nên tạo thư mục data, bên trong có thư mục images và copy hết ảnh vào trong đó (chỉ nên sử dụng ảnh png hoặc jpg nhé).
  • Bước 2: Gán nhãn cho dữ liệu. Phần này các bạn phải gán bằng tay nhé. Nhiều bạn cứ hỏi mình có tool nào tự gán không? Mình xin trả lời là: nếu có tool tự nhận diện được object và gán giúp bạn thì bạn đã có model rồi cần gì train nữa :D. Các bạn chịu tạo thư mục labels nằm trong thư mục data sau đó tải phần mềm labelimg về để gán nhãn.
  • Bước 3: Tải mã nguồn darknet bằng lệnh git thần thánh. Sau đó chỉnh sửa Makefile và thực hiện compile darknet.
  • Bước 4: Tải file weights cho các lớp convolutional layer tại đây.
  • Bước 5: Xóa thư mục data trong folder darknet và copy folder data (mà ta tạo ra ở bước 1) vào thư mục darkenet nhé.
  • Bước 6: Tạo ra file train.txt và val.txt chứa danh sách các file ảnh (chỉ file ảnh thôi, chính là đống ảnh nằm trong thư mục images mà ta tạo ra ở Bước 1 đó). Cụ thể là file train.txt sẽ chứa 80% số ảnh đó và val.txt chứa 20% số ảnh đó. Chọn càng ngẫu nhiên càng tốt.
  • Bước 7: Tạo các file cần thiết cho YOLO như: yolo.names (chứa danh sách các đối tượng cần nhận diện như: súng, dao, xe hơi, xe máy…), yolo.data (chứa thông tin train như: số class, path đến file train và val, thư mục chứa weights sau train).
  • Bước 8: Chỉnh sửa file config. Chú ý file config ta sẽ dùng yolov3-tiny.cfg chứ ko dùng yolov3.cfg như thông thường nhé (cả 2 file đều trong thư mục cfg nhé).
  • Bước 9: Train và tận hưởng thành quả.

Phần 2 – Chi tiết bước chỉnh sửa file config

Đại khái cách train mình đã có bài rất chi tiết rồi, các bạn có thể tìm lại tại đây. Mình chỉ đi sâu vào phần chỉnh sửa file yolov3-tiny.cfg vì nó khác đôi chút với chúng ta train YOLOv3 thông thường.

Các bạn tiến hành sửa file yolov3-tiny.cfg theo cách sau:

  • Tìm đến dòng số 3, sửa batch=24 thay cho batch =64. Đây là số ảnh load vào RAM mỗi lần train.
  • Tìm đến dòng số 4, sửa subdivisions=8
  • Tìm đến dòng 127, chỉnh lại filters=(num_class + 5)*3 trong đó num_class là số lớp bạn cần train. Ví dụ train nhận mỗi súng thì num_class = 1 (thì filter sẽ là (1+5)*3=18), nếu train để nhận cả súng và dao thì num_class=2…
  • Tìm đến dòng 135, sửa lại classes = num_class (num_class là số lớp đó).
  • Sửa dòng 171 giống dòng 127 và dòng 177 giống dòng 135.
tiny yolo
Yolo Detection sample

Vậy thôi, còn các hạng mục khác các bạn làm y hệt như bài train yolo v3 tại đây. Các bạn có thể train tại máy, train trên máy chủ hoặc train trên colab nếu như không có máy chủ nhé.

Như vậy mình đã guide các bạn cách train tiny yolo nhé, trong bài tiếp mình sẽ đưa thử nó lên Pi xem cái kết như nào 😀

Chào tạm biệt nhé!

Hãy join cùng 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

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 “Computer Vision & Pi – Chương 4. Train model Tiny YOLOv3 để xem có đưa lên Pi được không?”

Leave a Reply

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