Yolo系列理论

目标检测-Yolo系列发展

在这里插入图片描述
截止2023.1.17Yolo系列已经出到了Yolo v8

Anchors Base原理

对图片进行patch切分密集采样(不符合人看的规律)
在这里插入图片描述
anchor解释为预选框后面的分类和定位都是基于anchor来做的其中定位就是对anchor box做一个线性变换。也可以将anchor box 理解为连接预测框和GT的桥梁。对于每个anchor有四个代表位置信息的预测值在yolo v3中这四个值分别是对anchor中心点的偏移量和宽高缩放量。根据anchor坐标和这四个值就可以计算出预测框的位置然后用预测框和GT做损失计算这种理解更符合“学习”的思维方式正向传播、计算损失、反向传播、梯度下降、正向传播…
在这里插入图片描述
step1生成数万个矩形框矩形框就是anchor。
step2特征图映射回原图特征图中每个点的k个分类特征与k个回归特征与k个anchor逐个对应即可这实际是一种“人为设置的逻辑映射”。
step3特征提取判断类别。
step4回归位置判断有无目标。

Anchors Free原理

回归计算目标检测框左上右下角的坐标。

以yolo-v1为例最后输出一个7×7的网络然后每个网格预测2个结果注意不管这里预测多少个结果其分类只有一个。换句话说每个网格只会负责一个分类至于边界框可以有多个。
所以对于anchor-free而言在特征图中每个网格负责预测出一个分类而anchor-base的网络在特征图中每个节点存储的是以该节点为中心的数个子图的特征这些特征分别进行分类。本质上来讲anchor-free根据网格代表的那块图像的特征计算出了分类而anchor-base则根据周围预设的子图的特征计算分类而达到这点的手段就是groundtruth的设置规则。
在anchor-free中物体落到哪个网格哪个网格就是正样本其余都是负样本。anchor-base则计算每个anchor和gt的IoU超过多少阈值就算正。
在这里插入图片描述

YOLO v1

YOLO 的核心思想就是把目标检测转变成一个回归问题利用整张图作为网络的输入仅仅经过一个神经网络得到bounding box边界框 的位置及其所属的类别。

Yolov1网络结构

在这里插入图片描述
现在看来YOLOv1的网路结构非常明晰是一种传统的one-stage的卷积神经网络

  • 网络输入448×448×3的彩色图片。
  • 中间层由若干卷积层和最大池化层组成用于提取图片的抽象特征。
  • 全连接层由两个全连接层组成用来预测目标的位置和类别概率值。
  • 网络输出7×7×30的预测结果。

Yolov1实现方法

step1: 将一幅图像分成 S×S个网格grid cell如果某个 object 的中心落在这个网格中则这个网格就负责预测这个object。
step2: 每个网格要预测 B (B=2)个bounding box每个 bounding box 要预测 (x, y, w, h, c) 共5个值c是confidence置信度。
step3: 每个网格还要预测一个类别信息记为 C 个类。
step4: 总的来说S×S 个网格每个网格要预测 B个bounding box 还要预测 C 个类。网络输出就是一个 S × S × (5×B+C) 的张量。

在这里插入图片描述在实际过程中YOLOv1把一张图片划分为了7×7个网格并且每个网格预测2个BoxBox1和Box220个class类别。所以实际上S=7B=2C=20。那么网络输出的shape也就是7×7×30。

Yolov1损失函数

在这里插入图片描述

在这里插入图片描述

  • 总的损失由三部分组成分别是坐标预测损失、置信度预测损失、类别预测损失。
  • 使用的是差方和误差MSE loss。需要注意的是w和h在进行误差计算的时候取的是它们的平方根原因是对不同大小的bounding box预测中相比于大bounding box预测偏一点小box预测偏一点更不能忍受。而差方和误差函数中对同样的偏移loss是一样。 为了缓和这个问题作者用了一个比较取巧的办法就是将bounding box的w和h取平方根代替原本的w和h。
  • 定位误差比分类误差更大所以增加对定位误差的惩罚使λcoord=5。
  • 在每个图像中许多网格单元不包含任何目标。训练时就会把这些网格里的框的“置信度”分数推到零这往往超过了包含目标的框的梯度。从而可能导致模型不稳定训练早期发散。因此要减少了不包含目标的框的置信度预测的损失使 λnoobj=0.5。

