从零复现PyTorch版(2)

从零复现PyTorch版(与行人车辆检测实战)(2)

Yolov4网络结构和代码构建(1)

1. 项目介绍

Yolov4 网络结构和组件
Yolov3的回顾,Yolov4的整体框图介
绍,各个子模块的具体含义
Backbone
CSPNet等最新的提升性能技术
Neck
FPN+PANNET自顶向下+自低向上双
向多尺度融合, SPP金字塔池化
Yolo Head
头部的DECODE和ENCODE过程,和
Yolov3基本一致

Yolov3整整个部分由CBL,Resn,上采样,concat,yolo头组成,咱们后面使用
pytorch实现代码YOLOV3的backbone的时候也会依据图中的基础模块进行封装,
这样更便于大家理解。

2. 为什么要用残差模块?

早期的网络无法太深
在早期的VGG中,卷积网络达到了19层,在早期的GoogLeNet中,网络史无前例的达到了22层。现象随着网络层数的增加,网络发生了退化(degradation)的现象:深随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当你再增加网络度的话,训练集loss反而会增大。
如何解决?
当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到深层,那么效果应该至少不比浅层的网络效果差残差网络由此而生!!!

CBL:包含卷积+BN+激活3个层组成
RESn:先经过一个DBL再+N个Res unit单元组成
Res unit:则是一个经典的Resnet残差模块,一个输入分别经过2个DBL,和直连,再进行
相加,这一经典的连接目前也大量应用到了各种网络中,包括后面的YOLOV4也是在此基础上的衍生。
假定输出入图尺寸是416x416,从网络的输入来看,一共输出3个分别Y1,Y2,Y3特征图向量,形状依次为13x13x(4+obj+class), 26x26x(4+obj+class),52x52x(4+obj+class), 其 中Y1尺寸最小具有更丰富的语义信息,而Y3最大具有更多的表征和空间信息,Y2则处于二者之间。

FPN网络结构
使用特征融合方式问题,特征融合的方式只是单方向的,即将小的特征往大特征图进行融合,而大特征图得到了另2个特征图的融合信息,但是大特征图并没有往小特征图方向融合,这也是后面YOLOV4的一个优化位置。
假定图片输入尺寸为416X416X3,图中在RES4之前则为Darknet53的网络,属于算法的backbone部分,之后经过5个DBL和DBL+Conv后得到一个13X13X255的特征图向量,从尺寸从416到13,经过分别经过了5次下采样,即缩小了32倍,这是提取的最小的一个特征图,具备图像更多的语义信息。

3. Yolov4 整体网络结构和组件

从零复现PyTorch版(2)_第1张图片
CBM
卷积+BN层+Mish激活函数
CBL
卷积+BN层+LeakyRelu激活e函数
SPP
这个也算是一个创新点了,一个特征图经过3个最大池化+一个直连,最后通过拼接得到输出。
CSPX
CSP网络结构再Res残差模块基础上又新加入了一个卷积分支再拼接到一起

从零复现PyTorch版(2)_第2张图片

4. Neck颈部原理

FPN+PANET等多尺度融合金字塔网络,这个地方区别于YOLOV3中,也算是一个创新点
FPN+PANET通过自底向上和自顶向下的方式,实现双方向的特征图融合,使得最终输出的3个特征图都具有了其他尺寸特征图的信息来提高准确。而再YOLOV3中只使用了自底向上单个方向的特征图融合。

从零复现PyTorch版(2)_第3张图片

你可能感兴趣的:(pytorch,深度学习,机器学习)