知识精讲 冰与火之歌第五季01 gate7

编纂:元子

【新智元导读】从2018年Yolov3年提出的两年后,在原作者申明废弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗。在此,将项目中须要懂得的Yolov3、Yolov4系列相干知识点以及相干代码进行完全的汇总,盼望和大家共同窗习探讨。

从2018年Yolov3年提出的两年后,在原作者申明废弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗。

在此,将项目中须要懂得的Yolov3、Yolov4系列相干知识点以及相干代码进行完全的汇总,盼望和大家共同窗习探讨。

文章目录

1. 论文汇总

2. Yolov3核心基本内容

2.1 网络构造可视化

2.2 网络构造图

2.3 核心基本内容

3. Yolov3相干代码

3.1 python代码

3.2 C++代码内容

3.3 python版本的Tensorrt代码

3.4 C++版本的Tensorrt代码

4. Yolov4核心基本内容

4.1 网络构造可视化

4.2 网络构造图

4.3 核心基本内容

4.3.1 输入端创新

4.3.2 Backbone创新

4.3.3 Neck创新

4.4.4 Prediction创新

5. Yolov4相干代码

5.1 python代码

5.2 C++代码

5.3 python版本的Tensorrt代码

5.4 C++版本的Tensorrt代码

论文汇总

Yolov3论文名:《Yolov3: An Incremental Improvement》

Yolov3论文地址:https://arxiv.org/pdf/1804.02767.pdf

Yolov4论文名:《Yolov4: Optimal Speed and Accuracy of Object Detection》

Yolov4论文地址:https://arxiv.org/pdf/2004.10934.pdf

YOLOV3核心基本内容

2.1 网络构造可视化

Yolov3是目的检测Yolo系列非常非常经典的算法,不过很多同窗拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络构造。如果纯洁看cfg里面的内容,确定会一脸懵逼。

其实可以很便利的用netron查看Yolov3的网络构造图,一目了然。

这里不多说,如果须要安装,可以移步大白的另一篇文章:《网络可视化工具netron详细安装流程》

https://blog.csdn.net/nan355655600/article/details/106245563

如果不想安装,也可以直接点击此链接

https://blog.csdn.net/nan355655600/article/details/106246355

查看Yolov3可视化流程图。

2.2 网络构造图

绘制网络构造图受到Yolov3另一位作者文章的启示,包含下面Yolov4的构造图,确切,从总体框架上先懂得了Yolov3的流程,再针对去学习每一小块的知识点,会事半功倍。

上图三个蓝色方框内表现Yolov3的三个基础组件:

CBL:Yolov3网络构造中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。

Res unit:借鉴Resnet网络中的残差构造,让网络可以构建的更深。

ResX:由一个CBL和X个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL都起到下采样的作用,因此经过5次Res模块后,得到的特点图是608- 304- 152- 76- 38- 19大小。

其他基本操作:

Concat:张量拼接,会扩充两个张量的维度,例如26*26*256和26*26*512两个张量拼接,成果是26*26*768。Concat和cfg文件中的route功效一样。

add:张量相加,张量直接相加,不会扩充维度,例如104*104*128和104*104*128相加,成果还是104*104*128。add和cfg文件中的shortcut功效一样。

Backbone中卷积层的数量:

每个ResX中包括1+2*X个卷积层,因此全部主干网络Backbone中一共包括1+(1+2*1)+(1+2*2)+(1+2*8)+(1+2*8)+(1+2*4)=52,再加上一个FC全衔接层,即可以组成一个Darknet53分类网络。不过在目的检测Yolov3中,去掉FC层,不过为了便利称呼,仍然把Yolov3的主干网络叫做Darknet53构造。

2.3 核心基本内容

Yolov3是2018年发现提出的,这成为了目的检测one-stage中非常经典的算法,包括Darknet-53网络构造、anchor锚框、FPN等非常优良的构造。

本文重要目标在于描写Yolov4和Yolov3算法的不同及创新之处,对Yolov3的基本不过多描写。

不过大白也正在筹备Yolov3算法非常浅易易懂的基本视频课程,让小白也能简略明白的懂得Yolov3的全部进程及各个算法细节,制造好后会更新到此处,便于大家查看。

