YOLO11图像分割全流程演示,适合初学者的极简教程
你是不是也试过:下载了一个看起来很厉害的YOLO镜像,点开Jupyter却不知道从哪下手?想跑通图像分割,却被数据标注、格式转换、训练配置绕得晕头转向?别担心——这篇教程就是为你写的。不讲原理推导,不堆参数表格,只用最直白的操作步骤,带你从零开始,用YOLO11完成一次完整的图像分割任务:识别图中的人和车,并精准抠出它们的轮廓。整个过程在镜像里开箱即用,连环境都不用装,真正“复制粘贴就能跑”。
我们用的是CSDN星图提供的YOLO11镜像,它已经预装了Ultralytics 8.3.9、Labelme、PyTorch及全部依赖,还配好了Jupyter和SSH两种交互方式。你只需要关注“做什么”和“怎么点”,而不是“为什么报错”。
下面所有操作,你都可以在镜像启动后的Jupyter Lab界面中直接完成(推荐),或通过SSH终端执行。我们以Jupyter为主,每一步都截图示意,关键命令加粗标出,小白也能稳稳跟住。
1. 镜像启动与环境确认
1.1 启动镜像并进入Jupyter
镜像启动后,你会看到类似这样的访问地址提示(实际URL以你控制台输出为准):
Jupyter Server is running at: https://your-instance-ip:8888/?token=xxxxx用浏览器打开该链接,输入Token(或密码,若已设置),即可进入Jupyter Lab工作台。
小贴士:如果你更习惯命令行,镜像也支持SSH登录(端口22,用户名
root,密码见镜像启动页)。但对初学者,Jupyter图形界面更直观、容错率更高。
1.2 确认项目结构与基础路径
进入Jupyter后,左侧文件浏览器中,你会看到一个名为ultralytics-8.3.9/的文件夹。这是你的主工作目录,所有后续操作都基于此路径。
点击进入该文件夹,展开后可见典型结构:
resources/:存放数据、配置、脚本的统一入口tool/:含两个核心转换工具:tool_json2label_seg.py和tool_seg2datasets.pytrain.py:官方默认训练脚本(我们不用它,会新建专用脚本)- 其他为Ultralytics源码和权重文件
此时你已站在起跑线——环境就绪,路径清晰,无需任何额外安装。
2. 数据准备:5张图,3步搞定标注与整理
图像分割成败,七分靠数据。但别被“分割标注”吓退——我们只用最轻量的方式:5张人+车的日常照片,手工标注,全程5分钟。
2.1 创建原始图片与标注存放目录
在Jupyter中,右键resources/→ “新建文件夹”,依次创建以下嵌套路径:
resources/images/seg/json/将你的5张原始图片(如person_car_1.jpg,street_2.jpg等)全部上传至此json/文件夹内。
为什么叫 json/?
因为我们用Labelme标注,它默认保存为.json格式,且要求标注文件与原图同名、同目录。这样后续转换脚本才能自动匹配。
2.2 用Labelme快速标注:画多边形,输类别名
在Jupyter终端(顶部菜单:File → New → Terminal)中,输入并执行:
cd resources/images/seg/json labelmeLabelme窗口弹出后,按顺序操作:
- 左上角
Open Dir→ 选择当前json/文件夹 - 左侧工具栏选Polygon(多边形)图标(形状像不规则闭合线)
- 在图中框选一个人→ 弹出对话框,输入类别名:
person→ 点击OK - 同样方法,框选一辆车→ 输入类别名:
car - 标注完成后,点击左上角
Save→ 保存为同名.json文件(如person_car_1.json)
每张图标注1~2个目标,5张图共花不到3分钟。Labelme界面简洁,无学习成本。
2.3 转换标注格式:JSON → YOLO分割标签
Labelme生成的JSON是结构化数据,YOLO需要的是纯文本格式:每行一个目标,格式为类别序号 x1 y1 x2 y2 x3 y3 ...(坐标归一化到0~1)
镜像已内置转换脚本,只需一行命令:
cd /workspace python tool/tool_json2label_seg.py --json_dir resources/images/seg/json --save_dir resources/images/seg/labels执行后,你会在resources/images/seg/labels/下看到5个.txt文件,内容类似:
0 0.321 0.456 0.389 0.456 0.389 0.672 0.321 0.672 1 0.612 0.513 0.789 0.513 0.789 0.821 0.612 0.821这就是YOLO能读懂的分割标签。脚本自动完成归一化、坐标排序,你只需确认输出目录有.txt文件即可。
2.4 划分训练集与验证集:打乱+拆分
YOLO训练需要明确的train/和val/目录。我们用镜像自带脚本一键生成:
python tool/tool_seg2datasets.py --img_dir resources/images/seg/json \ --label_dir resources/images/seg/labels \ --output_dir resources/images/seg/datasets \ --train_ratio 0.8运行后,resources/images/seg/datasets/下自动生成:
images/train/和images/val/:存放原图的硬链接(不占额外空间)labels/train/和labels/val/:对应分割标签
数据集制作完毕。无需手动复制粘贴,脚本自动打乱、按比例拆分,保证训练公平性。
3. 配置与训练:改两处,点一下就开跑
YOLO11的训练配置高度模块化。我们不碰复杂模型结构,只聚焦两个必须修改的文件:数据配置 + 训练脚本。
3.1 编写数据配置文件:yolo11-seg.yaml
在Jupyter中,右键resources/config/data/→ “新建文本文件”,命名为yolo11-seg.yaml。
双击打开,完全替换为以下内容(注意缩进!YAML对空格敏感):
# 数据根目录(相对于本yaml文件的位置) path: ../ultralytics-8.3.9/resources/images/seg/datasets train: images/train val: images/val test: images/val # 可选,此处用验证集代替测试集 # 类别定义:序号必须从0开始,顺序与标注一致 names: 0: person 1: car关键点:path值指向你刚生成的datasets/目录;names必须与Labelme中输入的类别名完全一致(大小写、空格都不能错)。
3.2 创建训练脚本:train_seg.py
在Jupyter中,右键resources/→ “新建文本文件”,命名为train_seg.py。
粘贴以下代码(已精简优化,去除非必要参数,专注初学者友好):
from ultralytics import YOLO def main(): # 加载YOLO11分割模型配置,并加载官方预训练权重 model = YOLO("resources/config/model/yolo11-seg.yaml").load("weights/seg/yolo11n-seg.pt") # 开始训练:仅需关注这4个核心参数 results = model.train( data="resources/config/data/yolo11-seg.yaml", # 指向你的数据配置 epochs=100, # 训练100轮(足够小数据集收敛) batch=8, # 每批处理8张图(显存友好) imgsz=640, # 输入尺寸640x640(平衡速度与精度) project="segment", # 输出目录前缀 name="train", # 输出子目录名 device="cpu" # 强制用CPU(镜像默认可用,免GPU配置烦恼) ) if __name__ == "__main__": main()对比原文档中的长参数列表,我们只保留初学者最需掌控的5项:data,epochs,batch,imgsz,device。其他如数据增强、学习率等已设为安全默认值,无需调整。
3.3 执行训练:观察日志,等待收敛
在Jupyter中,点击train_seg.py文件 → 右上角点击 “Run” 按钮(或按Ctrl+Enter)。
终端将输出训练日志,关键信息包括:
Epoch 0/100:当前轮次BoxLoss 0.821:边界框损失(越低越好)SegLoss 0.456:分割掩码损失(核心指标)mAP50-95 0.623:平均精度(0~1,越高越好,>0.5即算有效)
训练约15~20分钟后(CPU环境下),你会在segment/train/目录下看到:
weights/best.pt:最优模型权重results.csv:每轮指标记录train_batch0.jpg:首批次训练效果可视化
训练完成。无需调参,无需看懂日志含义,只要看到best.pt生成,就代表模型已学会区分人和车的像素级轮廓。
4. 模型推理:一张图,三秒出分割结果
训练好的模型,最终要用来“看图说话”。我们用最简脚本,对验证集图片批量预测,并保存带分割掩码的结果图。
4.1 编写预测脚本:predict_seg.py
右键resources/→ 新建文本文件 → 命名为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", # 输出根目录 name="predict", # 输出子目录名 save=True, # 保存结果图 conf=0.5, # 置信度阈值(过滤低质量检测) device="cpu" # 同样用CPU )4.2 运行预测并查看结果
点击predict_seg.py→ “Run”。
几秒钟后,打开segment/predict/目录,你会看到:
image0.jpg、image1.jpg等:原图叠加半透明彩色分割掩码(person为绿色,car为蓝色)image0.png、image1.png等:纯分割掩码图(白色区域即目标像素)
效果直观可验:人像边缘是否贴合?车体是否完整覆盖?没有复杂的评估指标,眼睛一看便知。
5. 实用技巧与避坑指南:少走90%弯路
以上流程已足够跑通,但真实使用中,新手常卡在几个细节。这里浓缩成5条血泪经验,帮你省下数小时调试时间:
5.1 标注命名必须严格一致
- Labelme中输入的类别名(如
person)→ 必须与yolo11-seg.yaml中names:下的键名逐字相同 - 错误示例:
Names:(首字母大写)、person(末尾空格)、Person(大小写混用)都会导致训练时类别丢失,模型只学“背景”
5.2 JSON与图片必须同名同目录
car_001.jpg的标注必须保存为car_001.json,且两者都在json/文件夹内- 若放错位置,
tool_json2label_seg.py会静默跳过,labels/目录为空,训练时报错“no labels found”
5.3 路径是相对路径,不是绝对路径
yolo11-seg.yaml中的path:值,是相对于该yaml文件自身的位置- 正确写法:
../ultralytics-8.3.9/resources/images/seg/datasets - 错误写法:
/workspace/ultralytics-8.3.9/...(绝对路径在镜像不同部署方式下可能失效)
5.4 CPU训练可行,但需耐心
- 镜像默认启用CPU训练(
device="cpu"),对5张图的小数据集完全够用 - 若强行指定
device="cuda"而镜像未配GPU,会报错CUDA out of memory或no CUDA devices - 如需GPU加速,请先在镜像设置中启用GPU资源,再改
device="cuda"
5.5 结果图保存路径由project+name决定
project="segment"+name="predict"→ 输出到segment/predict/- 若想把结果存到桌面,可改为
project="/workspace/Desktop"(需确保路径存在) - 不要遗漏
save=True,否则只打印结果,不生成图片
6. 总结:你已掌握YOLO11图像分割的核心闭环
回顾这一路,你完成了图像分割的完整工程链路:
- 数据层:用Labelme手绘多边形,5张图5分钟标注,JSON转YOLO标签全自动
- 配置层:写一个6行的yaml定义数据路径与类别,一个15行的py脚本封装训练逻辑
- 训练层:点一下Run,看日志滚动,等
best.pt生成,全程无报错 - 应用层:再点一下Run,
predict/目录下立刻出现带彩色掩码的结果图
这并非“玩具demo”,而是工业级YOLO11分割能力的真实切片。你所用的模型、脚本、工具,与专业团队部署的完全一致,差异只在于数据规模。下一步,你可以:
- 把自己的产品图、设计稿、监控截图放进来,快速生成分割数据集
- 将
predict_seg.py改造成Web API,用Flask包装,供前端调用 - 替换
yolo11n-seg.pt为更大的yolo11l-seg.pt,提升复杂场景精度
技术从不神秘,障碍往往藏在第一步的犹豫里。而今天,你已经跨过了那道门。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。