Yolov1总结

在这里插入图片描述

YOLO v2

  • 重点解决YOLOv1召回率和定位精度方面的不足。
  • 高精度与速读YOLOv2 是一个先进的目标检测算法比其它的检测器检测速度更快。除此之外该网络可以适应多种尺寸的图片输入并且能在检测精度和速度之间进行很好的权衡。
  • 高召回率相比于YOLOv1是利用全连接层直接预测Bounding Box的坐标YOLOv2借鉴了Faster R-CNN的思想引入Anchor机制。利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板大大提高了算法的召回率。
  • 适合小目标同时结合图像细粒度特征将浅层特征与深层特征相连有助于对小尺寸目标的检测。
  • 识别类多YOLO9000 使用 WorldTree 来混合来自不同资源的训练数据并使用联合优化技术同时在ImageNet和COCO数据集上进行训练能够实时地检测超过9000种物体。

Yolov2网络结构

在这里插入图片描述
BackboneDarknet-19

  • 与VGG相似使用了很多3×3卷积核并且每一次池化后下一层的卷积核的通道数 = 池化输出的通道 × 2。
  • 在每一层卷积后都增加了批量标准化Batch Normalization进行预处理。
  • 采用了降维的思想把1×1的卷积置于3×3之间用来压缩特征。
  • 在网络最后的输出增加了一个global average pooling层。
  • 整体上采用了19个卷积层5个池化层。
    在这里插入图片描述
    Darknet-19 与 YOLOv1、VGG16网络对比
    VGG-16 大多数检测网络框架都是以VGG-16作为基础特征提取器它功能强大准确率高但是计算复杂度较大所以速度会相对较慢。因此YOLOv2的网络结构将从这方面进行改进。
    YOLOv1 基于GoogLeNet的自定义网络具体看上周报告比VGG-16的速度快但是精度稍不如VGG-16。
    Darknet-19 速度方面处理一张图片仅需要55.8亿次运算相比于VGG306.9亿次速度快了近6倍。精度方面在ImageNet上的测试精度为top1准确率为72.9%top5准确率为91.2%。

Yolov2改进细节

在这里插入图片描述

1.Batch Normalization批归一化
每层输入时对数据进行预处理统一格式、均衡化、去噪等能够大大提高训练速度提升训练效果。基于此YOLOv2 对每一层输入的数据都进行批量标准化这样网络就不需要每层都去学数据的分布收敛会变得更快。
BN算法实现在卷积或池化之后激活函数之前对每个数据输出进行标准化减去均值除以方差。

2.Anchor Box 先验框生成机制
在YOLOv1中作者设计了端对端的网路直接对边界框的位置x, y, w, h进行预测。这样做虽然简单但是由于没有类似R-CNN系列的推荐区域所以网络在前期训练时非常困难很难收敛。于是自YOLOv2开始引入了 Anchors box 机制希望通过提前筛选得到的具有代表性先验框Anchors使得网络在训练时更容易收敛。

Faster R-CNN算法中是通过预测 bounding box预测框ground truth真值标签 的位置偏移值 tx, ty间接得到bounding box的位置。其公式如下
在这里插入图片描述

这个公式是无约束的预测的边界框很容易向任何方向偏移。因此每个位置预测的边界框可以落在图片任何位置这会导致模型的不稳定性。

因此 YOLOv2 在此方法上进行了一点改变预测边界框中心点相对于该网格左上角坐标 C x , C y 的相对偏移量同时为了将bounding box的中心点约束在当前网格中使用 sigmoid 函数将 tx, ty归一化处理将值约束在0-1这使得模型训练更稳定。

