news 2026/4/17 22:50:55

十分钟快速通关——YOLO11 自定义训练与推理完整使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
十分钟快速通关——YOLO11 自定义训练与推理完整使用

一、核心流程总览

plaintext

环境准备 → 数据准备(文件夹搭建+图片划分) → labelImg标注(生成YOLO格式TXT) → 编写配置文件 → 模型训练 → 推理(单图/批量图/视频)

核心目标:基于自定义数据集(如 hero/bing/dongwu 三类)训练 YOLO11 模型,实现目标检测。

二、环境准备(Windows+CPU/GPU)

1. Anaconda 环境创建

bash

运行

# 1. 创建虚拟环境(Python3.10+/3.12均可) conda create -n YOLO11_test python=3.12 # 2. 激活环境 conda activate YOLO11_test # 3. 安装ultralytics(YOLO11核心库) pip install ultralytics # 4. 验证安装 python -c "from ultralytics import YOLO; print('安装成功')"

2. 环境适配说明

  • CPU 环境:无需额外配置,安装后直接用;
  • GPU 环境(需 NVIDIA 显卡):需先装 CUDA+cuDNN,再装对应 PyTorch(参考https://pytorch.org/)。

三、数据准备(关键!决定训练效果)

1. 文件夹结构搭建(固定格式)

在工作目录(如F:\shijue\YOLO11_test)下创建mydataset文件夹,结构如下:

plaintext

mydataset/ ├── images/ # 存放所有图片 │ ├── train/ # 训练集图片(建议占80%,≥50张,越多越好) │ └── val/ # 验证集图片(建议占20%,≥10张) └── labels/ # 存放标注后的TXT标签(与images一一对应) ├── train/ # 训练集TXT标签(和images/train图片同名) └── val/ # 验证集TXT标签(和images/val图片同名)

2. 图片要求

2. 标注操作

3. 标注后校验

  • 格式:JPG/PNG/BMP 均可,避免中文 / 空格 / 特殊字符(如img_001.jpg而非截图 1.jpg);
  • 数量:单类≥30 张,多类每类≥20 张(总数量≥50 张,数量越多精度越高);
  • 划分:train:val≈4:1(如 50 张 train+10 张 val)。


  • 四、标注环节(labelImg 生成 YOLO 格式 TXT)

    1. labelImg 下载与启动

  • 下载:https://github.com/heartexlabs/labelImg/releases(选 Windows 预编译版,解压后双击labelImg.exe);
  • 核心设置(避免生成 XML!):
    1. 左侧找到PascalVOC按钮 → 点击切换为YOLO格式;
    2. 点击Open Dir→ 选择mydataset/images/train(先标注 train 集);
    3. 点击Change Save Dir→ 选择mydataset/labels/train(标签保存路径);
    4. 勾选View → Auto Save Mode(自动保存标签,无需手动点保存)。
  • W键调出标注框,鼠标框选目标;
  • 输入类别名(如hero/bing/dongwu,与后续配置文件一致),点击OK
  • D键切换下一张图片,重复标注;
  • 标注完 train 集后,同理标注 val 集(切换Open Dirimages/valChange Save Dirlabels/val)。
  • 检查labels/train/labels/val下是否为.txt文件(而非.xml);
  • 打开 TXT 文件,格式必须为:类别ID 归一化x_center y_center width height(如0 0.45 0.52 0.18 0.32,ID 从 0 开始,数值 0-1);
  • 若误生成 XML:用 XML 转 TXT 脚本(见附录)批量转换。
  • 正常标志:box_loss/cls_loss/dfl_loss逐步下降(如 2.4→1.5→1.0);
  • 警告处理:no labels found仅影响验证指标,不影响模型训练,可忽略;
  • 模型保存:训练完成后在runs/detect/trainX/weights下生成best.pt(最优)和last.pt(最后一轮)。
  • 精度提升:
    • 增加训练数据(每类≥50 张,覆盖不同角度 / 背景);
    • 换更大模型(yolo11s.pt/yolo11m.pt);
    • 开启更强数据增强(augment=True+hsv_h=0.015等)。
  • 速度提升:
    • 降低imgsz(如 480);
    • 视频推理加vid_stride=2(隔帧推理);
    • GPU 训练 / 推理(比 CPU 快 10-20 倍)。

五、编写配置文件(dataset.yaml)

F:\shijue\YOLO11_test目录下新建dataset.yaml,内容如下(需适配自己的类别):

yaml

# 数据集根路径(用/或\\,避免\) path: F:/shijue/YOLO11_test/mydataset # 训练/验证集图片路径(相对path) train: images/train val: images/val # 若无val集,可临时改为images/train # 类别配置(核心!) nc: 3 # 类别数量(如hero/bing/dongwu为3) names: ['hero', 'bing', 'dongwu'] # 类别名称(与标注一致,ID对应0/1/2)

六、模型训练(CPU/GPU 适配)

1. 训练脚本(train_yolo11.py)

python

运行

from ultralytics import YOLO import os # 切换工作目录 os.chdir(r"F:\shijue\YOLO11_test") # 加载YOLO11模型(n=轻量版,s=标准版,m/l/x=更重,精度更高) model = YOLO("yolo11n.pt") # 启动训练(CPU/GPU适配) results = model.train( data=r"F:\shijue\YOLO11_test\dataset.yaml", # 配置文件绝对路径 epochs=50, # 训练轮数(建议≥30,数据少可设20) batch=2, # CPU设2/1,GPU可设8/16 imgsz=640, # 输入图片尺寸 device="cpu", # CPU填"cpu",GPU填0(如多张GPU填0,1) patience=10, # 早停:10轮无提升则停止 augment=True, # 开启数据增强(提升精度) val=False, # 新手可先关闭验证(避免标签匹配警告) workers=0, # CPU设0,避免多线程报错 save=True # 保存最优模型(best.pt) ) # 打印最优模型路径 best_model_path = os.path.join(os.getcwd(), "runs/detect/train/weights/best.pt") print(f"训练完成!最优模型路径:{best_model_path}")

2. 运行训练

bash

运行

conda activate YOLO11_test cd F:\shijue\YOLO11_test python train_yolo11.py

3. 训练日志解读

七、推理环节(图片 / 视频)

1. 单张图片推理(predict_single.py)

python

运行

from ultralytics import YOLO import os os.chdir(r"F:\shijue\YOLO11_test") # 加载训练好的模型(替换为实际路径) model = YOLO(r"F:\shijue\YOLO11_test\runs\detect\train6\weights\best.pt") # 推理单张图片 test_img = r"F:\shijue\YOLO11_test\mydataset\images\val\img_001.jpg" results = model(test_img, conf=0.2) # conf=置信度阈值(0.2-0.5) # 保存标注结果 results[0].save("single_result.jpg") # 打印检测结果 for box in results[0].boxes: cls_id = int(box.cls[0]) cls_name = ["hero", "bing", "dongwu"][cls_id] # 匹配类别名 print(f"类别:{cls_name},置信度:{box.conf[0]:.2f}")

2. 批量图片推理(predict_batch.py)

python

运行

from ultralytics import YOLO import os # 配置参数 MODEL_PATH = r"F:\shijue\YOLO11_test\runs\detect\train6\weights\best.pt" IMG_DIR = r"F:\shijue\YOLO11_test\mydataset\images\val" # 待推理图片目录 SAVE_DIR = r"F:\shijue\YOLO11_test\batch_results" CONF = 0.2 CLASS_NAMES = ["hero", "bing", "dongwu"] # 初始化 os.makedirs(SAVE_DIR, exist_ok=True) model = YOLO(MODEL_PATH) # 遍历所有图片 for img_file in os.listdir(IMG_DIR): if img_file.lower().endswith((".jpg", ".png")): img_path = os.path.join(IMG_DIR, img_file) results = model(img_path, conf=CONF) # 保存结果 save_path = os.path.join(SAVE_DIR, img_file) results[0].save(save_path) print(f"处理完成:{img_file}")

3. 视频推理(predict_video.py)

python

运行

from ultralytics import YOLO import os # 配置参数 MODEL_PATH = r"F:\shijue\YOLO11_test\runs\detect\train6\weights\best.pt" VIDEO_PATH = r"F:\shijue\YOLO11_test\mydataset\images\SVID_20210726_111258_1.mp4" SAVE_DIR = r"F:\shijue\YOLO11_test\video_results" CONF = 0.2 # 初始化 os.makedirs(SAVE_DIR, exist_ok=True) model = YOLO(MODEL_PATH) # 视频推理(CPU建议stream=True,逐帧处理) results = model( source=VIDEO_PATH, conf=CONF, device="cpu", stream=True, # 避免内存溢出 save=True, # 保存标注视频 project=SAVE_DIR, name="detect", exist_ok=True, show=False # CPU关闭实时预览(卡顿) ) # 打印进度 frame_count = 0 for r in results: frame_count += 1 if frame_count % 10 == 0: print(f"已处理{frame_count}帧") print(f"视频推理完成!结果保存在:{SAVE_DIR}/detect")

八、常见问题与解决方案

问题现象原因解决方案
no labels found警告验证集标签与图片不匹配 / 无 val 标签1. 训练时加val=False;2. 复制 train 标签到 val 目录;3. 检查 TXT 文件名与图片一致
显存 / 内存溢出batch 过大 / 未开 stream 推理1. CPU 设batch=1/2;2. 视频推理加stream=True;3. 降低imgsz=480
推理无目标置信度阈值过高 / 模型未学到特征1. 降低conf=0.1;2. 增加训练轮数(epochs=50);3. 补充训练数据
labelImg 生成 XML 而非 TXT未切换 YOLO 格式左侧PascalVOC按钮切换为YOLO格式
device=0报错无 GPU/CPU 版本 PyTorchdevice="cpu"

九、优化建议

附录:XML 转 YOLO TXT 脚本(应急用)

python

运行

import xml.etree.ElementTree as ET import os import cv2 # 配置 CLASS_NAMES = ["hero", "bing", "dongwu"] XML_DIR = r"F:\shijue\YOLO11_test\mydataset\labels\train" IMG_DIR = r"F:\shijue\YOLO11_test\mydataset\images\train" def xml2yolo(xml_path): tree = ET.parse(xml_path) root = tree.getroot() img_name = root.find("filename").text img = cv2.imread(os.path.join(IMG_DIR, img_name)) h, w = img.shape[:2] lines = [] for obj in root.findall("object"): cls = obj.find("name").text if cls not in CLASS_NAMES: continue cls_id = CLASS_NAMES.index(cls) bbox = obj.find("bndbox") x1, y1, x2, y2 = float(bbox.find("xmin").text), float(bbox.find("ymin").text), float(bbox.find("xmax").text), float(bbox.find("ymax").text) # 归一化 x_center = (x1 + x2) / 2 / w y_center = (y1 + y2) / 2 / h width = (x2 - x1) / w height = (y2 - y1) / h lines.append(f"{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}") # 保存TXT txt_path = xml_path.replace(".xml", ".txt") with open(txt_path, "w", encoding="utf-8") as f: f.write("\n".join(lines)) # 批量转换 for file in os.listdir(XML_DIR): if file.endswith(".xml"): xml2yolo(os.path.join(XML_DIR, file)) print("转换完成!")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:31:13

从“数据小白”到“分析达人”,百考通AI平台只需你动动嘴!

你是不是一看到“均值”“标准差”“p值”就犯怵?是不是每次面对调研数据都只能干瞪眼,心里默念“谁能帮我分析一下”?好消息来了!百考通全新升级的AI数据分析平台(https://www.baikao tongai.com/sjfx)正式…

作者头像 李华
网站建设 2026/4/17 11:01:09

Power BI主题模板终极指南:从数据展示到视觉叙事

Power BI主题模板终极指南:从数据展示到视觉叙事 【免费下载链接】PowerBI-ThemeTemplates JSON Templates for assembling Power BI Themes 项目地址: https://gitcode.com/gh_mirrors/pow/PowerBI-ThemeTemplates 还在为Power BI报告缺乏视觉冲击力而困扰&…

作者头像 李华
网站建设 2026/4/18 3:34:57

AI生成PPT工具实操指南:零基础也能快速做出专业级PPT

你是否也曾为制作PPT而烦恼?无论是工作汇报、项目方案还是学术答辩,PPT似乎总是那个最耗时却又绕不开的环节。内容构思其实只占一部分时间,更多精力却花在了调字体、对格式、找模板、做图表这些“技术活”上。别担心,现在有了更聪…

作者头像 李华
网站建设 2026/4/18 8:47:51

终极指南:3步完成NTFS到Btrfs的无损文件系统转换

终极指南:3步完成NTFS到Btrfs的无损文件系统转换 【免费下载链接】ntfs2btrfs 项目地址: https://gitcode.com/gh_mirrors/nt/ntfs2btrfs 想要在Linux系统上享受Btrfs文件系统的强大功能,却苦于Windows分区中的数据迁移?ntfs2btrfs这…

作者头像 李华
网站建设 2026/4/18 10:06:49

Win-PS2EXE:轻松将PowerShell脚本编译为EXE可执行文件

Win-PS2EXE:轻松将PowerShell脚本编译为EXE可执行文件 【免费下载链接】Win-PS2EXE Graphical frontend to PS1-to-EXE-compiler PS2EXE.ps1 项目地址: https://gitcode.com/gh_mirrors/wi/Win-PS2EXE Win-PS2EXE是一款功能强大的图形化工具,专门…

作者头像 李华
网站建设 2026/4/18 7:01:26

仅剩30天!MCP量子认证旧版将被永久淘汰(速看应对方案)

第一章:MCP量子认证旧版淘汰的背景与影响随着量子计算技术的快速发展,传统加密体系面临前所未有的安全挑战。MCP(Multi-Channel Protocol)量子认证作为早期应对量子攻击的尝试性方案,在初期阶段为多通道通信提供了基础…

作者头像 李华