Ultralytics YOLO27:
Get Started

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 xa hơn một bước so với phát hiện đối tượng, bao gồm 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à tập hợp các mask hoặc đường bao 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.



Xem: Chạy phân đoạn bằng model Ultralytics YOLO được huấn luyện trước trong Python.
Mẹo

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

Model#

Các model YOLO26 Segment được pretrained trên bộ dữ liệu COCO được trình bày bên dưới.

Model sẽ tự động tải xuống từ bản phát hành Ultralytics mới nhất 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)
params
(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
  • Giá trị mAPval được tính trên bộ dữ liệu COCO val2017 với một model, một scale.
    Tái tạo bằng yolo segment val data=coco.yaml device=0 nms=False
  • Tốc độ là mức trung bình trên các ảnh COCO val, sử dụng ONNX trên CPU và TensorRT10 trên GPU NVIDIA T4.
    Tái tạo kết quả bằng yolo segment val data=coco.yaml batch=1 device=0|cpu nms=False
  • Các giá trị Params và FLOPs được tính cho model đã hợp nhất sau khi gộp Conv/BatchNorm và loại bỏ nhánh phát hiện không sử dụng. Checkpoint được huấn luyện trước vẫn giữ nguyên kiến trúc huấn luyện đầy đủ nên có thể hiển thị số liệu cao hơn.

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 huấn luyện lại, hãy xem YOLOE, cho phép dùng lớp làm prompt văn bản, ví dụ trực quan hoặc từ vựng tích hợp sẵn.

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

Huấn luyện#

Huấn luyện YOLO26n-seg trên bộ dữ liệu COCO8-seg trong 100 epoch với kích thước ảnh 640. Xem trang Cấu hình để biết danh sách đầy đủ các tham số hiện có.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-seg.yaml")  # tạo model mới từ YAML
model = YOLO("yolo26n-seg.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt")  # tạo từ YAML và chuyển trọng số

# Huấn luyện model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Xem chi tiết đầy đủ về chế độ train trên trang Train. Bạn cũng có thể huấn luyện model phân đoạn bằng dịch vụ huấn luyện đám mây Ultralytics Platform.

Định dạng dataset#

Bạn có thể xem chi tiết định dạng bộ dữ liệu phân đoạn YOLO trong Hướng dẫn về bộ dữ liệu. Để chuyển bộ dữ liệu COCO JSON hiện có sang định dạng YOLO, hãy dùng hàm tích hợp sẵn convert_coco với use_segments=True, như mô tả trong hướng dẫn chuyển đổi COCO sang YOLO. Bạn cũng có thể tạo mask phân đoạn bằng công cụ gán nhãn Ultralytics Platform sử dụng công cụ đa giác và tính năng gán nhãn thông minh dựa trên SAM.

Đánh giá#

Validation độ chính xác của model YOLO26n-seg đã huấn luyện. Không cần truyền tham số vì model giữ lại data dùng khi huấn luyện và các tham số dưới dạng thuộc tính của model: path/to/best.pt trong ví dụ Train sẽ validation trên COCO8-seg. Các weight chính thức ghi lại đường dẫn đến bộ dữ liệu huấn luyện không tồn tại trên máy của bạn, vì vậy chúng sẽ dùng coco8-seg.yaml mặc định cho tác vụ và đưa ra cảnh báo. Truyền data để validation trên bộ dữ liệu khác.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-seg.pt")  # tải model chính thức
model = YOLO("path/to/best.pt")  # tải model tùy chỉnh

# Xác thực model
metrics = model.val()  # không cần đối số, dataset và cài đặt đã được ghi nhớ
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # danh sách chứa mAP50-95(B) cho từng danh mục
metrics.box.image_metrics  # dictionary metric theo từng ảnh cho det, gồm precision, recall, F1, TP, FP và FN
metrics.seg.map  # map50-95(M)
metrics.seg.map50  # map50(M)
metrics.seg.map75  # map75(M)
metrics.seg.maps  # danh sách chứa mAP50-95(M) cho từng danh mục
metrics.seg.image_metrics  # dictionary metric theo từng ảnh cho seg, gồm precision, recall, F1, TP, FP và FN

Dự đoán#

Dùng model YOLO26n-seg đã huấn luyện để chạy dự đoán trên ảnh.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-seg.pt")  # tải model chính thức
model = YOLO("path/to/best.pt")  # tải model tùy chỉnh

# Dự đoán bằng model
results = model("https://ultralytics.com/images/bus.jpg")  # dự đoán trên một ảnh

# Truy cập kết quả
for result in results:
    xy = result.masks.xy  # các đa giác mask theo tọa độ pixel
    xyn = result.masks.xyn  # các đa giác mask đã chuẩn hóa
    masks = result.masks.data  # mask nhị phân, shape (N,H,W), dtype torch.uint8

Xem chi tiết đầy đủ về chế độ predict trên trang Dự đoán.

Đầu ra kết quả#

Phân đoạn từng đối tượng bằ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ểuHình dạngMô tả
result.masksMasks(N)Mask instance.
result.masks.datatorch.uint8(N,H,W)Mask nhị phân, có giá trị 0 hoặc 1.
result.masks.xynp.float32list[(P,2)]Đa giác theo pixel.
result.masks.xynnp.float32list[(P,2)]Đa giác đã chuẩn hóa.
result.boxesBoxes(N)Bounding box/lớp/độ tin cậy của instance.
result.boxes.clstorch.float32(N,)ID lớp; chuyển kiểu sang int để lấy tên.

Để xem các trường Results dành riêng cho từng tác vụ trên tất cả tác vụ, hãy tham khảo mục Kết quả dự đoán theo tác vụ.

Phân đoạn từng đối tượng và phân đoạn ngữ nghĩa#

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: hai 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, điểm tin cậy hay danh sách đa giác mặc định cho từng đối tượng. Xem phần so sánh chi tiết theo từng trường trên trang phân đoạn ngữ nghĩa.

Export#

Export model YOLO26n-seg sang định dạng khác như ONNX, CoreML, v.v.

Ví dụ
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n-seg.pt")  # tải model chính thức
model = YOLO("path/to/best.pt")  # tải model tùy chỉnh

# # Xuất model
model.export(format="onnx")

Các định dạng export phân đoạn YOLO26 hiện có được liệt kê trong bảng bên dưới. Bạn có thể export sang bất kỳ định dạng nào bằng tham số format, chẳng hạn format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc validation trực tiếp trên model đã export, chẳng hạn yolo predict model=yolo26n-seg.onnx. Sau khi quá trình export hoàn tất, các ví dụ sử dụng sẽ được hiển thị cho model của bạn.

Lưu ý

CoreML hỗ trợ NMS tích hợp (nms=True) cho phát hiện đối tượng, phân đoạn từng đối tượng và pose với shape tĩnh. Các bản export phân đoạn mặc định (nms=None) để NMS cho phía sử dụng xử lý.

Định dạngĐối số formatModelMetadataĐối số
PyTorch-yolo26n-seg.pt✅-
TorchScripttorchscriptyolo26n-seg.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-seg.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-seg_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-seg.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-seg_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-seg.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-seg.mnn✅imgsz, 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.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-seg_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-seg_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-seg_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None mặc định xuất đầu ra thô cho NMS bên ngoài. Đặt nms=False để chọn một head không dùng NMS hiện có; các định dạng không được hỗ trợ sẽ chuyển về luồng đầu ra gốc. Các mục nms ở trên xác định những định dạng có thể tích hợp NMS với nms=True.

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

Câu hỏi thường gặp#

  • Để huấn luyện model phân đoạn YOLO26 trên bộ dữ liệu tùy chỉnh, trước tiên bạn cần chuẩn bị bộ 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 bộ dữ liệu COCO JSON. Sau khi chuẩn bị xong bộ dữ liệu, bạn có thể huấn luyện model bằng Python hoặc các lệnh CLI:

    Ví dụ
    from ultralytics import YOLO
    
    # Tải model phân đoạn YOLO26 pretrained
    model = YOLO("yolo26n-seg.pt")
    
    # Huấn luyện model
    results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)

    Xem trang Cấu hình để biết thêm các tham số hiện có.

  • 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ẽ box giới hạn xung quanh chúng, trong khi phân đoạn từng đối tượng không chỉ xác định các box giới hạn 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 bao 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ự hành.

  • 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 YOLO26 Segment được pretrained trên bộ dữ liệu COCO, đảm bảo hiệu năng mạnh mẽ trên nhiều loại đối tượng. Ngoài ra, YOLO hỗ trợ huấn luyện, validation, dự đoán và export với khả năng tích hợp liền mạch, nhờ đó rất linh hoạt cho cả ứng dụng nghiên cứu lẫn công nghiệp.

  • Việc tải và validation model phân đoạn YOLO pretrained rất đơn giản. Sau đây là cách thực hiện bằng Python và CLI:

    Ví dụ
    from ultralytics import YOLO
    
    # Tải model pretrained
    model = YOLO("yolo26n-seg.pt")
    
    # Xác thực 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 những metric validation như Độ chính xác trung bình (mAP), rất quan trọng để đánh giá hiệu năng model.

  • Việc export 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
    
    # Tải model pretrained
    model = YOLO("yolo26n-seg.pt")
    
    # # Xuất model sang định dạng ONNX
    model.export(format="onnx")

    Để biết thêm chi tiết về cách export sang nhiều định dạng, hãy tham khảo trang Export.

Bình luận