下图为 Anchor box 与 bounding box 转换示意图其中蓝色的是要预测的bounding box黑色虚线框是Anchor box。
在这里插入图片描述
YOLOv2 在最后一个卷积层输出 13×13 的 feature map意味着一张图片被分成了13×13个网格。每个网格有5个anchor box来预测5个bounding box每个bounding box预测得到5个值tx、ty、tw、th、to 类似YOLOv1的confidence。引入Anchor Box 机制后通过间接预测得到的 bounding box 的位置的计算公式为
在这里插入图片描述
置信度 to 的计算公式为
在这里插入图片描述
Convolution With Anchor Boxes卷积替换全连接在这里插入图片描述
YOLOv1 有一个致命的缺陷就是一张图片被分成7×7的网格一个网格只能预测一个类当一个网格中同时出现多个类时就无法检测出所有类。针对这个问题YOLOv2做出了相应的改进

  • 首先将YOLOv1网络的FC层和最后一个Pooling层去掉使得最后的卷积层的输出可以有更高的分辨率特征。
  • 然后缩减网络用416×416大小的输入代替原来的448×448使得网络输出的特征图有奇数大小的宽和高进而使得每个特征图在划分单元格的时候只有一个中心单元格Center Cell。YOLOv2通过5个Pooling层进行下采样得到的输出是13×13的像素特征。
  • 借鉴Faster R-CNNYOLOv2通过引入Anchor Boxes预测Anchor Box的偏移值与置信度而不是直接预测坐标值。
  • 采用Faster R-CNN中的方式每个Cell可预测出9个Anchor Box共13×13×9=1521个YOLOv2确定Anchor Boxes的方法见是维度聚类每个Cell选择5个Anchor Box。比YOLOv1预测的98个bounding box 要多很多因此在定位精度方面有较好的改善。
    聚类方法选择先验框Anchors
    Faster R-CNN 中 Anchor Box 的大小和比例是按经验设定的不具有很好的代表性。若一开始就选择了更好的、更有代表性的先验框Anchor Boxes那么网络就更容易学到准确的预测位置了

YOLOv2 使用 K-means 聚类方法得到 Anchor Box 的大小选择具有代表性的尺寸的Anchor Box进行一开始的初始化。传统的K-means聚类方法使用标准的欧氏距离作为距离度量这意味着大的box会比小的box产生更多的错误。因此这里使用其他的距离度量公式。聚类的目的是使 Anchor boxes 和临近的 ground truth boxes有更大的IOU值因此自定义的距离度量公式为
在这里插入图片描述
到聚类中心的距离越小越好但IOU值是越大越好所以使用 1 - IOU这样就保证距离越小IOU值越大。

YOLOv2采用5种 Anchor 比 Faster R-CNN 采用9种 Anchor 得到的平均 IOU 还略高并且当 YOLOv2 采用9种时平均 IOU 有显著提高。说明 K-means 方法的生成的Anchor boxes 更具有代表性。为了权衡精确度和速度的开销最终选择K=5。

Fine-Grained Features
细粒度特征可理解为不同层之间的特征融合。YOLOv2通过添加一个Passthrough Layer把高分辨率的浅层特征连接到低分辨率的深层特征把特征堆积在不同Channel中而后进行融合和检测。具体操作是先获取前层的26×26的特征图将其同最后输出的13×13的特征图进行连接而后输入检测器进行检测而在YOLOv1中网络的FC层起到了全局特征融合的作用以此来提高对小目标的检测能力。

Passthrough层与ResNet网络的shortcut类似以前面更高分辨率的特征图为输入然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍passthrough层抽取前面层的每个2×2的局部区域然后将其转化为channel维度对于26×26×512的特征图经Passthrough层处理之后就变成了13×13×2048的新特征图特征图大小降低4倍而channles增加4倍这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072的特征图然后在此特征图基础上卷积做预测。示意图如下
在这里插入图片描述

Yolov2总结

在这里插入图片描述

YOLO V3

在 YOLOv2 的基础上做了一些改进

  • 特征提取部分采用darknet-53网络结构代替原来的darknet-19
  • 利用特征金字塔网络结构实现了多尺度检测
  • 分类方法使用逻辑回归代替了softmax在兼顾实时性的同时保证了目标检测的准确性。

从YOLOv1到YOLOv3每一代性能的提升都与backbone骨干网络的改进密切相关。在YOLOv3中不仅提供了darknet-53还提供了轻量级的tiny-darknet。

Yolov3网络结构

