看到一篇新出的文章Vehicle classication using ResNets, localisation and spatially-weighted pooling,里面提到了一种新的池化方法spatially-weighted pooling,看名字觉得挺新奇的,但是没有具体解释具体的操作过程。然后,去搜索了一下关于这种方法,于是找到了Deep CNNs with Spatially Weighted Pooling for Fine-Grained Car Recognition。这篇文章是关于汽车的细粒度识别的问题。
具体看一下spatially weighted pooling的操作方法。
一、SWP的结构
从图形中,很容易看出,作者是把spatially weighted pooling接在了最后一个卷积层的后面。假设最后一个卷积层的输出结果用X表示, X的维度为:[H, W, D],其中D代表通道数。
swp层的参数是一个维度为[H, W, K]的矩阵,用M表示,将X传入swp层,其和矩阵M进行如下运算:
上述公式中,xi是一个维度为[1, 1, D]的矩阵,mi是1x1的矩阵,上标k表示M的第k张feature map,求和表示xi需要首先遍历整个维度为[H, W]的feature map,然后对遍历的结果求和。
那么,按照上述公式计算,返回的结果pk是一个维度为[1, 1, D]的矩阵,其中k和M矩阵的第k个通道对应。
上述结果是X经过M矩阵的第k个通道的返回结果,那么swp层的输出结果为:
返回值P是一个维度为[K, D]的二维矩阵。
二、SWP的反向传播
假设X是swp层的输入,维度为:[ H, W, D ];M是swp层的参数,维度为:[ H, W, K ] ;P为swp层的输出结果,维度为: [ K, D ]。dL/dp表示误差传播到P的梯度,那么:
ps:(1)关于swp方法,其实和resnet里面的global average pooling (GAP) layer很像,只不过GAP用的是卷积,输出的是维度为[1, 1, K]的向量(按照本文的符号表示方法)。
而swp层,是把M矩阵的每一个通道拿出来,分别和X的每一个通道进行卷积(当然,作者给的计算方法和卷积稍微有一点不同,卷积需要把矩阵进行旋转)。然后把得到的结果pk进行concatenation。
(2)看一下,作者给出的一些swp层的输出结果:
上面的每一幅图片为X经过M的一个通道的输出结果,这和注意力模型也有点类似,只不过,注意力模型要求M的取值要在0到1之间。
(3)虽然从(2)的结果来看,我们可以给它找一些合理的解释,比如类似注意力模型,可以对物体不同地方的细节进行关注(不知道这种结果对于其他的数据集也可以取得类似的效果)。但是,这样做的目的或者意义在哪里呢,仅仅是对GAP的结果进行叠加(concatenation)吗?