手把手教你用YOLO11做图像分割,Jupyter环境开箱即用
1. 为什么选YOLO11做图像分割
图像分割是计算机视觉里最“看得见摸得着”的任务之一——它不只是框出目标,而是精准勾勒出每个像素的归属。相比传统目标检测,分割能告诉你“人”在哪、轮廓多精细、“车”的每个部件边界在哪,这对智能标注、工业质检、医疗影像分析都特别实用。
YOLO11不是简单升级,它在保持YOLO系列高速推理优势的同时,把实例分割能力真正做稳了:支持实时高清分割、小目标识别更准、边缘细节保留更好,而且训练配置更清晰、代码结构更干净。更重要的是,你不用从零搭环境——本文用的这个镜像,已经把Jupyter、PyTorch、Ultralytics、Labelme全配好了,打开就能写、运行就能出结果。
不需要你装CUDA驱动、不用反复试pip包版本、不担心conda环境冲突。整个过程就像打开一个预装好专业软件的笔记本电脑,插电即用。
2. 镜像开箱:三步进入Jupyter工作台
这个YOLO11镜像专为快速上手设计,核心入口就是Jupyter Lab。它不是命令行黑窗口,而是一个图形化、可交互、带文件浏览器和终端的开发环境,特别适合边学边调、边改边看。
2.1 启动Jupyter服务
镜像启动后,默认会自动运行Jupyter Lab服务。你只需在浏览器中访问提示的地址(通常是http://localhost:8888或镜像控制台显示的链接),输入Token即可登录。
小贴士:如果页面打不开,先确认镜像状态是否为“运行中”,再检查端口映射是否正确(8888端口需对外暴露)。部分平台会在控制台直接给出可点击的Jupyter链接,点开即进。
2.2 熟悉默认项目结构
登录后,你会看到一个已组织好的工程目录,路径清晰、命名直白:
ultralytics-8.3.9/ ← 主框架目录(Ultralytics官方v8.3.9分支适配YOLO11) ├── resources/ ← 所有自定义资源:数据、配置、脚本 │ ├── images/seg/ ← 图像分割专用数据区 │ │ └── datasets/ ← 最终训练用的数据集(train/val/test) │ ├── config/ ← 配置中心 │ │ ├── data/ ← 数据集yaml(如yolo11-seg.yaml) │ │ └── model/ ← 模型结构yaml(如yolo11-seg.yaml) │ └── tool/ ← 实用工具脚本(json2label_seg.py等) ├── weights/ ← 预训练权重与训练产出存放处 │ └── seg/ ← YOLO11分割模型权重(yolo11n-seg.pt等) └── train_seg.py ← 已写好的训练入口脚本(可直接运行)这个结构不是随意安排的,而是和Ultralytics训练逻辑强绑定的。你只要把数据放对位置、配置写对路径,model.train()就能自动找到一切。
2.3 终端就在旁边,随时切换
别被Jupyter界面“骗”了——它不只支持Notebook。右上角点+→ 选择Terminal,就能打开一个原生Linux终端,和你在本地服务器敲的一模一样:
cd ultralytics-8.3.9/ python train_seg.py所有命令、日志、报错都实时可见。调试时,你可以一边在Notebook里画图看效果,一边在终端里查进程、看GPU占用、杀卡住的任务——这才是真实工程流。
3. 数据准备:5张图也能跑通全流程
很多人卡在第一步:没数据、不会标、怕格式错。其实图像分割入门,5张高质量标注图就足够验证流程是否走通。我们用最轻量但最标准的方式完成。
3.1 标注前:建好文件夹,理清路径关系
在Jupyter左侧文件浏览器中,右键resources/images/seg/→ 新建文件夹:
json/:放Labelme生成的原始.json标注文件(和原图同名)datasets/:最终训练用的结构化数据(含images/和labels/子目录)
这个设计很关键:Labelme输出的是人类可读的JSON,而YOLO训练需要的是每行一个目标的文本标签(class x1 y1 x2 y2 ...)。中间转换靠脚本,不靠手动。
3.2 用Labelme标图:专注内容,不纠结工具
镜像已预装Labelme,无需额外安装。在终端中执行:
cd resources/images/seg/json labelme这时会弹出图形界面。操作极简:
- 点
Open Dir→ 选中你的5张原图所在文件夹 - 对每张图:点左上角
Create Polygon→ 沿人物/车辆轮廓逐点点击 → 双击闭合 → 在弹窗中输入类别名(person或car)→OK→Ctrl+S保存为同名.json
注意两个细节:
① 类别名必须和后续yaml里names:完全一致(区分大小写);
② 一张图可标多个目标,每个都单独画多边形、单独输类别。
3.3 两行命令,完成JSON到YOLO标签转换
回到终端,执行转换脚本(已在镜像中预置):
cd ../../../ python tool/tool_json2label_seg.py --json_dir resources/images/seg/json --img_dir resources/images/seg/json --label_dir resources/images/seg/datasets/labels它会自动:
- 读取每个
.json,提取多边形顶点坐标 - 归一化到0~1范围(适配YOLO输入)
- 按类别名映射为数字索引(
person→0,car→1) - 生成同名
.txt,每行格式:0 0.23 0.45 0.28 0.47 ...(class + 归一化xy序列)
再执行划分脚本,生成训练/验证集:
python tool/tool_seg2datasets.py --label_dir resources/images/seg/datasets/labels --img_dir resources/images/seg/json --output_dir resources/images/seg/datasets运行完,datasets/下会自动生成:
images/train/,images/val/(图片软链接或复制)labels/train/,labels/val/(对应标签文件)
整个过程无手动拷贝、无路径错误风险。
4. 训练配置:改3个地方,模型就开始学
YOLO11的训练配置分两层:数据描述(告诉模型“学什么”)和模型结构(告诉模型“怎么学”)。我们只动最关键的3处,其余保持默认即可跑通。
4.1 数据配置文件:yolo11-seg.yaml
编辑resources/config/data/yolo11-seg.yaml,确保以下三项准确:
path: ../ultralytics-8.3.9/resources/images/seg/datasets # 必须是相对路径,从train.py所在位置算起 train: images/train val: images/val names: 0: person 1: car验证技巧:在Jupyter终端里执行
ls resources/images/seg/datasets/images/train,看是否列出你的5张图(或其中一部分)。路径错,训练直接报FileNotFoundError。
4.2 模型配置文件:轻量起步,选yolo11n-seg
resources/config/model/yolo11-seg.yaml是完整网络定义。新手不必改它,但要确认两点:
nc: 2→ 类别数必须和names数量一致(当前是2:person+car)scales:下的n:行未被注释 → 我们用最小的yolo11n-seg,显存友好、训练快
4.3 训练脚本:train_seg.py里的关键参数
打开train_seg.py,重点关注这三行:
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=100, batch=8)load(...):加载官方预训练权重,迁移学习,收敛更快epochs=100:5张图训100轮足够观察loss下降趋势(数据少时,早停patience=20更安全)batch=8:小批量更稳定,显存吃紧时可降为4
运行它:
cd ultralytics-8.3.9 python train_seg.py你会看到实时打印的Epoch,GPU Mem,box_loss,seg_loss,mAP50-95。只要seg_loss持续下降、mAP从0.0x涨到0.3+,说明流程完全跑通。
5. 推理验证:一张图,三秒出分割结果
训练结束,模型权重保存在segment/train/weights/best.pt。现在用它处理新图,看效果是否符合预期。
5.1 写一个极简预测脚本
新建predict_seg.py(或直接改train_seg.py末尾):
from ultralytics import YOLO model = YOLO("segment/train/weights/best.pt") # 加载你训好的模型 # 对单张图预测(也可传文件夹路径) results = model.predict( source="resources/images/seg/datasets/images/val/000001.jpg", imgsz=640, conf=0.5, # 置信度阈值,太低易出噪点 iou=0.45, # 分割掩码重叠阈值 save=True, # 自动保存带分割结果的图到 runs/segment/predict/ device="cpu" # 如有GPU,改用 "cuda:0" ) # 打印检测到的目标信息 for r in results: boxes = r.boxes.xyxy.cpu().numpy() # 边界框 masks = r.masks.data.cpu().numpy() # 二值掩码(True/False数组) classes = r.boxes.cls.cpu().numpy() # 类别索引 print(f"检测到 {len(boxes)} 个目标:{classes}")运行后,Jupyter会输出类似:
Predict: 100%|██████████| 1/1 [00:02<00:00, 2.10s/it] 检测到 2 个目标:[0. 1.]同时,在runs/segment/predict/下生成带彩色分割掩码的图片——绿色是person,黄色是car,边缘清晰,无明显锯齿。
5.2 结果怎么看:不止是“画出来”,更要“看得懂”
YOLO11的分割结果包含三层信息,都在results[0]里:
r.boxes:标准检测框(可用于粗略定位)r.masks:高精度像素级掩码(.data是bool数组,.xy是轮廓点)r.probs:各类别概率(多分类时用)
想提取person的掩码做后续处理?一行代码搞定:
person_mask = masks[classes == 0][0] # 取第一个person的掩码这个mask是和原图同尺寸的二维布尔数组,True位置就是person的像素——可直接用于抠图、面积统计、运动分析等。
6. 常见问题与避坑指南
实际操作中,90%的问题都出在路径、命名、格式这三处。以下是高频报错及解法:
6.1 “No images found” 错误
- 原因:
yolo11-seg.yaml里的path或train/val路径写错,或datasets/images/train/下没有图片文件(只有文件夹链接) - 解法:在终端执行
ls -l resources/images/seg/datasets/images/train,确认列出的是真实图片(如000001.jpg),不是空文件夹。若为链接,检查tool_seg2datasets.py是否成功运行。
6.2 训练loss不下降,mAP始终为0
- 原因:标注类别名和
names:不一致(如yaml写person,Labelme却输Person);或JSON里的多边形点数太少(YOLO要求至少3个点) - 解法:打开一个
.json文件,检查shapes[].label字段;再用tool_json2label_seg.py加--debug参数运行,看是否报“polygon too small”。
6.3 预测结果空白,或全是噪点
- 原因:
conf阈值过低(如设0.01),或iou过高(如0.9)导致掩码被过滤 - 解法:先用
conf=0.1, iou=0.3测试,确认有输出后再逐步调高。也可用model.predict(..., show=True)在Jupyter里直接弹窗看实时结果。
6.4 Jupyter里绘图不显示
- 原因:缺少matplotlib后端或inline模式未启用
- 解法:在Notebook首单元格运行:
%matplotlib inline import matplotlib.pyplot as plt plt.rcParams['figure.figsize'] = (10, 8)
7. 下一步:让分割真正落地
跑通5张图只是起点。当你确认流程无误,可以立刻升级:
- 加数据:用
tool_seg2datasets.py支持--split_ratio 0.8,轻松扩到100+图 - 换模型:把
yolo11n-seg.pt换成yolo11s-seg.pt,精度更高(需更多显存) - 调细节:在
train_seg.py里加augment=True开启马赛克增强,小数据也能防过拟合 - 接业务:把
predict_seg.py封装成API(用Flask/FastAPI),前端上传图,后端返回JSON掩码坐标
YOLO11的真正价值,不在于它多先进,而在于它把前沿分割能力,压缩进一个jupyter notebook + 两个脚本 + 一次点击的体验里。你不需要成为深度学习专家,也能让像素听你指挥。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。