欢迎关注『跟我学 YOLO』系列
【跟我学YOLO】(1)YOLO11 环境配置与基本应用
【跟我学YOLO】(2)训练 YOLO11 图像检测模型
【跟我学YOLO】(3)训练 YOLO11 图像分割模型



YOLO11 由 Ultralytics 团队在 2024年9月发布,在之前 YOLO 版本的基础上进行了显著的架构和训练方法的改进,具有快速、准确和易于使用的特点。上节介绍了 YOLO11 的下载、配置和推理,本节介绍使用YOLOv11进行图像分割。

实例分割比对象检测更进一步,包括识别图像中的各个对象并将它们与图像的其余部分分割开来。实例分割模型的输出是一组掩码或轮廓,它们勾勒出图像中每个对象,以及每个对象的类别标签和置信度分数。 当您不仅需要知道对象在图像中的位置,还需要知道它们的精确形状时,实例分割非常有用。

YOLO11 官方下载:GitHub - ultralytics/YOLO11
Ultralytics 官方文档: YOLO11 使用指南(中文版)


1. 使用 YOLO11 官方预训练模型进行图像分割

1.1 YOLO11 项目下载和环境配置

  1. YOLO11 项目下载
    YOLO11 下载地址:GitHub - ultralytics/YOLO11
    下载方法详见 【跟我学YOLO】(1)YOLO11 环境配置与基本应用

  2. YOLO11 预训练模型下载
    本文选择 YOLO11n-seg ,参数约 2.9M。
    下载完成后,将下载的预训练模型文件 yolo11n-seg.pt 保存在 YOLO11 项目的根目录路径下,例如 “C:\Python\Projects2025\YOLO11-main”。

  3. 虚拟环境的创建与配置
    推荐使用 miniconda 搭建Python环境,其安装和使用可以参见:【youcans的深度学习 01】安装环境详解之 miniconda。
    创建名称为 YOLO11 的 Python 环境,Python 版本>3.8。
    在所选择的 Python 环境下,安装 YOLO11 项目所需的依赖(安装项目所需的库)。
    详细方法参见 【跟我学YOLO】(1)YOLO11 环境配置与基本应用

  4. 安装 YOLO11 项目
    (1)在线安装

pip install ultralytics

(2)离线安装

conda activate Yolo11
cd C:\Python\Yolo\Yolo11_main
pip install -e .

(3)安装测试
安装完成后,在 miniconda Prompt 直接输入 “yolo help”,系统给出 Yolo 的帮助信息如下图所示,说明安装成功。

yolo help


在这里插入图片描述


  1. 在 PyCharm 配置Python解释器
    在 PyCharm 的菜单 “文件-设置-项目-Python 解释器(python interpreter)” 中,为项目配置 Python 环境。
    详细方法参见 【跟我学YOLO】(1)YOLO11 环境配置与基本应用

1.2 下载 YOLO11 图像分割任务预训练模型

不同视觉任务需要不同的、相应的预训练模型。

在 YOLO/GitHub 项目仓,提供了在 COCO数据集上训练达到的检测(Detection)、分类(Classification)、分割(Segmentation)、姿态估计(Pose)、定向边界框检测(OBB)等任务的预训练模型。

YOLO11 分割模型在 COCO-seg 数据集上进行预训练。YOLO11 分割模型使用 -seg 后缀,例如 yolo11n-seg.pt。

YOLO11 有多个不同规模的模型,从小到大依次是:YOLO11n、YOLO11s、YOLO11m、YOLO11l、YOLO11x。这些模型与各种操作模式兼容,包括推理、验证、训练和导出,便于在部署和开发的不同阶段使用。详见 YOLO11项目根目录下的帮助文件 README.zh-CN.md。

这些模型的范围从轻量级的 YOLO11n-seg 到更强大的 YOLO11x-seg,在速度和精度之间提供不同的权衡,以适应各种应用需求。