在筹备课程进程中,大白搜集查看了网络上几乎所有的Yolov3材料,在此收拾几个非常不错的文章及视频,大家也可以点击查看,学习相干知识。

(1)视频:吴恩达目的检测Yolo入门讲授

https://www.bilibili.com/video/BV1N4411J7Y6?from=search seid=18074481568368507115

(2)文章:Yolo系列之Yolov3【深度解析】

https://blog.csdn.net/leviopku/article/details/82660381

(3)文章:一文看懂Yolov3

https://blog.csdn.net/litt1e/article/details/88907542

信任大家看完,对于Yolov3的基本知识点会有必定的懂得。

YOLOV3相干代码

3.1 python代码

代码地址:

https://github.com/ultralytics/Yolov3

3.2 c++代码

这里推举Yolov4作者的darknetAB代码,代码和原始作者代码相比,进行了很多的优化,如须要运行Yolov3网络,加载cfg时,应用Yolov3.cfg即可

代码地址:

https://github.com/AlexeyAB/darknet

3.3 python版本的Tensorrt代码

除了算法研讨外,实际项目中还须要将算法落地安排到工程上应用,比如GPU服务器应用时还须要对模型进行tensorrt加速。

(1)Tensort中的加速案例

强烈推举tensort软件中,自带的Yolov3加速案例,路径位于tensorrt解压文件夹的TensortX/samples/python/Yolov3_onnx中

针对案例中的代码,如果有不清楚的,也可参照下方文章上的详细阐明:

代码地址:

https://www.cnblogs.com/shouhuxianjian/p/10550262.html

(2)Github上的tensorrt加速

除了tensorrt软件中的代码, github上也有其他作者的开源代码

代码地址:

https://github.com/lewes6369/TensorRT-Yolov3

3.3 C++版本的Tensorrt代码

项目标工程安排上,如果应用C++版本进行Tensorrt加速,一方面可以参照Alexey的github代码,另一方面也可以参照下面其他作者的开源代码

代码地址:

https://github.com/wang-xinyu/tensorrtx/tree/master/Yolov3

YOLOV4核心基本内容

4.1 网络构造可视化

Yolov4的网络构造也可以应用netron工具查看,大白也是对比其展现的可视化流程图绘制的下方网络构造图。

netron可视化显示Yolov4网络构造可以参照大白的另一篇文章:《netron可视化网络构造详细安装流程》

https://blog.csdn.net/nan355655600/article/details/106245563

如果不想安装,也可以直接点击此链接

https://blog.csdn.net/nan355655600/article/details/106246422

查看Yolov4可视化流程图。

4.2 网络构造图

Yolov4的构造图和Yolov3相比,因为多了CSP构造,PAN构造,如果单纯看可视化流程图,会感到很绕,不过在绘制出上面的图形后,会感到豁然豁达,其实整体架构和Yolov3是雷同的,不过应用各种新的算法思想对各个子构造都进行了改良。

先收拾下Yolov4的五个基础组件:

CBM:Yolov4网络构造中的最小组件,由Conv+Bn+Mish激活函数三者组成。

CBL:由Conv+Bn+Leaky_relu激活函数三者组成。

Res unit:借鉴Resnet网络中的残差构造,让网络可以构建的更深。

CSPX:借鉴CSPNet网络构造,由三个卷积层和X个Res unint模块Concate组成。

SPP:采取1×1,5×5,9×9,13×13的最大池化的方法,进行多标准融会。

其他基本操作:

Concat:张量拼接,维度会扩充,和Yolov3中的说明一样,对应于cfg文件中的route操作。

add:张量相加,不会扩充维度,对应于cfg文件中的shortcut操作。

Backbone中卷积层的数量:

和Yolov3一样,再来数一下Backbone里面的卷积层数量。

每个CSPX中包括3+2*X个卷积层,因此全部主干网络Backbone中一共包括2+(3+2*1)+2+(3+2*2)+2+(3+2*8)+2+(3+2*8)+2+(3+2*4)+1=72。

这里大白有些怀疑,依照Yolov3设计的传统,这么多卷积层,主干网络不应当叫CSPDaeknet73吗????

4.3 核心基本内容

Yolov4实质上和Yolov3相差不大,可能有些人会感到扫兴。

但我感到算法创新分为三种方法:

第一种:面目一新的创新,比如Yolov1、Faster-RCNN、Centernet等,首创出新的算法范畴,不过这种也是最难的

