【YOLOv4探讨 之二】 YOLOv4的网络结构

本文深入探讨YOLOv4的网络结构,包括CSPDarknet53作为Backbone、SPP模块在 Neck 中的应用以及 PAN 结构的详细解析。CSPDarknet优化了残差模块,提升训练效率;SPP增强了特征提取的鲁棒性;PAN利用路径增强策略改善信息流。Mish激活函数的引入进一步优化了梯度流。
摘要由CSDN通过智能技术生成


在观察YOLO的各个版本的进化历程中,网络结构的优化是最先进入我们视野的。在前面的文章《YOLOv1、YOLOv2和YOLOv3对比》中我们讨论了YOLO从v1到v3的网络结构,呈现出3个趋势:

  • 深度越来越深:backbone从能够完成基本功能的网络(v1),进化到具有成熟结构的darknet19(v2),又进化到darknet53(v3),网络能够变深的根本原因是使用了残差结构,保证网络加深的同时性能不会退化。

  • 结构越来越简洁:逐渐取消池化层,更多使用更加便于求导的线性激活函数,卷基层逐渐模块化(包含了标准化、激活),残差结构也呈现模块化的状态,全连接层消失。简洁不意味着简单,而是更加优美和便于计算。

  • 不断增加新的技术:随着标准化层、残差层、路由层等经典结构出现,YOLO的网络结构不断引入这些新东西。探测层也由detection到region到yolo,reorg也是在v2中昙花一现就再也没有出现过。

到了YOLOv4,结合以上三个趋势看:深度更深了,从v3标准版的总共107层,到v4发展至163层;结构继承了v3,使用了CSPDarknet53的结构,基于Darknet53,结构复杂了一些;新的技术方面,仅从网络结构来说,使用了Mish激活函数,SPP和PAN结构。
下面我们就解析一下cfg配置文件,看看YOLOv4的结构到底是什么样子吧。

1.主流程图

按照论文中的3段式结构,我们根据cfg配置文件画出了YOLOv4的主流程图。
在这里插入图片描述
其中,CNN层模块使用CNN[size-stride-filters-BN-Mish]或CNN[size-stride-filters-BN-Leaky]表示,route层使用ROUTE[layers]表示,upsample层使用UPSAMPLE[stride]表示。
CNN层中BN表示使用了batch nomalization,Mish表示使用的是Mish激活函数,在CPSDarknet53的Backbone中使用,Leaky表示使用的是Mish激活函数,在neck中使用。深蓝色表示输出feature map通道数没有的size=1的CNN层,棕色表示输出feature map通道数变化的size=1的CNN层,不合并提取特征,只是加深特征;浅蓝色为size≠1的CNN层,可以合并提取特征或兼具下采样的功能。给他们设置颜色是为了便于下一步和YOLOv3进行对比。
橙色模块RES[filters[size_1-stride_1,size_2-stride_2]-BN-Mish]×cnnlayer_number为残差层组合。具体结构如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个残差结构中使用原型+号表示shortcut层。
SPP表示SPP模块,为了方便拆解将CNN[1-1-512-BN-Leaky]也划分进来,具体结构放在第3节展开,PAN PROCESS表示执行PAN结构的层的组合,具体结构放在第4节展开。

2.CSPDarknet53模型–Backbone

在YOLOv4中,使用了CSPDarknet53代替了Darknet53,这是论文三大块BoF、BoS和Methodology(方法论)中Methodology第一步“架构选择”中的内容。CSP就是cross stage partial的缩写,即阶段交叉梯度模型,其实就是把不同位置的梯度交叉混合一下。源于台湾研究小组2019年11月份的论文《CSPNet: A New Backbone that can Enhance Learning Capability of CNN》中的研究成果。设计优势在于:

  • 丰富的梯度分流——提高训练准确度和收敛速度
  • 计算权重的均衡——提高运算速度和硬件资源使用率

我们将对比YOLOv3,看看YOLOv4中CSPDarknet的backbone到底有哪些改进。YOLOv3的模型如下:
在这里插入图片描述

对比第1节中的YOLOv4网络结构图可见,区别主要就是在下采样CNN之前,将下采样(downsample)前一次残差层前后的主要feature map通过route层放在一起,在进行下一次的downsample。这里没有FPN,因为route层组合的feature map是在两次downsample之间,虽然两组feature map进行过特征强化或者通道压缩,但是route前通道数相同。个人以为这种方式其实是对残差模块的优化,通过route的方式进行梯度分流。当然如果将route+shortcut设计成一个嵌套的残差层也是一种思路,但是这样会弱化内部残差结构的效果,route+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北溟客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值