Ultralytics YOLO27:

Phân đoạn từng đối tượng với Ultralytics YOLO#

Ultralytics YOLO instance segmentation examples

Phân đoạn từng đối tượng tiến thêm một bước so với phát hiện đối tượng, bao gồm việc xác định từng đối tượng riêng lẻ trong ảnh và phân đoạn chúng khỏi phần còn lại của ảnh.

Đầu ra của model phân đoạn từng đối tượng là một tập hợp các mask hoặc đường viền phác thảo từng đối tượng trong ảnh, cùng với nhãn lớp và điểm tin cậy cho mỗi đối tượng. Phân đoạn từng đối tượng hữu ích khi bạn cần biết không chỉ vị trí của các đối tượng trong ảnh mà còn cả hình dạng chính xác của chúng.



Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
Mẹo

Các model Segment của YOLO26 sử dụng hậu tố -seg, tức là yolo26n-seg.pt, và được pretrained trên COCO.

Models#

Các model Segment pretrained của YOLO26 được hiển thị tại đây. Các model Detect, Segment và Pose được pretrained trên dataset COCO, các model Ngữ nghĩa được pretrained trên Cityscapes, còn các model Classify được pretrained trên dataset ImageNet.

Models được tự động tải xuống từ bản phát hành mới nhất của Ultralytics trong lần sử dụng đầu tiên.

Modelkích thước
(pixel)
mAPbox
50-95(e2e)
mAPmask
50-95(e2e)
Tốc độ
CPU ONNX
(ms)
Tốc độ
T4 TensorRT10
(ms)
tham số
(M)
FLOPs
(B)
YOLO26n-seg64039.633.953.3 ± 0.52.1 ± 0.02.79.3
YOLO26s-seg64047.340.0118.4 ± 0.93.3 ± 0.010.434.5
YOLO26m-seg64052.544.1328.2 ± 2.46.7 ± 0.123.6121.7
YOLO26l-seg64054.445.5387.0 ± 3.78.0 ± 0.128.0140.1
YOLO26x-seg64056.547.0787.0 ± 6.816.4 ± 0.162.8314.0
  • Các giá trị mAPval dành cho một model, một scale duy nhất trên tập dữ liệu COCO val2017.
    Tái tạo bằng yolo val segment data=coco.yaml device=0 nms=False
  • Tốc độ được tính trung bình trên các ảnh COCO val bằng một instance Amazon EC2 P4d.
    Tái hiện bằng yolo val segment data=coco.yaml batch=1 device=0|cpu nms=False
  • Params and FLOPs values are for fused models after Conv/BatchNorm folding and removal of the unused detection branch. Pretrained checkpoints retain the full training architecture and may show higher counts.

Các checkpoint này phân đoạn 80 lớp COCO. Để phân đoạn các danh mục nằm ngoài danh sách đó mà không cần retrain, hãy xem YOLOE, nhận các lớp dưới dạng prompt văn bản, ví dụ trực quan hoặc vocabulary tích hợp sẵn.

Xem phần bản xem trước YOLO27 chưa phát hành để biết các kết quả sơ bộ về bounding box và mask trên COCO.

Huấn luyện#

Train YOLO26n-seg trên dataset COCO8-seg trong 100 epoch với kích thước ảnh 640. Xem danh sách đầy đủ các tham số khả dụng trên trang Configuration.

Ví dụ
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 đầy đủ thông tin về mode train trên trang Train. Các model phân đoạn cũng có thể được train bằng Ultralytics Platform cloud training.

Định dạng dataset#

Định dạng tập dữ liệu phân đoạn YOLO có thể được tìm thấy chi tiết trong Dataset Guide. Để chuyển đổi tập dữ liệu COCO JSON hiện có sang định dạng YOLO, hãy sử dụng hàm convert_coco tích hợp sẵn với use_segments=True, như được mô tả trong COCO to YOLO guide. Bạn cũng có thể tạo mặt nạ phân đoạn với Ultralytics Platform annotation bằng cách 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#

Đánh giá độ chính xác của model YOLO26n-seg đã train trên dataset COCO8-seg. Không cần tham số nào vì model lưu giữ data và các tham số dùng trong quá trình train dưới dạng thuộc tính của model.

Ví dụ
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 FN

Predict#

Sử dụng model YOLO26n-seg đã train để chạy dự đoán trên ảnh.

Ví dụ
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.uint8

Xem đầy đủ chi tiết về mode predict trên trang Predict.

Output kết quả#

Phân đoạn từng đối tượng YOLO trả về một đối tượng Results cho mỗi ả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ó mask nhị phân, lớp, độ tin cậy và box riêng.

