-
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognitionh:https://arxiv.org/abs/1406.4729
-
DC-SPP-YOLO: Dense Connection and Spatial Pyramid Pooling Based YOLO for Object Detection:https://arxiv.org/abs/1903.08589
对于一个CNN模型,可以将其分为两个部分:
前面包含卷积层、激活函数层、池化层的特征提取网络,下称CNN_Pre,
后面的全连接网络,下称CNN_Post。
许多CNN模型都对输入的图片大小有要求,实际上CNN_Pre对输入的图片没有要求,可以简单认为其将图片缩小了固定的倍数,而CNN_Post对输入的维度有要求。
SPP:空间金字塔池化,无论CNN_Pre输出的feature maps尺寸是怎样,都能输出固定的维度传给CNN_Post。
SPP的本质就是多层maxpool,只不过为了对于不同尺寸大小 aa 的featur map 生成固定大小 nn 的的输出。
Conv 模块
class Conv(nn.Module):
# Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)
default_act = nn.SiLU() # default activation
def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):
super().__init__()
self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)
self.bn = nn.BatchNorm2d(c2)
self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()
def forward(self, x):
return self.act(self.bn(self.conv(x)))
def forward_fuse(self, x):
return self.act(self.conv(x))