当前位置:   article > 正文

三万字硬核详解:yolov1、yolov2、yolov3、yolov4、yolov5、yolov7_yolov各个版本的功能

yolov各个版本的功能

文章目录

YOLO的每个版本都是基于前一版本进行更新,故需要先理解初始版本。

前言:评价指标

(1)指标:IOU

在这里插入图片描述

(2)指标:Precision(精度)、Recall(召回率)

在这里插入图片描述

(3)指标:AP + mAP

mAP是综合衡量Precision与Recall的一种指标值,理论上mAP的最优值=1。

举例理解:在所有预测图片中,取某一个类别的P-R曲线图

  • P-R曲线图:以Recall为横轴,Precision为纵轴,并将Precision[0, 1]范围内的每个点对应recall的值连接起来形成一条折线。如左图的蓝色曲线
    曲线特点:随着recall值增加,precision值会逐渐降低,最终在某个值附近上下波动。
  • AP(Average Precison)
    (1)以y = precision为平行线,从上向下,取P-R曲线图在每个y值对应的最大值,然后连接形成阶梯状曲线。如左图的红色曲线
    (2)阶梯曲线与 x 轴围成的面积之和就是AP值(A1+A2+A3+A4=AP),如右图的四个长方形。其中:1/2/3/4表示在四个不同的准确度下。
  • mAP(mean Average Precision): 对所有类别对应的AP值进行求和取均值,就得到整个数据集上的mAP。

在这里插入图片描述

一、开山之作:yolov1

论文地址:You Only Look Once: Unified, Real-Time Object Detection
官方代码:https://github.com/pjreddie/darknet

(1.1)简介

yolov之前,双阶段(two-stage)的R-CNN系列算法在目标检测领域独占鳌头。先利用RPN(Region Proposal CNN)基于候选框提取的CNN网络生成感兴趣区域,再对该区域进行分类与位置回归。

  • 优缺点:提升了精度,但限制了检测速度。

2016年,单阶段(one-stage)的YOLO(You Only Look Once) 初出茅庐。利用CNN卷积神经网络进行特征提取,并识别种类和位置。

  • 优缺点:检测速度很快,但精度明显下降。

在这里插入图片描述
在这里插入图片描述
备注FPS是指视频每秒传输的帧数。例如:FPS=45 表示为45帧/秒。帧数愈多,所显示的动作就会越流畅。

❤️ yolo核心思想:把目标检测转变成一个回归问题。将整个图像作为网络的输入,仅仅经过一个神经网络,得到边界框的位置及其所属的类别。

(1.2)网络模型

输入图像尺寸:448×448(固定值,与全连接层的输出大小有关),经过24个卷积与2个全连接层后,最后输出的特征图为7x7x30

  • 3x3的卷积后接1x1卷积,既降低了计算量,也提升了模型的非线性能力。
  • 除最后一层使用线性激活函数外,其余层都使用Leaky ReLU激活函数。
  • 在训练中使用Dropout数据增强的方法来防止过拟合。

训练时的图像尺寸:224×224;测试时的图像尺寸:448×448。 原因:224×224×3 相比448×448×3相差四倍,其像素点大幅度降低,减少对计算机的性能要求。
在这里插入图片描述

1.2.1、最大创新:7x7x30特征图

在整张图中,共预测7x7x2=98个边框,每个边框的大小与位置都不相同。

  • 分类类别:由于PASCAL VOC数据集共有20个物体类别,因此预测的每个边框都会分别得到20个类别的概率值。
  • 置信度(confidence):表示当前网格是否包含目标物体(前景、背景),占比越多值越大。两个边框得到2(1 + 1)个置信度预测值。
  • 边框位置(x, y, w, h):每个边框需要预测四个值:中心坐标(x,y)、宽w、高h。两个边框得到8(4 + 4)个预测值。

将输入图像划分为7x7的网格,每个网格预测2个边框(bounding box),每个边框得到五个值(x,y,w,h,confidence)。论文采用20分类,故最后得到通道数为2*5+20=30,代表每个网格预测30个特征值。

在这里插入图片描述

1.2.2、连续使用两个全连接层的作用

第一个全连接层作用:将卷积得到的分布式特征映射到样本标记空间。即把该输入图像的所有卷积特征整合到一起。
第二个全连接层作用:将所有神经元得到的卷积特征进行维度转换,最后得到与目标检测网络输出维度相同的维度。
在这里插入图片描述
【小问题思考】两个全连接层连用 1x1卷积作用

(1.3)损失函数(位置误差 + 置信度误差obj + 置信度误差noobj + 分类误差)

通过卷积神经网络得到每个边框的预测值后,需要确定每个边框对应的是前景框(真实物体)还是背景框(无关物体),即区分正样本、负样本

  • 正样本:将与真实物体对应IoU最大值的边框设为正样本,每个边框的置信度都为1。
  • 负样本:其余边框为负样本,置信度全为0。备注:负样本没有类别损失与边框位置损失,只有置信度损失。

