news 2026/2/25 16:58:42

超详细图文教程:YOLO11图像分割数据制作与模型训练过程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
超详细图文教程:YOLO11图像分割数据制作与模型训练过程

超详细图文教程:YOLO11图像分割数据制作与模型训练过程

1. 准备工作:快速启动YOLO11开发环境

在开始图像分割任务前,你需要一个开箱即用的YOLO11完整环境。本镜像已预装所有依赖——包括PyTorch、Ultralytics库、Labelme标注工具、Jupyter Notebook及SSH远程访问支持,无需手动配置CUDA、cuDNN或编译环境。

你有两种主流交互方式可选:

  • 推荐新手使用 Jupyter Notebook:图形化界面直观易操作,适合边写代码边看结果。启动后自动打开浏览器,点击ultralytics-8.3.9/目录即可进入项目根路径。所有训练脚本、配置文件、数据工具均按标准结构组织,所见即所得。

  • 进阶用户可选 SSH 连接:适用于批量处理、后台训练或集成CI/CD流程。通过终端直连容器,执行命令更灵活高效。

注意:无论哪种方式,首次使用请先执行cd ultralytics-8.3.9/切换到项目主目录。这是所有后续操作的前提路径,避免因路径错误导致文件找不到或训练失败。

2. 数据制作:从零构建高质量分割数据集

图像分割对数据质量极为敏感——粗糙的标注边界会直接导致模型泛化能力下降。本节不讲理论,只给可立即执行的实操步骤,覆盖“建目录→标图→转格式→分数据”全流程。

2.1 创建规范的数据目录结构

YOLO11要求数据严格遵循固定层级。请在项目内创建以下路径(大小写敏感):

ultralytics-8.3.9/ ├── resources/ │ └── images/ │ └── seg/ │ ├── json/ # 存放Labelme原始json标注文件 │ └── datasets/ │ └── images/ # 后续存放划分后的训练/验证图片(软链接或复制)

将你的5张原始图片(如person_car_001.jpg,car_002.jpg等)全部放入resources/images/seg/json/。命名无需特殊规则,但建议使用英文+数字,避免中文、空格和特殊符号。

2.2 使用Labelme精准标注人与车轮廓

Labelme是开源界最成熟的多边形标注工具,专为实例分割设计。它能生成带像素级坐标的JSON文件,完美匹配YOLO11输入需求。

执行以下命令安装并启动(已在镜像中预装,此步仅作说明):

pip3 install labelme # 若提示已存在则跳过 labelme