Thuộc tínhKiểuShapeMô tả
result.masksMasks(N)Các mask của instance.
result.masks.datatorch.uint8(N,H,W)Các mask nhị phân, có giá trị 0 hoặc 1.
result.masks.xynp.float32list[(P,2)]Các polygon pixel.
result.masks.xynnp.float32list[(P,2)]Các polygon đã chuẩn hóa.
result.boxesBoxes(N)Các box/class/độ tin cậy của instance.
result.boxes.clstorch.float32(N,)ID class; chuyển kiểu sang int để lấy tên.

Để xem các field Results dành riêng cho từng task trên mọi task, hãy xem phần Predict Results by Task.

Phân đoạn này khác với phân đoạn ngữ nghĩa như thế nào#

Phân đoạn từng đối tượng là phân đoạn ở cấp đối tượng: hai chiếc xe tạo ra hai mask, hai box và hai điểm tin cậy. Phân đoạn ngữ nghĩa là phân loại ở cấp pixel: những chiếc xe đó trở thành các pixel có cùng ID lớp trong một bản đồ lớp có kích thước bằng ảnh, không có box, độ tin cậy hoặc danh sách polygon mặc định cho từng đối tượng.

Export#

Xuất model YOLO26n-seg sang một định dạng khác như ONNX, CoreML, v.v.

Ví dụ
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 khả dụng được liệt kê trong bảng bên dưới. Bạn có thể xuất sang bất kỳ định dạng nào bằng tham số format, tức là format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc đánh giá 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 cho model của bạn sẽ được hiển thị sau khi quá trình xuất hoàn tất.

Lưu ý

CoreML hỗ trợ NMS nhúng (nms=True) cho tác vụ phát hiện, phân đoạn thực thể và ước lượng tư thế với kích thước tĩnh. Các bản xuất phân đoạn mặc định (nms=None) để lại phần NMS cho bên tiêu thụ.

Định dạngArgument formatModelMetadataArguments
PyTorch-yolo26n-seg.pt-
TorchScripttorchscriptyolo26n-seg.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-seg.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-seg_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-seg_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/imgsz, batch, device
MNNmnnyolo26n-seg.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-seg_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-seg_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-seg_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-seg_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-seg_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-seg_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-seg_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-seg.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-seg_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-seg_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-seg.aimodelimgsz, batch, quantize

nms=None mặc định sử dụng đầu ra thô cho NMS bên ngoài. Thiết lập nms=False để chọn phần đầu không có NMS khả dụng; các định dạng không được hỗ trợ sẽ quay lại đường dẫn đầu ra gốc của chúng. Các mục nms ở trên xác định các định dạng có thể nhúng NMS bằng nms=True.

Xem đầy đủ chi tiết về export trên trang Export.

FAQ#

  • Để huấn luyện mô hình phân đoạn YOLO26 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 theo định dạng phân đoạn YOLO. Bạn có thể sử dụng tiện ích convert_coco tích hợp sẵn để chuyển đổi các tập dữ liệu COCO JSON. Khi tập dữ liệu đã sẵn sàng, bạn có thể huấn luyện mô hình 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)

    Xem trang Configuration để biết thêm các argument khả dụng.

  • Phát hiện đối tượng xác định và định vị các đối tượng trong ảnh bằng cách vẽ bounding box xung quanh chúng, trong khi phân đoạn từng đối tượng không chỉ xác định bounding box mà còn phân định hình dạng chính xác của từng đối tượng. Các model phân đoạn từng đối tượng YOLO26 cung cấp mask hoặc đường viền phác thảo từng đối tượng được phát hiện, đặc biệt hữu ích cho những tác vụ cần biết hình dạng chính xác của đối tượng, chẳng hạn như chẩn đoán hình ảnh y tế hoặc lái xe tự động.

  • Ultralytics YOLO26 là model hiện đại hàng đầu, nổi bật với độ chính xác cao và hiệu năng thời gian thực, phù hợp cho các tác vụ phân đoạn từng đối tượng. Các model Segment của YOLO26 được pretrained trên dataset COCO, đảm bảo hiệu năng ổn định trên nhiều loại đối tượng. Ngoài ra, YOLO hỗ trợ các chức năng train, validation, prediction và export với khả năng tích hợp liền mạch, mang lại tính linh hoạt cao cho cả ứng dụng nghiên cứu và công nghiệp.

  • Việc load và đánh giá một model phân đoạn YOLO pretrained rất đơn giản. Dưới đây là cách thực hiện bằ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 metric đánh giá như Mean Average Precision (mAP), rất quan trọng để đánh giá hiệu năng của model.

  • Việc xuất model phân đoạn YOLO sang định dạng ONNX rất đơn giản và có thể thực hiện bằng Python hoặc các lệnh 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 export sang nhiều định dạng khác nhau, hãy tham khảo trang Export.

Bình luận