第二种:守正出奇的创新, 比如将图像金字塔改良为特点金字塔

第三种:各种先进算法集成的创新, 比如不同范畴发表的最新论文的tricks,集成到自己的算法中,却发明有出乎意料的改良

Yolov4既有第二种也有第三种创新,组合尝试了大批深度学习范畴最新论文的20多项研讨结果,而且不得不信服的是作者Alexey在github代码库保护的频繁水平。

目前Yolov4代码的star数量已经1万多,据我所懂得,目前超过这个数量的,目的检测范畴只有Facebook的Detectron(v1-v2)、和Yolo(v1-v3)官方代码库(已结束更新)。

所以Yolov4中的各种创新方法,大白感到还是很值得细心研讨的。

为了便于剖析,将Yolov4的整体构造拆分成四大板块:

大白重要从以上4个部分对YoloV4的创新之处进行讲授,让大家一目了然。

输入端:这里指的创新重要是训练时对输入端的改良,重要包含Mosaic数据加强、cmBN、SAT自抗衡训练

BackBone主干网络:将各种新的方法联合起来,包含:CSPDarknet53、Mish激活函数、Dropblock

Neck:目的检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块、FPN+PAN构造

Prediction:输出层的锚框机制和Yolov3雷同,重要改良的是训练时的丧失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms

总体来说,Yolov4对Yolov3的各个部分都进行了改良优化,下面丢上作者的算法对照图。

仅对照Yolov3和Yolov4,在COCO数据集上,同样的FPS等于83左右时,Yolov4的AP是43,而Yolov3是33,直接上涨了10个百分点。

不得不服,当然可能针对具体不同的数据集后果也不一样,但总体来说,改良后果是很优良的,下面大白对Yolov4的各个创新点持续进行深挖。

4.3.1 输入端创新

斟酌到很多同窗GPU显卡数量并不是很多,Yolov4对训练时的输入端进行改良,使得训练在单张GPU上也能有不错的成就。比如数据加强Mosaic、cmBN、SAT自抗衡训练。

但感到cmBN和SAT影响并不是很大,所以这里重要讲授Mosaic数据加强。

(1)Mosaic数据加强

Yolov4中应用的Mosaic是参考2019年底提出的CutMix数据加强的方法,但CutMix只应用了两张图片进行拼接,而Mosaic数据加强则采取了4张图片,随机缩放、随机裁剪、随机排布的方法进行拼接。

这里首先要懂得为什么要进行Mosaic数据加强呢?

在平时项目训练时,小目的的AP一般比中目的和大目的低很多。而Coco数据集中也包括大批的小目的,但比拟麻烦的是小目的的散布并不均匀。

首先看下小、中、大目的的定义:

2019年宣布的论文《Augmentation for small object detection》对此进行了区分:

可以看到小目的的定义是目的框的长宽0×0~32×32之间的物体。

但在整体的数据集中,小、中、大目的的占比并不均衡。

如上表所示,Coco数据集中小目的占比到达41.4%,数量比中目的和大目的都要多。

但在所有的训练集图片中,只有52.3%的图片有小目的,而中目的和大目的的散布相对来说更加均匀一些。

针对这种状态,Yolov4的作者采取了Mosaic数据加强的方法。

重要有几个长处:

丰盛数据集:随机应用4张图片,随机缩放,再随机散布进行拼接,大大丰盛了检测数据集,特殊是随机缩放增添了很多小目的,让网络的鲁棒性更好。

减少GPU:可能会有人说,随机缩放,普通的数据加强也可以做,但作者斟酌到很多人可能只有一个GPU,因此Mosaic加强训练时,可以直接盘算4张图片的数据,使得Mini-batch大小并不须要很大,一个GPU就可以到达比拟好的后果。

此外,发明另一研讨者的训练方法也值得借鉴,采取的数据加强和Mosaic比拟相似,也是应用4张图片(不是随机散布),但训练盘算loss时,采取“缺啥补啥”的思路:

如果上一个iteration中,小物体发生的loss不足(比如小于某一个阈值),则下一个iteration就用拼接图;否则就用正常图片训练,也很有意思。

参考链接:

https://www.zhihu.com/question/390191723?rf=390194081

4.3.2 BackBone创新

