Ultralytics YOLO27:

Phân đoạn ngữ nghĩa với Ultralytics YOLO#

Semantic segmentation examples

Phân đoạn ngữ nghĩa gán nhãn lớp cho mọi pixel trong một hình ảnh, tạo ra bản đồ lớp dày đặc bao phủ toàn bộ cảnh. Không giống phân đoạn đối tượng, vốn phân tách từng đối tượng riêng lẻ, phân đoạn ngữ nghĩa nhóm tất cả pixel cùng lớp lại với nhau bất kể có bao nhiêu đối tượng riêng biệt hiện diện.



Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial

Đầu ra của model phân đoạn ngữ nghĩa là một bản đồ lớp có kích thước bằng chiều cao × chiều rộng, trong đó giá trị của mỗi pixel tương ứng với ID lớp được dự đoán. Điều này khiến phân đoạn ngữ nghĩa phù hợp với các tác vụ phân tích cảnh như lái xe tự động, chụp ảnh y tế và lập bản đồ lớp phủ mặt đất.

Mẹo

Sử dụng tác vụ CLI task=semantic hoặc yolo semantic cho phân đoạn ngữ nghĩa. Các tệp model phân đoạn ngữ nghĩa YOLO26 sử dụng hậu tố -sem, chẳng hạn như yolo26n-sem.pt.

Models#

Các model phân đoạn ngữ nghĩa YOLO26 được pretrained trên dataset Cityscapes được hiển thị bên dưới.

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)
mIoUvalTốc độ
RTX3090 PyTorch
(ms)
tham số
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.623.8
YOLO26s-sem1024 × 204880.88.4 ± 0.06.591.0
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3305.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.8388.2
YOLO26x-sem1024 × 204883.648.9 ± 0.240.1866.9
  • Các giá trị mIoUval là kết quả của một model, một scale trên tập validation Cityscapes.
    Tái hiện bằng yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Các chỉ số Speed được tính trung bình trên các ảnh validation của Cityscapes bằng một instance RTX3090.
    Tái hiện bằng yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • Các giá trị ParamsFLOPs áp dụng cho model đã fuse sau model.fuse(), trong đó các layer Conv và BatchNorm được hợp nhất. Các checkpoint pretrained giữ nguyên kiến trúc training đầy đủ và có thể hiển thị số lượng cao hơn.

Các model phân đoạn ngữ nghĩa YOLO26 được pretrained trên dataset ADE20K được hiển thị bên dưới.

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)
mIoUvalTốc độ
RTX3090 PyTorch
(ms)
tham số
(M)
FLOPs
(B)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.5
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.5
YOLO26m-sem-ade20k64047.44.7 ± 0.314.459.6
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.2
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.4
  • Các giá trị mIoUval là kết quả của một model, một scale trên tập validation ADE20K.
    Tái hiện bằng yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, thay yolo26n-sem-ade20k.pt bằng checkpoint yolo26*-sem-ade20k.pt mong muốn.
  • Các chỉ số Speed được tính trung bình trên các ảnh validation của ADE20K bằng một instance RTX3090.
    Tái hiện bằng yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, thay yolo26n-sem-ade20k.pt bằng checkpoint yolo26*-sem-ade20k.pt mong muốn.
  • Các giá trị ParamsFLOPs áp dụng cho model đã fuse sau model.fuse(), trong đó các layer Conv và BatchNorm được hợp nhất. Các checkpoint pretrained giữ nguyên kiến trúc training đầy đủ và có thể hiển thị số lượng cao hơn.

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

Huấn luyện#

Train YOLO26n-sem trên dataset Cityscapes8 trong 100 epoch với kích thước ảnh là 1024. Xem danh sách đầy đủ các đối số hiện có trên trang Configuration.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.yaml")  # build a new model from YAML
model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Xem thông tin đầy đủ về chế độ train trên trang Train. Các model phân đoạn ngữ nghĩa cũng có thể được train bằng Ultralytics Platform cloud training.

Định dạng dataset#

