Ultralytics YOLO27: Join the waitlist.
Get Started

Instance Segmentation with Ultralytics YOLO

Ultralytics YOLO instance segmentation examples

Instance segmentation goes a step further than object detection and involves identifying individual objects in an image and segmenting them from the rest of the image.

The output of an instance segmentation model is a set of masks or contours that outline each object in the image, along with class labels and confidence scores for each object. Instance segmentation is useful when you need to know not only where objects are in an image, but also what their exact shape is.



Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
Tip

YOLO26 Segment models use the -seg suffix, e.g., yolo26n-seg.pt, and are pretrained on COCO.

Models#

YOLO26 Segment models pretrained on the COCO dataset are shown below.

Models download automatically from the latest Ultralytics release on first use.

Modelsize
(pixels)
mAPbox50-95
(e2e)
mAPmask50-95
(e2e)
Speed
CPU ONNX
(ms)
Speed
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
  • mAPval values are for single-model single-scale on COCO val2017 dataset.
    Reproduce with yolo segment val data=coco.yaml device=0 nms=False
  • Speed averaged over COCO val images with ONNX on CPU and TensorRT10 on an NVIDIA T4 GPU.
    Reproduce with yolo segment val 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.

These checkpoints segment the 80 COCO classes. To segment categories outside that list without retraining, see YOLOE, which takes the classes as a text prompt, a visual example, or a built-in vocabulary.

See the unreleased YOLO27 preview for preliminary COCO box and mask results.

Train#

Train a YOLO26n-seg model on the COCO8-seg dataset for 100 epochs at image size 640.

Example
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)

See full train mode details in the Train page. Segmentation models can also be trained with Ultralytics Platform cloud training.

Dataset format#

YOLO segmentation dataset format can be found in detail in the Dataset Guide. To convert an existing COCO JSON dataset to YOLO format, use the built-in convert_coco function with use_segments=True, as described in the COCO to YOLO guide. You can also create segmentation masks with Ultralytics Platform annotation using polygon tools and SAM-powered smart annotation.

Val#

Validate trained YOLO26n-seg model accuracy, measured as box and mask mean average precision (mAP). No arguments are needed, as the model retains its training data and arguments as model attributes: path/to/best.pt from the Train example validates on COCO8-seg. Official weights record a training dataset path that doesn't exist on your machine, so they fall back to the task default coco8-seg.yaml with a warning. Pass data to validate on another dataset.

Example
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  # mAP50-95(B) per class; classes absent from the val set hold the overall mAP(B)
metrics.box.ap_class_index  # class indices that were actually evaluated
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  # mAP50-95(M) per class; classes absent from the val set hold the overall mAP(M)
metrics.seg.ap_class_index  # class indices that were actually evaluated
metrics.seg.image_metrics  # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FN

Predict#

Use a trained YOLO26n-seg model to run predictions on images.

Example
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

See full predict mode details in the Predict page.

Results Output#

YOLO instance segmentation returns one Results object per image. Each result stores object-level predictions, where each detected instance has its own binary mask, class, confidence, and box.

AttributeTypeShapeDescription
result.masksMasks(N)Instance masks.
result.masks.datatorch.uint8(N,H,W)Binary masks, values 0 or 1.
result.masks.xynp.float32list[(P,2)]Pixel polygons.
result.masks.xynnp.float32list[(P,2)]Normalized polygons.
result.boxesBoxes(N)Instance boxes/classes/confidences.
result.boxes.clstorch.float32(N,)Class IDs; cast to int for names.

For task-specific Results fields across every task, see the Predict Results by Task section.

Instance vs Semantic Segmentation#

Instance segmentation is object-level segmentation: two cars produce two masks, two boxes, and two confidence scores. Semantic segmentation is pixel-level classification: those same cars become pixels with the same class ID in one image-sized class map, with no per-object boxes, confidences, or default polygon list. See the field-by-field comparison on the semantic segmentation page.

Export#

Export a YOLO26n-seg model to a different format like ONNX, CoreML, etc.

Example
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

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

Available YOLO26-seg export formats are in the table below. You can export to any format using the format argument, e.g., format='onnx' or format='engine'. You can predict or validate directly on exported models, e.g., yolo predict model=yolo26n-seg.onnx. Usage examples are shown for your model after export completes.

Note

