目录
YOLOv5的结构图
YOLOv5中的Bottleneck
BottleNeck1:先是1x1的卷积层(conv+batch_norm+silu),然后再是3x3的卷积层,最后通过残差结构与初始输入相加。
BottleNeck2:先是1x1的卷积层(conv+batch_norm+silu),然后再是3x3的卷积层,没有加入残差结构。
BottleNeck1用在主干网络中, BottleNeck2用在neck中。
YOLOv5的 6.0版本相较于5.0版本的改动
Backbone部分有一个很小改动,把网络的第一层(原来是Focus
模块)换成了一个conv卷积层
在Neck部分的变化还是相对较大的,首先是将SPP(
Spatial Pyramid Pooling)
换成成了SPPF,
两者的作用是一样的,但后者效率更高。
SPP结构又被称为空间金字塔池化,能将任意大小的特征图转换成固定大小的特征向量。结构如下图所示,是将输入并行通过多个不同大小的MaxPool
,通过三种尺度的池化,将任意大小的特征图固定为相同长度的特征向量,传输给全连接层。因为卷积层后面的全连接层的结构是固定的。但在现实中,我们的输入的图像尺寸总是不能满足输入时要求的大小,然而通常的手法就是裁剪(crop)和拉伸(warp),但这样做总归是不好的,其扭曲了原始的特征。而SPP层通过将候选区的特征图划分为多个不同尺寸的网格,然后对每个网格内都做最大池化,这样依旧可以让后面的全连接层得到固定的输入。
而SPPF
结构是将输入串行通过多个5x5
大小的MaxPool
层,这里需要注意的是串行两个5x5
大小的MaxPool
层是和一个9x9
大小的MaxPool
层计算结果是一样的,串行三个5x5
大小的MaxPool
层是和一个13x13
大小的MaxPool
层计算结果是一样的。SPPF把池化后得到的特征一部分拿去concat一部分继续池化,应该是想通过不同层次池化得到不同层次的特征,效果好一些。
FPN和PAN结构
FPN:Feature Pyramid Network 特征金字塔网络
PAN:Path Aggregation Network 路径聚合网络
上采样是从下边往上采,下采样是从上边往下采
如下图所示,FPN是自顶向下的,将高层的特征信息通过上采样的方式进行传递融合,得到进行预测的特征图。
PAN就是在FPN的后面添加一个自下向上的金字塔,对FPN进行补充,如下图所示,其中包含两个PAN结构,这样结合操作,将低层的定位特征传递上去。
FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征。
(1)先复制特征金字塔中最底下的那层(①),变成新特征金字塔的最底层。
(2)将新特征金字塔的最底层来一个下采样操作,然后原特征金字塔的倒数第二层进行一个3 * 3卷积,步幅为2;然后与下采样后的最底层进行一个横向连接,两者相加。最后再来一个3 * 3卷积来融合他们的特征,进而得到新特征金字塔的中间层
(3)新特征金字塔的顶层的操作与中间层步骤一致。