Yolov3&Yolov4网络结构与源码分析

本文详细分析了Yolov3和Yolov4目标检测算法的网络结构,包括核心组件、代码实现和优化创新。Yolov4在Yolov3基础上引入了CSP结构、SPP模块、Mish激活函数和Dropblock等改进,提高了检测速度和精度。同时,提供了Python和C++代码示例,以及TensorRT加速方案。
摘要由CSDN通过智能技术生成

Yolov3&Yolov4网络结构与源码分析

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

文章目录

  1. 论文汇总

  2. Yolov3核心基础内容

2.1 网络结构可视化

2.2 网络结构图

2.3 核心基础内容

  1. Yolov3相关代码

3.1 python代码

3.2 C++代码内容

3.3 python版本的Tensorrt代码

3.4 C++版本的Tensorrt代码

  1. Yolov4核心基础内容

4.1 网络结构可视化

4.2 网络结构图

4.3 核心基础内容

4.3.1 输入端创新

4.3.2 Backbone创新

4.3.3 Neck创新

4.4.4 Prediction创新

  1. Yolov4相关代码

5.1 python代码

5.2 C++代码

5.3 python版本的Tensorrt代码

5.4 C++版本的Tensorrt代码

  1. Yolov5核心基础知识完整讲解

  2. 相关数据集下载

  3. 不断更新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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值