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
Dataset cũng đã commit sẵn, giúp bạn tiết kiệm thời gian làm các bước trên.
Bước 2: Training shrimp-segmentation
Do trong ví dụ này chỉ training 1 loại tôm nên chỉ có 1 class, các bạn sửa file “shrimp-segmentation\datasets\shrimp\data.yaml” thành 1 class shrimp là được.
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\train6\weights\best.pt
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.
Chúc các bạn thành công