在这里插入图片描述
损失函数由 4 个部分组成,均使用均方差损失。参数如下:共有 S2 个区域(7x7=49),B表示每个网格有2个边框,obj表示对应真实物体,noobj表示没有对应真实物体。

  • 采用NMS非极大值抑制,提取每个网格预测的两个边框中,IoU最大的边框
    • (1)位置误差:计算边框的预测值与真实值的位置误差。
      前一个部分计算正样中心点坐标的损失,前一个部分计算正样本宽和高的损失
      其中:λcoord用于调整位置误差的权重。由于不同物体的尺寸大小对宽高差值影响极大,因此对w和h进行平方根处理,降低对物体尺度的敏感度,强化小物体的损失权重
    • (2)置信度误差(obj):前景误差:计算边框与正样本的误差。
      若边框的IoU大于置信度阈值,则该边界框属于前景。若存在多个满足要求的边框,则进行非极大值抑制。我们希望前景框的误差趋近于1。
    • (3)置信度误差(noobj):背景误差:计算边框与负样本的误差。
      若边框的IoU小于置信度阈值或IoU=0,则该边界框属于背景我们希望背景框的误差趋近于0。
      其中:λnoobj用于调整负样本置信度损失的权重(默认为0.5)。由于背景框的数量远远大于前景框,故对背景框误差设置阈值(如:0.1),降低背景框误差对损失函数的影响
    • (4)分类误差:计算每个边框得到的20个分类概率值与正样本的误差。

(1.4)NMS非极大值抑制

非极大值抑制可以用来修正多重检测目标,能增加2~3%的mAP。
即在检测结果中,若存在多个检测框的IoU大于置信度阈值,则通过NMS只提取其中最大IoU值对应的一个框。如下图:五个框中只取最大值(置信度=0.98)的预测框。
在这里插入图片描述

(1.5)性能表现

优点

  • (1)YOLO检测速度非常快。
    • 标准版本:可以每秒处理 45 帧图像
    • 极速版本:可以每秒处理 150 帧图像,完全满足视频的实时检测要求;
    • 欠实时系统:在保证准确率的情况下,速度也快于其他方法。
  • (2)YOLO 实时检测的平均精度是其他实时监测系统的两倍。
  • (3)迁移能力强,能运用到其他的新的领域(比如:艺术品目标检测)。

缺点

  • (1)对于小目标以及重叠目标,检测效果不好
  • (2)由于没有类似于Anchor的先验框,对于新目标或宽高比例不常见的目标,检测效果不好
  • (2)在损失函数中,大目标的损失比小目标大,大目标与小目标的位置误差的损失权重相同,导致目标定位不准确

二、更快更强:yolov2

论文地址:YOLO9000: Better, Faster, Stronger
官方代码:http://pjreddie.com/darknet/yolo/

2017年,提出了yolov2和yolo9000,yolo9000能够实时检测超过9000种物体,主要检测网络还是yolov2。

  • yolov2的核心:主要解决yolov1召回率偏低以及定位精度不足的问题,但整体网络架构没有改变
  • yolov2的特点:相比其它检测器,速度更快、精度更高、可以适应多种尺寸的输入图像。

主要区别:
(1)yolov1是利用全连接层直接预测Bounding Box的坐标。yolov2借鉴了Faster R-CNN的思想,引入Anchor机制,并利用K-means聚类的方法在训练集中聚类计算出更好的Anchor模板,大大提高了算法的召回率;
(2)同时结合图像细粒度特征,将浅层特征与深层特征相连,有助于对小尺寸目标的检测。

(2.1)性能表现

yolov2相比v1提出了很多改进措施,随着添加每一步改进,mAP值持续上升。在这里插入图片描述

(2.2)网络模型(Darknet-19)

Darknet-19采用了19个卷积层,5个池化层。

  • (1)取消yolov1的两个全连接层
    yolov1基于全连接层直接预测 Bounding Boxes 的坐标值
    yolov2采用 Faster R-CNN 的方法,只用卷积层与 RPN(Region Proposal Network )来预测 Anchor Box 偏移量与置信度,而不是直接预测坐标值
  • (2)添加了五个最大池化层(2的5次方)
    最终输出图像尺寸:由输入图像(h,w)转换为(h / 32,w / 32)
  • (3)输入图像尺寸:由 yolov1 的 448×448 变为 yolov2 的 416×416。
    备注:(416/32=13、448/32=14)。因为我们希望最后得到的是奇数值,有实际的中心点。最终网格尺寸为13×13,与yolov1的7×7相比,可以预测更多的先验框。
  • (4)基于VGG的思想,大部分的卷积核都是3×3,一方面权重参数少,一方面感受野比较大;且采用降维的思想,将1×1的卷积核置于3×3之间,在保持整体网络结构的同时减少权重参数。并且每次池化后,下一层卷积核的通道数 = 池化输出的通道 × 2
  • (5)在网络模型的最后,增加了一个全局平均池化层
    在这里插入图片描述

Darknet-19 与 yolov1、VGG16网络的性能对比

  • (1)VGG-16: 大多数检测网络框架都是以VGG-16作为基础特征提取器。准确率高,但计算复杂度大,所以速度相对较慢。因此,YOLOv2的网络结构基于该方面进行改进。
  • (2)yolov1: 基于GoogLeNet的自定义网络,比VGG-16的速度快,但是精度稍不如VGG-16
  • (3)Darknet-19
    • 速度方面:处理一张图片仅需要55.8亿次运算,相比于VGG的306.9亿次,速度快了近6倍。
    • 精度方面:在ImageNet上的测试精度为:top1准确率为72.9%,top5准确率为91.2%。

(2.3)改进之处

(2.3.1)加入批标准化(Batch Normalization,BN)

最终约提升2%的mAP。
具体操作在每一个卷积层后面都加入BN,对数据进行预处理操作(如:统一格式、均衡化、去噪等)
优点:解决梯度消失和爆炸问题,起到一定的正则化效果(yolov2不再使用dropout),获得更好的收敛速度。

