超详细图文教程: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) - 沿目标边缘单击打点,务必紧贴物体真实轮廓(尤其注意车窗、人体关节等细节)
- 标完一圈后双击闭合,弹出对话框输入类别名:
person或car(必须与yaml中定义完全一致) - 点击OK→Save,自动生成同名
.json文件(如person_car_001.jpg.json)
关键提醒:一张图中可标注多个目标;同一目标不可跨类别重复标注;
person和car的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/中的图片,按以下顺序检查:
- 掩码完整性:person/car的轮廓是否被完整覆盖?有无大面积缺失(如人腿未分割)?
- 边缘贴合度:掩码边缘是否紧贴物体真实边界?有无明显锯齿或外溢?
- 类别准确性:同一张图中,person和car是否被正确区分?有无混淆?
若80%以上图片满足以上三点,说明数据制作和训练流程成功。此时你已掌握YOLO11图像分割的核心闭环能力。
进阶建议:若效果不理想,优先检查标注质量(回看json文件是否闭合、点是否密集),其次降低
conf参数至0.3观察漏检,最后考虑增加数据量或微调hsv_*增强参数。
5. 常见问题与避坑指南
实际操作中,新手常因细节疏忽导致训练中断或效果差。以下是高频问题及一招解决法:
5.1 “No images found” 错误
现象:训练启动时报错AssertionError: No images found in ...
原因:yolo11-seg.yaml中path或train/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.yaml中names:顺序。
5.3 预测结果无掩码,只有边界框
现象:predict/val_results/中图片只有方框,无彩色区域
原因:模型加载错误,误用了检测模型(.pt)而非分割模型
解决:检查predict_seg.py中YOLO(...)的路径,必须指向segment/runs/.../best.pt(含segment字样),而非detect/下的权重。
5.4 GPU显存不足(CUDA out of memory)
现象:训练报错RuntimeError: CUDA out of memory
解决:立即修改train_seg.py中batch=4(原为8),并添加device='cuda:0'。若仍失败,再将imgsz=320。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。