(1)CSPDarknet53

CSPDarknet53是在Yolov3主干网络Darknet53的基本上,借鉴2019年CSPNet的经验,发生的Backbone构造,其中包括了5个CSP模块。

这里因为CSP模块比拟长,不放到本处,大家也可以点击Yolov4的netron网络构造图,对照查看,一目了然。

每个CSP模块前面的卷积核的大小都是3*3,因此可以起到下采样的作用。

因为Backbone有5个CSP模块,输入图像是608*608,所以特点图变更的规律是:608- 304- 152- 76- 38- 19

经过5次CSP模块后得到19*19大小的特点图。

而且作者只在Backbone中采取了Mish激活函数,网络后面仍然采取Leaky_relu激活函数。

我们再看看下作者为啥要参考2019年的CSPNet,采取CSP模块?

CSPNet论文地址:

https://arxiv.org/pdf/1911.11929.pdf

CSPNet全称是Cross Stage Paritial Network,重要从网络构造设计的角度解决推理中从盘算量很大的问题。

CSPNet的作者以为推理盘算过高的问题是由于网络优化中的梯度信息反复导致的。

因此采取CSP模块先将基本层的特点映射划分为两部分,然后通过跨阶段层次构造将它们合并,在减少了盘算量的同时可以保证正确率。

因此Yolov4在主干网络Backbone采取CSPDarknet53网络构造,重要有三个方面的长处:

长处一:加强CNN的学习才能,使得在轻量化的同时坚持正确性。

长处二:下降盘算瓶颈

长处三:下降内存成本

(2)Mish激活函数

Mish激活函数是2019年下半年提出的激活函数

论文地址:

https://arxiv.org/abs/1908.08681

和Leaky_relu激活函数的图形对照如下:

Yolov4的Backbone中都应用了Mish激活函数,而后面的网络则还是应用leaky_relu函数。

Yolov4作者试验测试时,应用CSPDarknet53网络在ImageNet数据集上做图像分类义务,发明应用了Mish激活函数的TOP-1和TOP-5的精度比没有应用时都略高一些。

因此在设计Yolov4目的检测义务时,主干网络Backbone还是应用Mish激活函数。

(3)Dropblock

Yolov4中应用的Dropblock,其实和常见网络中的Dropout功效相似,也是缓解过拟合的一种正则化方法。

Dropblock在2018年提出,论文地址:

https://arxiv.org/pdf/1810.12890.pdf

传统的Dropout很简略,一句话就可以说的清:随机删除减少神经元的数量,使网络变得更简略。

而Dropblock和Dropout类似,比如下图:

中间Dropout的方法会随机的删减丢弃一些信息,但Dropblock的研讨者以为,卷积层对于这种随机丢弃并不敏感,因为卷积层通常是三层连用:卷积+激活+池化层,池化层本身就是对相邻单元起作用。而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到雷同的信息。

因此,在全衔接层上后果很好的Dropout在卷积层上后果并不好。

所以右图Dropblock的研讨者则干脆全部局部区域进行删减丢弃。

这种方法其实是借鉴2017年的cutout数据加强的方法,cutout是将输入图像的部分区域清零,而Dropblock则是将Cutout利用到每一个特点图。而且并不是用固定的归零比率,而是在训练时以一个小的比率开端,随着训练进程线性的增添这个比率。

Dropblock的研讨者与Cutout进行对照验证时,发明有几个特色:

长处一:Dropblock的后果优于Cutout

长处二:Cutout只能作用于输入层,而Dropblock则是将Cutout利用到网络中的每一个特点图上

长处三:Dropblock可以定制各种组合,在训练的不同阶段可以修正删减的概率,从空间层面和时光层面,和Cutout相比都有更精致的改良。

Yolov4中直接采取了更优的Dropblock,对网络的正则化进程进行了全面的升级改良。

4.3.3 Neck创新

在目的检测范畴,为了更好的提取融会特点,通常在Backbone和输出层,会插入一些层,这个部分称为Neck。相当于目的检测网络的颈部,也是非常要害的。

Yolov4的Neck构造重要采取了SPP模块、FPN+PAN的方法。

(1)SPP模块

SPP模块,其实在Yolov3中已经存在了,在Yolov4的C++代码文件夹中有一个Yolov3_spp版本,但有的同窗估量从来没有应用过,在Yolov4中,SPP模块仍然是在Backbone主干网络之后:

