当前位置: 首页 > news >正文

手把手教你用YOLO11训练自己的分割模型

手把手教你用YOLO11训练自己的分割模型

前言

你是不是也想自己动手训练一个能精准识别物体轮廓的AI模型?比如让AI帮你从照片里抠出每一只猫、每一辆车,甚至是一片叶子的边缘?这不再是遥不可及的技术幻想。今天我们就来实战——用YOLO11训练属于你自己的实例分割模型

本文专为初学者设计,不讲复杂理论,只带你一步步走通从数据准备到模型训练再到推理预测的完整流程。无论你是学生、工程师还是AI爱好者,只要跟着做,三天内就能跑通第一个自己的分割项目。

我们使用的环境是CSDN星图提供的YOLO11镜像,它已经预装了所有依赖库和工具,省去了繁琐的配置过程,真正实现“开箱即用”。接下来,让我们开始吧!


1. 准备你的数据:标注与格式转换

1.1 使用Labelme进行图像标注

要训练模型,首先得有“教材”——也就是带标签的数据。对于实例分割任务,我们需要标注出每个目标的精确轮廓。

推荐使用Labelme工具,轻量又直观:

  • 安装命令:
    pip install labelme
  • 启动方式:
    labelme

打开后操作很简单:

  1. 点击“打开目录”,加载你的图片文件夹
  2. 选择“创建多边形”工具
  3. 沿着物体边缘逐点点击,围成一个闭合区域
  4. 输入类别名称(如cat,car
  5. 点击“保存”,生成同名.json文件

小贴士:建议每类至少准备50张标注图,太少容易过拟合;尽量覆盖不同角度、光照和遮挡情况。

1.2 将Labelme的JSON转为YOLO格式TXT

YOLO11要求的标签格式如下:

<class_id> <x1> <y1> <x2> <y2> ... <xn> <yn>

其中:

  • class_id是类别编号(从0开始)
  • 坐标是归一化后的浮点数(范围0~1),表示相对于图像宽高的比例

例如:

0 0.15 0.20 0.35 0.25 0.30 0.40 0.10 0.30

下面这段代码可以批量将Labelme生成的JSON文件转换为YOLO所需的TXT格式:

import json import os # 修改为你自己的类别映射 label_to_class_id = { "cat": 0, "dog": 1, "car": 2, } def convert_labelme_json_to_yolo(json_file, output_dir, img_width, img_height): with open(json_file, 'r') as f: data = json.load(f) filename = os.path.splitext(os.path.basename(json_file))[0] txt_path = os.path.join(output_dir, f"{filename}.txt") with open(txt_path, 'w') as txt_file: for shape in data['shapes']: label = shape['label'] points = shape['points'] class_id = label_to_class_id.get(label) if class_id is None: print(f"警告:未找到类别 '{label}' 的ID,跳过该标注") continue normalized = [(x / img_width, y / img_height) for x, y in points] line = [str(class_id)] for x_norm, y_norm in normalized: line.append(f"{x_norm:.6f}") line.append(f"{y_norm:.6f}") txt_file.write(" ".join(line) + "\n") if __name__ == "__main__": json_dir = "datasets/mydata/labels_json" # JSON文件所在路径 output_dir = "datasets/mydata/labels" # 输出TXT路径 img_width = 640 img_height = 640 if not os.path.exists(output_dir): os.makedirs(output_dir) for file in os.listdir(json_dir): if file.endswith(".json"): convert_labelme_json_to_yolo( os.path.join(json_dir, file), output_dir, img_width, img_height )

运行后你会在labels目录下看到对应的.txt文件,这就是YOLO能读懂的“答案册”。


2. 配置项目结构与环境

2.1 下载YOLO11源码

进入工作目录,下载官方代码库:

git clone https://github.com/ultralytics/ultralytics.git cd ultralytics

或者直接下载ZIP包解压。

2.2 构建标准项目结构

建议按照以下结构组织文件:

project/ ├── datasets/ │ └── myseg/ │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── weights/ │ └── yolo11m-seg.pt # 预训练权重 ├── train.py # 训练脚本 ├── infer.py # 推理脚本 └── myseg.yaml # 数据集配置

把你的图片按8:2比例分到trainval文件夹中,对应标签也放进去。


3. 编写数据集配置文件

在项目根目录创建myseg.yaml,内容如下:

path: ./datasets/myseg train: images/train val: images/val # 类别定义 names: 0: cat 1: dog 2: car

这个文件告诉模型:

  • 数据放在哪
  • 训练集和验证集路径
  • 总共几个类别,分别叫什么

你可以根据实际需求修改路径和类别名。


4. 开始训练模型

4.1 编写训练脚本train.py

from ultralytics import YOLO # 加载模型结构并加载预训练权重 model = YOLO("yolo11m-seg.yaml").load("weights/yolo11m-seg.pt") # 开始训练 results = model.train( data="myseg.yaml", # 数据配置文件 epochs=50, # 训练轮数 imgsz=640, # 输入图像大小 batch=16, # 批次大小(根据显存调整) device=0, # 使用GPU 0,若无GPU则设为'cpu' workers=4, # 数据加载线程数 project="runs/segment", # 结果保存主目录 name="my_custom_model", # 运行名称 save=True, save_period=10, # 每10轮保存一次检查点 exist_ok=False, # 不覆盖已有结果 optimizer='AdamW', # 优化器选择 lr0=0.001, # 初始学习率 amp=True, # 启用混合精度加速 val=True, # 每轮都做验证 plots=True # 生成训练曲线图 )

4.2 启动训练

执行命令:

python train.py

你会看到类似输出:

Epoch GPU_mem box_loss seg_loss cls_loss Instances Size 1/50 5.12G 1.789 3.921 4.012 12 640: 100%|███████| 45/45 [00:07<00:00, 6.2it/s] all 200 310 0.987 0.821 0.892 0.512 0.951 0.801 0.863 0.421

训练过程中会自动生成:

  • weights/best.pt:最佳模型权重
  • weights/last.pt:最后一轮权重
  • results.png:训练曲线图(loss、mAP等)
  • confusion_matrix.png:分类混淆矩阵

5. 模型推理与效果展示

5.1 编写推理脚本infer.py

from ultralytics import YOLO # 加载训练好的模型 model = YOLO("runs/segment/my_custom_model/weights/best.pt") # 对单张图片或整个文件夹进行预测 results = model.predict( source="datasets/myseg/images/val/", # 图片路径 conf=0.5, # 置信度阈值 iou=0.6, # NMS IoU阈值 imgsz=640, # 输入尺寸 device=0, # 使用GPU save=True, # 保存结果图 save_txt=True, # 保存检测框和掩码坐标 show_labels=True, # 显示类别标签 show_conf=True, # 显示置信度 line_width=2 # 边框宽度 )

运行后会在runs/predict目录下生成带分割掩码的结果图,颜色区分不同个体,即使重叠也能准确分离。

5.2 实际效果观察

你会发现:

  • 单个物体边缘非常贴合
  • 多个同类物体(如一群猫)也能区分开
  • 小目标和遮挡目标也有不错表现

这是传统目标检测做不到的精细程度。


6. 常见问题与调优建议

6.1 训练不收敛怎么办?

  • 检查标签是否正确对齐:确保每张图都有对应.txt文件,且路径匹配
  • 降低学习率:尝试将lr0改为0.0001
  • 减少batch size:如果显存不足导致梯度不稳定
  • 增加数据增强:开启更多增强选项提升泛化能力

6.2 如何提高小目标检测效果?

  • 使用更大的输入尺寸(如imgsz=800
  • 在数据增强中加入copy_paste,把小物体复制粘贴到其他位置
  • 调整mask_ratio=2提高掩码分辨率

6.3 推理速度太慢怎么优化?

  • 改用更小的模型,如yolo11n-seg.yaml
  • 开启半精度推理:half=True
  • 减少imgsz320480

7. 总结

通过这篇文章,你应该已经成功完成了以下关键步骤:

  1. 用Labelme完成图像分割标注
  2. 将JSON格式转换为YOLO专用TXT标签
  3. 配置数据集YAML文件
  4. 使用预训练权重启动训练
  5. 跑通推理流程并查看分割效果

整个过程不需要手动安装CUDA、PyTorch或其他依赖,得益于CSDN星图提供的YOLO11完整镜像环境,你只需要专注在模型训练本身。

下一步你可以尝试:

  • 换自己的真实业务数据(比如工业缺陷检测、医学影像分割)
  • 微调超参数进一步提升精度
  • 导出为ONNX格式部署到生产环境

记住:AI不是黑盒子,动手才是最好的学习方式。你现在拥有的技能,足以让你在CV领域迈出独立开发的第一步。


获取更多AI镜像

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

http://www.jsqmd.com/news/287511/

相关文章:

  • POLIR-Laws: 食品安全抽样检验管理办法
  • YOLOv9训练全过程演示,借助官方镜像零失败
  • SGLang模型路径设置:--model-path参数使用详解
  • Qwen对话冷启动问题?预热Prompt设计教程
  • 从0开始学深度学习:PyTorch通用镜像让训练与微调更简单
  • NewBie-image-Exp0.1部署教程:Python调用Diffusers生成动漫图像步骤详解
  • NewBie-image-Exp0.1异常处理:超时重试与断点续生成机制设计
  • Qwen3-4B如何对接前端?全栈集成部署教程详细步骤
  • 保姆级教学:Qwen-Image-2512安装与内置工作流使用
  • 避坑指南:Qwen3-4B-Instruct CPU版部署常见问题全解析
  • NewBie-image-Exp0.1为何选CUDA 12.1?高性能算力适配部署详解
  • Qwen3-1.7B微调实战:7小时完成医学对话模型训练
  • 本地部署麦橘超然失败?CUDA版本兼容性排查手册
  • Speech Seaco Paraformer版权说明解读:二次开发合规使用须知
  • MinerU能否提取注释?批注内容捕获实战验证
  • Qwen All-in-One开发者手册:API调用代码实例
  • 小白友好!FSMN-VAD控制台5分钟快速搭建
  • 轻量级华硕笔记本控制中心 G-Helper:释放硬件潜能的高效解决方案
  • 一键部署NewBie-image-Exp0.1:3.5B模型动漫生成全攻略
  • Sambert车载语音系统:低延迟合成部署实战案例
  • 告别原神重复操作烦恼:BetterGI智能助手效率提升全攻略
  • Vue—— Vue3 SVG 图标系统设计与实现
  • Vue—— Vue 3动态组件与条件渲染优化
  • Unity游戏翻译工具:突破语言壁垒的游戏本地化解决方案
  • uni-app——uni-app 小程序表单页面键盘弹起布局错乱问题
  • LRPC无提示模式真香!YOLOE自动发现所有物体
  • 视频下载工具深度测评:Downkyi与同类工具全方位对比及应用指南
  • MinerU镜像预装了什么?核心依赖与模型路径全解析
  • 2024文档处理入门必看:MinerU开源模型+GPU加速实战指南
  • YOLO11实际项目应用:仓储货物识别系统搭建全过程