Series YOLO: #5 YOLOv5: Nhanh, gọn, nhẹ và dễ sử dụng.

1. GIới thiệu về YOLOv5.

Chào mọi người, sau một thời gian im lặng thì mình đã quay trở lại cùng với những trải nghiệm cùng công nghệ mới – YOLOv5.

Hồi trước khi mới công bố về YOLOv5, mọi người thường không có thiện cảm và thường gọi nó là một bản không chính thống, nhưng khi đã được trải nghiệm thông qua việc train một vài model thì mình hết sức ngạc nhiên trước sự tối ưu, hiệu năng cũng như hiệu quả mà nó mang lại.

So sánh tốc độ và thời gian xử lý của các model YOLOv5

Hình 1.1 : Tốc độ xử lý trên GPU V100 và COCO AP của YOLOv5(trái) và YOLOv4(phải).

Như các bạn có thể thấy kết quả đánh giá trên github của hai model v4 và v5. Độ chính xác của v5 có thấp hơn, nhưng đổi lại là tốc độ xử lý khá nhanh. ( nhưng train trong bao lâu để được các giá trị như vậy thì không ai nói :D).

Rồi, bây giờ chúng ta cùng đi vào tìm hiểu cách sử dụng nhé.

2. Các bước thực hiện.

Lần này mình sẽ train model nhận dạng khuôn mặt có đeo khẩu trang hay không làm ví dụ.

2.1. Dataset và convert sang định dạng YOLOv5.

Hiện nay có nhiều bộ dataset về khuôn mặt có khẩu trang và không có khẩu trang, mình sẽ sử dụng một số bộ dataset nho nhỏ có sẵn để làm demo:

Các bạn tải về ở đây nhé!

Hoặc tạo một bản sao lưu vào Google drive của mình.

Tập dataset sẽ có dạng:

  • Mask_nomask_detection:

    • train_images
    • train_labels
    • val_images
    • val_labels

Trong các thư mục sẽ chứa các ảnh và file labels.

2.2. Chuẩn bị và train.

Bước 1: Mount google drive.

from google.colab import drive
drive.mount('/content/drive')

Bước 2: Import các thư viện cần dùng:

import numpy as np
import pandas as pd
import shutil
import tqdm.auto as tqdm 
import os
import torch
from IPython.display import Image, clear_output  # to display images

clear_output()
print('Setup complete. Using torch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))

Bước 3:  clone repo và giải nén:

%cd /content/drive/MyDrive
!git clone https://github.com/ultralytics/yolov5  # clone repo
%cd yolov5
!pip install -r requirements.txt  # install dependencies

Bước 4: load tensorboard và đăng nhập wandb.

# Tensorboard (optional)
%load_ext tensorboard
%tensorboard --logdir runs/train
%pip install -q wandb  
!wandb login

Sau đó, các bạn truy cập vào https://wandb.ai/authorize tạo cho mình một tài khoản. Trang web sẽ trả về một cái key dùng để sử dụng wandb sau khi tạo tài khoản:

Copy mã này và paste vào google colab ( một mã này có thể sử dụng được nhiều lần).

Bước 5: giải nén dataset.

  • Truy cập vào folder: yolov5/data sau đó xoá hết các thư mục và folder
  • Giải nén dataset vào thư mục yolov5/data:
%cd /content/drive/MyDrive/yolov5/data # nhớ thay đổi địa chỉ của bạn
!unrar x '/content/drive/MyDrive/mask_nomask_detection.rar' #thay đổi đường dẫn sang tập rar của bạn

Hoặc : bạn có thể tự tạo data riêng cho mình theo bài hướng dẫn ở đây.

Bước 6: tạo một file có tên là : dataset.yaml với nội dung:

``` #Thay thế bằng địa chỉ folder ảnh train và val. train: ../coco128/images/train2017/
val: ../coco128/images/train2017/

# number of classes
# Số lượng class
nc: 2

# class names
# tên của các classes
names: ['mask', 'no_mask']

Bước 7: lựa chọn một pretrain:

Pretrain: là file trọng số mà tác giả đã train với một tập dữ liệu có sẵn ( thường là với COCO data) và đã cho ra một kết quả tương đối so với tập data đó. Vậy nên, chúng ta sử dụng pretrain để kế thừa "sự thông minh" mà model đã học được từ trước đó. Nếu không sử dụng pretrain thì mọi thứ vẫn ổn, nhưng có một điều chắc chắn là thời gian training của bạn sẽ lâu hơn, và có thể… có thể thôi nhé, là kết quả không được cao so với lúc dùng pretrain.

Dựa vào các tiêu chí: thời gian xử lý của model, độ chính xác,… thì các bạn hãy chọn cho mình một model thích hợp nhé.

  • Về thời gian xử lý: 5s ( xử lý nhanh nhất) < 5m < 5l <5x ( xử lý chậm nhất).
  • Về độ chính xác: 5s ( độ chính xác thấp nhất) < 5m < 5l < 5x ( chính xác cao nhất)

Các thông số của model

Bước 8: train thôi.

%cd /content/drive/MyDrive/yolov5
!python train.py --img 640 --batch 16 --epochs 5 --data dataset.yaml --weights yolov5s.pt

trong đó:

–img 640: là size ảnh các bạn đưa vào.

–data dataset.yaml : truyền vào file chứa địa chỉ của dataset.

–weights yolov5s.pt : cấu hình model train. các bạn có thể thay thế bằng các model khác:–weights yolov5m.pt; –weights yolov5l.pt; –weights yolov5x.pt

Ngoài ra, YOLOv5 còn cho phép tùy biến nhiều vấn đề trong quá trình train, các bạn có thể tham khảo tại đây( ở dòng 430, nhiều quá nên mình không nêu ra)

Bước 9: Nhận dạng ( prediction)

Sau khi train xong xuôi chúng ta có thể sử dụng lệnh sau để predict thử:

!python detect.py --source image_z.png --weights runs/train/exp12/weights/best.pt --conf 0.25

Trong đó :

–source image_z.png: là địa chỉ ảnh đưa vào predict.

–weights runs/train/exp12/weights/best.pt: địa chỉ file trọng số chúng ta vừa train xong

–conf 0.25 : ngưỡng phân loại, bạn có thể tùy chỉnh từ 0 -> 1

Và chúng ta đã hoàn thành các bước để có thể train YOLOv5, nếu chưa làm được, các bạn có thể tham khảo source code mình đã làm ( nhớ là copy ra bản sao nhé, không nên sửa vào- để các bạn khác có thể xem được đầy đủ và chính xác)

YOLOv5 có nhiều thứ thú vị có thể khám phá nữa, các bạn đón xem phần sau nhé 😀

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *