目标检测——YOLOv5算法解读

作者:UltralyticsLLC公司
代码:https://github.com/ultralytics/yolov5


YOLO系列算法解读:
YOLOv1通俗易懂版解读SSD算法解读YOLOv2算法解读YOLOv3算法解读YOLOv4算法解读YOLOv5算法解读YOLOR算法解读YOLOX算法解读YOLOv6算法解读YOLOv7算法解读YOLOv8算法解读YOLOv9算法解读YOLOv10算法解读YOLO11算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读PP-YOLOv2算法解读PP-PicoDet算法解读PP-YOLOE算法解读PP-YOLOE-R算法解读



1、算法概述

YOLOv5和YOLOv4都是在2020年发布,不同的是YOLOv5没有论文,是以工程的方式发布的,至今在工业界都还有很多应用,且模型泛化性能非常不错,代码中的很多细节处理值得我们学习。且作者也有在持续改进优化代码,现在已经更新到7.0版本了。先看代码结构:
在这里插入图片描述
代码结构非常清晰,且文件命名一目了然,通过文件名就知道该文件大致起什么作用。从代码来看,模型结构以YAML文件定义,结构清晰明了。
在这里插入图片描述
通过yolo.py里的parse_model解析yaml文件加载模型结构:
在这里插入图片描述
分析完整代码,作者使用了mosaic,图片缩放,focus,CSP,GIoU,FPN+PAN,放缩的网络结构,放缩的网络结构让模型更加灵活,一共有四个版本,s,m,l,x,遗传算法搜超参,自适应的anchor,ema。非常建议大家去深度研读yolov5的代码。


2、YOLOv5细节

先看我自己画的网络结构图
在这里插入图片描述
涉及到的子模块结构如下:
在这里插入图片描述

2.1 YOLOv5损失函数

yoloV5损失函数包括:

  1. Classification loss,分类损失
  2. Localization loss,定位损失(预测边界框与GroundTruth之间的误差)
  3. Confidence loss,目标置信度损失(框的目标性,objectness of the box)

总的损失函数:classification loss + localization loss + confidence loss
yoloV5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失。
yoloV5使用CIOU Loss作为bounding box回归的损失。

2.2 YOLOv5边框回归

Yolo格式的txt标记文件格式是归一化后的中心点坐标(x,y)及矩形宽高:
在这里插入图片描述
在这里插入图片描述
Anchor给出了目标宽高的初始值,需要回归的是目标真实宽高与初始宽高的偏移量;预测边界框中心点相对于对应cell左上角位置的相对偏移量,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,使得预测值在(0,1)范围内,根据边界框预测的4个offset tx,ty,tw,th,可以按照公式计算出边界框的真实预测值。
在这里插入图片描述
YOLOv2/v3/v4采用相同的方式:
在这里插入图片描述
YOLOv5采用跨领域网格匹配策略,一个gt框可以同时在多个尺度特征图上匹配anchor,从而得到更多的正样本anchor,它改进了回归方式:
在这里插入图片描述

这么改进的原因:
原始的yolo框方程式存在严重缺陷。宽度和高度完全不受限制,因为它们只是out=exp(in),这很危险,因为它可能导致梯度失控、不稳定、NaN损失并最终完全失去训练。
对于yolov5,确保通过sigmoid所有模型输出来修补此错误,同时还要确保中心点保持不变1 = fcn(0),因此模型的标称零输出将导致使用标称锚框大小。当前的方程式将锚点的倍数从最小0限制为最大4,并且锚点-目标匹配也已更新为基于宽度-高度倍数,标称上限阈值超参数为4.0。
在这里插入图片描述
有些groundtruth由于和anchor的匹配度不高,不会参与训练,代码中在数据增强部分有异常标签过滤设置。

2.3 用YOLOv5训练自己的数据

步骤:

  1. 创建自己的dataset.yaml。
  2. 创建自己的labels,用labelImg工具,选择yolo格式标注,一张图片保存一个txt文件。背景图片,没有txt文件。
  3. 改变图片和对应label存放方式;yoloV5是将图片路径中/images/替换成/labels/,自动找图片对应的txt文件的。
  4. 选择模型,移动端建议选择yoloV5s,yoloV5m;服务器端建议选择yoloV5l,yoloV5x。
  5. 训练,可以通过指定weights参数加载预训练模型微调。
  6. 可视化,wandb,Tensorboard,本地训练日志。

2.4 训练技巧

数据库:

  1. 每个类别的图片数大于1.5K
  2. 每个类别的标注实例大于10K
  3. 图片多样性,必须和实际部署环境一致
  4. 标注一致并准确,图片中有的类别必须标注
  5. 加入背景图片,可减少FP,建议加入0~10%的背景图片

训练参数设置:

  1. 第一次训练,建议都采样默认参数,建立一个基准,后面再尝试调整参数对比效果
  2. Epochs,默认参数300,如果出现过拟合,就减小该值,如果没有出现,可以增大大600甚至更大
  3. Image size,如果数据库中有更多的小目标,建议使用较大的分辨率训练
  4. Batch size,尽可能设大一点
  5. 超参数,建议使用默认值;更大的图像增强参数,会减少过拟合,但会增加训练难度,往往也会得到更好的mAP,减少损失分量权重参数,可以减少该损失分量过拟合机率

参考自:https://docs.ultralytics.com/tutorials/training-tips-best-results/

2.5 YOLOv5训练流程

在这里插入图片描述

2.6 YOLOv5测试流程

在这里插入图片描述

### YOLOv8 算法原理详细介绍 YOLOv8 是一种高效的端到端目标检测算法,继承并改进了前代版本的优点,在多个方面进行了优化和创新。以下是对其核心原理的详细解读: #### 1. 整体设计 YOLOv8 的整体设计延续了 YOLO 家族的一贯风格——实时性和高精度兼顾的目标检测方法。其主要特点在于支持多种任务类型,包括但不限于物体检测、图像分类以及实例分割[^1]。 #### 2. 模型结构 YOLOv8 使用了一种基于 Anchor-Free 的设计思路来替代传统的锚框机制。这种设计显著减少了计算复杂度,并提高了预测效率。具体而言,模型通过回归的方式直接估计边界框的位置和大小,而无需依赖预定义的候选区域。 此外,YOLOv8 还采用了分层特征提取网络(CSPNet),该网络能够有效捕获不同尺度下的空间信息,从而提升小目标检测性能。 #### 3. Loss 函数的设计 为了更好地平衡定位误差与置信度得分之间的关系,YOLOv8 设计了一个综合性的损失函数体系。其中包括用于衡量位置偏差的 IoU-Loss 和针对类别概率分布交叉熵损失项等组成部分。这些组件共同作用于指导整个训练流程向更优解收敛。 #### 4. 数据增强技术的应用 在实际应用过程中,高质量的数据集对于提高模型泛化能力至关重要。因此,YOLOv8 集成了丰富的数据增广手段,例如 Mosaic 增强、MixUp 技术以及其他随机变换操作,以此增加样本多样性并缓解过拟合现象的发生几率[^1]。 #### 5. 推理加速策略 除了强大的训练模式外,YOLOv8 同样注重推理阶段的表现效果。为此开发团队特别考虑到了部署环境中的硬件条件差异因素,在不影响最终输出质量的前提下尽可能简化运算逻辑;同时借助 ONNX Runtime 或 TensorRT 工具链完成进一步提速处理工作。 ```python import ultralytics from ultralytics import YOLO # 加载官方提供的预训练权重文件 model = YOLO('yolov8n.pt') # 对图片执行推断任务 results = model.predict(source='example.jpg', save=True, conf=0.5) ``` 以上代码片段展示了如何利用 Ultralytics 提供的支持库快速搭建起一套完整的 YOLOv8 测试平台。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值