(2.3.2)使用高分辨率图像,微调分类模型。

最终约提升4%的mAP。
背景:yolov1训练时的分辨率:224×224;测试时:448×448。
具体操作:yolov2保持yolov1的操作不变,但在原训练的基础上又加上了(10个epoch)的448×448高分辨率样本进行微调,使网络特征逐渐适应 448×448 的分辨率;然后再使用 448×448 的样本进行测试,缓解了分辨率突然切换造成的影响。

(2.3.3)聚类提取先验框(Anchor Box)

最终约提升7%的recall达到88%,但降低了0.3%的mAP。
(1)❤️ yolov1边界框都是手工设定的,通过直接对边界框的(x,y,w,h)位置进行预测,方法简单但训练困难,很难收敛。
(2)❤️ Faster R-CNN共有9种先验框:分三个不同的scale(大中小),每个scale的(h,w)比例分为:1:1、1:2、2:1
在这里插入图片描述
(3)❤️ yolov2引入Anchor先验框机制 。但由于Faster R-CNN中先验框的大小和比例是按经验设定的,不具有很好的代表性。故yolov2对训练集中所有标注的边界框先进行聚类分析(比如:5类),然后获取每一类的中心值即实际的(w,h)比值作为先验框。该值与真实值更接近,使得网络在训练时更容易收敛。

备注1:yolov1将图像划分为7×7个网格,每个网格grid只预测2个边界框,共7×7×2=98个。
备注2:yolov2将图像划分为13×13个网格,每个网格grid只预测5个边界框,共13×13×5=845个。其中:在Faster R-CNN的9种先验框基础上,将所有的边界框13×13×9=1521进行K-means聚类,最终选择最优聚类参数:k = 5

基于自定义距离公式的K-means聚类方法
传统K-means聚类方法使用标准的欧氏距离,将导致大的box会比小的box产生更多的误差。而yolo的目的是使得先验框与真实框有更大的IOU值,故自定义距离公式

距离公式:计算每一个类别的中心值对应的先验框centroids与真实框box的距离。
如下图:IOU=(先验框与真实框的交集)除以(先验框与真实框的并集)。IOU越大,越相关,则距离越小;反之亦然。备注:数据均已采用批标准化处理。
在这里插入图片描述
左图: x轴表示Clusters聚类个数(K) 、y轴表示IOU均值、紫色与黑色分别表示两个不同的数据集(形状相似)。
结论:在综合考虑精确度和运算速度后,yolov2最终取k=5个先验框。
右图:k=5个先验框的图形化显示。

(2.3.4)相对偏移量计算 —— 在当前网格中进行相对位置的微调

yolov1:在当前先验框中,进行相对位置的微调。

  • 详细过程:已知先验框位置为(x, y, w, h),现在得到的预测边界框的偏移量为(tx, ty, tw, th),即系统判定需要在先验框位置的基础上进行相对位置的偏移,进而可以得到更真实的位置。故需要将预测的偏移量加到先验框中(x+tx, y+ty, w+tw, h+th)
  • 问题:由于模型刚开始训练时,网络参数都是随机初始化,虽然进行了批标准化但是参数的基数比较大,将导致预测的边界框加上偏移量之后到处乱飘。

yolov2:在当前网格中,进行相对位置的微调。
图中参数的详细说明如下:
(1)(Cx, Cy):表示当前网格的左上角位置坐标。
(2)(tx, ty, tw, th):表示预测结果在当前网格相对位置的偏移量。
(3) σ(tx):表示对漂移量 tx 取sigmoid函数,得到(0~1)之间的值。即把预测边框的蓝色中心点约束在蓝色背景的网格内。约束边框位置使得模型更容易学习,且预测更为稳定。
(4)e的tw次方:由于预测结果取的log()对数值,故计算位置时需要反log进行还原。
(5)(bx, by, bw, bh):表示当前预测结果在特征图位置(即预处理后得到的13×13网格)。
在这里插入图片描述

(2.3.5)Fine-Grained Features(细粒度特性)—— 提高对小目标的检测能力

背景Faster R-CNN共有9种先验框:分三个不同的scale(大中小),每个scale的(h,w)比例分为:1:1、1:2、2:1。
其中:小中大三种尺度的特征图 -> 对应大中小三种尺度的感受野 -> 对应大中小三种尺度的先验框
在这里插入图片描述
缺点:感受野越大,其在原图像中对应的特征图越大,导致其对小尺度目标不敏感

解决方法:对不同层的特征进行融合。

具体操作添加一个passthrough Layer提高对小目标的检测能力
(1)将高分辨率的浅层特征(26×26×512)进行拆分;
(2)叠加到低分辨率的深层特征(13×13×1024)中;
(3)然后进行特征融合(13×13×3072);
(4)最后再检测。
备注:在yolov1中,FC起到全局特征融合的作用。

在这里插入图片描述

(2.3.6)Multi-Scale多尺度检测(yolov2版) —— 尺度变换

背景:由于实际检测数据的输入图像尺寸都不相同,若都裁剪为相同大小,最后检测结果将有所下降。
限制

  • yolov2只有卷积层,故对输入图像尺寸没有限制。但有范围限制[320, 608]
  • yolov1有全连接层,故输入图像尺寸固定

