Yolov3&Yolov4网络结构与源码分析
从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗。
文章目录
-
论文汇总
-
Yolov3核心基础内容
2.1 网络结构可视化
2.2 网络结构图
2.3 核心基础内容
- Yolov3相关代码
3.1 python代码
3.2 C++代码内容
3.3 python版本的Tensorrt代码
3.4 C++版本的Tensorrt代码
- Yolov4核心基础内容
4.1 网络结构可视化
4.2 网络结构图
4.3 核心基础内容
4.3.1 输入端创新
4.3.2 Backbone创新
4.3.3 Neck创新
4.4.4 Prediction创新
- Yolov4相关代码
5.1 python代码
5.2 C++代码
5.3 python版本的Tensorrt代码
5.4 C++版本的Tensorrt代码
-
Yolov5核心基础知识完整讲解
-
相关数据集下载
-
不断更新ing
1.论文汇总
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
2.YoloV3核心基础内容
2.1 网络结构可视化
Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络结构。如果纯粹看cfg里面的内容,肯定会一脸懵逼。
2.2 网络结构图
上图三个蓝色方框内表示Yolov3的三个基本组件:
CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。
Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
ResX:由一个CBL和X个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL都起到下采样的作用,因此经过5次Res模块后,得到的特征图是608->304->152->76->38->19大小。
其他基础操作:
Concat:张量拼接,会扩充两个张量的维度,例如2626256和2626512两个张量拼接,结果是2626768。Concat和cfg文件中的route功能一样。
add:张量相加,张量直接相加,不会扩充维度,例如104104128和104104128相加,结果还是104104128。add和cfg文件中的shortcut功能一样。
Backbone中卷积层的数量:
每个ResX中包含1+2X个卷积层,因此整个主干网络Backbone中一共包含1+(1+21)+(1+22)+(1+28)+(1+28)+(1+24)=52,再加上一个FC全连接层,即可以组成一个Darknet53分类网络。不过在目标检测Yolov3中,去掉FC层,不过为了方便称呼,仍然把Yolov3的主干网络叫做Darknet53结构。
2.3 核心基础内容
Yolov3是2018年发明提出的,这成为了目标检测one-stage中非常经典的算法,包含Darknet-53网络结构、anchor锚框、FPN等非常优秀的结构。
本文主要目的在于描述Yolov4和Yolov3算法的不同及创新之处,对Yolov3的基础不过多描述。
3.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.4 C++版本的Tensorrt代码
项目的工程部署上,如果使用C++版本进行Tensorrt加速,一方面可以参照Alexey的github代码,另一方面也可以参照下面其他作者的开源代码
代码地址:https://github.com/wang-xinyu/tensorrtx/tree/master/Yolov3
4.YoloV4核心基础内容
4.1 网络结构可视化
Yolov4的网络结构也可以使用netron工具查看,也是对照其展示的可视化流程图绘制的下方网络结构图。
4.2