在这里插入图片描述
Darknet-53
主要由1×1和3×3的卷积层组成每个卷积层之后包含一个批量归一化层和一个Leaky ReLU加入这两个部分的目的是为了防止过拟合。卷积层、批量归一化层以及Leaky ReLU共同组成Darknet-53中的基本卷积单元DBL。因为在Darknet-53中共包含53个这样的DBL所以称其为Darknet-53。
在这里插入图片描述
名词解释
DBL 一个卷积层、一个批量归一化层和一个Leaky ReLU组成的基本卷积单元。
res unit 输入通过两个DBL后再与原输入进行add这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层的特征同时避免出现梯度消失或爆炸。
resn 其中的n表示n个res unit所以 resn = Zero Padding + DBL + n × res unit 。
concat 将darknet-53的中间层和后面的某一层的上采样进行张量拼接达到多尺度特征融合的目的。这与残差层的add操作是不一样的拼接会扩充张量的维度而add直接相加不会导致张量维度的改变。
Y1、Y2、Y3 分别表示YOLOv3三种尺度的输出。

YOLO V4

YOLOv4对深度学习中一些常用Tricks进行了大量的测试最终选择了这些有用的TricksWRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。YOLOv4在传统的YOLO基础上加入了这些实用的技巧实现了检测速度和精度的最佳权衡。
YOLOv4的独到之处在于

  • 是一个高效而强大的目标检测网咯。它使我们每个人都可以使用 GTX 1080Ti 或 2080Ti 的GPU来训练一个超快速和精确的目标检测器。这对于买不起高性能显卡的我们来说简直是个福音
    在论文中验证了大量先进的技巧对目标检测性能的影响真的是非常良心!
  • 对当前先进的目标检测方法进行了改进使之更有效并且更适合在单GPU上训练这些改进包括CBN、PAN、SAM等。

Yolov4网络结构

YOLOv4 = CSPDarknet53主干 + SPP附加模块颈 + PANet路径聚合颈 + YOLOv3头部
在这里插入图片描述

在这里插入图片描述
CSPDarknet53
在YOLOv4中将CSPDarknet53(Cross Stage Partial Darknet53)作为主干网络。解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题, 有效缓解梯度消失问题,将梯度的变化从头到尾地集成到特征图中因此减少了模型的参数量和FLOPS数值既保证了推理速度和准确率又减小了模型尺寸。
为了增大感受野作者还使用了SPP-block使用PANet代替FPN进行参数聚合以适用于不同level的目标检测。
SPP结构
SPP-Net全称Spatial Pyramid Pooling Networks(空间金字塔池化网络)当时主要是用来解决不同尺寸的特征图如何进入全连接层的直接看下图下图中对任意尺寸的特征图直接进行固定尺寸的池化来得到固定数量的特征。
在这里插入图片描述
如上图以3个尺寸的池化为例对特征图进行一个最大值池化即一张特征图得取其最大值得到1d(d是特征图的维度)个特征对特征图进行网格划分为2x2的网格然后对每个网格进行最大值池化那么得到4d个特征同样对特征图进行网格划分为4x4个网格对每个网格进行最大值池化得到16*d个特征。 接着将每个池化得到的特征合起来即得到固定长度的特征个数特征图的维度是固定的接着就可以输入到全连接层中进行训练网络了。用到这里是为了增加感受野。
PAN结构
PANet(Path Aggregation Network)代替FPN进行参数聚合以适用于不同level的目标检测, 先进行自顶向下特征融合再进行自底向上的特征融合。PANet论文中融合的时候使用的方法是AdditionYOLOv4算法将融合的方法由加法改为Concatenation。如下图
在这里插入图片描述

YOLOv4 BackBone训练策略

数据增强

1.CutMix
CutMix的处理方式也比较简单同样也是对一对图片做操作简单讲就是随机生成一个裁剪框Box,裁剪掉A图的相应位置然后用B图片相应位置的ROI放到A图中被裁剪的区域形成新的样本ground truth标签会根据patch的面积按比例进行调整比如0.6像狗0.4像猫计算损失时同样采用加权求和的方式进行求解。这里借CutMix的地方顺带说下几种类似的增强方式无、Mixup、Cutout、CutMix
在这里插入图片描述
CutMix的增强方式在三个数据集上的表现都是最优的。其中Mixup是直接求和两张图如同附身鬼影一样模型很难学到准确的特征图响应分布。Cutout是直接去除图像的一个区域这迫使模型在进行分类时不能对特定的特征过于自信。然而图像的一部分充满了无用的信息这是一种浪费。在CutMix中将图像的一部分剪切并粘贴到另一个图像上,使得模型更容易区分异类。