作者在SPP模块中,应用k={1*1,5*5,9*9,13*13}的最大池化的方法,再将不同标准的特点图进行Concat操作。

在2019提出的《DC-SPP-Yolo》文章:

https://arxiv.org/ftp/arxiv/papers/1903/1903.08589.pdf

也对Yolo目的检测的SPP模块进行了对照测试。

和Yolov4作者的研讨雷同,采取SPP模块的方法,比单纯的应用k*k最大池化的方法,更有效的增添主干特点的接受范畴,明显的分别了最主要的高低文特点。

Yolov4的作者在应用608*608大小的图像进行测试时发明,在COCO目的检测义务中,以0.5%的额外盘算代价将AP50增添了2.7%,因此Yolov4中也采取了SPP模块。

(2)FPN+PAN

PAN构造比拟有意思,看了网上Yolov4关于这个部分的讲授,大多都是讲的比拟笼统的,而PAN是借鉴图像分割范畴PANet的创新点,有些同窗可能不是很明白。

下面大白将这个部分拆解开来,看下Yolov4中是如何设计的。

Yolov3构造:

我们先来看下Yolov3中Neck的FPN构造

可以看到经过几次下采样,三个紫色箭头指向的处所,输出分辨是76*76、38*38、19*19。

以及最后的Prediction中用于预测的三个特点图①19*19*255、②38*38*255、③76*76*255。[注:255表现80类别(1+4+80)×3=255]

我们将Neck部分用立体图画出来,更直观的看下两部分之间是如何通过FPN构造融会的。

如图所示,FPN是自顶向下的,将高层的特点信息通过上采样的方法进行传递融会,得到进行预测的特点图。

Yolov4构造:

而Yolov4中Neck这部分除了应用FPN外,还在此基本上应用了PAN构造:

前面CSPDarknet53中讲到,每个CSP模块前面的卷积核都是3*3大小,相当于下采样操作。

因此可以看到三个紫色箭头处的特点图是76*76、38*38、19*19。

以及最后Prediction中用于预测的三个特点图:①76*76*255,②38*38*255,③19*19*255。

我们也看下Neck部分的立体图像,看下两部分是如何通过FPN+PAN构造进行融会的。

和Yolov3的FPN层不同,Yolov4在FPN层的后面还添加了一个自底向上的特点金字塔。

其中包括两个PAN构造。

这样联合操作,FPN层自顶向下转达强语义特点,而特点金字塔则自底向上转达强定位特点,两两联手,从不同的主干层对不同的检测层进行参数聚合,这样的操作确切很皮。

FPN+PAN借鉴的是18年CVPR的PANet,当时重要利用于图像分割范畴,但Alexey将其拆分利用到Yolov4中,进一步进步特点提取的才能。

不过这里须要注意几点:

注意一:

Yolov3的FPN层输出的三个大小不一的特点图①②③直接进行预测,但Yolov4的FPN层,只应用最后的一个76*76特点图①,而经过两次PAN构造,输出预测的特点图②和③。

这里的不同也体现在cfg文件中,这一点有很多同窗之前不太清楚,

比如Yolov3.cfg最后的三个Yolo层,

第一个Yolo层是最小的特点图19*19,mask=6,7,8,对应最大的anchor box。

第二个Yolo层是中等的特点图38*38,mask=3,4,5,对应中等的anchor box。

第三个Yolo层是最大的特点图76*76,mask=0,1,2,对应最小的anchor box。

而Yolov4.cfg则恰恰相反

第一个Yolo层是最大的特点图76*76,mask=0,1,2,对应最小的anchor box。

第二个Yolo层是中等的特点图38*38,mask=3,4,5,对应中等的anchor box。

第三个Yolo层是最小的特点图19*19,mask=6,7,8,对应最大的anchor box。

注意点二:

底本的PANet网络的PAN构造中,两个特点图联合是采取shortcut操作,而Yolov4中则采取**concat(route)**操作,特点图融会后的尺寸产生了变更。

这里也可以对应Yolov4的netron网络图查看,很有意思。

4.3.4 Prediction创新

(1)CIOU_loss