模型 尺寸
(像素)
mAP
box
50-95
mAP
mask
50-95
速度
CPU ONNX
(毫秒)
速度
T4 TensorRT10
(毫秒)
参数
(百万)
FLOPs
(十亿)
YOLO11n-seg 640 38.9 32.0 65.9 ± 1.1 1.8 ± 0.0 2.9 9.7
YOLO11s-seg 640 46.6 37.8 117.6 ± 4.9 2.9 ± 0.0 10.1 33.0
YOLO11m-seg 640 51.5 41.5 281.6 ± 1.2 6.3 ± 0.1 22.4 113.2
YOLO11l-seg 640 53.4 42.9 344.2 ± 3.2 7.8 ± 0.2 27.6 132.2
YOLO11x-seg 640 54.7 43.8 664.5 ± 3.2 15.8 ± 0.7 62.1 296.4

1.3 使用 YOLO11 预训练模型进行图像分割

使用下载的 YOLO11n-seg 预训练模型来运行图像预测。

  1. CLI 方式运行
    YOLO11 支持使用命令行接口(command line interface, CLI)对模型进行训练、验证或运行推断。

YOLO11 命令行接口(CLI)方便在各种任务和版本上训练、验证或推断模型,不需要定制或代码,可以使用 yolo 命令从终端运行所有任务。语法如下:

yolo task=detect    mode=train    model=YOLO11n.yaml      args...
          classify       predict        YOLO11n-cls.yaml  args...
          segment        val            YOLO11n-seg.yaml  args...
                         export         YOLO11n.pt        format=onnx  args...

运行 “yolo predict” 命令进行物体检测任务的操作步骤如下:
(1)在 PyCharm 的命令行窗口,激活 YOLO11 虚拟环境。
(2)输入如下命令对指定图片进行检测。

yolo segment predict model=yolo11n-seg.pt source='https://ultralytics.com/images/bus.jpg'  # predict with official model

注意:
(1)必须先激活 YOLO11 虚拟环境。
(2)当前路径必须是 YOLO11 项目所在的目录,例如 “C:\Python\Projects\YOLO11”。
(3)预训练模型 Yolo11n.pt 必须保存在模型配置参数 “model” 指定的路径。
(4)待检测的图片必须保存在 “source” 指定的路径,可以是图像路径、视频文件、目录、URL 或用于摄像头设备 ID。


  1. Python 接口调用方式运行

YOLO11 也提供了 Python 接口的调用方式。它提供了加载和运行模型以及处理模型输出的函数。该界面设计易于使用,以便用户可以在他们的项目中快速实现目标检测。

使用预训练模型 YOLO11n-seg.pt 进行推理的 Python 程序如下。

from ultralytics import YOLO

# 加载预训练的YOLO模型,分割任务
model = YOLO("yolo11n-seg.pt")

# 使用模型对图像执行图像分割
results = model(task="segment", source="./dataset/people-6888086.jpg", save=True)

# 输出图像分割结果
for result in results:
    xy = result.masks.xy  # mask in polygon format
    xyn = result.masks.xyn  # normalized
    masks = result.masks.data  # mask in matrix format (num_objects x H x W)

注意:
(1)本例程使用的 YOLO11 分割模型保存路径为 “./Projects/YOLO11” 。
(2)本例程使用的测试图像的保存路径为 “./Projects/YOLO11/dataset/” 。

运行程序,就实现对指定图像文件的检测。检测结果如下图所示。

在这里插入图片描述

进一步地,分割结果可视化如下图所示。

请添加图片描述


2. 在 COCO 图像分割数据集训练 YOLO11

实例分割是一项计算机视觉任务,涉及识别和描绘图像中的各个对象。本节概述了 Ultralytics YOLO 支持的实例分割任务的数据集格式,以及有关如何准备、转换和使用这些数据集来训练模型的说明。


2.1 COCO-seg 数据集

YOLO11 分割模型在 COCO-seg 数据集上进行预训练。

COCO-Seg 数据集是 COCO 数据集的扩展,专门用于帮助研究对象实例分割。它使用与 COCO 相同的图像,但引入了更详细的分割注释。该数据集是从事实例分割任务的研究人员和开发人员的关键资源,特别是用于训练 Ultralytics YOLO 模型。