2.Mosaic
Mosaic数据增强是参考CutMix数据增强理论上类似。区别在于Mosaic是一种将4张训练图像合并成一张进行训练的数据增强方法(而不是CutMix中的2张)。这增强了对正常背景(context)之外的对象的检测丰富检测物体的背景。此外每个小批包含一个大的变化图像(4倍)因此减少了估计均值和方差的时需要大mini-batch的要求降低了训练成本。如下图
在这里插入图片描述

DropBlock正则化

正则化技术有助于避免数据科学专业人员面临的最常见的问题即过拟合。对于正则化已经提出了几种方法如L1和L2正则化、Dropout、Early Stopping和数据增强。这里YOLOv4用了DropBlock正则化的方法。

DropBlock方法的引入是为了克服Dropout随机丢弃特征的主要缺点Dropout被证明是全连接网络的有效策略但在特征空间相关的卷积层中效果不佳。DropBlock技术在称为块的相邻相关区域中丢弃特征。这样既可以实现生成更简单模型的目的又可以在每次训练迭代中引入学习部分网络权值的概念对权值矩阵进行补偿从而减少过拟合。如下图
在这里插入图片描述

YOLOv4 BackBone推理策略

Mish激活函数

对激活函数的研究一直没有停止过ReLU还是统治着深度学习的激活函数不过这种情况有可能会被Mish改变。Mish是另一个与ReLU和Swish非常相似的激活函数。正如论文所宣称的那样Mish可以在不同数据集的许多深度网络中胜过它们。公式如下
在这里插入图片描述
Mish是一个平滑的曲线平滑的激活函数允许更好的信息深入神经网络从而得到更好的准确性和泛化在负值的时候并不是完全截断允许比较小的负梯度流入。实验中随着层深的增加ReLU激活函数精度迅速下降而Mish激活函数在训练稳定性、平均准确率(1%-2.8%)、峰值准确率(1.2% - 3.6%)等方面都有全面的提高。如下图
在这里插入图片描述

MiWRC策略

MiWRC是Multi-input weighted residual connections的简称 在BiFPN中提出了用MiWRC来执行标尺度级重加权添加不同尺度的特征映射。我们已经知道FPN和PAN作为例子。下面的图(d)显示了另一种被称为BiFPN的neck设计根据BiFPN的论文该设计具有更好的准确性和效率权衡。
在这里插入图片描述
上图中 (a)FPN引入自顶向下的路径将多尺度特征从3级融合到7级(P3-P7)(b)PANET在FPN之上增加一个额外的自下而上的路径©NAS-FPN使用神经网络搜索找到一个不规则的特征拓扑网络然后重复应用同一块拓扑结构(d)是这里的BiFPN具有更好的准确性和效率权衡。将该neck放到整个整个网络的连接中如下图
在这里插入图片描述

YOLOv4 检测头训练策略

CIoU-loss

