SPP-net 论文笔记

Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

SPP-net

论文链接: https://arxiv.org/abs/1406.4729

一、 Problem Statement

传统的网络结构设计由于包含了全连接层,因此需要固定大小的输入。以前的解决办法是用crop和warp来预处理图像,这样会使得精度由于信息的丢失或者变形导致降低。

二、 Direction

SPP-net 论文笔记_第1张图片

提出Spatial Pyramid Pooling(SPP)。

三、 Method

先来看一下网络结构:
SPP-net 论文笔记_第2张图片

在Backbone最后的一层卷积层后面加入SPP,输入到后续的FCL或者neck中。其基本实现原理就是对特征图使用不同的max-pooling,然后把这些max-pooling出来的信息进行concatenate。结构较为简单,可以简单看一下实现代码,来自于ultralytics-YOLOV3:

class SPP(nn.Module):
    # Spatial pyramid pooling layer used in YOLOv3-SPP
    def __init__(self, c1, c2, k=(5, 9, 13)):
        super(SPP, self).__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1)
        self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])

    def forward(self, x):
        x = self.cv1(x)
        return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1))

四、 Conclusion

SPP 有三个优点:

  1. 可以产生固定大小的特征图,不管其输入大小是多少。
  2. SPP使用的是multi-level spatial bins,会使得网络性能鲁棒。
  3. SPP由于输入尺度的灵活性,SPP可以汇集在不同尺度上提取的特征。
  4. 不同大小的训练图像提升了尺度不变性(scale-invariance),然后减少over-fitting。

Reference

  1. https://github.com/ultralytics/yolov3

你可能感兴趣的:(网络Tricks,计算机视觉,目标检测,神经网络)