[Yolov4-Pytorch-0]----yolov4网络概况

[网络概况0]YOLOV4-Pytorch----yolov4

  • YOLOV 4
    • 网络结构
    • 组件解析
      • 1.CBM
      • 2. CBL
      • 3.Res unit
      • 4.SPP
      • 5.CSPX
    • 模块解析
      • 输入端
        • 1.Mosaic数据增强
      • BackBone主干部分
        • 1.CSPDarknet53
        • 2.Mish激活函数
        • 3.Dropblock
      • Neck部分
        • 1.FPN+PAN

作者旨在学习yolov4这一网络,所以将自己的学习记录写下来,以备之后查看,也可以给各位一起学习的小伙伴提供一些思路。有什么错误,各位大大指出,马上改正。
Yolo V4 论文:论文链接
AB 源码实现:源码链接
Pytorch(Tianxiaomo)版本实现:Pytorch-yolov4-Tianxiaomo


网络结构的学习思路是基于这篇文章的:
Yolov 4


YOLOV 4

网络结构

组件解析

1.CBM

这是yolov4网络中最小的组件,由Conv+Bn+Mish激活函数构成。

2. CBL

CBM类似,由Conv+Bn+Leaky激活函数构成

3.Res unit

借鉴Res-net中的残差结构,能够有效解决网络深度带来的梯度问题网络退化的问题。
它在此网络中的结构可以从图中左下角看出,输入X经过两个CBM之后再和输入X进行add操作。

add操作:张量相加,不会扩充维度。例如:AxAxB + AxAxB = AxAxB

详细解说传送门:残差结构详解

4.SPP

和传统的SPP-net中实现的效果不同,在yolov4中,并不是完成固定输入大小等功能,而是通过SPP模块实现了局部特征和全局特征,多重感受野融合,提升精度。

SPP传送门:
SPP-Net
SPP-Pytorch
SPP-Yolov3

5.CSPX

可以从图中看到,CSPX的实现是:输入X经过两条不同线路后Concat在一起。1个CSPX由3个CBM和X个Res unit残差组件构成

**Concat操作:**张量拼接,维度会扩充。例如:13x13x1 + 13x13x1 = 13x13x2

模块解析


Yolov 4 可以分为4个大的部分进行学习

输入端

输入端采用了Mosaic数据增强、cmBN、SAT自对抗训练

1.Mosaic数据增强

Mosaic数据增强,采用随机缩放、随机裁剪、随机排布的方式对4张图片进行拼接。

优点在于:

  • 丰富数据集
  • **需求少的CPU:**可以直接计算4张图片数据,能够使用1个gpu达到较好的训练效果。

BackBone主干部分

BackBone部分将CSPDarknet53、Mish激活函数、Dropblock进行结合,共拥有 72 个卷积层。

1.CSPDarknet53

CSPDarknet53是在yolov3使用的Darknet53的基础上,借鉴CSPNet产生的BackBone结构,其中包括5个CSPX模块。
[Yolov4-Pytorch-0]----yolov4网络概况_第1张图片
每个CSPX模块前面都有2个CBM模块:
第一个CBM模块,卷积核大小基本上为11,stride=1,作用应该为调整filter的数量。
第二个CBM模块,卷积核大小为3
3,stride=2,起到下采样的作用。
BackBone中有5个CSP模块,所以输入图像经过5次下采样,则特征图的变化为:608 >> 304 >>152 >> 76 >> 38 >> 19,到最后一个CBM输出应为:19x19x1024

优点在于:

  • 增强CNN的学习能力,使得在轻量化的同时保持准确性
  • 降低计算瓶颈
  • 降低内存成本

2.Mish激活函数

Mish激活函数是2019年下半年提出的激活函数。
其只在BackBone主干网络中使用,在其他部分依旧使用leaky_relu激活函数。
[Yolov4-Pytorch-0]----yolov4网络概况_第2张图片

3.Dropblock

Dropblock是在Dropout进行随机丢弃信息的基础上,对每个特征图进行部分区域清零。并不是使用固定的归零比率,而是在训练时以一个小的比率开始,随着训练过程线性的增加这个比率

[Yolov4-Pytorch-0]----yolov4网络概况_第3张图片

Neck部分

Neck部分位于BackBone主干输出和prediction之间的区域,在进行预测之前对输出进行进一步的加工。

1.FPN+PAN

首先看yolov 3的网络结构,从BackBone中引出两个特征图分别用以预测38x3876x76
[Yolov4-Pytorch-0]----yolov4网络概况_第4张图片
我们将流程简略地立体地画出来,可以更加直观地看出两部分如何通过FPN结构融合的:
[Yolov4-Pytorch-0]----yolov4网络概况_第5张图片
在BackBone中,会进行5次下采样的过程,分别采用输出结果为
①.76x76
②.38x38
③.19x19

的3种特征图进行参与prediction的过程。

BackBone主干网络输出将直接进行 19x19x255 的prediction,
输出经过一次上采样,再和 ②.38x38 进行Concat,来进行 38x38x255 的prediction,
上一层结果再经过一次上采样,与 ③.19x19 进行Concat,来进行 19x19x255 的prediction。

Yolov 4中,FPN结构和PAN结构进行融合,相当于在FPN结构的基础上额外加了一层 down-top的结构
[Yolov4-Pytorch-0]----yolov4网络概况_第6张图片
相同的地方在于,依旧使用FPN结构,只不过FPN中的结果不再直接参与prediction,而是进行PAN之后再参与prediction

  1. FPN中得到的76x76的特征图,将直接参与 76x76x255 的prediction。
  2. Botton-up中的 76x76 特征图经过PAN结构,再和FPN结构中38x38的特征图进行Concat,得到38x38特征图,参与38x38x255的prediction
  3. Botton-up中的 38x38 特征图经过PAN结构,再和FPN结构中19x19的特征图进行Concat,得到19x19特征图,参与19x19x255的prediction

注意:这里使用的PAN结构,使用的是Concat操作,而不是add操作
[Yolov4-Pytorch-0]----yolov4网络概况_第7张图片

你可能感兴趣的:(PyTorch,深度学习,神经网络,python,pytorch,网络)