Shrimp-segmentation là bài toán phân đoạn (phân tách) hình ảnh là 1 ví dụ thuyết phục về tính ứng dụng của segmentation. Con tôm có hình dáng cong hoặc duỗi thẳng ngẫu nhiên, có thể nằm chồng lên nhau,… Vì vậy segmentation sẽ phù hợp cho bài toán đếm và xác định vị trí con tôm trong ảnh.
Các bạn làm theo bài Khám Phá YOLOv8: Bước Đột Phá Trong Phát Hiện Đối Tượng để cài đặt YOLO v8 trước khi training.
Bước 1: Chuẩn bị dataset
Trên website roboflow có sẵn dataset về con tôm đã được vẽ polygon, mọi người có thể download về để sử dụng.
https://universe.roboflow.com/search?q=shrimp
Tuy nhiên annotation chưa phù hợp với YOLO v8, do đó các bạn cần convert bằng tool: labelme2yolov8
Các bạn chỉnh dataset/shrimp/data.yaml cho phù hợp. Do chúng tôi chỉ train với 1 class là shrimp nên file config của chúng tôi như sau:
1 2 3 4 5 6 |
train: train/images val: valid/images test: test/images nc: 1 names: ['shrimp'] |
Dataset cũng đã commit sẵn trong folder dataset, giúp bạn tiết kiệm thời gian làm các bước trên.
Bước 2: Chuẩn bị môi trường
Yêu cầu cần thiết để train YOLOv8 segmentation tương tự như YOLOv8 detection. Các bạn xem qua tại mục Hướng dẫn sử dụng của bài viết Khám Phá YOLOv8: Bước Đột Phá Trong Phát Hiện Đối Tượng
Bước 3: Training shrimp-segmentation
Trong notebook shrimp-segmentation.ipynb các bạn ấn nút train, sau 300 epoch kết quả sẽ được lưu lại ở shrimp-segmentation\runs\segment\trainXXX\weights\best.pt Với XXX là số thứ tự lần training.
Trong repository cũng đã commit sẵn file best.pt và shrimp-seg.onnx để các bạn có thể test thử mà không cần training.
Bước 3: Thử nghiệm độ chính xác
Các bạn có thể dùng đoạn code Python sau để test
1 2 3 4 5 6 7 8 |
from ultralytics import YOLO import cv2 model = YOLO("best.pt") # Predict with the model results = model("shrimp.jpg") # predict on an image results[0].save('shrimp_output.jpg') |
Hoặc sử dụng phần mềm YOLOSEGMENT để test trực quan.
Repository
Chúc các bạn thành công