-
視覚認識のための深層畳み込みネットワークにおける空間ピラミッドプーリング:https://arxiv.org/abs/1406.4729
-
DC-SPP-YOLO: 物体検出のための高密度接続と空間ピラミッド プーリング ベースの YOLO:https://arxiv.org/abs/1903.08589
CNN モデルの場合、次の 2 つの部分に分割できます。
畳み込み層、活性化関数層、プーリング層を含む特徴抽出ネットワーク(以下、CNN_Preと呼びます)、
次の完全に接続されたネットワーク (以下、CNN_Post と呼びます)。
多くの CNN モデルには入力画像のサイズに関する要件があります。実際、CNN_Pre には入力画像に関する要件はありません。単純に画像を固定倍数で縮小すると考えることができますが、CNN_Post には入力次元に関する要件があります。
SPP: 空間ピラミッド プーリング。CNN_Pre によって出力される特徴マップのサイズに関係なく、固定次元を出力して CNN_Post に渡すことができます。
SPP の本質は多層マックスプールですが、それは異なるサイズ a a の特徴マップに対して固定サイズ n nの出力を生成するだけです。
変換モジュール
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))