具体操作训练模型每经过一定次数的迭代之后,可以进行输入图像尺度变换。如:每迭代100次,输入图像尺寸大小增加10%。

  • 备注1:输入图像尺寸必须可以被32整除。
  • 备注2:图像尺寸越大,耗时越长。

在这里插入图片描述

三、巅峰之作:yolov3

论文地址:YOLOv3: An Incremental Improvement
官网代码:https://github.com/yjh0410/yolov2-yolov3_PyTorch

yolov3主要针对小目标检测的不足之处做出改进

(3.1)性能表现

由图可得:yolov3的检测速度和mAP值都强高于其他方法。
参数解读:
(1)x轴表示预测一张图片所需要的时间;
(2)y轴为mAP;
(3)原点的x轴坐标为50
在这里插入图片描述

(3.2)网络模型(Darknet-53)

下面分两个部分详解:
(1)详解Darknet-53网络架构;
(2)Darknet-53在yolov3中的实际应用,并详解yolov3模型中的所有网络层。

  • Darknet-53网络架构;
    (1)由53个卷积层构成,包括1×1和3×3的卷积层卷积省时省力速度快效果好,对于分析物体特征最为有效。每个卷积层之后包含一个批量归一化层和一个Leaky ReLU,加入这两个部分的目的是为了防止过拟合
    (2)没有全连接层可以输入任意尺寸的图像
    (3)没有池化层。通过控制卷积层conv的步长stride达到下采样的效果。具体操作:需要下采样时stride=2;否则stride=1;
    (4)除此之外,Darknet-53中还使用了类似ResNet结构
    在这里插入图片描述
  • Darknet-53网络架构在yolov3中的实际应用,并详解yolov3模型中的所有网络层。
    在这里插入图片描述
    (1)DBL由一个卷积层、一个批量归一化层和一个Leaky ReLU组成的基本卷积单元在Darknet-53中,共有53个这样的DBL,所以称其为Darknet-53。
    (2)res unit(残差单元):输入图像经过两个DBL后,再与原输入进行特征add,得到与原图像大小维度相同的图像。
    残差单元的目的:使得网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。残差网络的特点:至少不比原来差。
    (3)res(n):表示n个res unit。计算公式:resn = Zero Padding + DBL + n × res unit 。
    (4)y1、y2、y3: 分别表示yolov3的三种不同尺度输出(分别对应:大中小感受野)。
    (5)concat1(拼接)(大中小感受野)将大感受野的特征图像进行上采样,得到与中感受野的特征图像相同大小,然后进行维度拼接,达到多尺度特征融合的目的。为了加强算法对小目标检测的精确度。
    (6)concat2(拼接): (大中小感受野)将中感受野的特征图像进行上采样,得到与小感受野的特征图像相同大小,然后进行维度拼接,达到多尺度特征融合的目的。 为了加强算法对小目标检测的精确度
    在这里插入图片描述

(3.3)改进之处

(3.3.1)Multi-Scale多尺度检测(yolov3版) —— 上采样+维度拼接

图像分辨率大小直接反映像素数量。分辨率越高,像素数量越多,对细节表现越丰富。

  • 前提:在目标检测中,语义信息主要用于区分前景(目标)和背景(非目标)。故不需要太多的信息,且分辨率大反而会降低语义信息。
  • 具体操作:在网络预测的最后某些层进行上采样+维度拼接操作。提高对小目标的检测效果
    (详细请看yolov3网络架构)

(3.3.2)多标签分类:softmax()改成logistic()

yolov2的单标签分类:softmax()改进为yolov3的多标签分类:logistic()
具体形式logistic()通过对每个类别都进行二分类,以实现多标签分类。使用sigmoid函数将特征图的预测结果约束在[0, 1]之间,若有一个或多个值大于设定阈值,就认定该目标框所对应的目标属于该类别。多个值称为多标签对象。(如:一个人有woman、person、地球人等多个标签)
在这里插入图片描述

四、大神接棒:yolov4

论文地址:YOLOv4: Optimal Speed and Accuracy of Object Detection
官网代码:https://github.com/AlexeyAB/darknet

yolov3发布至今,衍生了各式各样能够提高检测精度的技巧(tricks)。
核心思想yolov4筛选了其中一些tricks,并加以组合,以及适当创新,形成了yolov4算法,并实现了速度和精度的完美平衡。
备注:虽然有许多技巧可以提高卷积神经网络CNN的准确性,但是某些技巧仅适合在某些模型上运行,或者仅在某些问题上运行,或者仅在小型数据集上运行。
主要调优手段加权残差连接(WRC)跨阶段部分连接(CSP)跨小批量标准化(CmBN)自对抗训练(SAT)Mish激活马赛克数据增强CmBNDropBlock正则化CIoU Loss等等。

(4.1)性能表现

经过一系列的堆料,最终实现了目前最优的实验结果:43.5%的AP(在Tesla V100上,MS COCO数据集的实时速度约为65FPS)。
在这里插入图片描述

(4.2)网络模型(CSPDarknet53)

  • CSPDarknet53网络在yolov4中的实际应用

在这里插入图片描述

yolov4的CSPDarknet53yolov3的Darknet-53相比,主要区别:

  • (1)将原来的Darknet53与CSPNet进行结合,形成Backbone网络。

  • (2)采用SPPNet适应不同尺寸的输入图像大小,且可以增大感受野;

  • (3)采用SAM引入空间注意力机制;

  • (4)采用PANet充分利用了特征融合;

  • (5)激活函数由MIsh替换Leaky ReLU; 在yolov3中,每个卷积层之后包含一个批归一化层和一个Leaky ReLU。而在yolov4的主干网络CSPDarknet53中,使用Mish替换原来的Leaky ReLU。

  • CSPDarknet53网络架构

