从零复现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 整体网络结构和组件
CBM: 卷积+BN层+Mish激活函数 CBL: 卷积+BN层+LeakyRelu激活e函数 SPP: 这个也算是一个创新点了,一个特征图经过3个最大池化+一个直连,最后通过拼接得到输出。 CSPX: CSP网络结构再Res残差模块基础上又新加入了一个卷积分支再拼接到一起
4. Neck颈部原理
FPN+PANET等多尺度融合金字塔网络,这个地方区别于YOLOV3中,也算是一个创新点 FPN+PANET通过自底向上和自顶向下的方式,实现双方向的特征图融合,使得最终输出的3个特征图都具有了其他尺寸特征图的信息来提高准确。而再YOLOV3中只使用了自底向上单个方向的特征图融合。
|