Dataset phân đoạn ngữ nghĩa sử dụng ảnh mask một kênh, thường ở định dạng PNG, trong đó giá trị của mỗi pixel biểu thị một ID lớp. Các pixel có giá trị 255 được xem là "ignore" và bị loại khỏi phép tính loss. YAML của dataset cần chỉ định đường dẫn đến các thư mục ảnh và mask tương ứng. Xem Semantic Segmentation Dataset Guide để biết chi tiết về định dạng. Các dataset được hỗ trợ gồm CityscapesADE20K. Bạn có thể quản lý và gán nhãn dataset ngữ nghĩa bằng Ultralytics Platform annotation.

Val#

Validate độ chính xác của model YOLO26n-sem đã train trên dataset phân đoạn ngữ nghĩa. Truyền tường minh data để validation sử dụng đúng YAML của dataset.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou  # mean Intersection over Union
metrics.pixel_accuracy  # overall pixel accuracy

Predict#

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

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.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:
    semantic_mask = result.semantic_mask.data  # class map, shape (H,W), integer dtype selected by class count

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

Output kết quả#

Phân đoạn ngữ nghĩa YOLO trả về một đối tượng Results cho mỗi ảnh. Mỗi result lưu một bản đồ lớp dày đặc cho toàn bộ ảnh thay vì một danh sách các mask đối tượng. Các pixel có cùng lớp được dự đoán sẽ dùng chung một ID lớp, ngay cả khi chúng thuộc về các đối tượng riêng biệt.

Thuộc tínhKiểuShapeMô tả
result.semantic_maskSemanticMask(H,W)Bản đồ lớp dày đặc.
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)ID lớp; dtype được chọn dựa trên số lượng lớp.
result.masks--Không có mask của instance.
result.boxes--Không có bbox/confidence của instance.
result.masks.xy--Không có polygon mặc định.

Để 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.

Chất lượng biên mask

Phân đoạn ngữ nghĩa dự đoán một bản đồ lớp dày đặc, sau đó thay đổi kích thước bản đồ đó về hình dạng ảnh để trực quan hóa và sử dụng cho các bước tiếp theo. Do đó, các cấu trúc rất mảnh như vạch làn đường, vạch sân, cột hoặc dây điện có thể trông bậc thang khi inference chạy ở imgsz thấp hơn nhiều so với độ phân giải ảnh gốc. Nếu các biên có vẻ lởm chởm, trước tiên hãy kiểm tra lại model PyTorch gốc .pt với imgsz lớn hơn, chẳng hạn như 1024, 1280 hoặc giá trị thực tế gần nhất với kích thước ảnh nguồn. Chỉ sử dụng model đã export sau khi xác nhận đầu ra .pt là chấp nhận được, vì input có độ phân giải thấp hơn không thể khôi phục chi tiết nhỏ vốn không xuất hiện trong bản đồ lớp được dự đoán.

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

Khía cạnhPhân đoạn đối tượng (task="segment")Phân đoạn ngữ nghĩa (task="semantic")
Mục tiêu dự đoánPhân đoạn riêng từng đối tượng được phát hiệnGán một ID lớp cho mọi pixel
Trường đầu raresult.masksresult.semantic_mask
Dữ liệu chínhresult.masks.dataresult.semantic_mask.data
Shape(N,H,W)(H,W)
Giá trị pixelGiá trị mask nhị phân: 0 hoặc 1ID lớp: 0, 1, 2, ...
Dtypetorch.uint8torch.uint8
torch.int16
torch.int32
Các đối tượng cùng lớpĐược giữ thành các instance riêng biệtĐược hợp nhất vào cùng một vùng lớp
PolygonCó, thông qua result.masks.xyresult.masks.xynMặc định không có đầu ra polygon
BBox và confidenceCó, thông qua result.boxesKhông có bbox hoặc confidence score theo từng instance
Trường hợp sử dụng điển hìnhĐếm, tracking, cắt ảnh, đo lường cấp đối tượngGán nhãn cảnh dày đặc, vùng có thể lái xe, lớp phủ mặt đất, vùng y tế

Export#

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

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

Các định dạng export phân đoạn ngữ nghĩa 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 đối số format, tức là format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc validate trực tiếp trên các model đã export, tức là yolo predict model=yolo26n-sem.onnx. Các ví dụ sử dụng cho model của bạn sẽ được hiển thị sau khi quá trình export hoàn tất.