主要功能:

  • COCO-Seg 保留了 COCO 中原始的 33 万张图像。
  • 该数据集包含与原始 COCO 数据集中相同的 80 个对象类别。
  • 现在,标注包括图像中每个对象更详细的实例分割掩码。
  • COCO-Seg 提供了标准化的评估指标,如用于对象检测的平均精度均值 (mAP) 和用于实例分割任务的平均召回率均值 (mAR),从而能够有效地比较模型性能。

数据集结构:
COCO-Seg 数据集被划分为三个子集:

  1. Train2017:118K 幅图像用于训练实例分割模型。
  2. Val2017:模型开发过程中用于验证的 5K 图像。
  3. Test2017:用于基准测试的 20K 幅图像。该子集的地面实况注释不公开,因此预测结果必须提交到COCO 评估服务器进行评分。

数据集下载:

类别 大小 下载地址
2017 Train images 118K/18GB http://images.cocodataset.org/zips/train2017.zip
2017 Val images 5K/1GB http://images.cocodataset.org/zips/val2017.zip
2017 Test images 41K/6GB http://images.cocodataset.org/zips/test2017.zip
2017 Train/Val annotations 241MB http://images.cocodataset.org/annotations/annotations_trainval2017.zip

应用:
COCO-Seg 广泛用于训练和评估实例分割中的深度学习模型,例如 YOLO 模型。大量的带注释图像、对象类别的多样性以及标准化的评估指标使其成为计算机视觉研究人员和从业人员不可或缺的资源。

Sample Images 和注释
COCO-Seg 像其前身 COCO 一样,包含各种对象类别和复杂场景的多样化图像集。但是,COCO-Seg 为图像中的每个对象引入了更详细的实例分割掩码。以下是数据集中图像的一些示例,以及它们对应的实例分割掩码:

在这里插入图片描述


数据集 YAML:

