news 2026/3/10 20:37:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/8 15:57:05

Qwen3-1.7B微调实战:7小时完成医学对话模型训练

Qwen3-1.7B微调实战&#xff1a;7小时完成医学对话模型训练 1. 引言&#xff1a;为什么是医学场景&#xff1f;为什么是7小时&#xff1f; 你是否也遇到过这样的困境&#xff1a;想为基层诊所部署一个能理解“饭后胃胀、反酸三年&#xff0c;近一周加重”这类真实问诊语句的A…

作者头像 李华
网站建设 2026/2/21 22:21:09

Z-Image-Turbo保姆级入门,手把手教你生成第一张图

Z-Image-Turbo保姆级入门&#xff0c;手把手教你生成第一张图 你是不是也看过别人用AI画出惊艳的插画、赛博朋克风的猫咪、水墨山水画&#xff0c;心里痒痒却不知道从哪开始&#xff1f;别担心&#xff0c;今天我们就来彻底打破“AI绘画技术门槛高”的刻板印象。 本文专为零基…

作者头像 李华
网站建设 2026/3/3 10:15:13

高效零成本抽奖工具:打造公平抽奖方案的终极选择

高效零成本抽奖工具&#xff1a;打造公平抽奖方案的终极选择 【免费下载链接】lucky-draw 年会抽奖程序 项目地址: https://gitcode.com/gh_mirrors/lu/lucky-draw 你是否曾在组织活动时遭遇抽奖环节的尴尬&#xff1f;精心准备的抽奖却因规则不透明引发质疑&#xff0c…

作者头像 李华
网站建设 2026/3/10 4:54:03

模型预测不准怎么办?BERT语义系统调参实战指南

模型预测不准怎么办&#xff1f;BERT语义系统调参实战指南 1. BERT 智能语义填空服务&#xff1a;不只是猜词&#xff0c;更是理解上下文 你有没有遇到过这样的情况&#xff1a;输入一句“床前明月光&#xff0c;疑是地[MASK]霜”&#xff0c;模型却返回了“板”“砖”“铁”…

作者头像 李华
网站建设 2026/2/28 18:48:06

Cute_Animal_For_Kids_Qwen_Image上线记:一个下午搞定部署

Cute_Animal_For_Kids_Qwen_Image上线记&#xff1a;一个下午搞定部署 你有没有想过&#xff0c;只需要输入一句话&#xff0c;就能生成一张专为孩子设计的可爱动物图片&#xff1f;现在&#xff0c;这个想法已经变成了现实。Cute_Animal_For_Kids_Qwen_Image 正式上线了——一…

作者头像 李华
网站建设 2026/2/27 17:03:42

复杂场景文本提取难?试试DeepSeek-OCR-WEBUI大模型镜像

复杂场景文本提取难&#xff1f;试试DeepSeek-OCR-WEBUI大模型镜像 在日常办公、档案管理、票据处理等场景中&#xff0c;我们经常需要从图片中提取文字。传统OCR工具在面对模糊、倾斜、低分辨率或背景复杂的图像时&#xff0c;往往力不从心——识别不准、漏字断行、格式混乱等…

作者头像 李华