Trong bài viết này, chúng tôi sẽ giới thiệu về YOLOv8 Segmentation và cách sử dụng cơ bản. Để tìm hiểu về YOLOv8 các bạn có thể xem qua bài viết Khám Phá YOLOv8: Bước Đột Phá Trong Phát Hiện Đối Tượng
1. Segmentation là gì?
Segmentation là một bước phát triển cao hơn so với phát hiện đối tượng (object detection). Thay vì chỉ tạo ra các khung giới hạn (bounding box) xung quanh các đối tượng, YOLOv8 Instance Segmentation cung cấp thêm thông tin về vùng hình dạng (mask) của từng đối tượng. Điều này có nghĩa là mô hình có thể phân biệt rõ ràng từng đối tượng riêng lẻ, ngay cả khi chúng chồng chéo lên nhau hoặc nằm gần nhau.
2. Ứng dụng của segmentation
Segmentation hữu dụng trong các trường hợp cần xác định hình dạng hoặc diện tích của vật thể:
- Đếm số lượng tế bào và xác định vị trí tế bào
- Xác định loại tế bào nằm cạnh nhau, diện tích của từng tế bào. Phù hợp cho bài toán xác định sự phát triển của tế bào.
- Tính diện tích các đối tượng/vật thể có hình dáng không phải đa giác lồi, VD đếm tôm
- …
3. Cách YOLOv8 Segmentation hoạt động
YOLOv8 Instance Segmentation thực hiện cả ba nhiệm vụ trong một lần dự đoán duy nhất:
- Phát hiện đối tượng: Xác định vị trí của các đối tượng bằng cách tạo ra các khung giới hạn.
- Phân loại đối tượng: Xác định nhãn của từng đối tượng được phát hiện.
- Phân đoạn đối tượng: Tạo ra các mask để xác định hình dạng cụ thể của từng đối tượng.
Những bước này đều được thực hiện đồng thời và một cách nhanh chóng nhờ vào kiến trúc gọn nhẹ và tối ưu của YOLOv8.
4. Ưu điểm của YOLOv8 Segmentation
- Tốc độ và hiệu suất: YOLOv8 tiếp tục duy trì tốc độ nhanh đặc trưng của dòng YOLO, nhưng vẫn đảm bảo độ chính xác cao trong việc phân đoạn đối tượng. Điều này làm cho mô hình phù hợp với các ứng dụng thời gian thực như xe tự lái, giám sát an ninh, và robot công nghiệp.
- Chính xác cao: Mô hình được cải tiến để có thể phân biệt các đối tượng phức tạp hơn, ngay cả khi chúng có hình dạng phức tạp và chồng chéo lên nhau.
- Khả năng tùy chỉnh: Người dùng có thể dễ dàng tùy chỉnh mô hình YOLOv8 cho các tập dữ liệu và ứng dụng khác nhau, bao gồm việc đào tạo mô hình lại trên các tập dữ liệu mới.
5. Các phiên bản của mô hình YOLOv8 Segmentation
Tương tự như YOLOv8 Detection, YOLOv8 Segmentation cũng cung cấp các phiên bản mô hình khác nhau phù hợp với nhu cầu về tốc độ và độ chính xác.
- YOLOv8n-seg (Nano): Phiên bản nhỏ gọn, nhanh nhất, phù hợp cho các ứng dụng yêu cầu thời gian xử lý nhanh như trên các thiết bị nhúng.
- YOLOv8s-seg (Small), YOLOv8m-seg (Medium): Phiên bản cân bằng giữa tốc độ và độ chính xác, thích hợp cho các bài toán vừa và nhỏ.
- YOLOv8l-seg (Large), YOLOv8x-seg (Extra Large): Phiên bản lớn hơn, phù hợp cho các ứng dụng yêu cầu độ chính xác cao nhưng có thể chấp nhận tốc độ xử lý chậm hơn.
6. Hướng dẫn sử dụng
Yêu cầu:
- Python>=3.8
- Pytorch with CUDA: Cài đặt theo hướng dẫn ở bài viết Phát hiện xe trên đường cao tốc bằng Yolov8
Các bước thực hiện:
- Clone source code của ultralytics
git clone https://github.com/ultralytics/ultralytics.git
- Download pretrain model: Các bạn vào YOLOv8 models, tại phần Segmentation (COCO), các bạn chọn phiên bản mô hình muốn sử dụng và download. Ở đây mình sẽ sử dụng mô hình yolov8n-seg.pt
- Mở folder ultralytics trong VSCode và sử dụng đoạn code bên dưới để test.
1 2 3 4 5 6 7 8 |
from ultralytics import YOLO # Load a model model = YOLO("yolov8n-seg.pt") # load an official model # Predict with the model results = model("https://ultralytics.com/images/bus.jpg") # predict on an image results[0].save('output.jpg') |
Chúc các bạn thành công!