CoreML supports embedded NMS (nms=True) for detection, instance segmentation and pose with static shapes. Default segmentation exports (nms=None) leave NMS to the consumer.

Formatformat ArgumentModelMetadataArguments
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
IMX500imxyolo11n_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
NXPnxpyolo26n-seg_nxp.tflite✅imgsz, quantize, data, fraction, device

nms=None defaults to raw outputs for external NMS (YOLO26 keeps its NMS-free head on Axelera). Set nms=False to select an available NMS-free head; unsupported formats fall back to their native output path. The nms entries above identify formats that can embed NMS with nms=True.

See full export details in the Export page.

FAQ#

  • To train a YOLO26 segmentation model on a custom dataset, you first need to prepare your dataset in the YOLO segmentation format. You can use the built-in convert_coco utility to convert COCO JSON datasets. Once your dataset is ready, you can train the model using Python or CLI commands:

    Example
    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)

    Check the Configuration page for more available arguments.

  • Object detection identifies and localizes objects within an image by drawing bounding boxes around them, whereas instance segmentation not only identifies the bounding boxes but also delineates the exact shape of each object. YOLO26 instance segmentation models provide masks or contours that outline each detected object, which is particularly useful for tasks where knowing the precise shape of objects is important, such as medical imaging or autonomous driving.

  • Ultralytics YOLO26 combines high accuracy with real-time inference speed, which suits instance segmentation on video streams and edge devices. YOLO26 Segment models come pretrained on the COCO dataset, so they segment 80 common object classes out of the box and provide a strong starting point for fine-tuning on custom data. The same YOLO API covers training, validation, prediction, and export for both research and industry applications.

  • Loading and validating a pretrained YOLO segmentation model is straightforward. Here's how you can do it using both Python and CLI:

    Example
    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)

    These steps will provide you with validation metrics like mean average precision (mAP), the standard measure of segmentation performance.

  • Exporting a YOLO segmentation model to ONNX format is simple and can be done using Python or CLI commands:

    Example
    from ultralytics import YOLO
    
    # Load a pretrained model
    model = YOLO("yolo26n-seg.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    For more details on exporting to various formats, refer to the Export page.

Comments418

Ask a question, share your results, or help someone else.

  1. hp0716hp0716GitHub

    Thank you for sharing the YOLOV11-seg model. I have encountered a problem now. When using YOLOV11 to segment my ID card, there are many uneven areas on the edges of the segmentation result, which affects my fitting of the card certificate boundary. How can I obtain smooth segmentation results? Do you have any parameters that can be directly configured?

    1
    1. hp0716hp0716GitHub

      Additionally, is there a method to fit the boundary of the ID card mask into four straight lines for locating the ID card?

    2. Glenn JocherGlenn JocherUltralytics

      @hp0716 for smoother segmentation results on ID cards, try using retina_masks=True during inference to get higher resolution masks:

      from ultralytics import YOLO
      model = YOLO('yolo11n-seg.pt')
      results = model(image, retina_masks=True)

      For post-processing to get smooth boundaries, you can apply morphological operations and contour approximation:

      import cv2
      import numpy as np
      
      # Get mask from results
      mask = results[0].masks.data[0].cpu().numpy()
      mask = (mask * 255).astype(np.uint8)
      
      # Apply morphological smoothing
      kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
      mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
      mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
      
      # Find contours and approximate to quadrilateral
      contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
      if contours:
          largest_contour = max(contours, key=cv2.contourArea)
          epsilon = 0.02 * cv2.arcLength(largest_contour, True)
          approx = cv2.approxPolyDP(largest_contour, epsilon, True)
          
          # Force to 4 points for ID card corners
          if len(approx) >= 4:
              corners = approx[:4]

      This approach combines higher resolution masks with geometric fitting to achieve the straight-line boundaries you need for ID card localization.

      1
    1. rugvedjalitrugvedjalitGitHub

      Yes, you can annotate using custom build model but please check the annotation class id after annotation.

  2. LwpZoeLwpZoeGitHub

    I have used yolo11x-seg.yaml to do instance segmentation on my dataset, my dataset is multiclassified medical endoscopic tissue instance segmentation task, but the metrics scores are very low, I don't know how to improve these metrics scores, can you please give me some ideas?

    1
    1. LwpZoeLwpZoeGitHub

      The metrics score with ShuffleAttention added to the tenth layer of backbone is reduced compared to the metrics score for YOLO11x-seg.yaml alone.

      Trained my dataset using YOLO11x-seg.yaml+ShuffleAttention with no other parameters changed the metrics scores are as follows:

      Class Images Instances Box( P R mAP50 mAP50-95) Mask( P R mAP50 mAP50-95): all 58 332 0.583 0.504 0.519 0.238 0.551 0.456 0.468 0.195

      Training my dataset using the official YOLO11x-seg.yaml alone, the metrics scores are as follows:

      Class Images Instances Box( P R mAP50 mAP50-95) Mask( P R mAP50 mAP50-95): all 58 332 0.669 0.465 0.489 0.257 0.648 0.446 0.455 0.217

      1
    2. Glenn JocherGlenn JocherUltralytics(edited)

      @LwpZoe thank you for sharing these details. For medical instance segmentation with YOLO11x-seg, we recommend: 1) Verify your dataset quality and annotation consistency using the Dataset Guide, 2) Try increasing input resolution (imgsz=1280) to capture fine tissue details, 3) Implement medical-specific augmentations like CLAHE or elastic transforms, and 4) Consider using our pretrained weights with progressive fine-tuning rather than architectural modifications initially. The segmentation documentation contains additional optimization strategies for medical imaging tasks.

  3. LwpZoeLwpZoeGitHub

    Hello, here's a question: I want to use YOLO11 to train my dataset from scratch and make predictions, and don't want to use prepared pre-trained weights, so how do I write the training commands? Is this code below ok: yolo segment train data=datasets/yolo_seg/data.yaml model=yolo11n-seg.yaml epochs=300 batch=16 resume=True imgsz=640 device=0,1

    1
    1. Glenn JocherGlenn JocherUltralytics

      @LwpZoe your command is almost correct for training from scratch without pretrained weights. Ensure the resume=True argument is removed, as it is only used to resume interrupted training. The corrected command would be:

      yolo segment train data=datasets/yolo_seg/data.yaml model=yolo11n-seg.yaml epochs=300 batch=16 imgsz=640 device=0,1

      This will train your YOLO11 segmentation model from scratch using your custom dataset. For more details, visit the Segment Task Documentation.

    1. Paula DerrengerPaula DerrengerUltralytics

      To use two cameras for segmentation with a GPU, you'll need to set up a multi-threaded or multi-process pipeline to handle the video streams concurrently. Each camera stream can be processed in a separate thread or process, ensuring efficient utilization of the GPU. You can use the YOLO class from the Ultralytics library to load your segmentation model and process the frames from each camera. For detailed steps and code examples, please refer to the Ultralytics segmentation documentation. If you encounter any issues, make sure you're using the latest version of the package.

  4. BoaruzhanchikBoaruzhanchikGitHub

    Hi, can you tell me how I can get the detected car plates in separate windows (as many as I have detected and output), my code outputs only one window.

    while True:
    ret, im0 = cap.read()
    if not ret:
    break
    results = model(im0,verbose=False,conf=0.4,retina_masks=True)
    boxes = results[0].boxes.xyxy.tolist()
    classes = results[0].boxes.cls.tolist()
    confidences = results[0].boxes.conf.tolist()
    masks = results[0].masks
    if results[0].masks is not None:
    clss = results[0].boxes.cls.cpu().tolist()
    masks = results[0].masks.xy
    coordinates_mask = masks[0]
    contour = coordinates_mask.reshape((-1, 1, 2)).astype(np.int32)
    epsilon = 0.04 * cv2.arcLength(contour, True)
    approx = cv2.approxPolyDP(contour, epsilon, True)
    auto_transform = four_point_transform(im0, approx.reshape(-2, 2))
    cv2.imshow('automated', auto_transform)
    1
    1. Paula DerrengerPaula DerrengerUltralytics

      @Boaruzhanchik hey there! 👋 To display each detected car plate in separate windows, you can loop through the detected boxes and create a window for each. Here's a quick example to get you started:

      for i, box in enumerate(boxes):
          x1, y1, x2, y2 = map(int, box[:4])
          plate = im0[y1:y2, x1:x2]
          cv2.imshow(f'Plate {i}', plate)
      cv2.waitKey(0)
      cv2.destroyAllWindows()

      This code snippet extracts each detected plate based on its bounding box coordinates and displays it in a new window. Make sure to replace im0 with your frame variable if it's named differently. Hope this helps! 😊

    2. BoaruzhanchikBoaruzhanchikGitHub

      Thanks a lot for the help, I did it this way, it seems to work too

      if results[0].masks is not None:
          clss = results[0].boxes.cls.cpu().tolist()
          masks = results[0].masks.xy
          if len(masks) == 1:
               coordinates_mask = masks[0]
               auto_transformations_first(coordinates_mask)
          elif len(masks) <= 2:
                auto_transformations_first(coordinates_mask)
                coordinates_mask_2 = masks[1]
                auto_transformations_second_screen(coordinates_mask_2)
      def auto_transformations_first(coordinates_mask):
           contour = coordinates_mask.reshape((-1, 1, 2)).astype(np.int32)
           epsilon = 0.04 * cv2.arcLength(contour, True)
           approx = cv2.approxPolyDP(contour, epsilon, True)
           auto_transform = four_point_transform(im0, approx.reshape(-2, 2))
           cv2.imshow('automated_first', auto_transform)
    3. Paula DerrengerPaula DerrengerUltralytics

      @Boaruzhanchik hey there! 👋 It looks like you've found a way to handle different numbers of masks with your approach. Nicely done! 🎉 Just a quick tip: you might want to ensure coordinates_mask is defined before using it in auto_transformations_first(coordinates_mask) for the elif len(masks) <= 2: case, to avoid any potential errors. Other than that, your method seems solid. Keep up the great work, and if you have any more questions or need further assistance, feel free to ask. Happy coding! 😊

  5. uqasha524uqasha524GitHub

    Hi everyone,

    We have fine-tuned a YOLO model primarily for segmentation, but our dataset contains mixed annotation types—the main task is segmentation, while some classes/regions use standard bounding boxes and OBB (Oriented Bounding Boxes).

    What is the recommended approach in Ultralytics for handling a dataset with mixed annotation formats in a single training pipeline, and could you explain how this is possible? Specifically, how should the data labels and model configuration be structured to handle multiple task types simultaneously?

    Any guidance, workflow explanations, or examples would be greatly appreciated!

    1. Glenn JocherGlenn JocherUltralytics

      Ultralytics training uses one task per model (detect, segment, or obb), so mixed label formats cannot be trained jointly in a standard pipeline. Use separate label directories/YAML files and train separate models, or convert box/OBB annotations to polygon labels so every object follows the segmentation format; note that a segmentation model returns masks and axis-aligned boxes, not native OBB predictions.

      1
    2. rugvedjalitrugvedjalitGitHub

      Ultralytics YOLO does not support mixing detection, segmentation, and OBB annotations in a single training run. Each model/task expects a specific label format and corresponding loss function.

      The recommended approach is to separate the annotations and train separate models for segmentation, detection, and OBB, then combine their outputs during inference if needed. A single multi-task model would require a custom architecture and training pipeline.

      1
    3. Glenn JocherGlenn JocherUltralytics

      @uqasha524, do you need masks, axis-aligned boxes, and OBBs as distinct outputs at inference, or would segmentation outputs alone meet your requirements? That distinction will help us suggest the appropriate dataset structure without introducing unnecessary custom training work.

  6. TrieuCrisTrieuCrisGitHub

    With yolo26-seg, when a small object is placed on top of a large object, I get a result where the mask of the large object is punctured right where the small object is covering it. How can I fix this?

    1. Glenn JocherGlenn JocherUltralytics

      That’s usually expected with standard instance segmentation: yolo26-seg learns the visible region of each instance, so the larger object can appear “punctured” where it is occluded; if you want a filled large-object mask, you’ll need labels that include the full occluded shape or apply post-processing to r.masks after inference, and the segmentation object isolation guide shows where to access those masks—if you share one image plus its label here, the Ultralytics team can help confirm whether it’s annotation or model behavior.

  7. miracle101000miracle101000GitHub

    hello if I wanted to use your segmentation model for inference on a live camera preview, to only detect a single item at a time, how would I go about it? thank you.

    1. Glenn JocherGlenn JocherUltralytics

      Yes — use a -seg model on your webcam feed, set classes=[...] if you only want one class, and max_det=1 if you want at most one instance per frame; if you share your use case here, the Ultralytics team can help refine it, and the Segment task docs cover the mask outputs you’ll use.

      from ultralytics import YOLO
      
      model = YOLO("yolo26n-seg.pt")
      results = model.predict(source=0, stream=True, classes=[0], max_det=1)
    2. miracle101000miracle101000GitHub

      Ok thx. I am actually trying to implement edge detection on android devices for rectangular objects. I have tried OpenCV but it's not enough. So I was thinking to use a segmentation model for my rectangular processor (overlay would only show on rectangular objects) but any time I try to implement this on android, I get serious lagging issues on the camera preview. Plus honestly new to this AI stuff.

    3. Glenn JocherGlenn JocherUltralytics

      If you only need a rectangle-style overlay, a segmentation model is usually heavier than necessary on Android; I’d start with a small OBB or detect model instead, export it with Export mode, and keep imgsz low or run inference every few frames to reduce preview lag. If you share your device, export format, and current FPS here, the Ultralytics team can suggest the lightest setup.

  8. Heyujie96Heyujie96GitHub

    你是不是加载模型的时候没有写task=“segment”

    ------------------ Original ------------------ From: liyongkang2000 @.> Date: Sun,Feb 1,2026 1:12 AM To: ultralytics/ultralytics @.> Cc: Heyujie96 @.>, Comment @.> Subject: Re: [ultralytics/ultralytics] zh/tasks/segment/ (Discussion #8508)

    您好我想问一下,在YOLOV8和V11测试下来,由于目标框的存在,不管如果在后处理阶段调整目标框的范围,被分割目标的上下左右边界始终会被目标框切割,导致分割结果的边缘不平滑。会出现很多直线,但是在YOLOV26上没有尝试过,YOLOV26是否优化了这个边界问题,或者说是否其他的解决方法可以解决这个分割结果的边缘不平滑问题

    — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

    1. liyongkang2000liyongkang2000GitHub

      result = model.predict(os.path.join(path,file), nms = True, )这是我的预测代码是官方提供的呀

    2. Glenn JocherGlenn JocherUltralytics

      你这段 predict() 用法本身没问题;一般也不需要手动写 task="segment",关键是确保加载的是分割权重(*-seg.pt),否则不会有 result.masks 输出;如果分割边缘出现“被框裁切/直线感强”的现象,可以在推理时尝试开启 retina_masks=True 并适当增大 imgsz(NMS 默认就会做,通常不需要单独传 nms=True),相关参数处理可参考 SegmentationPredictor 源码说明。

      from ultralytics import YOLO
      
      model = YOLO("yolo26n-seg.pt")  # 确保是 -seg 权重
      results = model.predict(
          os.path.join(path, file),
          retina_masks=True,
          imgsz=1024,
          conf=0.25,
          iou=0.7,
      )
    3. liyongkang2000liyongkang2000GitHub

      您好,您的建议是有效的,但边界还是没有那么光滑,以及大目标效果更差,有时会出现正方形,您这边还有其他的解决方案吗?期待您的回复

    4. Glenn JocherGlenn JocherUltralytics

      这个“边缘直线/大目标出现方块”的现象通常是分割头的掩码分辨率与“mask 会按预测框裁剪”的机制共同导致的(框越紧越容易看出裁剪痕迹,可参考这条 社区说明:inference 时 mask 是否会被 bbox 裁剪);如果你是自训练模型,想从根源提升大目标的边缘细节,建议在训练时把 mask_ratio 调小(更高 mask 分辨率)并配合更大的 imgsz/更大的 *-seg 模型,mask_ratio 参数说明见 配置参数文档。

      from ultralytics import YOLO
      
      model = YOLO("yolo26s-seg.pt")  # 也可以试试更大一点的 -seg 权重
      model.train(
          data="path/to/your_dataset.yaml",
          imgsz=1024,
          epochs=100,
          mask_ratio=2,  # 需要更细可再降到 1(显存占用会明显上升)
      )

      如果你只是想“导出/显示更光滑”的轮廓(不改变模型预测本身),可以按 Isolating Segmentation Objects 的方式拿到 result.masks.data 后做一次轻量的 blur + close 再取轮廓;另外麻烦贴一张出现“正方形”的原图和对应可视化结果,并附上 yolo checks 的文本输出,我这边可以帮你确认主要瓶颈是分辨率、标注轮廓质量还是框裁剪造成的。