在这里插入图片描述

(4.2.1)跨阶段部分网络(Cross Stage Partial Networks,CSPNet)

  • 背景: 2019年,Chien-Yao Wang等人提出CSPNet,主要用来解决网络优化中的重复梯度信息问题,在ImageNet dataset和MS COCO数据集上有很好的测试效果。
  • 特点:易于实现,在ResNet、ResNeXt和DenseNet网络结构上都能通用。
  • 目的: 实现更丰富的梯度组合,同时减少计算量。

具体方式: 将基本层的特征图分成两部分:11、主干部分继续堆叠原来的残差块;22、支路部分则相当于一个残差边,经过少量处理直接连接到最后。
在这里插入图片描述

(4.2.2)空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)

论文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

yolov1背景:yolov1训练时的分辨率:224×224;测试时:448×448。
yolov2背景:yolov2保持yolov1的操作不变,但在原训练的基础上又加上了(10个epoch)的448×448高分辨率样本进行微调,使网络特征逐渐适应 448×448 的分辨率;然后再使用 448×448 的样本进行测试,缓解了分辨率突然切换造成的影响。

目的通过最大池化将不同尺寸的输入图像变得尺寸一致,使得输入图像不再限制于固定尺寸。
优点:增大感受野。

下图是经典的空间金字塔池化层(SPP)。在这里插入图片描述

(4.2.3)空间注意力机制(Spatial Attention Module,SAM)

具体方式: yolov4采用改进的SAM方法
优化历程: CBAM(Convolutional Block AM) -> SAM(Spatial Attention Module) -> 改进的SAM
优化原因:
(1)CBAM计算比较复杂且耗时,而yolo的出发点是速度,故只计算空间位置的注意力机制。
(2)常规的SAM最大池化层和平均池化层分别作用于输入的feature map,得到两组shape相同的feature map,再将结果输入到一个卷积层。过程过于复杂,yolo采取直接卷积进行简化。

  • CBAM与SAM的区别
  • CBAM:特征图注意力机制(Channel Attention Module)在Channel维度上,对每一个特征图(channel)加一个权重,然后通过sigmoid得到对应的概率值,最后乘上输入图像,相当于对输入图像的特征图进行加权,即注意力。❤️如:32×32×256,对256个通道进行加权。
  • SAM:空间注意力机制(Spatial Attention Module)在Spatial维度上,对每一个空间位置(Spatial)加一个权重,然后通过sigmoid得到对应的概率值,最后乘上输入图像,相当于对输入图像的所有位置特征进行加权,即注意力。❤️如:32×32×256,对任意空间位置进行加权。

在这里插入图片描述

  • SAM与改进的SAM的区别

在这里插入图片描述

(4.2.4)路径聚合网络(Path Aggregation Network,PANet)

论文地址(FPNet):Feature Pyramid Networks for Object Detection
论文地址(PANet):Path Aggregation Network for Instance Segmentation

背景: PANet发表于CVPR2018,其是COCO2017实例分割比赛的冠军,也是目标检测比赛的第二名。
具体方式: yolov4采用改进的PANet方法
优化历程: FPNet(Feature Pyramid Networks) -> PANet(Path Aggregation Network) -> 改进的PAN
优化原因:

  • (1)FPNet网络采取自上而下的方式,将高层特征逐层与中高层、中层、中底层、低层特征进行融合。缺点是无法自下而上融合,而PANet的优化了该部分不足,详见示意图的(b)部分。
  • (2)PANet采用特征相加的融合方式,而yolo采用特征拼接的融合方式。加法可以得到一个加强版的特征图,但特征权重不大于1,而拼接可能得到大于1的特征图。

FPNet示意图
在这里插入图片描述

PANet示意图在这里插入图片描述
图中分为四个部分:

  • (a)FPNet:通过 融合高层特征 来提升目标检测的效果。
  • (b)Bottom-up Path Augmentation:通过 融合低层特征(边缘形状等)来提升目标检测的效果。
  • (c)Adaptive Feature Pooling:采用 拼接特征融合。详见下图:拼接相比加法,特征更明显,可以提高检测效果。
  • (d)Fully-connected Fusion

在这里插入图片描述

(4.2.5)Mish激活函数

论文地址:Mish: A Self Regularized Non-Monotonic Activation Function

  • 特点:Mish在负值的时候并不是完全截断,允许比较小的负梯度流入。
  • 结论:网络层数越多,ReLU激活函数精度迅速下降,而Mish激活函数在训练稳定性、平均准确率(1%-2.8%)、峰值准确率(1.2% - 3.6%)等方面都有全面的提高。
    22个激活函数

在这里插入图片描述

(4.3)改进之处

BackBone训练策略:数据增强、自对抗训练、DropBlock正则化、类标签平滑、CIoU损失函数、DIoU-NMS等。

(4.3.1)Mosaic数据增强 + CutMix数据增强

CutMix论文: https://arxiv.org/pdf/1905.04899v2.pdf

