28 February 2023
Paper: YOLOv4: Optimal Speed and Accuracy of Object Detection
一种用于提取特征的模块,它可以在不同尺度的感受野中进行池化操作,从而在保留空间信息的同时,减少了特征图的尺寸,减少了计算量。
SPP 模块的基本思想是在不同大小的池化窗口中对输入特征图进行池化,然后将这些池化结果串联起来,作为下一层网络的输入。这样做的好处是可以在不同尺度上提取特征,从而提高模型的识别能力。
class SpatialPyramidPooling(nn.Module):
def __init__(self, pool_sizes = [5, 9, 13]):
super(SpatialPyramidPooling, self).__init__()
self.maxpools = nn.ModuleList([
nn.MaxPool2d(pool_size, 1, pool_size // 2) for pool_size in pool_sizes
])
def forward(self, x):
features = [maxpool(x) for maxpool in self.maxpools[::-1]] # ❗️[::-1] 13 -> 9 -> 5
features = torch.cat(features + [x], dim = 1)
return features