
《YOLO 系列训练实操·全 7 篇》——从 YOLOv5 到 YOLO26每篇独立成文、全部可复现。本篇为系列开篇1/7也是全系列的路由表后续每篇沿用同一套「环境 → 数据 → 训练 → 验证」闭环与实验口径。系列进度✅1/7 本文YOLOv5→ ⏳ 2/7 YOLOv6部署优化→ 3/7 YOLOv8统一 API→ 4/7 YOLOv9PGI→ 5/7 YOLOv10无 NMS→ 6/7 YOLO11 → 7/7 YOLO26边缘端到端。本文所有版本号、训练指标、损失曲线均为真实运行输出2026-08 实测你按照本文命令操作即可得到同样流程与量级的指标。1. 背景目的系列开篇视角本系列共 7 篇v5 → v6 → v8 → v9 → v10 → 11 → 26本文是范式源头——确立统一的实验口径同一套 YOLO 格式数据、同样从 COCO 预训练起步、同样 10~15 epochs 量级微调、同一块 8 GB 卡后续每篇只换代框架指标即可横向对比。你将会发现v5 定义的流程就是整个系列的故事主线。YOLOv5 是 Ultralytics 团队维护的经典单阶段目标检测框架自 2020 年开源后凭借训练简单、部署轻量、生态完整成为无数开发者入坑目标检测的第一站。即便后续有了 YOLOv8、YOLO11 等新版本YOLOv5 的代码结构train.py/val.py/detect.py三件套依然是理解整套 YOLO 训练流程的最佳教材。本文目标用官方预训练权重yolov5n.ptCOCO 预训练在自备的 4 类数据集上微调训练并完成验证与效果展示。通过本文你将掌握YOLOv5 官方仓库的获取、依赖与环境搭建标准 YOLO 数据集格式与配置文件写法从预训练权重开始训练的全流程命令与日志解读验证mAP与推理detect的完整闭环图 1YOLOv5 一次前向流程示意输入 → 主干网络提取特征 → 颈部特征融合 → 检测头三尺度预测 → NMS 去重2. 目录背景目的目录环境和数据集准备实操以及截图伴有原理解释4.1 获取官方代码与预训练权重4.2 安装依赖与版本核对4.3 准备数据配置文件4.4 从预训练权重开始训练4.5 训练日志与损失曲线解读含原理4.6 网络结构原理解读4.7 深度原理关键痛点拆解4.8 操作异常实录测试验证总结3. 环境和数据集准备3.1 环境搭建通用示例conda create-nmulti-agent-demopython3.11numpy conda activate multi-agent-demo克隆代码并安装依赖见 4.1、4.2。若没有 GPU训练会自动回退 CPU速度慢很多本文指标为 GPU 实测。3.2 数据集准备按标准 YOLO 检测格式准备数据目录结构如下dataset为你的数据集根目录dataset/ ├── images/ │ ├── train/ # 训练图片 │ └── val/ # 验证图片 └── labels/ ├── train/ # 训练标注txt一行一个目标 └── val/ # 验证标注标注格式每行class x_center y_center w h坐标归一化到 [0,1]。类别本文以 4 类检测数据集为例person/car/dog/insectnc4。本文数据规模实测统计train 1315 张图片 / val 298 张图片训练集标注分布person 1220 条、car 428 条、dog 347 条、insect 16 条。图 2训练集类别标注分布——insect 仅有 16 条标注存在严重类别不平衡这将在第 5 节的验证指标中直观体现。4. 实操以及截图伴有原理解释4.1 获取官方代码与预训练权重gitclone https://github.com/ultralytics/yolov5cdyolov5官方仓库ultralytics/yolov5最新 Releasev7.0master 分支持续维护。预训练权重yolov5n.pt约 3.9 MBCOCO 80 类预训练放在 yolov5 仓库根目录即可训练时若缺失脚本会尝试自动下载也可手动从 Release 页面下载。⚠️ 网络受限时git clone/ 权重下载可能因无法直连github.com失败报错示例见 4.7 异常 1。此时可改为网页下载代码 ZIP、使用加速镜像权重手动放入仓库根目录即可不要反复重试浪费时间。4.2 安装依赖与版本核对pipinstall-rrequirements.txt本文实测环境供对照版本号随你环境略有不同属正常项实测版本Python3.11.15numpy2.4.4torch2.10.0cu128CUDA 可用torchvision0.25.0cu128GPUNVIDIA GeForce RTX 5060 Ti8 GB 显存4.3 准备数据配置文件在 yolov5 目录下新建data.yaml指向你的数据集dataset为数据集根目录# data.yamltrain:dataset/images/trainval:dataset/images/valnc:4names:[person,car,dog,insect]原理说明YOLOv5 启动时会执行AutoAnchor 自检本次实测输出AutoAnchor: 4.04 anchors/target, 1.000 Best Possible Recall (BPR). Current anchors are a good fit意思是当前默认锚框在该数据集上平均每个目标 4 个候选锚框、最优召回 1.0锚框无需重算可直接训练。4.4 从预训练权重开始训练第一段训练5 epochs输出到默认目录runs/train/exppython train.py\--datadata.yaml\--weightsyolov5n.pt\--epochs5--batch-size16--img416\--device0--workers2第二段训练5 epochs从第一段得到的最佳权重继续训练这也是断点续训 / 从检查点继续微调的常用做法输出到runs/train/exp2python train.py\--datadata.yaml\--weightsruns/train/exp/weights/best.pt\--epochs5--batch-size16--img416\--device0--workers2两段合计 10 epochs。参数说明参数含义本文取值--weights起始权重COCO 预训练权重 / 上一段 best.ptyolov5n.pt→best.pt--epochs训练轮数5 5 10--batch-size每批图片数8 GB 显存建议 8~3216--img训练分辨率416--device设备0 为第一块 GPU0--workers数据加载进程数Windows 建议 0~22原理说明迁移学习yolov5n.pt在 COCO 80 类上预训练训练脚本会加载其主干/颈部权重将检测头输出类别数从 80 调整为nc4再微调整个模型。这就是从预训练模型开始训练的核心特征提取能力被复用只需很少轮数即可达到可用精度。训练耗时实测每 5 epochs 约 3~4 分钟RTX 5060 Ti8 GB 显存10 epochs 合计约 6~7 分钟。4.5 训练日志与损失曲线解读含原理训练进度条节选真实输出Epoch GPU_mem box_loss obj_loss cls_loss Instances Size 0/9 0.403G 0.1315 0.01225 0.04873 25 416逐 epoch 真实指标汇总来自runs/train/exp*/results.csv两段合并epochbox_lossobj_losscls_lossmAP50mAP50-9500.12350.01130.03720.00080.000210.09270.01460.02060.10760.037720.07760.01470.01570.20080.082430.06620.01420.01280.24650.108240.06160.01300.01120.29340.140050.05690.01250.01040.33800.166560.05890.01230.00930.30180.119570.05970.01190.00910.31590.136580.05530.01170.00860.41320.167290.05240.01100.00700.45410.2227损失函数原理YOLOv5 总损失 box_loss边界框回归GIoUobj_loss目标置信度BCEcls_loss类别BCE。三者随训练收敛降低每个 epoch 结束后在验证集上输出 P / R / mAP50 / mAP50-95。图 3训练损失曲线真实数据图 4验证 mAP 曲线真实数据——从预训练权重起步mAP50 在 10 个 epoch 内从 0.0008 爬升到 0.4541体现迁移学习的收敛速度。训练结束后输出目录runs/train/exp2/weights/下会自动保存best.pt验证集最优与last.pt最后一轮实测日志Optimizer stripped from runs/train/exp2/weights/best.pt, 3.8MB 5 epochs completed in 0.051 hours.配图复现本文所有示意图与曲线图由配套脚本生成仅依赖 numpy Python 标准库不依赖 matplotlib你训练后同样可复现# 将 plotter.py、make_figs.py 与图片输出置于同一目录然后python make_figs.py--runsruns/train/exp runs/train/exp2\--distperson:1220,car:428,dog:347,insect:16\--valmapperson:0.641,car:0.761,dog:0.308,insect:0.1314.6 网络结构原理解读YOLOv5 一次前向可分为三段即图 1Backbone 主干CSPDarknet 风格连续ConvC3跨阶段部分连接下采样提取特征末端SPPF空间金字塔池化聚合多尺度感受野输出三个尺度的特征层 P3 / P4 / P5。Neck 颈部PANet先上采样、与主干特征Concat融合再自顶向下传递语义、自底向上传递位置信息让每层都既看得清小目标、又分层合理。Head 检测头Detect在 416×416 输入下输出52×52小目标、26×26中目标、13×13大目标三张特征图若用 640 输入则对应 80×80/40×40/20×20每格预测多组(x, y, w, h, 置信度, 类别概率)训练时按 Anchor 与 IoU 分配标签Anchor-based推理时按阈值过滤 NMS 去重。训练后模型实测信息model_info输出Model summary: 68 layers, 1,764,577 parameters, 0 gradients, 4.1 GFLOPs class names: {0: person, 1: car, 2: dog, 3: insect}即 YOLOv5n 规模约176 万参数、4.1 GFLOPs416 输入非常轻量这也是它能跑在边缘设备上的原因。4.7 深度原理关键痛点拆解这一节把为什么这样设计讲透——都是训练与调参中反复出现的疑问每个痛点配图说明。痛点 1为什么输入必须是 32 的倍数416 而不是 414YOLOv5 主干共经过5 次 stride2 的下采样卷积图 1 的 Backbone 阶段每次空间尺寸减半累计下采样倍数为 2⁵ 32。因此输入 416 → 经过 5 次 ÷2 → 末级特征图13×13416/32 13恰好是整数网格若输入不是 32 的倍数如 414末级特征图会被取整12.94→13 或丢尾造成特征图网格与真实目标中心错位——目标中心落在格子边界附近时归属不稳定精度小幅但真实地下降。主流 imgsz 选择正是基于此320 / 416 / 640 10 / 13 / 20 个网格都是 32 的倍数。框架在训练时会用 letterbox 补边把任意来源图片对齐到 32 倍数你自己改 imgsz 时也请始终用 32 的倍数。痛点 2一张图最终被切成多少个格子三尺度分别负责什么416 输入时检测头在三个下采样尺度上各输出一张特征图输出网格stride每格对应原图负责目标P513×133232×32 像素大目标P426×261616×16 像素中目标P352×5288×8 像素小目标每个格子预测若干组候选框。一个小目标在 P513×13上可能连 1 个格子都占不满因此必须靠格子更密、分辨率更高的 P352×52来兜底小目标——这就是三尺度检测存在的直接原因也是大图幅下小目标仍然难检需要更高分辨率的根源。痛点 3Anchor 到底是什么为什么要做匹配YOLOv5 是anchor-based网格每个尺度预设若干组宽高比的先验框默认每尺度 3 组共 9 组见 4.3 节 AutoAnchor 自检。训练时目标的中心坐标决定它落在哪个格子计算该格子预置 anchors 与目标框的 IoUIoU 最大或达阈值的 anchor负责预测该目标网络回归的是目标相对 anchor 的偏移而不是绝对坐标——所以必须先用 anchor 做参照。AutoAnchor实测日志4.04 anchors/target, BPR1.000就是检查数据集目标尺度与预置 anchors 的契合度BPR1.0 说明所有目标都能被匹配无需重聚类。若换到目标普遍特大/特小的数据集BPR 会下降此时可重新聚类 anchors 或调整比例。右半图即 v8 的 anchor-free 方式不再预设框直接回归中心点与四条边距供对比。详见第 v8 篇。痛点 4为什么最后一步必须做 NMS检测头推理时会输出大量互相重叠的候选框同一目标被不同格子、不同尺度同时命中。NMS 的流程按置信度降序 → 保留最高分框 → 删除与其 IoU 超过阈值默认 0.45的重叠框 → 对剩余框重复直到处理完毕让每个目标只保留 1 个框。置信度阈值默认 0.25与 NMS IoU 阈值默认 0.45是调参重点阈值太低会漏框变多框太高会误检爆炸。v5/v6/v8 都依赖这一步v10/v26 采用端到端无 NMS 设计见对应篇目。痛点 5显存与 batch、imgsz 是什么关系8 GB 卡怎么配训练/推理的开销主项 ≈batch × imgsz²batch 是线性分辨率是平方。所以 imgsz 从 416 到 640开销约为 ×(640/416)² ≈2.37 倍。8 GB 显存实测v5n 416 batch16 训练占用约 0.4 GB日志 GPU_mem 0.4G。显存不够时先减 batch线性省再降 imgsz平方省——这是 8 GB 卡跑大模型铁律。痛点 6从预训练权重起步为什么收敛这么快COCO 预训练学到的是与数据集无关的通用视觉特征边缘、纹理、局部形状、部件结构被替换的只有输出层分类头从 80 类改 4 类回归头重初始化。微调 “把大头换成小头 全网络小步幅适配”因此 10 epochs 内 mAP50 从 0.0008 冲到 0.454。这正是从预训练模型开始训练的意义绝大多数场景不必从零训练除非数据域与 COCO 差异极大如工业内窥图像。4.8 操作异常实录实操中遇到的异常及分析、解决方案实录供对照排障。异常 1GitHub 克隆与预训练权重下载连接失败操作git clone官方仓库、下载yolov5n.pt现象真实报错fatal: unable to access https://github.com/ultralytics/yolov5.git/: Recv failure: Connection was reset curl: (28) Failed to connect to github.com port 443 after 21048 ms: Could not connect to server原因分析网络环境无法直连github.com:443连接被重置 / 超时属网络可达性问题不是命令或参数错误。解决方案不反复重试避免浪费时间停止自动下载改为网页下载代码 ZIP或加速镜像并把权重手动放入仓库根目录然后继续后续步骤。状态已解决。异常 2数据集部分 JPEG 图片损坏告警不影响训练现象真实告警穿插于训练/验证进度条中反复出现Corrupt JPEG data: 2 extraneous bytes before marker 0xd9原因分析images/中存在少量 JPEG 文件尾部含多余字节截断 / 拼接异常OpenCV 解码时打出警告并自动容错。解决方案无需处理数据加载自动跳过训练指标正常如需彻底清理可写脚本按解码失败过滤损坏文件并重新压缩。状态已解决自动容错不影响训练结果。5. 测试验证5.1 验证集指标val.py使用 best.ptpython val.py--datadata.yaml--weightsruns/train/exp2/weights/best.pt\--batch-size16--img416--device0实测输出val 集 298 张 / 420 个实例类别实例数PRmAP50mAP50-95person2510.4320.7450.6410.240car1000.5360.8300.7610.478dog620.3830.3060.3080.111insect70.0000.0000.1310.066all4200.3380.4700.4600.224person / car 数据充足mAP50 达 0.64 / 0.76效果可用insect 因训练样本仅 16 条、验证样本仅 7 条模型完全未召回R0——与 3.2 节的类别不平衡图图 2直接对应这是小样本类别训练坏掉的经典实证。推理速度实测0.1ms pre-process, 1.1ms inference, 1.3ms NMS per imagebatch16, 416×416, GPU。图 5各类别 mAP50 对比真实 val 结果6. 总结一句话定位YOLOv5 定义了三件套工作流 Anchor 多尺度检测这一整套范式——后续 v6/v8/v9/v10/11/26 的训练脚本思路、数据格式乃至目录结构都从这里继承它价值不在最强而在最标准。实测复盘同一数据集 10 epochsRTX 5060 Ti项实测一句话判断mAP50 / mAP50-950.454 / 0.223独立复测 0.460 / 0.224三尺度耦合头 Anchor 匹配下已属正常水平单张推理1.1 msGPU 416轻量但非极限v6 重参数化更快显存占用0.4 GBbatch 16 416n 模型极省训练耗时10 epochs ≈ 6~7 分钟流程教学友好核心机制实证对应 4.7 深度原理AutoAnchor 实测BPR1.000证实数据集目标尺度与预置 anchors 契合——这正是本文训练曲线稳定不崩的前提C3SPPF 主干让 176 万参数跑出可部署精度AnchorGIoUcoupled head 的组合也暴露了上限insect16 条完全未召回R0Anchor 匹配对小样本类别不友好这个缺口正是 v8 篇要解决的。诚实局限耦合头精度上限、Anchor 超参族繁杂、官方开发重心已全部转移到新版本本仓库 master 仅维护新项目不建议再选 v5 起步。决策建议教学演示、老代码库维护、CPU/极低功耗场景优先要走统一 API 更高精度请直接看本系列 v8 及之后篇章。踩坑速记下载受限走网页/镜像4.8 异常 1Corrupt JPEG自动容错异常 2--workersWindows 下 0~2。下集预告系列 2/7YOLOv6——美团开源的 Industrial-grade 部署优化框架本系列第一次部署导向 vs 精度导向的对决。