深入浅出Yolov3和Yolov4
点击下方卡片,关注“新机器视觉”公众号
视觉/图像重磅干货,第一时间送达
因为工作原因,项目中经常遇到目标检测的任务,因此对目标检测算法会经常使用和关注,比如Yolov3、Yolov4算法。
当然,实际项目中很多的第一步,也都是先进行目标检测任务,比如人脸识别、多目标追踪、REID、客流统计等项目。因此目标检测是计算机视觉项目中非常重要的一部分。
从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗。
在此,大白将项目中,需要了解的Yolov3、Yolov4系列相关知识点以及相关代码进行完整的汇总,希望和大家共同学习探讨。
版权申明:转载及引用本文相关图片,需经作者江大白授权。
本文包含图片,都为作者江大白所绘制,如需高清图片,可邮箱发送信息,需要哪部分的图片。
江大白邮箱:jiangdabai@126.com
1.论文汇总
2.YoloV3核心基础内容
2.1 网络结构可视化
2.2 网络结构图
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功能一样。
2.3 核心基础内容
3.YoloV3相关代码
3.1 python代码
3.2 C++代码
3.3 python版本的Tensorrt代码
(1)Tensort中的加速案例
(2)Github上的tensorrt加速
3.4 C++版本的Tensorrt代码
4.YoloV4核心基础内容
4.1 网络结构可视化
4.2 网络结构图
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操作。
4.3 核心基础内容
第一种:面目一新的创新,比如Yolov1、Faster-RCNN、Centernet等,开创出新的算法领域,不过这种也是最难的
第二种:守正出奇的创新,比如将图像金字塔改进为特征金字塔
第三种:各种先进算法集成的创新,比如不同领域发表的最新论文的tricks,集成到自己的算法中,却发现有出乎意料的改进
输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练
BackBone主干网络:将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock
Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块、FPN+PAN结构
Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms
4.3.1 输入端创新
(1)Mosaic数据增强
2019年发布的论文《Augmentation for small object detection》对此进行了区分:
如上表所示,Coco数据集中小目标占比达到41.4%,数量比中目标和大目标都要多。
丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。
4.3.2 BackBone创新
(1)CSPDarknet53
(2)Mish激活函数
(3)Dropblock
4.3.3 Neck创新
(1)SPP模块
(2)FPN+PAN
4.3.4 Prediction创新
(1)CIOU_loss
基于这个问题,2020年的AAAI又提出了DIOU_Loss。