拓冰建站拓冰建站
首页 / 资讯中心 / 正文

YOLOv5学习任务

1、YOLOv5 核心三大模块整体架构整体流水线主干特征提取网络 (Backbone) → 颈部特征融合网络 (Neck) → 检测输出头 (Head)Backbone 主干网络CSPDarknet53作用提取图像基础特征组件Focus切片模块、CSPLayer CSP瓶颈模块减少计算量增强特征提取、SPPF空间金字塔池化融合多尺度感受野Neck 颈部PANetFPN特征融合作用 特征融合把浅层细特征、深层语义特征结合适配大小目标检测FPN自上而下高层语义向下传递PAN自下而上底层定位特征向上传递输出3个不同尺度特征图小、中、大目标Head 检测头YOLO Detect作用最终预测无复杂上采样轻量化对3层特征图分别输出目标框坐标x,y,w,h)置信度有无物体类别概率简易流程图输入图片 → Backbone特征提取 → Neck多尺度融合 → Detect检测头 → 预测框类别2、n/s/m/l/x 系列模型划分依据与作用划分规则两个核心缩放系数depth_multiple 深度系数控制 CSP 模块堆叠数量网络层数width_multiple 宽度系数控制每层卷积通道数卷积核多少个网络有多宽型号深度系数宽度系数定位与适用场景YOLOv5-n (nano超微型)0.330.25参数量最小计算量最低速度最快CPU也能勉强跑但精度最低适用于单片机、手机嵌入式、无独显电脑实时推理YOLOv5-s (small小型最常用入门版)0.330.50速度与精度最均衡工程默认首选适用于普通电脑CPU/入门显卡练手、常规检测项目、数据集不大的场景YOLOv5-m (medium中型)0.670.75网络更深更宽精度明显提升速度变慢适用于有独立显卡想要更高mAP不在乎一点点耗时YOLOv5-l (large大型)1.001.00层数更多通道数更大特征提取能力更强适用于服务器GPU、高精度需求工业缺陷测试、小物体测试YOLOv5-x (xlarge超大型)1.331.25五个里面参数量最大、精度最高、速度最慢、最吃显存适用于多GPU服务器、竞赛刷精度、普通电脑很难跑动简单理解n→s→m→l→x网络越来越宽、越来越深显存占用增加参数量、算力、精度递增推理速度递减。3、YOLOv5 完整目标检测流程阶段 1训练阶段数据集图片经输入端预处理Mosaic、归一化、缩放送入 Backbone 提取多尺度特征Neck 融合高低层特征输出 3 层特征图Head 对网格内锚框预测偏移量、置信度、类别计算总损失反向传播迭代更新网络权重、锚框。阶段 2推理检测阶段原图自适应缩放到模型规定输入尺寸归一化送入网络前向推理得到三层特征图所有锚框预测结果解码将网格偏移量换算成原图真实边界框坐标置信度阈值过滤低分框NMS 非极大值抑制剔除同一目标重叠冗余框保留最优检测框输出最终坐标、类别、置信度。整体总流程输入图片 → 预处理 → Backbone提特征 → Neck多尺度融合 → Detect头预测三个尺度框 → 后处理NMS去重 → 输出最终检测框4、自定义数据集训练全套搭建步骤1数据集格式要求YOLO 标准格式目录images/train、images/vallabels/train、labels/val标签 txt一行类别id x_center y_center w h全部归一化 0~1新建xxx.yaml配置文件配置类别数量 nc、类别名称 names、训练集验证集路径。2文件夹固定目录结构在 yolov5 根目录新建datasets/你的数据集名结构如下plaintextdatasets/ └── mydata/ ├── images/ │ ├── train/ # 训练集图片 │ └── val/ # 验证集图片 └── labels/ ├── train/ # 训练集txt标注和图片同名 └── val/ # 验证集txt标注规则 images/train/1.jpg ↔ labels/train/1.txt 名字完全一致3)划分训练集和验证集小数据集训练集80验证集20大数据集9:1也可以不要手动乱拖文件最好用脚本随机划分避免数据扎堆4创建数据集yaml配置文件在 yolov5/data/ 下面新建mydata.yaml模板yaml# 相对路径相对于 yolov5 根目录 path: ../datasets/mydata train: images/train val: images/val # 类别数量 nc类别名字 names顺序对应ID 0,1,2... nc: 2 names: [cat, dog]nc你一共多少类names [0] 对应 txt 里的 0一一对应5两种标注方式方式 1手动标注推荐工具 LabelImg / LabelStudioLabelImg 打开图片文件夹选 YOLO 格式保存自动生成归一化 txt标注完后手动划分 train/val方式 2已有 VOC xml 格式需要转换写小脚本把 xml 转 YOLO txt同时归一化坐标。6检查数据集是否合格图片和标注一一对应没有缺文件、空 txttxt 里坐标必须在 0~1 之间不能出现大于 1 的像素值类别 ID 连续从 0 开始没有空缺 ID没有中文路径、中文文件名绝对禁止会报错7开始训练命令bashpython train.py --data data/mydata.yaml --weights yolov5s.pt --epochs 100--data 指定你自己的 yaml--weights 用官方预训练权重迁移学习效果远好于从零训练5、超参数优化、默认状态、与 my_hyp.scratch.yaml 关系1超参数优化收敛慢调大初始学习率 lr0后期震荡缩小 lrf过拟合增大权重衰减 weight_decay、降低增强强度、增加 mosaic、mixup定位不准调高 iou_t 锚框匹配阈值类别不均衡调整 cls 损失权重、开启标签平滑 label_smoothing。YOLOv5 自带进化算法自动迭代寻找最优超参数bashpython train.py --evolve 100 # 迭代100轮进化搜索超参跑完会在runs/train/evolve生成最优超参数 yaml可以直接拿来训练2默认状态默认状态全部自动开启不需要手动开关YOLOv5 运行train.py训练时如果不指定--hyp参数代码会自动加载data/hyp.yaml文件里所有参数学习率、损失权重、Mosaic、颜色抖动、缩放旋转等全部自动生效数据增强、损失系数、优化器参数都是靠这个文件控制没有总开关按钮3与 my_hyp.scratch.yaml 关系两个都是超参数配置文件结构完全一样只是参数数值不同hyp.yaml迁移学习专用加载预训练权重 yolov5s.pt/l.pt 训练学习率更小、数据增强强度中等、正则偏弱hyp.scratch.yaml从零训练专用weights随机初始化网络权重不用预训练权重初始学习率更大、数据增强更强mosaic、hsv 更高、正则更强随机初始化的网络需要更大的学习率和更强增强才能收敛4my_hyp.scratch.yaml 是什么它不属于官方自带文件是用户自定义文件逻辑复制官方的hyp.scratch.yaml自己修改里面的超参数学习率、损失权重、增强等重命名为my_hyp.scratch.yaml方便区分训练时手动指定使用bashpython train.py --hyp data/my_hyp.scratch.yaml --weights 6、修改 my_hyp.scratch.yaml 参数运行时参数不一致原因未在训练命令指定 --hyp没加--hyp 你的yaml路径程序依旧加载内置默认超参数文件你的 yaml 修改不生效。正确写法python train.py --hyp data/my_hyp.scratch.yaml --weights --data mydata.yaml参数被命令行参数覆盖train.py 指令中传入的--lr0、--batch-size等命令行参数优先级高于 yaml 文件。解决方法手动调参不要加--evolve缓存与断点续训加载旧超参断点继续训练时会读取上次保存的 opt 参数不会重新读取新 hyp 文件需要清空 runs 缓存重新训练。yaml 语法错误缩进、符号写错配置文件解析失败自动回退默认参数。检查训练日志开头会打印Hyperparameters:对照日志看加载了哪些值。部分动态参数batch、imgsz 等不属于 hyp由运行参数控制。7、YOLOv5 损失函数构成、计算逻辑与作用1总损失公式总损失 定位框回归损失 (CIoU Loss) 置信度损失 (BCE) 分类损失 (BCE)三部分加权求和。2三个损失分别是什么、怎么算、作用是什么1. Box Loss 框回归损失CIoU Loss作用让预测框的位置、大小越来越贴近真实标注框GT 框解决框歪、框不准的问题。计算逻辑不再用老式 MSE用 CIoU网络预测框 (x,y,w,h)真实框 GT先算两个框的 IoU交并比CIoU 额外加入三个惩罚项中心点距离惩罚两个框中心离得越远损失越大宽高比惩罚框形状不一样也扣分只对正样本锚框计算这个损失背景框不算。调参hyp.yaml 里box值越大网络越优先修正框坐标。2. Obj Loss 置信度损失二元交叉熵 BCEWithLogitsLoss作用判断「这个网格里有没有物体」用来减少漏检、误检。正样本有物体的网格置信度往 1 靠负样本纯背景网格置信度往 0 压计算逻辑每个网格输出一个 obj_conf物体置信度和标签1 有物体0 无物体做二元交叉熵YOLOv5 会用匹配到的锚框作为正样本其余背景为负样本调参小目标漏检严重 → 调高 hyp.yaml 的obj权重。3. Cls Loss 分类损失也是二元交叉熵 BCE作用让网络分辨物体属于哪一个类别解决分类认错、类别混淆。计算逻辑每个正样本网格输出各个类别的概率和真实类别标签做 BCE 损失负样本背景框不计算分类损失背景不需要分类调参类别经常分错 → 调高cls参数。3完整计算流程训练时的顺序网络前向传播输出三个尺度特征图的预测值把预测偏移量解码成预测框锚框匹配 GT 框划分正样本、负样本正样本计算 CIoU 框损失 分类损失正负样本一起计算置信度 obj 损失三个损失加权求和得到总 loss反向传播更新网络权重4三个损失各自解决什么问题实用理解Box Loss管「框画得准不准」Obj Loss管「能不能找到物体不漏检、不误检」Cls Loss管「物体认对类别没有」8、模型性能评估指标与评测方式1常用核心指标Precision 精确率预测为正样本里真正目标的占比误检越少精度越高Recall 召回率全部真实目标被检测出来的比例漏检越少召回越高AP 单类平均精度PR 曲线下面积衡量单个类别整体检测性能AP 越高这个类别检测越稳定mAP0.5IOU 阈值 0.5 时所有类别 AP 平均值YOLO 最常用基础指标mAP0.5:0.95IOU 从 0.5~0.95 间隔 0.05 取平均严苛综合精度FPS每秒推理帧数衡量速度F1 分数精确率与召回调和平均Confusion Matrix 混淆矩阵直观查看各类别误检、漏检情况。2评测方式自动评估训练结束自动跑验证集每一轮 epoch 训练完成后代码自动在val验证集上推理生成指标日志保存在runs/train/exp/results.txt。也可单独执行val.py加载权重验证集测评生成 PR 曲线、mAP 报表。9、YOLOv5 小目标检测优化方案小目标特征少、像素低底层特征容易丢失针对性优化手段提高输入分辨率imgsz 从 640 提升至 960、1280放大小目标像素重新聚类适配小目标锚框autoanchor 聚类新锚框自适应锚框生成更小尺寸锚框适配小物体优先利用浅层特征层小目标对应最底层小尺度特征图强化浅层特征融合数据增强强化小目标关闭过大裁剪开启马赛克增强、复制粘贴小目标扩充样本选用更大模型s→m/l加深网络提取细粒度特征针对性损失加权提高小目标正样本损失权重剔除下采样过度必要时微调 Focus、卷积下采样倍率。10、多尺度训练原理与优势1实现方式训练时每间隔若干轮在设定尺寸区间默认 imgsz±50%随机选取不同分辨率图片训练图片尺寸统一为 32 整数倍。 网络训练过程动态缩放输入前向传播自适应适配不同大小图片。2核心好处1. 大幅提升小目标检测效果网络见过更小分辨率的图片不会因为图片压缩导致小目标丢失漏检。2. 提升模型泛化能力减少过拟合模型不再只适应固定640尺寸的图片真实场景各种远近、缩放的图片都能识别。3. 增强尺度鲁棒性拍摄距离忽远忽近、物体忽大忽小时预测框更稳定不会剧烈漂移。4. 推理时可以自由切换分辨率训练做多尺度后你推理用 640 / 800 / 1280 都能跑效果不会崩固定尺度训练的模型换分辨率精度会暴跌。11、YOLOv5 训练后模型落地部署全方案先明确训练得到两个权重文件best.pt验证集效果最好部署优先用这个shturl.最后一轮权重一般不用来部署1前置第一步先测试模型可用性先用 detect.py 本地跑一遍确认模型能正常检测bashpython detect.py --weights runs/train/exp/weights/best.pt --source test.jpg没问题再开始部署。2不同场景部署方案 1Python 原生部署最简单PC 服务器快速使用适合PC 端后台脚本、本地检测、二次 Python 开发步骤复制 best.pt 到项目文件夹复制 yolov5 的models/、utils/、common.py、detect.py等依赖文件自己写推理脚本调用 YOLOv5 的 Detect 类可以读取图片、视频、摄像头 RTSP 流、文件夹批量检测输出框坐标、类别、置信度对接业务逻辑计数、报警、保存数据优点开发最快不用转模型 缺点依赖 Python 环境、PyTorch 库速度一般不能脱离 Python 运行方案 2导出 ONNX 模型跨框架通用中间格式ONNX 是通用神经网络格式可以被 OpenCV、ONNX Runtime、C、Java 读取导出命令bashpython export.py --weights best.pt --include onnx得到best.onnx使用方式ONNX Runtime Python/C 推理速度比 PyTorch 快OpenCV dnn 模块加载 onnx 跑检测不需要 PyTorch 适用Windows 工控机、跨语言调用方案 3C 部署工控机、Windows/Linux 服务器追求速度路线pt → onnx → opencv-dnn / ONNX Runtime C / TensorRT导出 onnxC 加载 onnx预处理图片缩放、归一化、NMS 后处理编写 NMS 解码代码解析三个输出头的预测框 优点运行速度快、占用资源低、可打包 exe 脱离 Python 环境 缺点需要写 C 后处理代码门槛高方案 4TensorRT 部署NVIDIA 显卡 GPU 加速工业最常用有 NVIDIA 显卡的服务器 / 边缘显卡设备首选提速 2~4 倍流程pt → onnx → trt 引擎文件.engine 导出命令直接一键生成 trtbashpython export.py --weights best.pt --include engine --device 0优点GPU 极致加速适合视频流实时检测 缺点只能 NVIDIA 显卡用不同显卡引擎文件不能通用方案 5边缘设备部署树莓派、手机、单片机、嵌入式板子5.1 树莓派 / ARM 开发板pt → ONNX → NCNN / Tengine / ONNXRuntime ARM 版本 建议用 yolov5n/nano 小模型不要用 s/m/l5.2 Android 手机 APPpt → onnx → NCNN / Tengine → JNI 封装到 Android APP5.3 Web 前端部署浏览器跑不用后端pt → onnx → 转 ONNX.js/ WebDNN前端 JS 直接浏览器推理 适合网页上传图片在线检测方案 6打包成 exeWindows 电脑无 Python 环境运行用 PyInstaller 打包 detect.py 或者自己的推理脚本 注意需要打包权重、依赖文件排除多余库减小体积 适合给没有装 Python 的 Windows 电脑直接双击运行12、YOLOv5 对比前代 YOLOv3、YOLOv4 主要改进网络结构轻量化重构CSPDarknet 替换原版 DarknetFocus 无损下采样SPPF 替代 SPP参数量更小、算力更低输入端强力工程化增强原生集成 Mosaic、自适应锚框、自适应缩放v3/v4 需要额外手动实现损失与匹配策略优化CIoU 替代原始 IOU、GIoU正负样本动态匹配策略收敛更快工程易用性大幅升级完整代码工程化一键训练、验证、推理、导出部署多平台兼容多规格模型矩阵n/s/m/l/x 一套代码一键切换大小模型适配全场景算力推理优化细节自适应图片填充减少无效黑边计算NMS 逻辑优化训练策略优化余弦退火学习率、自动混合精度 AMP 训练、早停策略训练更稳定高效整体同等精度下速度远高于 YOLOv4轻量化版本适合嵌入式工程落地成本极低。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门