YAML(Yet Another Markup Language)文件用于定义数据集配置。它包含有关数据集路径、类和其他相关信息。对于 COCO-Seg 数据集,coco.yaml 文件保存在 “./YOLO11/ultralytics/cfg/datasets/coco.yaml” 。

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO 2017 dataset https://cocodataset.org by Microsoft
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco ← downloads here (20.1 GB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco # dataset root dir
train: train2017.txt # train images (relative to 'path') 118287 images
val: val2017.txt # val images (relative to 'path') 5000 images
test: test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  ...
  79: toothbrush

# Download script/URL (optional)
download: |
  from pathlib import Path

  from ultralytics.utils import ASSETS_URL
  from ultralytics.utils.downloads import download

  # Download labels
  segments = True  # segment or box labels
  dir = Path(yaml["path"])  # dataset root dir
  urls = [ASSETS_URL + ("/coco2017labels-segments.zip" if segments else "/coco2017labels.zip")]  # labels
  download(urls, dir=dir.parent)
  # Download data
  urls = [
      "http://images.cocodataset.org/zips/train2017.zip",  # 19G, 118k images
      "http://images.cocodataset.org/zips/val2017.zip",  # 1G, 5k images
      "http://images.cocodataset.org/zips/test2017.zip",  # 7G, 41k images (optional)
  ]
  download(urls, dir=dir / "images", threads=3)

在 COCO-Seg 数据集上训练 :

要在 COCO-Seg 数据集上训练 YOLO11n-seg 模型 100 个 epochs,图像大小为 640,可以使用以下代码片段。有关可用参数的完整列表,请参阅模型训练页面。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

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

2.2 COCO128-seg 数据集

Ultralytics COCO128-Seg 是一个小型但通用的实例分割数据集,由 COCO 训练 2017 年集的前 128 幅图像组成。该数据集非常适合测试和调试分割模型,或尝试新的检测方法。

COCO128-Seg 数据集通过 128 张图像提供了可管理性和多样性的平衡组合,使其非常适合快速测试和调试分割模型或试验新的检测技术,在训练更大的数据集之前进行合理性检查。它的大小适中,可以进行快速训练迭代,同时提供足够的多样性来验证训练流水线,然后再扩展到更大的数据集。

数据集结构:

  • 图片:共 128 张。默认的 YAML 为 train 和 val 重复使用了相同的目录,因此可以快速重复,但您也可以根据需要复制或自定义分割。
  • 类别:与 COCO 相同的 80 个对象类别。
  • 标签:在内部的每幅图像旁保存YOLO多边形 labels/{train,val}.

数据集下载:

coco128-seg.zip


2.3 训练 YOLO11 分割模型

数据集 YAML:
YAML(Yet Another Markup Language)文件用于定义数据集配置。 它包含有关数据集的路径、类和其他相关信息。 对于 COCO128-Seg 数据集, coco128-seg.yaml 文件保存在 “./YOLO11/ultralytics/cfg/datasets/coco128-seg.yaml”。

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO128-seg dataset https://www.kaggle.com/datasets/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128-seg ← downloads here (7 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco128-seg # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  ...
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128-seg.zip

在 COCO128-Seg 数据集上训练 :

在 COCO128-Seg 数据集上训练 YOLO11n-seg 模型的 Python 参考例程如下。

# seg_train1.py
# 在 COCO128-seg 数据集上训练 YOLO11n-seg

from ultralytics import YOLO

if __name__ == '__main__':
    # 创建 YOLO 模型对象,加载指定的模型配置
    model = YOLO("yolo11n-seg.yaml")  # build a new model from YAML
    # model = YOLO("yolo11n-seg.pt")  # load a pretrained model

    # 用指定数据集训练模型
    results = model.train(data="coco128-seg.yaml",  # 指定训练数据集的配置文件路径
                          project='runs/train',  # 指定训练结果保存的根目录
                          imgsz=640,  # 指定训练时使用的图像尺寸
                          epochs=100,  # 设置训练的总轮数为100轮
                          batch=16,  # 设置每个训练批次的大小为16
                          workers=4,  # 设置用于数据加载的线程数为4
                          device='0'  # 指定使用的 CPU/GPU 设备
                          )

在这里插入图片描述


请添加图片描述


3. 在 视网膜图像数据集训练 YOLO11 分割模型

3.1 从 UNet 分割数据集构建 YOLO11 分割数据集

3.1.1 UNet 分割数据集的目录结构如下:

unet_dataset/
├── train/
│   ├── images/        # 训练集图像
│   └── masks/         # 训练集掩码图像
└── valid/
    ├── images/        # 验证集图像
    └── masks/         # 验证集掩码图像

掩码格式类型如下:

  • 二值掩码: 单通道,0=背景,255=前景
  • 多类别掩码: 单通道,不同像素值代表不同类别
  • RGB掩码: 三通道,不同颜色代表不同类别

3.1.2 YOLO11 语义分割数据集的目录结构如下:

yolo_dataset/
├── images/
│   ├── train/          # 训练集图像
│   └── val/           # 验证集图像
├── labels/
│   ├── train/         # 训练集标注文件 (.txt)
│   └── val/          # 验证集标注文件 (.txt)
└── dataset.yaml       # 数据集配置文件

标注文件格式 (.txt) 如下:

<class_id> x1 y1 x2 y2 … xn yn

其中:

  • class_id: 类别ID (从0开始)
  • x1 y1 x2 y2 … xn yn: 归一化的多边形坐标 (0-1范围)
  • 每个对象一行,多个对象用多行表示

示例标注如下:

0 0.500000 0.250000 0.600000 0.250000 0.600000 0.350000 0.500000 0.350000
1 0.300000 0.100000 0.400000 0.100000 0.400000 0.200000 0.300000 0.200000

数据集配置文件 (dataset.yaml) 示例如下:

path: /path/to/yolo_dataset
train: images/train
val: images/val
nc: 2
names:
  0: class1
  1: class2

3.1.3 UNet 分割数据集 → YOLO11 分割数据集的转换

  1. 数据准备与检查

    • 验证Unet数据集完整性
    • 检查图像-掩码对应关系
    • 分析掩码格式(二值/多类别/RGB)
  2. 掩码预处理

    • RGB掩码 → 二值掩码(颜色提取)
    • 多类别掩码 → 按类别分离
    • 二值化处理(阈值分割)
  3. 轮廓提取与多边形转换

    • 对每个掩码图像进行轮廓检测
    • 轮廓简化(减少多边形点数)
    • 坐标归一化(像素坐标 → 0-1范围)
  4. 生成YOLO标注文件

    • 输入: 二值掩码图像
    • 处理: 轮廓检测 → 多边形简化 → 坐标归一化
    • 输出: .txt标注文件 (YOLO格式)
  5. 数据集重组

源结构:
  unet_dataset/
    ├── train/images/,
    └── train/masks/

目标结构:
  yolo_dataset/
    ├── images/train/    # 复制原图像
    ├── labels/train/    # 生成标注文件
    └── dataset.yaml     # 创建配置文件
  1. 创建配置文件

  2. 验证转换结果


3.2 训练 Ridge 分割模型

def train_ridge_segmentation():
    """
    训练 Ridge 分割模型
    """
    print("开始训练 Ridge 分割模型...")

    # 检查训练状态
    should_train, model_path, completed_epochs = check_training_status()

    if not should_train:
        print("无需训练,直接返回")
        return None, None

    # 加载模型
    model = YOLO(model_path)

    # 训练参数
    train_args = {
        "data": DATASET_CONFIG,
        "epochs": TOTAL_EPOCHS,
        "imgsz": 640,
        "batch": 16,
        "workers": 4,
        "device": "0",
        "patience": 20,
        "save": True,
        "save_period": 20,
        "cache": False,
        "project": PROJECT_PATH,
        "name": PROJECT_NAME,
        "exist_ok": True,
        "pretrained": True,
        "optimizer": "auto",
        "verbose": True,
    }

    # 如果是继续训练,添加resume参数
    if RESUME_TRAINING and completed_epochs > 0:
        train_args["resume"] = True

    # 开始训练
    results = model.train(**train_args)

    print("训练完成!")
    return results, model

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

请添加图片描述


3.3 验证 Ridge 分割模型

def validate_trained_model(model_path):
    """
    验证训练好的模型
    """
    print("验证训练好的模型...")

    # 加载训练好的模型
    model = YOLO(model_path)

    # 在验证集上评估
    metrics = model.val(
        data=DATASET_CONFIG,
        split="val",
        save=True,
        project="runs/ridge_seg",  # 验证结果保存路径
        name="valid",  # 验证结果子目录名称
        exist_ok=True
    )

    # 打印关键指标
    print("\n验证结果:")
    print(f"分割mAP50: {metrics.box.map50:.4f}")
    print(f"分割mAP50-95: {metrics.box.map:.4f}")
    print(f"掩码mAP50: {metrics.seg.map50:.4f}")
    print(f"掩码mAP50-95: {metrics.seg.map:.4f}")

    return metrics

在这里插入图片描述

请添加图片描述


3.4 使用训练的模型进行预测


def predict_with_model(model_path, image_path):
    """
    使用训练好的模型进行预测
    """
    print(f"使用模型进行预测: {image_path}")

    model = YOLO(model_path)

    results = model.predict(
        source=image_path,
        conf=0.5,
        save=True,
        project="runs/ridge_seg",  # 预测结果保存路径
        name="pred",  # 预测结果子目录名称
        exist_ok=True
    )

    # 显示结果
    for result in results:
        result.show()

        if result.masks is not None:
            print(f"检测到 {len(result.masks)} 个 ridge 实例")

    return results

在这里插入图片描述

请添加图片描述


【本节完】


版权声明:
欢迎关注『跟我学YOLO』系列
转发必须注明原文链接:
【跟我学YOLO】(3)训练 YOLO11 图像分割模型
Copyright by youcans@qq.com 2025
Crated:2025-11


Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