最大特点:使得yolov4只通过单CPU就能完成训练,不用再担心设备问题。
具体方式基于CutMix方法对所有图像进行处理,然后基于Mosaic方法随机取四张图像拼接为一张图像。CutMix方法的详细过程如下:
在这里插入图片描述
由图可得(左):CutMix表现最优。

  • (1)ResNet-50:采用常规的数据增强方法。如:调整亮度、饱和度、对比度;随机缩放、旋转、翻转等。
  • (2)Mixup:将猫狗两张图像进行图像融合,其中狗和猫的权重参数都为0.5,故标签概率值都为0.5。
  • (3)Cutout:随机删除/遮挡一个区域。
  • (4)CutMix随机删除/遮挡一个区域,并将图像A的一部分(patch)粘贴到图像B上,分类概率按A与B的patch面积比例进行分配。如:将狗头替换为猫头,其中狗和猫的权重参数分别为0.6、0.4,故标签softmax的概率值分别为0.6、0.4。

备注1:softmax能够得到当前输入属于各个类别的概率。
备注2:标签(分类结果)会根据A与B的patch面积比例进行分配,且采用加权求和的方式计算损失。
在这里插入图片描述

数据增强的其余方法扩展:在这里插入图片描述

(4.3.2)自对抗训练(Self-Adversarial Training,SAT)

  • 在第一阶段:在原始图像的基础上,添加噪音并设置权重阈值,让神经网络对自身进行对抗性攻击训练。如下图:

在这里插入图片描述

  • 在第二阶段:用正常的方法训练神经网络去检测目标。
    备注:详细可参考对抗攻击的快速梯度符号法(FGSM)。

(4.3.3)改进的Dropout(DropBlock)

  • b图Dropout是随机删除一些神经元(如:a图的红点),但对于整张图来说,效果并不明显。比如:眼睛被删除,我们仍然可以通过眼睛的周边特征(眼角、眼圈等)去近似识别。
  • c图DropBlock是随机删除一大块神经元。 如:将狗头的左耳全部删除。

在这里插入图片描述

(4.3.4)标签平滑(Label Smoothing)

标签值绝对化:只有0和1两个值。

  • 问题:该现象将导致神经网络在训练过程中,自我良好,从而过拟合。
  • 具体方式将绝对化标签值进行平滑,将[0,1]变换为[0.05,0.95]。即分类结果具有一定的模糊化,使得网络的抗过拟合能力增强。

在这里插入图片描述
左图(使用前):分类结果相对不错,但各类别之间存在一定的误差;
右图(使用后):分类结果比较好,簇内距离变小,簇间距离变大。在这里插入图片描述

(4.3.5)CIoU损失函数

效果:采用CIoU Loss损失函数,使得预测框回归的速度和精度更高一些。
Loss优化过程经典IOU损失 -> GIOU损失(Generalized IOU) -> DIOU损失(Distance IOU) -> CIOU损失
优缺点

  • IoU_Loss考虑检测框和目标框重叠面积
  • GIoU_Loss:在IOU的基础上,解决边界框不重合时的问题
  • DIoU_Loss:在IOU和GIOU的基础上,考虑边界框中心点距离的信息
  • CIoU_Loss:在DIOU的基础上,考虑边界框长宽比的尺度信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4.3.6)DIoU-NMS

  • 在实际应用场景中,当两个不同物体重叠时,由于IOU值比较大,经过NMS处理后可能只剩下一个检测框,进而导致漏检。
  • 而DIOU-NMS 不仅考虑IOU,还考虑两个框中心点之间的距离。若两个框之间IOU比较大,且两个框的距离也比较大时,则认为是两个物体框。

在检测结果中,若存在多个检测框的IOU大于置信度阈值,方法如下:
(1)NMS非极大值抑制:只取IoU最大值对应的框。
(2)DIoU-NMS:计算高置信度候选框(M)与其余所有框(Bi)的中心点距离。若距离较大,则提取多个目标框优点:对重叠目标的识别效果更好。

在这里插入图片描述
其中:s(i)是分类置信度,ε为NMS阈值,M为最高置信度的框。
b, b(gt)分别表示预测框和真实框的中心点;
ρ表示计算两个中心点的欧式距离。
c表示能够同时包含预测框和真实框的最小外接矩形的对角线长度。

(3)SOFT-NMS:对于不满足要求,且与最大置信度对应的检测框高度重叠的检测框,不直接删除,而采取降低置信度的方式。优点:召回率更高
在这里插入图片描述

五、横空出世:YOLOv5

论文下载:yolov5没有论文
官网代码:https://github.com/ultralytics/yolov5

  • 2020 年 2 月YOLO之父Joseph Redmon宣布退出计算机视觉研究领域。
  • 2020 年 4 月 23 日YOLOv4发布。
  • 2020 年 6 月 10 日YOLOv5发布。

版本特点
(1)v4与v5两个版本的改进都属于多种技术堆积版本,且两个版本差异不大。
(2)一直在更新中,且更新较快(平均2~3个月一次)。

备注:v5对应的GitHub上有详细的项目说明。
备注:由于v5项目的训练数据集过于庞大,故可以选择自己的数据集 or 小样本数据集学习。
Roboflow:开源自动驾驶数据集。该数据集已经画好边界框;下载格式:YOLO v5 PyTorch。

(5.1)性能表现

yolov5是在COCO数据集上预训练的系列模型,包含5个模型:YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x。
不同的变体模型使得YOLOv5能很好的在精度和速度中权衡,方便用户选择。在这里插入图片描述
在这里插入图片描述

(5.2)网络模型(YOLOv5s)