启动后操作极简:

  • 点击左上角Open Dir→ 选择resources/images/seg/json/
  • 逐张打开图片,点击左侧Polygon工具(快捷键P
  • 沿目标边缘单击打点,务必紧贴物体真实轮廓(尤其注意车窗、人体关节等细节)
  • 标完一圈后双击闭合,弹出对话框输入类别名:personcar(必须与yaml中定义完全一致)
  • 点击OKSave,自动生成同名.json文件(如person_car_001.jpg.json

关键提醒:一张图中可标注多个目标;同一目标不可跨类别重复标注;personcar的ID顺序必须与后续yaml中names:定义顺序一致(0→person,1→car),否则训练会错乱。

2.3 将JSON标注转换为YOLO11标准格式

Labelme输出的是JSON,而YOLO11训练需要.txt格式的归一化坐标。镜像内置转换脚本/tool/tool_json2label_seg.py可一键完成。

在Jupyter或SSH中执行:

python /tool/tool_json2label_seg.py \ --json_dir resources/images/seg/json \ --save_dir resources/images/seg/json/labels

运行后,resources/images/seg/json/labels/下将生成对应.txt文件。打开任一文件,内容类似:

0 0.421 0.632 0.425 0.641 0.432 0.638 ... # person类,后跟归一化x,y坐标序列 1 0.712 0.521 0.725 0.518 0.731 0.524 ... # car类

每行代表一个目标,首数字为类别ID,后续成对出现的浮点数为多边形顶点坐标(已自动归一化到0~1范围)。

2.4 划分训练集与验证集

YOLO11要求训练(train)和验证(val)数据物理分离。镜像提供/tool/tool_seg2datasets.py自动完成打乱、划分、复制三步。

执行命令:

python /tool/tool_seg2datasets.py \ --json_dir resources/images/seg/json \ --image_dir resources/images/seg/json \ --output_dir resources/images/seg/datasets \ --train_ratio 0.8

参数说明:

  • --train_ratio 0.8:80%数据用于训练,20%用于验证(可根据样本量调整,小数据集建议0.7)
  • --output_dir:生成的images/train/,images/val/,labels/train/,labels/val/全在此目录

执行完毕后,检查resources/images/seg/datasets/images/val/是否有图片,labels/val/是否有同名txt文件——二者数量必须严格相等,否则训练会报错。

3. 配置与训练:稳定高效的端到端流程

YOLO11的训练高度模块化。我们只需专注三件事:写好数据配置、选对模型结构、调参不过度。本节提供经过实测的轻量级配置,兼顾速度与精度。

3.1 编写数据配置文件 yolo11-seg.yaml

resources/config/data/下新建yolo11-seg.yaml,内容如下(路径需绝对准确):

# 数据根目录(相对于该yaml文件的位置) path: ../ultralytics-8.3.9/resources/images/seg/datasets # 训练/验证/测试子目录名(必须与tool_seg2datasets.py生成的文件夹名一致) train: images/train val: images/val test: images/val # 测试可复用验证集 # 类别名称(索引必须与标注ID严格对应) names: 0: person 1: car

验证技巧:用ls resources/images/seg/datasets/images/train | head -3查看前三张训练图名,再用ls resources/images/seg/datasets/labels/train | head -3查看对应txt名——若文件名(不含扩展名)完全一致,则路径配置正确。

3.2 选用轻量模型 yolo11n-seg.yaml 并微调

YOLO11提供n/s/m/l/x五种尺寸模型。对于5张起手的小数据集,yolo11n-seg是最优解:参数量仅287万,GPU显存占用低,收敛快,不易过拟合。

镜像已预置resources/config/model/yolo11-seg.yaml(即yolo11n-seg)。你无需修改其结构,只需确保训练脚本中加载路径正确。

3.3 执行训练:一行命令启动,关键参数解析

创建train_seg.py(位于项目根目录),内容如下:

from ultralytics import YOLO, settings # 设置训练输出目录(避免默认存入~/.ultralytics) settings.update({ "runs_dir": "./segment/runs", "weights_dir": "./segment/weights" }) def main(): # 加载模型架构 + 预训练权重(镜像已内置yolo11n-seg.pt) model = YOLO("resources/config/model/yolo11-seg.yaml").load("weights/seg/yolo11n-seg.pt") # 开始训练(核心参数详解见下文) results = model.train( data="resources/config/data/yolo11-seg.yaml", epochs=300, # 小数据集300轮足够,避免过拟合 batch=8, # 显存紧张时可降至4;镜像默认配8G显存,设8安全 imgsz=640, # 输入尺寸,640平衡精度与速度 workers=2, # 数据加载线程,2足够,过多反增IO压力 optimizer='AdamW', # 收敛更稳,比SGD更适合小数据 lr0=1e-3, # 初始学习率,小数据不宜过大 hsv_h=0.5, # 色调增强幅度降半,防止颜色失真 hsv_s=0.5, # 饱和度增强幅度降半 hsv_v=0.5, # 亮度增强幅度降半 degrees=10, # 旋转角度上限设10°,避免目标翻转失真 mosaic=0.5, # 马赛克增强概率50%,提升小目标检测 scale=0.3, # 缩放范围±30%,增强尺度鲁棒性 shear=0.1, # 剪切强度0.1,轻微形变防过拟合 augment=True, cos_lr=True, # 余弦退火,后期学习率平滑下降 patience=50, # 早停耐心值50轮,节省时间 device='cuda' # 强制使用GPU,若无GPU则改'cpu' ) if __name__ == "__main__": main()

在终端执行:

python train_seg.py

训练启动后,你会看到实时日志:

  • Epoch 1/300:当前轮次
  • BoxLoss 0.823:边界框损失(越低越好)
  • SegLoss 0.412:分割掩码损失(核心指标)
  • mAP50-95(B) 0.621:目标检测平均精度
  • mAP50-95(M) 0.587实例分割平均精度(重点关注此项)

实测提示:5张图训练约15分钟(RTX 3090)。当mAP50-95(M)连续20轮不升,且SegLoss稳定在0.3~0.4区间,说明模型已充分学习特征,可提前终止。

4. 模型推理:可视化预测结果并评估效果

训练完成后,最佳权重保存在segment/runs/segment/train/weights/best.pt。现在用它对验证集图片做推理,直观检验分割质量。

4.1 编写预测脚本 predict_seg.py

from ultralytics import YOLO model = YOLO("segment/runs/segment/train/weights/best.pt") results = model.predict( source="resources/images/seg/datasets/images/val", # 验证集图片路径 imgsz=640, project="segment/predict", # 输出根目录 name="val_results", # 子文件夹名 save=True, # 保存带分割掩码的图片 save_txt=True, # 同时保存预测坐标txt(供进一步分析) conf=0.5, # 置信度阈值,过滤低质量预测 iou=0.45, # NMS IoU阈值,控制重叠框合并 device='cuda' # 同训练设备 ) print(f"共处理 {len(results)} 张图片")

运行后,结果将生成在segment/predict/val_results/

  • *.jpg:原图叠加彩色分割掩码(不同类别不同颜色)
  • *.txt:每行格式class_id center_x center_y width height confidence x1 y1 x2 y2 ...(多边形顶点)

4.2 效果评估:三步快速判断模型是否可用

打开segment/predict/val_results/中的图片,按以下顺序检查:

  1. 掩码完整性:person/car的轮廓是否被完整覆盖?有无大面积缺失(如人腿未分割)?
  2. 边缘贴合度:掩码边缘是否紧贴物体真实边界?有无明显锯齿或外溢?
  3. 类别准确性:同一张图中,person和car是否被正确区分?有无混淆?

若80%以上图片满足以上三点,说明数据制作和训练流程成功。此时你已掌握YOLO11图像分割的核心闭环能力。

进阶建议:若效果不理想,优先检查标注质量(回看json文件是否闭合、点是否密集),其次降低conf参数至0.3观察漏检,最后考虑增加数据量或微调hsv_*增强参数。

5. 常见问题与避坑指南

实际操作中,新手常因细节疏忽导致训练中断或效果差。以下是高频问题及一招解决法:

5.1 “No images found” 错误

现象:训练启动时报错AssertionError: No images found in ...
原因yolo11-seg.yamlpathtrain/val路径错误,或images/labels/文件名不匹配。
解决:执行ls resources/images/seg/datasets/images/val/ls resources/images/seg/datasets/labels/val/,确认二者列表完全一致(仅扩展名不同)。

5.2 训练Loss不下降,mAP始终为0

现象SegLoss卡在10+,mAP50-95(M)恒为0.000
原因:类别ID与names:定义不一致(如yaml写0: car但标注为person
解决:打开任意一个.txt标注文件,确认首数字是0还是1;再核对yolo11-seg.yamlnames:顺序。

5.3 预测结果无掩码,只有边界框

现象predict/val_results/中图片只有方框,无彩色区域
原因:模型加载错误,误用了检测模型(.pt)而非分割模型
解决:检查predict_seg.pyYOLO(...)的路径,必须指向segment/runs/.../best.pt(含segment字样),而非detect/下的权重。

5.4 GPU显存不足(CUDA out of memory)

现象:训练报错RuntimeError: CUDA out of memory
解决:立即修改train_seg.pybatch=4(原为8),并添加device='cuda:0'。若仍失败,再将imgsz=320


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 1:24:00

抢票效率提升与毫秒级响应优化指南:从失败案例到实战方案

抢票效率提升与毫秒级响应优化指南:从失败案例到实战方案 【免费下载链接】12306 12306智能刷票,订票 项目地址: https://gitcode.com/gh_mirrors/12/12306 问题诊断:抢票失败常见场景深度分析 春节抢票高峰期,许多用户遭…

作者头像 李华
网站建设 2026/2/22 19:43:29

Qwen3-32B私有化效果:Clawdbot平台支持10万token上下文+无损截断推理

Qwen3-32B私有化效果:Clawdbot平台支持10万token上下文无损截断推理 1. 为什么需要私有化部署Qwen3-32B 很多团队在用大模型时都会遇到几个现实问题:公开API响应慢、数据不能出内网、长文本处理能力弱、每次调用都要等token限制释放。特别是当业务涉及…

作者头像 李华
网站建设 2026/2/23 22:41:12

Qwen3-0.6B上下文长度够用吗?实测32K tokens表现

Qwen3-0.6B上下文长度够用吗?实测32K tokens表现 [【免费下载链接】Qwen3-0.6B Qwen3 是通义千问系列最新一代开源大语言模型,涵盖6款密集模型与2款MoE架构模型,参数量覆盖0.6B至235B。Qwen3-0.6B作为轻量级主力型号,在保持低资源…

作者头像 李华
网站建设 2026/2/25 1:15:44

4个维度解析Clockwork:重新定义建筑信息模型自动化

4个维度解析Clockwork:重新定义建筑信息模型自动化 【免费下载链接】ClockworkForDynamo A collection of 450 custom nodes for the Dynamo visual programming environment 项目地址: https://gitcode.com/gh_mirrors/cl/ClockworkForDynamo 价值定位&…

作者头像 李华
网站建设 2026/2/25 11:08:47

Face Analysis WebUI企业应用:零售门店顾客年龄性别分布热力图生成案例

Face Analysis WebUI企业应用:零售门店顾客年龄性别分布热力图生成案例 1. 为什么零售门店需要一张“人群画像热力图” 你有没有注意过,走进一家连锁奶茶店,收银台旁的电子屏上偶尔会闪过一行小字:“当前进店顾客:女…

作者头像 李华
网站建设 2026/2/25 3:44:03

CogVideoX-2b在电商营销中的应用:自动生成商品视频

CogVideoX-2b在电商营销中的应用:自动生成商品视频 1. 为什么电商商家需要“会动的商品图” 你有没有遇到过这样的情况: 刚上新一批夏季连衣裙,想发到小红书和抖音做推广,但拍实拍视频要请模特、租场地、调灯光、剪辑配音——一…

作者头像 李华