0. 写在前面
本篇介绍SPP模块、FPN模块模块,主要也是对YOLOv5的内容的补充:
Yolo系列算法-理论部分-YOLOv4-CSDN博客
Yolo系列算法-理论部分-YOLOv5-CSDN博客
上一篇:
YOLOv5-小知识记录(二)-CSDN博客
1. SPP模块
Spatial Pyramid Pooling,设计该模块的目的是,确保输入全连接层之间的特征向量feature vector是固定尺寸。feature vector 是feature maps的展开,常规的做法是对输入的数据进行剪裁和变形操作,这两种操作可能引发裁剪区域没包含物体的全部或者目标无用,是真严重等问题;而SPP则是将不同feature maps展开为固定尺寸的feature vector。
工作原理:对每个特征图,使用三种不同尺寸的池化核进行最大池化,分别得到预设的特征尺寸,最后将所有特征图展开为特征向量并融合。
以经过了5次卷积模块运算后的Tensor[1,256,10,10],运用SPP原理倒推最大池化层信息。
步骤:
- 明确全连接层的输入参数尺寸:107521 = 21*256 = 16*256+4*256+1*256;
- 明确三种池化后的特征图尺寸,4*4,2*2,1*1;
- 求出三种的kernel、stride和padding:
- 4*4对应的kernel = 10/4 = 3;stride = 10/3 = 3;padding = [(3*4-10+1)/2] = 1;
- 2*2对应的kernel = 10/2 = 5 ; stride = 10/2 = 5;padding = [(5*2 -10 +1)/2] = 0;
- 1*1对应的kernel = 10/1 = 10; stride = 10/1 = 10;padding = [(10*1 - 10 +1)/2] =0。
优点:可以忽略输入尺寸并产生固定长度的输出;利用不同池化核尺寸提取特征的方式可以获得丰富的特征信息,有利于提高网络的识别精度。
2. FPN模块
Feature pyramid network,在目标检测中加入特征金字塔,提高目标检测的准确率,尤其是在小物体的检测上。
特征金字塔的高(深)层特征包含丰富的语义信息(利于分类),但分辨率低,很难准确地保存物体的位置信息;低(浅)层特征虽然语义信息较少,但分辨率高,包含准确地物体位置信息(有利于检测和分割)。
FPN将低层特征和高层特征融合起来,得到一个识别和定位都准确地目标检测结构。
主要包括:Bottom-up、Top-down和Lateral connection。
(1)Bottom-up:就是将图片输入到backbone中提取特征的过程;
(2)Top-down:就是将高层得到的feature map进行上采样然后往下传递,将深层包含语义信息传到低层特征上,使低层特征也能包含丰富语义信息;
(3)Lateral connection:是一个特征融合过程,P1是C1经过1*1卷积后的特征与P2上采样后的特征进行融合(add方式,直接相加,不增加维度)。