在这里插入图片描述
模块1(CBL-CBL):由Conv + BN + Leaky_relu组成
模块2(Res unit):借鉴ResNet网络中的残差结构,用来构建深层网络,CBM是残差模块中的子模块
模块3(CSP1_X):借鉴CSPNet网络结构,该模块由一个CBL + Res unint + 卷积层,最后Concat组成
模块4(CSP2_X):借鉴CSPNet网络结构,该模块由两个CBL + Res unint + 卷积层,最后Concat组成
模块5(Focus结构):首先将多个slice结果进行拼接Concat,然后将其送入CBL模块中。
模块6(SPP):采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合

(5.2.1)Backbone(特征提取模块)

在这里插入图片描述
由下向上:

  • Backbone(骨干网络)用于提取图像特征的网络 。采用通用模型resnet、VGG等。
    • 使用方式:将通用模型作为backbone时,直接加载预训练模型的参数,再拼接上自定义网络。
    • 训练方法:对迁移后的预训练模型进行微调,使其更适合我们自己的任务。
  • Neck(脖子)用于更好的使用backbone提取的特征。
  • Bottleneck(瓶颈)输出维度比输入维度小(如:身体到脖子,由宽到细)。
    • 常用参数:bottle_num=256,表示网络的输出维度是256,但输入维度可能是1024。
  • Head(头部)获取模型的输出特征,并进行预测

Backbone结构主要分成三类:
(1)CNNs结构包括:非轻量化CNNs + 轻量化CNNs。
(2)Transformer结构
(3)CNNs+Transformer结构
在这里插入图片描述

深度学习框架-Backbone汇总(超详细讲解)
❤️ 一、(非轻量化CNNs)Backbone结构

  1. LeNet5:(1998)
  2. AlexNet:(2012)
  3. VGG:(2014)
  4. GoogLeNet(InceptionNet)系列:Inception-v1(GoogleNet): (2015)、Inception-v2 (2015,BN-inception)、Inception-v3 (2015)、Inception-v4: (2017)、Inception-resnet-v2: (2017)
  5. Resnet: (2016)
  6. ResNet变种:ResNeXt (2016)、ResNeSt(2020)、Res2Net(2019)、DenseNet (2017)
  7. DPNet:(2017)
  8. NasNet:(2018)
  9. SENet及其变体SKNet:SENet(2017)、SKNet(2019)
  10. EfficientNet 系列:EfficientNet-V1(2019)、EfficientNet-V2(2021)
  11. Darknet系列:Darknet-19 (2016, YOLO v2 的 backbone)、Darknet-53 (2018, YOLOv3的 backbone)
  12. DLA (2018, Deep Layer Aggregation)

❤️ 二、(轻量化CNNs)Backbone结构

  1. SqueezeNet:(2016)
  2. MobileNet-v1:(2017)
  3. XCeption:(2017, 极致的 Inception)
  4. MobileNet V2:(2018)
  5. ShuffleNet-v1:(2018)
  6. ShuffleNet-v2:(2018)
  7. MnasNet:(2019)
  8. MobileNet V3 (2019)
  9. CondenseNet(2017)
  10. ESPNet系列:ESPNet (2018)、ESPNetv2 (2018)
  11. ChannelNets
  12. PeleeNet
  13. IGC系列:IGCV1、IGCV2、IGCV3
  14. FBNet系列:FBNet、FBNetV2、FBNetV3
  15. GhostNet
  16. WeightNet
  17. MicroNet

❤️ 三、 ViT(Vision Transformer )Backbone结构

  1. ViT-H/14 和 ViT-L/16(2020)(Vision Transformer,ViT)
  2. Swin Transformer(2021)
  3. PVT(2021, Pyramid Vision Transformer)
  4. MPViT (CVPR 2022,Multi-path Vision Transformer, 多路径 Vision Transformer)
  5. EdgeViTs (CVPR 2022,轻量级视觉Transformer)

❤️ 四、(CNNs+Transformer / Attention)Backbone结构

  1. CoAtNet(2021)
  2. BoTNet(2021)

(5.2.1)EfficientNet

EfficientNet网络详解

(5.3)改进之处

深入浅出Yolo系列之Yolov5核心基础知识完整讲解

六、昙花一现:YOLOv6

手把手教你运行YOLOv6(超详细)

yolov6与v7相差不到十天,区别不大。

七、谁与争锋:YOLOv7

论文下载:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object
detectors

代码地址:https://gitcode.net/mirrors/WongKinYiu/yolov7

在项目实战中,只研究yolov5或yolov7对应的项目即可,yolov3不要再研究了。因为现在的torch版本是高版本,而v3当时是低版本。

(7.1)性能表现

在这里插入图片描述
在这里插入图片描述

(7.2)网络模型

在这里插入图片描述

(7.3)改进之处

(7.3.1)RepVGG(最大改进)

  • 背景

    • 2014年:牛津大学著名研究组VGG (Visual Geometry Group), 提出VGGNet
    • 2021年:清华大学、旷视科技以及香港科技大学等机构,基于VGG网络提出了RepVGG网络
  • 效果
    RepVGG无论是在精度还是速度上都已经超过了 ResNet、EffcientNet 以及 ResNeXt 等网络。

在这里插入图片描述

核心:结构重参数化

RepVGG采用结构重参数化(structural re-parameterization)的方法,详细过程如下:
(1)训练时,使用ResNet-style的多分支模型(特点:增加模型的表征能力)
(2)测试时,转化成VGG-style的单线路模型(特点:速度更快、更省内存并且更加的灵活)