目的检测义务的丧失函数一般由Classificition Loss(分类丧失函数)和Bounding Box Regeression Loss(回归丧失函数)两部分构成。

Bounding Box Regeression的Loss近些年的发展进程是:Smooth L1 Loss- IoU Loss(2016)- GIoU Loss(2019)- DIoU Loss(2020)- CIoU Loss(2020)

我们从最常用的IOU_Loss开端,进行对照拆解剖析,看下Yolov4为啥要选择CIOU_Loss。

a.IOU_Loss

可以看到IOU的loss其实很简略,重要是交集/并集,但其实也存在两个问题。

问题1:即状况1的情形,当预测框和目的框不相交时,IOU=0,无法反映两个框距离的远近,此时丧失函数不可导,IOU_Loss无法优化两个框不相交的情形。

问题2:即状况2和状况3的情形,当两个预测框大小雷同,两个IOU也雷同,IOU_Loss无法区分两者相交情形的不同。

因此2019年呈现了GIOU_Loss来进行改良。

b.GIOU_Loss

可以看到右图GIOU_Loss中,增添了相交标准的权衡方法,缓解了单纯IOU_Loss时的为难。

但为什么仅仅说缓解呢?

因为还存在一种不足:

问题:状况1、2、3都是预测框在目的框内部且预测框大小一致的情形,这时预测框和目的框的差集都是雷同的,因此这三种状况的GIOU值也都是雷同的,这时GIOU退化成了IOU,无法区分相对地位关系。

基于这个问题,2020年的AAAI又提出了DIOU_Loss。

c.DIOU_Loss

好的目的框回归函数应当斟酌三个主要几何因素:重叠面积、中心点距离,长宽比。

针对IOU和GIOU存在的问题,作者从两个方面进行斟酌

一:如何最小化预测框和目的框之间的归一化距离?

二:如何在预测框和目的框重叠时,回归的更正确?

针对第一个问题,提出了DIOU_Loss(Distance_IOU_Loss)

DIOU_Loss斟酌了重叠面积和中心点距离,当目的框包裹预测框的时候,直接度量2个框的距离,因此DIOU_Loss收敛的更快。

但就像前面好的目的框回归函数所说的,没有斟酌到长宽比。

比如上面三种情形,目的框包裹预测框,原来DIOU_Loss可以起作用。

但预测框的中心点的地位都是一样的,因此依照DIOU_Loss的盘算公式,三者的值都是雷同的。

针对这个问题,又提出了CIOU_Loss,不对不说,科学总是在解决问题中,不断提高!!

d.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的回归方法,使得预测框回归的速度和精度更高一些。

(2)DIOU_nms

Nms重要用于预测框的筛选,常用的目的检测算法中,一般采取普通的nms的方法,Yolov4则借鉴上面D/CIOU loss的论文:

https://arxiv.org/pdf/1911.08287.pdf

将其中盘算IOU的部分调换成DIOU的方法:

再来看下实际的案例

在上图重叠的摩托车检测中,中间的摩托车因为斟酌边界框中心点的地位信息,也可以回归出来。

因此在重叠目的的检测中,DIOU_nms的后果优于传统的nms。

注意:有读者会有疑问,这里为什么不用CIOU_nms,而用DIOU_nms?

答:因为前面讲到的CIOU_loss,是在DIOU_loss的基本上,添加的影响因子,包括groundtruth标注框的信息,在训练时用于回归。

但在测试进程中,并没有groundtruth的信息,不用斟酌影响因子,因此直接用DIOU_nms即可。

总体来说, YOLOv4的论文称的上良心之作,将近几年关于深度学习范畴最新研讨的tricks移植到Yolov4中做验证测试,将Yolov3的精度进步了不少。

虽然没有全新的创新,但很多改良之处都值得借鉴,借用Yolov4作者的总结。

Yolov4 重要带来了 3 点新贡献:

提出了一种高效而强盛的目的检测模型,应用 1080Ti 或 2080Ti 就能训练出超快、正确的目的检测器。

在检测器训练进程中,验证了最先进的一些研讨结果对目的检测器的影响。

改良了 SOTA 方式,使其更有效、更合适单 GPU 训练。


阿里的价值观并非空泛的口号或标榜道德的宣言。它是阿里一切制度和规范的“母亲”,也是阿里人在制度和规范之外决策与行动的标尺。详细