YOLO11图像分割实战:Labelme标注+自动转换脚本高效处理
本文介绍了如何在星图GPU平台上自动化部署YOLO11镜像,实现图像分割任务的高效处理。通过Labelme标注与自动转换脚本,用户可快速完成数据准备、模型训练与推理,适用于行人与车辆等目标的轮廓识别场景,显著提升AI项目落地效率。
YOLO11图像分割实战:Labelme标注+自动转换脚本高效处理
在实际项目中,图像分割任务常面临一个现实困境:标注成本高、格式转换繁琐、数据组织混乱。YOLO11作为新一代实例分割框架,虽性能强大,但若缺乏一套轻量、可控、可复现的数据准备流程,再好的模型也难落地。本文不讲抽象原理,不堆参数配置,而是带你从零完成一个真实可用的图像分割工作流——用Labelme画多边形、用Python脚本自动转YOLO格式、一键划分训练验证集、快速启动训练与推理。所有操作均基于预置YOLO11镜像环境,无需手动装依赖、配路径、调环境变量。
你不需要懂PyTorch底层机制,也不用研究YOLO11的C3k2模块怎么计算;你需要的,是一套能今天下午就跑通、明天就能用在自己数据上的实操方案。下面开始。
1. 环境确认与项目结构初始化
YOLO11镜像已为你预装完整开发环境:Python 3.9、PyTorch 2.3、Ultralytics 8.3.9、Labelme、OpenCV等核心依赖全部就绪。你只需确认两点:
- 镜像已成功启动,可通过Jupyter或SSH访问(参考镜像文档中的截图路径)
- 工作目录结构清晰,避免路径嵌套过深导致相对引用失效
我们采用扁平化、语义明确的目录设计,所有内容均置于ultralytics-8.3.9/根目录下(即镜像默认工作区):
ultralytics-8.3.9/
├── resources/
│ ├── images/
│ │ └── seg/
│ │ ├── json/ # Labelme原始json标注文件(与原图同名)
│ │ └── datasets/ # 转换后YOLO格式数据集
│ │ ├── images/
│ │ │ ├── train/
│ │ │ └── val/
│ │ └── labels/
│ │ ├── train/
│ │ └── val/
│ ├── config/
│ │ ├── data/
│ │ │ └── yolo11-seg.yaml # 数据集路径与类别定义
│ │ └── model/
│ │ └── yolo11-seg.yaml # 模型结构配置(官方提供)
│ └── weights/
│ └── seg/
│ └── yolo11n-seg.pt # 官方预训练分割权重
├── tool/
│ ├── tool_json2label_seg.py # JSON→YOLO标签转换脚本
│ └── tool_seg2datasets.py # 标签/图片→训练集划分脚本
├── train_seg.py # 自定义训练入口
└── predict_seg.py # 推理预测脚本
关键提醒:所有路径均为相对路径,且严格区分大小写。
resources/images/seg/json/必须存放原始图片+同名json文件,这是后续脚本能正确运行的前提。
1.1 进入项目并检查基础依赖
打开终端(Jupyter中新建Terminal或通过SSH连接),执行:
cd ultralytics-8.3.9/
python -c "import labelme; print('Labelme OK')"
python -c "from ultralytics import YOLO; print('Ultralytics OK')"
若输出Labelme OK和Ultralytics OK,说明环境已就绪。若报错ModuleNotFoundError,请先运行pip install labelme ultralytics --no-deps(镜像已预装依赖,此命令仅补全可能缺失的顶层包)。
2. Labelme标注:聚焦“人”与“车”的精准轮廓
图像分割标注的核心是像素级边界定义。YOLO11要求每个目标用闭合多边形(polygon)描述,而非矩形框。Labelme是目前最轻量、最适配该需求的开源工具。
2.1 启动Labelme并加载图片
在终端中进入标注目录:
cd resources/images/seg/json/
labelme
Labelme界面启动后,点击左上角Open Dir,选择当前目录(即json/),所有图片将自动列出。注意:此时目录内应仅有.jpg或.png图片,无其他干扰文件。
2.2 多边形绘制与类别标注
以一张含行人与汽车的街景图为例:
- 点击左侧工具栏
Polygon图标(或按快捷键P) - 在图像上依次点击目标边缘关键点,形成闭合区域(双击最后一点或右键→
Close) - 弹出对话框,在
Label输入框中准确填写类别名:person或car(必须与yolo11-seg.yaml中names定义完全一致,区分大小写) - 点击
OK确认。重复此过程,为图中所有person和car目标逐个绘制多边形 - 全部标注完成后,点击
Save,保存为同名.json文件(如001.jpg→001.json)
实操建议:
- 优先标注清晰、完整的目标,遮挡严重或边缘模糊的可暂不标,避免引入噪声
- 每个多边形顶点数建议控制在20–50个,过多影响转换效率,过少丢失细节
- Labelme会自动生成
imagePath和imageData字段,脚本将自动提取imagePath用于关联原图
2.3 标注质量自查清单
标注完成后,快速检查三项:
- 所有
.json文件与.jpg/.png文件同名,且在同一目录 - 每个
.json中shapes数组非空,且每个shape的label值为person或car shapes中points为二维坐标列表,如[[120,85],[135,78],...],无负数或超界值
若发现错误,直接在Labelme中打开对应json文件修改后重存即可。
3. 自动化转换:两步脚本打通标注到训练
手动将数百个JSON转为YOLO格式是不可持续的。我们提供两个精简脚本,全程自动化、零报错、可复现。
3.1 JSON转YOLO标签:tool_json2label_seg.py
该脚本读取json/目录下所有.json文件,解析多边形坐标,归一化后写入labels/对应路径。核心逻辑如下:
- 提取
imagePath获取原图宽高(用于坐标归一化) - 遍历
shapes,对每个person(0)或car(1)生成一行YOLO格式:0 x1 y1 x2 y2 ...(类别索引+归一化顶点坐标) - 坐标归一化公式:
x_norm = x / image_width,y_norm = y / image_height - 输出文件与原图同名,扩展名为
.txt,存于resources/images/seg/datasets/labels/
执行方式(在ultralytics-8.3.9/根目录下):
python tool/tool_json2label_seg.py
运行后,你会看到类似输出:
Processed 5 JSON files → generated 5 TXT labels in resources/images/seg/datasets/labels/
验证方法:打开任意一个生成的
.txt文件(如001.txt),首行应为0 0.123 0.456 0.132 ...(偶数个数字,以0或1开头),表明转换成功。
3.2 划分训练/验证集:tool_seg2datasets.py
YOLO11要求数据集按images/train/、images/val/、labels/train/、labels/val/结构组织。此脚本自动完成:
- 扫描
json/目录下所有图片,随机打乱顺序 - 按
train:val = 8:2比例分配(可修改脚本内split_ratio = 0.8调整) - 将图片软链接(Linux/macOS)或复制(Windows)至
datasets/images/{train,val}/ - 将对应
.txt标签文件同步至datasets/labels/{train,val}/ - 生成空
test/目录(YOLO11配置支持,但本例暂不使用)
执行方式:
python tool/tool_seg2datasets.py
运行后,检查目录:
ls resources/images/seg/datasets/images/train/ # 应有4张图(5×0.8=4)
ls resources/images/seg/datasets/labels/val/ # 应有1个txt文件
为什么用软链接?
镜像默认为Linux环境,软链接避免重复存储图片,节省空间且保证源数据唯一性。若需物理复制,可编辑脚本将os.symlink替换为shutil.copy2。
4. 数据配置与模型训练:轻量启动,专注效果
4.1 编写数据配置文件 resources/config/data/yolo11-seg.yaml
这是YOLO11识别数据集的“地图”。内容极简,仅需指定路径与类别:
# 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: ../resources/images/seg/datasets # 注意:此处为相对于train.py的路径
train: images/train
val: images/val
test: images/val # 可选,验证集复用
# Classes
names:
0: person
1: car
关键点:
path值是train.py所在位置(即ultralytics-8.3.9/)的相对路径,因此写为../resources/...。若填错,训练时会报FileNotFoundError。
4.2 启动训练:train_seg.py详解
你无需修改模型结构(yolo11-seg.yaml已由Ultralytics官方维护),只需专注训练策略。train_seg.py已预置合理参数:
model.train(...)加载预训练权重yolo11n-seg.pt,收敛更快epochs=1000+patience=100:足够长的训练周期,配合早停防过拟合batch=16+imgsz=640:平衡显存占用与精度(镜像默认GPU显存充足)optimizer='AdamW'+lr0=1e-3:现代优化器,学习率适中mosaic=1.0+scale=0.5:强数据增强,提升小目标分割鲁棒性
启动训练:
python train_seg.py
训练日志将实时输出,重点关注:
Epoch 0/1000开始迭代BoxLoss,SegLoss,mAP50-95数值稳步上升best.pt文件在segment/train/weights/下自动生成
训练耗时参考:5张图、1000轮,在镜像默认GPU上约需8–12分钟。若需加速,可减少
epochs至200,或增大batch至32(需确认显存)。
5. 模型推理与结果验证:所见即所得
训练完成后,立即验证效果。predict_seg.py专为快速推理设计:
from ultralytics import YOLO
# 加载训练好的最佳权重
model = YOLO("segment/train/weights/best.pt")
# 对验证集所有图片进行预测
results = model.predict(
source='resources/images/seg/datasets/images/val', # 输入路径
imgsz=640, # 保持与训练一致
project='segment/predict', # 输出根目录
name='exp', # 子目录名
save=True, # 保存带分割掩码的图片
conf=0.4, # 置信度阈值,过滤低质量预测
iou=0.7, # NMS IoU阈值
device='cuda' # 强制使用GPU(镜像默认可用)
)
执行与查看结果:
python predict_seg.py
运行结束后,打开输出目录:
ls segment/predict/exp/
# 你会看到:001.jpg, 001_mask.png, 001_labels.txt 等
001.jpg:原图叠加彩色分割掩码与边界框001_mask.png:纯分割掩码(PNG格式,不同类别用不同灰度值)001_labels.txt:预测结果的YOLO格式文本(可用于进一步分析)
效果判断标准:
- 掩码是否紧密贴合目标边缘(尤其人物肢体、车辆轮廓)
- 是否存在明显漏分割(如遮挡部分未覆盖)或误分割(背景被划入)
- 多目标间掩码是否分离清晰,无粘连
若效果不理想,优先检查:标注质量 → 转换脚本日志 → 训练loss曲线(segment/train/results.csv中seg_loss是否下降)。
6. 工程化建议与常见问题速查
这套流程已在多个小型分割项目中验证。以下是来自一线实践的硬核建议:
6.1 标注阶段避坑指南
- 禁止跨图复用JSON:Labelme生成的
imageData包含图片base64编码,若复制json到另一张图,会导致路径错乱、坐标偏移 - 慎用“自动填充”功能:Labelme的
Auto Labeling插件未针对YOLO11优化,易产生不闭合多边形,建议纯手动绘制 - 类别名统一管理:在
yolo11-seg.yaml中定义后,所有标注、脚本、训练必须严格一致,建议用grep -r "person" .全局搜索校验
6.2 脚本运行故障排查
| 现象 | 原因 | 解决方案 |
|---|---|---|
tool_json2label_seg.py报KeyError: 'imagePath' |
JSON文件损坏或非Labelme标准格式 | 用Labelme重新打开并保存该json |
tool_seg2datasets.py提示No images found |
json/目录下无图片,或图片格式非.jpg/.png |
运行ls resources/images/seg/json/*.jpg确认存在 |
训练时报AssertionError: dataset.image_weights not supported |
yolo11-seg.yaml中path路径错误,YOLO11找不到图片 |
检查path是否为../resources/...,并在train.py同级目录执行 |
6.3 效果提升的三个低成本动作
- 增加标注多样性:同一目标在不同光照、角度、遮挡程度下各标1张,比单场景标10张更有效
- 微调置信度阈值:推理时将
conf=0.4改为0.25,可召回更多弱目标,再人工筛选 - 启用半自动标注:训练初版模型后,用其预测新图生成粗略mask,导入Labelme作为
Auto Annotation底图,人工修正,效率提升3倍+
7. 总结:构建属于你的分割流水线
本文没有罗列YOLO11的论文公式,也没有深入讲解Segment Head的卷积细节。我们只做了一件事:把图像分割从“理论可行”变成“下午就能跑通”。
你已掌握:
- 用Labelme绘制精准多边形,确保分割基础质量
- 用两个Python脚本,全自动完成JSON→YOLO标签→数据集划分
- 通过
yolo11-seg.yaml和train_seg.py,5分钟启动训练 - 用
predict_seg.py一键生成可视化结果,直观验证效果
这套流程的核心价值在于可迁移性:无论你的数据是医疗细胞、工业零件还是农业作物,只需替换json/中的图片与标注,修改yolo11-seg.yaml中的names,其余步骤完全复用。它不追求SOTA指标,而追求“稳定、可控、可交付”。
下一步,你可以尝试:接入自己的摄像头实时分割、导出ONNX模型部署到边缘设备、或用训练好的模型批量处理千张图片。而这一切,都始于你今天画下的第一个多边形。
---
> **获取更多AI镜像**
>
> 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)