备注:训练与测试的网络结构是可以不一样的。

核心操作在测试时,将训练时的多分支模型进行合并得到一条单线路模型即对1 x 1卷积 + BN(批标准化)与3 x 3卷积进行合并RepVGG网络:结构重参数化 - 详细过程
详细如下:

  • (1)将1x1卷积转换成3x3卷积
  • (2)将BN和3x3卷积进行融合,转换成3x3卷积
  • (3)多分支融合

备注1:yolo的核心是检测速度快,而不是检测精度高。
备注2在yolo六个版本的优化后,网络层只留下了3 x 3卷积、1 x 1卷积和BN(每一个网络层之后都进行批标准化)。
备注3:VGG在2014年告诉我们,3 x 3卷积是计算速度最快的,优化最好的。
在这里插入图片描述
备注4:黄色模块是激活函数ReLU,蓝色模块是卷积层。
备注5:单支路模型可以节约内存。

1、将1x1卷积转换成3x3卷积

具体过程
(1)取1x1卷积(卷积核:1个参数),设置padding=1(即在其周围填补一圈全为零的元素)
(2)设置原始输入的padding=1
(3)输入与卷积核进行卷积操作,得到3x3的卷积层。。

注意:原始输入和1x1卷积都需要设置padding=1。
在这里插入图片描述

2、将BN和3x3卷积进行融合,转换成3x3卷积

通俗来讲:将BN公式拆解为 一元二次方程(y1 = k1* x1 + b1);然后与损失函数(y2 = k2* x2 + b2)进行合并得到新的方程(y3 = k3* x3 + b3)。
在这里插入图片描述
在这里插入图片描述

3、多分支融合

具体过程(1)将1x1卷积 + BN全部转换为3x3卷积,然后与3x3卷积进行合并,得到一个3x3卷积。
在这里插入图片描述

(7.3.2)正样本分配策略

主要目的:为了得到更多的正样本。

  • 备注1:正样本(anchor)即先验框;负样本即背景;真实框(Ground Truth,GT)即检测目标
  • 备注2:先验框在不同的yolo目标检测模型中,又有不同的叫法。如:anchor(锚框)、bounding box(边界框)。叫法不同,但都是同一个概念。

具体计算过程分两个步骤:

  • 步骤一(提取anchor)

(1)计算anchor的中心点位置
(2)中心点位置在当前网格进行上、下、左、右四个方向偏移,偏移大小为0.5。
(3)取当前网格 + 四个方向的中心点所对应的两个网格。共三个网格作为正样本(一个黑色点 + 两个蓝色点)

备注:对漂移量取sigmoid函数,得到(0 ~ 1)之间的值。
在这里插入图片描述

  • 步骤二(筛选anchor)

筛选条件一:GT和anchor的长款比范围:[0.25,4] 。
筛选条件二:GT和anchor的IOU要大于自定义阈值。
筛选条件三:GT和anchor的类别预测损失要大于自定义阈值。

计算过程:三个条件分别筛选出满足要求的anchor,然后基于权重计算损失Loss,并进行损失TOPK排序,最终只提取满足要求的K个anchor。
备注:Loss = (权重系数1 * 条件一) + (权重系数2 * 条件二) + (权重系数3 * 条件三)

在这里插入图片描述

举例:以下是具体过程(筛选anchor)中,条件二的损失计算。

在这里插入图片描述
在这里插入图片描述

  • 备注1:计算GT对应的anchor数量(损失计算得到的结果):向下取整。
  • 备注2:若一个GT同时和多个anchor高度匹配,则按照损失计算原则,只能匹配损失最小对应的一个anchor。

(7.3.3)相对偏移量计算(yolov5/v7版)

在这里插入图片描述
在这里插入图片描述

(7.3.4)辅助头(auxiliary head)+主头(lead head)

详细请看v7论文在这里插入图片描述
图5:辅助头用粗线,主头用细线。与常规模型(a)相比,模型(b)具有辅助头。与通常的独立标签分配器(c)不同,我们提出主头引导标签分配器(d)以及由粗至细的主头引导标签分配器(e)

  • 计算:通过主头的预测值和真实值进行标签分配器优化,然后同时得到主头和辅助头的训练标签。
  • 备注:详细的从粗到细的实现方法和约束设计细节将在附录中详细阐述。

参考文献

1.YOLO学习:召回率Recall、精确率Precision、IoU、Map
2.YOLOv1到YOLOv3的演变过程及每个算法详解
3.YOLO系列总结:YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOX
4.YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5
5.YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)
6.深入浅出Yolo系列:Yolov3、Yolov4、Yolov5、YoloX(超多-免费数据集)
7.深度学习框架-Backbone汇总(超详细讲解)
8.深入浅出Yolo系列之Yolov5核心基础知识完整讲解
9.YOLOv7 RepVGG网络:结构重参数化 - 详细过程
10.目标检测算法——YOLOV7——详解


实战一:目标检测:教你利用yolov5训练自己的目标检测模型
实战二:认真总结6000字Yolov5保姆级教程(2022.06.28全新版本v6.1)
实战三:利用yolov5实现口罩佩戴检测算法(非常详细)
实战四:YOLOv7(目标检测)入门教程详解—检测,推理,训练
❤️ roboflow官网:开源自动驾驶数据集(Computer Vision Datasets)❤️

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/73194
推荐阅读
相关标签
  

闽ICP备14008679号