Định dạngArgument formatModelMetadataArguments
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-sem_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-sem_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-sem.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#

  • Để train model phân đoạn ngữ nghĩa YOLO26 trên dataset tùy chỉnh, bạn cần chuẩn bị các ảnh mask PNG trong đó giá trị của mỗi pixel biểu thị một ID lớp (0, 1, 2, ...) và các pixel có giá trị 255 sẽ bị bỏ qua trong quá trình training. Tạo tệp YAML của dataset trỏ đến các thư mục ảnh và mask, sau đó train model:

    Ví dụ
    from ultralytics import YOLO
    
    # Load a pretrained YOLO26 semantic segmentation model
    model = YOLO("yolo26n-sem.pt")
    
    # Train the model
    results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)

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

  • Phân đoạn đối tượng và phân đoạn ngữ nghĩa đều là các tác vụ cấp pixel nhưng khác nhau ở một điểm chính:

    • Phân đoạn ngữ nghĩa gán nhãn lớp cho mọi pixel nhưng không phân biệt các đối tượng riêng lẻ cùng lớp. Ví dụ, tất cả ô tô trong một cảnh đều dùng chung một nhãn lớp.
    • Phân đoạn đối tượng nhận diện riêng từng đối tượng, tạo ra các mask riêng biệt cho từng đối tượng ngay cả khi chúng thuộc cùng một lớp.

    Phân đoạn ngữ nghĩa phù hợp nhất với các tác vụ hiểu cảnh như lái xe tự động và lập bản đồ lớp phủ mặt đất, trong khi phân đoạn đối tượng được ưu tiên khi cần đếm hoặc tracking từng đối tượng riêng lẻ.

  • Có. Nếu dataset của bạn sử dụng nhãn polygon Ultralytics YOLO (một .txt cho mỗi ảnh), bỏ qua masks_dir trong YAML của dataset và đảm bảo không có thư mục masks/ nào tồn tại bên cạnh ảnh tại thư mục gốc của dataset (chỉ riêng sự hiện diện của thư mục này đã kích hoạt chế độ mask PNG ngay cả khi chưa đặt masks_dir). Sau đó, loader sẽ chuyển đổi polygon thành mask ngữ nghĩa theo từng ảnh trong thời gian chạy. Đối với dataset đa lớp (N > 1), một lớp background bổ sung sẽ tự động được thêm vào names. Đối với dataset một lớp (N == 1), training vẫn giữ ở 1 lớp — lớp bạn khai báo sẽ trở thành 1 trong mask và các pixel không được phủ sẽ trở thành 0. Xem Semantic Segmentation Dataset Guide để biết chi tiết.

  • Ultralytics YOLO26 cung cấp cấu hình tích hợp cho một số dataset phân đoạn ngữ nghĩa:

    • Cityscapes: Các cảnh đường phố đô thị với 19 lớp, được sử dụng rộng rãi trong nghiên cứu lái xe tự động.
    • ADE20K: Dataset phân tích cảnh quy mô lớn với 150 lớp.

    Bạn cũng có thể sử dụng bất kỳ dataset tùy chỉnh nào cung cấp annotation mask PNG trong đó các giá trị pixel tương ứng với ID lớp.

  • Validate model phân đoạn ngữ nghĩa YOLO26 pretrained bằng YAML của dataset được sử dụng để đánh giá:

    Ví dụ
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-sem.pt")
    
    # Validate the model
    metrics = model.val(data="cityscapes.yaml")
    print("Mean IoU:", metrics.miou)
    print("Pixel Accuracy:", metrics.pixel_accuracy)

    Các bước này sẽ cung cấp cho bạn các chỉ số validation như Intersection over Union trung bình (mIoU) và độ chính xác pixel, là những thước đo tiêu chuẩn để đánh giá hiệu suất phân đoạn ngữ nghĩa.

  • Export model phân đoạn ngữ nghĩa YOLO26 sang định dạng ONNX bằng các lệnh Python hoặc CLI:

    Ví dụ
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-sem.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