Trong bài này mình sẽ hướng dẫn các bạn cách nhận diện đối tượng, object detection, phát thiện đối tượng với yolo v5
Chuẩn bị trước khi training model các bạn cần chuẩn bị một số thư viện cũng như môi trường như sau:
Sao chép kho lưu trữ này, tải xuống tập dữ liệu hướng dẫn và cài đặt các thư viện bao gồm Python> = 3.8 và PyTorch> = 1.7.
$ git clone https://github.com/sonnhfit/yolov5 # clone repo
$ cd yolov5
$ pip install -r requirements.txt # install
Train với Custom Data (dữ liệu tuỳ chỉnh của bạn)
1. Create dataset.yaml
COCO128 là một tập dữ liệu hướng dẫn nhỏ bao gồm 128 hình ảnh đầu tiên trong COCO train2017. 128 hình ảnh giống nhau này được sử dụng cho cả quá trình đào tạo và xác thực để xác minh quy trình đào tạo và phát hiện model có khả năng bị overfit. data / coco128.yaml, được hiển thị bên dưới
# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ../coco128/images/train2017/
val: ../coco128/images/train2017/
# number of classes
nc: 80
# class names
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard',
'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
'teddy bear', 'hair drier', 'toothbrush']
2. Create Labels (tạo nhãn)
Sau khi sử dụng một công cụ như CVAT, makesense.ai hoặc Labelbox để gắn nhãn hình ảnh của bạn, hãy xuất nhãn của bạn sang định dạng YOLO, với một tệp * .txt
cho mỗi hình ảnh (nếu không có đối tượng trong hình ảnh thì không cần tệp * .txt
). Cấu trúc của tệp * .txt
là
- Một hàng cho mỗi đối tượng
- Mỗi hàng là
class x_center y_center width height
format
- Tọa độ hộp phải ở định dạng xywh chuẩn hóa (từ 0 - 1).Nếu hộp (bbox) của bạn là pixel, chia
x_center
và width
cho chiều rộng hình ảnh và y_center
và height
cho chiều cao hình ảnh.
- Số lớp (số nhãn của đối tượng ). được lập chỉ mục bằng 0 (bắt đầu từ 0).
Tệp nhãn tương ứng với hình trên chứa 2 người (lớp 0) và một cà vạt (lớp 27):
3. Tổ chức thư mục.
Sắp xếp hình ảnh train, nhãn, và ảnh val của bạn theo ví dụ bên dưới. Trong ví dụ này, chúng ta giả sử /coco128
nằm bên cạnh thư mục /yolov5
. YOLOv5 tự động định vị nhãn cho mỗi hình ảnh bằng cách thay thế phần mở rộng (.txt
, .jpg
) của /images/
trong mỗi đường dẫn hình ảnh bằng /labels/
. Ví dụ
dataset/images/im0.jpg # image
dataset/labels/im0.txt # label
4. Select a Model.
Chọn một mô hình đào tạo trước để bắt đầu đào tạo sẽ giúp việc đào tạo nhanh hơn. Ở đây chúng ta chọn YOLOv5s, mô hình nhỏ nhất và nhanh nhất hiện có. Bạn có thể xem thêm trong thư mục /models/
5. Train
Đào tạo mô hình YOLOv5s
trên COCO128
bằng cách chỉ định tập dữ liệu, kích thước lô, kích thước hình ảnh và--weights yolov5s.pt
được đào tạo trước (được khuyến nghị) hoặc --weights '' --cfg yolov5s.yaml
(không được khuyến nghị). File trọng số được tự động tải xuống từ bản phát hành YOLOv5 mới nhất.
# Train YOLOv5s on COCO128 for 5 epochs
$ python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.pt
Tất cả các kết quả đào tạo được lưu vào running/train/
với các thư mục tên tự động được đặt tăng dần cho mỗi lần chạy, tức là running/train/exp2
, running/train/exp3
, v.v.
6. detect chạy thử model sau khi train
python detect.py --source data/images --weights yolov5s.pt --conf 0.25
Lưu ý:
--weights yolov5s.pt
thay bằng model mà bạn train ra được lấy ở trong thư mục /running/train/..
tìm file có đuổi .pt
. (ví dụ: --weights best.pt
)
--source data/images
thư mục chứa ảnh mà bạn muốn nhận diện( detect). Dể mặc định trong thư mục data/images
nếu bạn muốn thư mục khác thì thay đường dẫn của bạn là được.
Ngoài ra bạn có thể chạy với một số nguồn video hoặc ảnh khác ví dụ webcam chỉ cần that than số như ở dưới (chọn 1 cái thôi nhé):
python detect.py --source 0 # webcam
file.jpg # image
file.mp4 # video
path/ # directory
path/*.jpg # glob
'https://youtu.be/NUsoVlDFqZg' # YouTube video
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream
Hướng dẫn train model yolo v5 để nhận diện đối tượng bằng video
Video hướng dẫn ở đây