Phân đoạn thực thể với Ultralytics YOLO#
Instance segmentation tiến xa hơn một bước so với object detection và liên quan đến việc xác định các đối tượng riêng lẻ trong một hình ảnh và phân đoạn chúng khỏi phần còn lại của hình ảnh.
Đầu ra của một mô hình phân đoạn thực thể là tập hợp các mask (mặt nạ) hoặc đường bao phác thảo từng vật thể trong hình ảnh, cùng với nhãn lớp và điểm tin cậy cho mỗi vật thể. Phân đoạn thực thể rất hữu ích khi bạn không chỉ cần biết vật thể ở đâu trong hình ảnh mà còn cần biết hình dạng chính xác của chúng.
Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
Các model YOLO26 Segment sử dụng hậu tố -seg, tức là yolo26n-seg.pt, và được huấn luyện trước trên COCO.
Models#
Các model Segment được huấn luyện trước của YOLO26 được hiển thị ở đây. Các model Detect, Segment và Pose được huấn luyện trước trên tập dữ liệu COCO, các model Semantic được huấn luyện trước trên tập dữ liệu Cityscapes, và các model Classify được huấn luyện trước trên tập dữ liệu ImageNet.
Models được tải xuống tự động từ bản release Ultralytics mới nhất trong lần sử dụng đầu tiên.
| Mô hình | kích thước (pixel) | mAPbox 50-95(e2e) | mAPmask 50-95(e2e) | Tốc độ CPU ONNX (ms) | Tốc độ T4 TensorRT10 (ms) | params (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.1 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.2 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.5 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 139.8 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 313.5 |
- Các giá trị mAPval dành cho mô hình đơn lẻ trên một tỷ lệ duy nhất trên tập dữ liệu COCO val2017.
Tái tạo bằngyolo val segment data=coco.yaml device=0 - Tốc độ được tính trung bình trên các hình ảnh COCO val bằng cách sử dụng một instance Amazon EC2 P4d.
Tái tạo bằngyolo val segment data=coco.yaml batch=1 device=0|cpu - Giá trị Params và FLOPs dành cho model đã hợp nhất sau
model.fuse(), thao tác này gộp các lớp Conv và BatchNorm lại và, đối với các model end2end, loại bỏ phần đầu phát hiện một-sang-nhiều phụ trợ. Các checkpoint đã huấn luyện trước giữ nguyên kiến trúc huấn luyện đầy đủ và có thể hiển thị số lượng cao hơn.
Huấn luyện (Train)#
Huấn luyện YOLO26n-seg trên tập dữ liệu COCO8-seg trong 100 epochs ở kích thước ảnh 640. Để có danh sách đầy đủ các tham số có sẵn, hãy xem trang Configuration.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.yaml") # build a new model from YAML
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Xem chi tiết đầy đủ về mode train trong trang Train. Các model segmentation cũng có thể được huấn luyện với Ultralytics Platform cloud training.
Định dạng tập dữ liệu#
Định dạng tập dữ liệu YOLO segmentation có thể được tìm thấy chi tiết trong Dataset Guide. Để chuyển đổi tập dữ liệu hiện có của bạn từ các định dạng khác (như COCO v.v.) sang định dạng YOLO, vui lòng sử dụng công cụ JSON2YOLO bởi Ultralytics. Bạn cũng có thể tạo các mặt nạ segmentation với Ultralytics Platform annotation sử dụng các công cụ đa giác và tính năng chú thích thông minh hỗ trợ bởi SAM.
Val#
Xác thực accuracy của model YOLO26n-seg đã được huấn luyện trên tập dữ liệu COCO8-seg. Không cần thêm tham số nào vì model giữ lại data huấn luyện và các tham số của nó dưới dạng các thuộc tính của model.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # a list containing mAP50-95(B) for each category
metrics.box.image_metrics # per-image metrics dictionary for det with precision, recall, F1, TP, FP, and FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # a list containing mAP50-95(M) for each category
metrics.seg.image_metrics # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FNDự đoán (Predict)#
Sử dụng mô hình YOLO26n-seg đã huấn luyện để chạy dự đoán trên hình ảnh.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
xy = result.masks.xy # mask polygons in pixel coordinates
xyn = result.masks.xyn # normalized mask polygons
masks = result.masks.data # binary masks, shape (N,H,W), dtype torch.uint8Xem chi tiết đầy đủ về chế độ predict tại trang Predict.
Đầu ra kết quả#
YOLO instance segmentation trả về một đối tượng Results cho mỗi hình ảnh. Mỗi kết quả lưu trữ các dự đoán ở cấp độ đối tượng, trong đó mỗi instance được phát hiện có mặt nạ nhị phân, class, độ tin cậy (confidence) và hộp (box) của riêng nó.
| Thuộc tính | Loại | Kích thước | Mô tả |
|---|---|---|---|
result.masks | Masks | (N) | Các mask thực thể. |
result.masks.data | torch.uint8 | (N,H,W) | Mặt nạ nhị phân, giá trị 0 hoặc 1. |
result.masks.xy | np.float32 | list[(P,2)] | Đa giác pixel. |
result.masks.xyn | np.float32 | list[(P,2)] | Đa giác đã chuẩn hóa. |
result.boxes | Boxes | (N) | Các khung bao/lớp/độ tin cậy của thực thể. |
result.boxes.cls | torch.float32 | (N,) | ID lớp; ép kiểu sang int để lấy tên. |
Đối với các trường Results dành riêng cho từng tác vụ trên mọi tác vụ, hãy xem phần Predict Results by Task.
Điều này khác biệt như thế nào so với Phân đoạn ngữ nghĩa (Semantic Segmentation)#
Instance segmentation là segmentation ở cấp độ đối tượng: hai chiếc ô tô tạo ra hai mặt nạ, hai hộp và hai điểm số tin cậy. Semantic segmentation là phân loại ở cấp độ pixel: những chiếc ô tô đó trở thành các pixel có cùng class ID trong một bản đồ class có kích thước bằng hình ảnh, không có hộp theo từng đối tượng, độ tin cậy hoặc danh sách đa giác mặc định.
Xuất (Export)#
Xuất mô hình YOLO26n-seg sang một định dạng khác như ONNX, CoreML, v.v.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom-trained model
# Export the model
model.export(format="onnx")Các định dạng xuất YOLO26-seg có sẵn nằm trong bảng dưới đây. Bạn có thể xuất sang bất kỳ định dạng nào bằng cách sử dụng tham số format, tức là format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc xác thực trực tiếp trên các model đã xuất, tức là yolo predict model=yolo26n-seg.onnx. Các ví dụ sử dụng được hiển thị cho model của bạn sau khi quá trình xuất hoàn tất.
Các đường ống NMS tích hợp CoreML (nms=True) chỉ hỗ trợ các model object detection. Việc xuất segmentation sang CoreML sẽ đưa ra cảnh báo và ép buộc sử dụng nms=False, tạo ra một model thô không có NMS.
| Định dạng | Đối số format | Mô hình | Metadata | Tham số |
|---|---|---|---|---|
| PyTorch | - | yolo26n-seg.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-seg.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-seg.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-seg_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-seg.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-seg.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-seg.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-seg_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-seg_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-seg.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-seg_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-seg_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-seg_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-seg_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-seg_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-seg_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-seg_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
Xem chi tiết đầy đủ về export tại trang Export.
Câu hỏi thường gặp#
Để huấn luyện một model YOLO26 segmentation trên một tập dữ liệu tùy chỉnh, trước tiên bạn cần chuẩn bị tập dữ liệu của mình theo định dạng YOLO segmentation. Bạn có thể sử dụng các công cụ như JSON2YOLO để chuyển đổi các tập dữ liệu từ các định dạng khác. Khi tập dữ liệu của bạn đã sẵn sàng, bạn có thể huấn luyện model bằng các lệnh Python hoặc CLI:
Ví dụfrom ultralytics import YOLO # Load a pretrained YOLO26 segment model model = YOLO("yolo26n-seg.pt") # Train the model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)Kiểm tra trang Configuration để biết thêm các đối số khả dụng.
Nhận diện vật thể xác định và định vị các vật thể trong hình ảnh bằng cách vẽ các hộp bao quanh chúng, trong khi phân đoạn thực thể không chỉ xác định các hộp bao mà còn phác thảo hình dạng chính xác của từng vật thể. Các mô hình phân đoạn thực thể YOLO26 cung cấp các mask hoặc đường bao phác thảo từng vật thể được phát hiện, điều này đặc biệt hữu ích cho các tác vụ cần biết hình dạng chính xác của vật thể, chẳng hạn như hình ảnh y tế hoặc xe tự lái.
Ultralytics YOLO26 là một model tiên tiến được công nhận nhờ độ chính xác cao và hiệu suất thời gian thực, lý tưởng cho các tác vụ instance segmentation. Các model YOLO26 Segment được huấn luyện trước trên COCO dataset, đảm bảo hiệu suất mạnh mẽ trên nhiều loại đối tượng. Ngoài ra, YOLO hỗ trợ các chức năng huấn luyện, xác thực, dự đoán và xuất với khả năng tích hợp liền mạch, làm cho nó rất linh hoạt cho cả các ứng dụng nghiên cứu và công nghiệp.
Việc tải và xác thực một mô hình phân đoạn YOLO đã được huấn luyện trước rất đơn giản. Đây là cách bạn có thể thực hiện điều đó bằng cách sử dụng cả Python và CLI:
Ví dụfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Validate the model metrics = model.val() print("Mean Average Precision for boxes:", metrics.box.map) print("Mean Average Precision for masks:", metrics.seg.map)Các bước này sẽ cung cấp cho bạn các số liệu đánh giá như Mean Average Precision (mAP), rất quan trọng để đánh giá hiệu suất của model.
Việc xuất mô hình phân đoạn YOLO sang định dạng ONNX rất đơn giản và có thể được thực hiện bằng cách sử dụng các lệnh Python hoặc CLI:
Ví dụfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-seg.pt") # Export the model to ONNX format model.export(format="onnx")Để biết thêm chi tiết về việc xuất sang các định dạng khác nhau, hãy tham khảo trang Export.