损失函数给出了如何调整权重以降低loss。所以在我们做出错误预测的情况下我们期望它能给我们指明前进的方向。但如果使用IoU考虑两个预测都不与ground truth重叠那么IoU损失函数不能告诉哪一个是更好的或者哪个更接近ground truth。这里顺带看下常用的几种loss的形式如下
1.经典IoU loss
IoU算法是使用最广泛的算法大部分的检测算法都是使用的这个算法。
在这里插入图片描述在这里插入图片描述
可以看到IOU的loss其实很简单主要是交集/并集但其实也存在两个问题。
在这里插入图片描述
问题1即状态1的情况当预测框和目标框不相交时IOU=0无法反应两个框距离的远近此时损失函数不可导IOU_Loss无法优化两个框不相交的情况。
问题2即状态2和状态3的情况当两个预测框大小相同两个IOU也相同IOU_Loss无法区分两者相交情况的不同。
因此2019年出现了GIOU_Loss来进行改进。
2. GIoUGeneralized IoU
GIoU考虑到当检测框和真实框没有出现重叠的时候IoU的loss都是一样的因此GIoU就加入了C检测框C检测框是包含了检测框和真实框的最小矩形框这样就可以解决检测框和真实框没有重叠的问题。其中C是指能包含predict box和Ground Truth box的最小box。
在这里插入图片描述
可以看到上图GIOU_Loss中增加了相交尺度的衡量方式缓解了单纯IOU_Loss时的尴尬。但为什么仅仅说缓解呢因为还存在一种不足
在这里插入图片描述
问题状态1、2、3都是预测框在目标框内部且预测框大小一致的情况这时预测框和目标框的差集都是相同的因此这三种状态的GIOU值也都是相同的这时GIOU退化成了IOU无法区分相对位置关系。
基于这个问题2020年的AAAI又提出了DIOU_Loss。
3.DIoUDistance IoU
好的目标框回归函数应该考虑三个重要几何因素重叠面积、中心点距离长宽比。针对IOU和GIOU存在的问题作者从两个方面进行考虑
(1)如何最小化预测框和目标框之间的归一化距离
(2)如何在预测框和目标框重叠时回归的更准确
针对第一个问题提出了DIOU_LossDistance_IOU_Loss在这里插入图片描述
DIOU_Loss考虑了重叠面积和中心点距离当目标框包裹预测框的时候直接度量2个框的距离因此DIOU_Loss收敛的更快。
但就像前面好的目标框回归函数所说的没有考虑到长宽比。
在这里插入图片描述
比如上面三种情况目标框包裹预测框本来DIOU_Loss可以起作用。但预测框的中心点的位置都是一样的因此按照DIOU_Loss的计算公式三者的值都是相同的。针对这个问题又提出了CIOU_Loss
4.CIOU_Loss
CIOU_Loss和DIOU_Loss前面的公式都是一样的不过在此基础上还增加了一个影响因子将预测框和目标框的长宽比都考虑了进去。
在这里插入图片描述
其中v是衡量长宽比一致性的参数我们也可以定义为
在这里插入图片描述
这样CIOU_Loss就将目标框回归函数应该考虑三个重要几何因素重叠面积、中心点距离长宽比全都考虑进去了。

再来综合的看下各个Loss函数的不同点
IOU_Loss主要考虑检测框和目标框重叠面积。
GIOU_Loss在IOU的基础上解决边界框不重合时的问题。
DIOU_Loss在IOU和GIOU的基础上考虑边界框中心点距离的信息。
CIOU_Loss在DIOU的基础上考虑边界框宽高比的尺度信息。
YOLOv4中采用了CIOU_Loss的回归方式使得预测框回归的速度和精度更高一些。

CmBN策略

BN就是仅仅利用当前迭代时刻信息进行norm而CBN在计算当前时刻统计量时候会考虑前k个时刻统计量从而实现扩大batch size操作。同时作者指出CBN操作不会引入比较大的内存开销训练速度不会影响很多但是训练时候会慢一些比GN还慢。

CmBN是CBN的改进版本其把大batch内部的4个mini batch当做一个整体对外隔离。CBN在第t时刻也会考虑前3个时刻的统计量进行汇合而CmBN操作不会不再滑动cross,其仅仅在mini batch内部进行汇合操作保持BN一个batch更新一次可训练参数。
在这里插入图片描述
BN无论每个batch被分割为多少个mini batch其算法就是在每个mini batch前向传播后统计当前的BN数据即每个神经元的期望和方差并进行NomalizationBN数据与其他mini batch的数据无关。
CBN每次iteration中的BN数据是其之前n次数据和当前数据的和对非当前batch统计的数据进行了补偿再参与计算用该累加值对当前的batch进行Nomalization。好处在于每个batch可以设置较小的size。
CmBN只在每个Batch内部使用CBN的方法个人理解如果每个Batch被分割为一个mini batch则其效果与BN一致若分割为多个mini batch则与CBN类似只是把mini batch当作batch进行计算其区别在于权重更新时间点不同同一个batch内权重参数一样因此计算不需要进行补偿。

自对抗训练(SAT)

SAT为一种新型数据增强方式。在第一阶段神经网络改变原始图像而不是网络权值。通过这种方式神经网络对其自身进行一种对抗式的攻击改变原始图像制造图像上没有目标的假象。在第二阶段训练神经网络对修改后的图像进行正常的目标检测。
在这里插入图片描述

