「解析」SPP 特征金字塔 系列

在这里插入图片描述

对于一个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))

猜你喜欢

转载自blog.csdn.net/ViatorSun/article/details/129846468
今日推荐