Self-Adversarial Training是在一定程度上抵抗对抗攻击的数据增强技术。CNN计算出Loss, 然后通过反向传播改变图片信息形成图片上没有目标的假象然后对修改后的图像进行正常的目标检测。需要注意的是在SAT的反向传播的过程中是不需要改变网络权值的。 使用对抗生成可以改善学习的决策边界中的薄弱环节提高模型的鲁棒性。因此这种数据增强方式被越来越多的对象检测框架运用。

余弦模拟退火

余弦调度会根据一个余弦函数来调整学习率。首先较大的学习率会以较慢的速度减小。然后在中途时学习的减小速度会变快最后学习率的减小速度又会变得很慢。
在这里插入图片描述
这张图展示了学习率衰减的方式下图中还应用了学习率预热及其对mAP的影响。可能看起来并不明显这种新的调度方法的进展更为稳定而不是在停滞一段时间后又取得进展。
在这里插入图片描述

YOLOv4 检测头推理策略

SAM模块

注意力机制在DL设计中被广泛采用。在SAM中最大值池化和平均池化分别用于输入feature map创建两组feature map。结果被输入到一个卷积层接着是一个Sigmoid函数来创建空间注意力。
在这里插入图片描述
将空间注意掩模应用于输入特征输出精细的特征图.
在这里插入图片描述
在YOLOv4中使用修改后的SAM而不应用最大值池化和平均池化。
在这里插入图片描述

DIoU-NMS

NMS过滤掉预测相同对象的其他边界框并保留具有最高可信度的边界框。
在这里插入图片描述
DIoU(前面讨论过的) 被用作非最大值抑制(NMS)的一个因素。该方法在抑制冗余框的同时采用IoU和两个边界盒中心点之间的距离。这使得它在有遮挡的情况下更加健壮。

YOLO V5

在YOLOv4的基础上添加了一些新的改进思路使其速度与精度都得到了极大的性能提升。主要的改进思路如下所示

  • 输入端在模型训练阶段提出了一些改进思路主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放
  • 基准网络融合其它检测算法中的一些新思路主要包括Focus结构与CSP结构
  • Neck网络目标检测网络在BackBone与最后的Head输出层之间往往会插入一些层Yolov5中添加了FPN+PAN结构
  • Head输出层输出层的锚框机制与YOLOv4相同主要改进的是训练时的损失函数GIOU_Loss以及预测框筛选的DIOU_nms。

YOLOv5网络结构

在这里插入图片描述
基础组件

  • CBL-CBL模块由Conv+BN+Leaky_relu激活函数组成如上图中的模块1所示。
  • Res unit-借鉴ResNet网络中的残差结构用来构建深层网络CBM是残差模块中的子模块如上图中的模块2所示。
  • CSP1_X-借鉴CSPNet网络结构该模块由CBL模块、Res unint模块以及卷积层、Concate组成而成如上图中的模块3所示。
  • CSP2_X-借鉴CSPNet网络结构该模块由卷积层和X个Res unint模块Concate组成而成如上图中的模块4所示。
  • Focus-如上图中的模块5所示Focus结构首先将多个slice结果Concat起来然后将其送入CBL模块中。
  • SPP-采用1×1、5×5、9×9和13×13的最大池化方式进行多尺度特征融合如上图中的模块6所示。

YOLOv5算法具有4个版本具体包括YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种本文重点讲解YOLOv5s其它的版本都在该版本的基础上对网络进行加深与加宽。

  • 输入端输入端表示输入的图片。该网络的输入图像大小为608*608该阶段通常包含一个图像预处理阶段即将输入图像缩放到网络的输入大小并进行归一化等操作。在网络训练阶段YOLOv5使用Mosaic数据增强操作提升模型的训练速度和网络的精度并提出了一种自适应锚框计算与自适应图片缩放方法。
  • 基准网络基准网络通常是一些性能优异的分类器种的网络该模块用来提取一些通用的特征表示。YOLOv5中不仅使用了CSPDarknet53结构而且使用了Focus结构作为基准网络。
  • Neck网络Neck网络通常位于基准网络和头网络的中间位置利用它可以进一步提升特征的多样性及鲁棒性。虽然YOLOv5同样用到了SPP模块、FPN+PAN模块但是实现的细节有些不同。
  • Head输出端Head用来完成目标检测结果的输出。针对不同的检测算法输出端的分支个数不尽相同通常包含一个分类分支和一个回归分支。YOLOv4利用GIOU_Loss来代替Smooth L1 Loss函数从而进一步提升算法的检测精度。

输入端细节详解

  • Mosaic数据增强-YOLOv5中在训练模型阶段仍然使用了Mosaic数据增强方法该算法是在CutMix数据增强方法的基础上改进而来的。CutMix仅仅利用了两张图片进行拼接而Mosaic数据增强方法则采用了4张图片并且按照随机缩放、随机裁剪和随机排布的方式进行拼接而成具体的效果如下图所示。这种增强方法可以将几张图片组合成一张这样不仅可以丰富数据集的同时极大的提升网络的训练速度而且可以降低模型的内存需求。
    在这里插入图片描述
  • 自适应锚框计算-在YOLOv5系列算法中针对不同的数据集都需要设定特定长宽的锚点框。在网络训练阶段模型在初始锚点框的基础上输出对应的预测框计算其与GT框之间的差距并执行反向更新操作从而更新整个网络的参数因此设定初始锚点框也是比较关键的一环。在YOLOv3和YOLOv4检测算法中训练不同的数据集时都是通过单独的程序运行来获得初始锚点框。YOLOv5中将此功能嵌入到代码中每次训练时根据数据集的名称自适应的计算出最佳的锚点框用户可以根据自己的需求将功能关闭或者打开具体的指令为parser.add_argument(’–noautoanchor’, action=‘store_ true’, help=‘disable autoanchor check’)如果需要打开只需要在训练代码时增加–noautoanch or选项即可。
  • 自适应图片缩放-针对不同的目标检测算法而言我们通常需要执行图片缩放操作即将原始的输入图片缩放到一个固定的尺寸再将其送入检测网络中。YOLO系列算法中常用的尺寸包括416*416608 *608等尺寸。原始的缩放方法存在着一些问题由于在实际的使用中的很多图片的长宽比不同因此缩放填充之后两端的黑边大小都不相同然而如果填充的过多则会存在大量的信息冗余从而影响整个算法的推理速度。为了进一步提升YOLOv5算法的推理速度该算法提出一种方法能够自适应的添加最少的黑边到缩放之后的图片中。

基准网络细节详解

  • Focus结构-该结构的主要思想是通过slice操作来对输入图片进行裁剪。如下图所示原始输入图片大小为6086083经过Slice与Concat操作之后输出一个30430412的特征映射接着经过一个通道个数为32的Conv层该通道个数仅仅针对的是YOLOv5s结构其它结构会有相应的变化输出一个30430432大小的特征映射。
    在这里插入图片描述
  • CSP结构-YOLOv4网络结构中借鉴了CSPNet的设计思路仅仅在主干网络中设计了CSP结构。而YOLOv5中设计了两种CSP结构以YOLOv5s网络为例CSP1_X结构应用于Backbone主干网络中另一种CSP2_X结构则应用于Neck网络中。CSP1_X与CSP2_X模块的实现细节如3.1所示。

Neck网络细节详解

  • FPN+PAN-YOLOv5的Neck网络仍然使用了FPN+PAN结构但是在它的基础上做了一些改进操作YOLOv4的Neck结构中采用的都是普通的卷积操作。而YOLOv5的Neck网络中采用借鉴CSPnet设计的CSP2结构从而加强网络特征融合能力。下图展示了YOLOv4与YOLOv5的Neck网络的具体细节通过比较我们可以发现1灰色区域表示第1个不同点YOLOv5不仅利用CSP2_\1结构代替部分CBL模块而且去掉了下方的CBL模块2绿色区域表示第2个不同点YOLOv5不仅将Concat操作之后的CBL模块更换为CSP2_1模块而且更换了另外一个CBL模块的位置3蓝色区域表示第3个不同点YOLOv5中将原始的CBL模块更换为CSP2_1模块。
  • 在这里插入图片描述
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6