每周论文14

本周论文:

  1. Is Second-order Information Helpful for Large-scale Visual Recognition?
  2. The Treasure beneath Convolutional Layers: Cross-convolutional-layer Pooling for Image Classification

1️⃣[Is Second-order Information Helpful for Large-scale Visual Recognition?]

通过协方差的方法获得图像的二阶信息。
参考了https://zhuanlan.zhihu.com/p/46864160

深度分类网络主要分为两个部分:特征提取和分类器。无论是VGG还是GoogleNet,后来的Resnet、Densenet,在连接分类器之前,一般都连接了一个Pooling层。
但pooling只获得了feature的一阶信息,对于细分类问题中类间差异不显著,一阶信息可能有一些不适用,因此我们可以通过一阶信息获得二阶信息,从而获取更有价值的信息。

本文通过获取特征协方差的方法,以达到该目的。

输入:$\mathbf{X} \in \mathbb{R}^{d \times N}$

则协方差矩阵为$\mathbf{X} \mapsto \mathbf{P}, \quad \mathbf{P}=\mathbf{X} \overline{\mathbf{I}} \mathbf{X}^{T}$,其中$\overline{\mathbf{I}}=\frac{1}{N}\left(\mathbf{I}-\frac{1}{N} \mathbf{1} \mathbf{1}^{T}\right)$, $\mathbf{I}$是单位阵,$\mathbf{1}$是全1的向量。

协方差矩阵是半正定矩阵,因此可写成$\mathbf{P} \mapsto(\mathbf{U}, \mathbf{\Lambda}), \quad \mathbf{P}=\mathbf{U} \mathbf{\Lambda} \mathbf{U}^{T}$,其中$\boldsymbol{\Lambda}=\operatorname{diag}\left(\lambda_{1}, \ldots, \lambda_{d}\right)$,$\mathbf{U}=\left[\mathbf{u}_{1}, \dots, \mathbf{u}_{d}\right]$,$\mathbf{U}$是对应的特征向量。

最终可获得$\mathbf{Q}$矩阵:$(\mathbf{U}, \boldsymbol{\Lambda}) \mapsto \mathbf{Q}, \mathbf{Q} \triangleq \mathbf{P}^{\alpha}=\mathbf{U F}(\mathbf{\Lambda}) \mathbf{U}^{T}$,其中$\alpha$是一个正实数,$\mathbf{F}(\boldsymbol{\Lambda})=\operatorname{diag}\left(f\left(\lambda_{1}\right), \ldots, f\left(\lambda_{d}\right)\right)$,其中$f\left(\lambda_{i}\right)=\lambda_{i}^{\alpha}$,是特征值的幂,如果要做归一化,那么可以有:

之所以取幂,是为了解决在协方差估计中小样本高维度的问题,以resnet为例,最后得到的feature为7X7X512,也就是49个512维的feature,这样估计出来的协方差矩阵是不靠谱的,而通过幂这个操作,可以解决这一问题。通过实验可以发现,当幂次为0.5也就是平方根操作时,效果最优。(似乎类似的有word2vec的平滑)

(虽然这篇有些看不大懂,但一个启发就是,可以通过协方差的方式进行特征之间的交互)


2️⃣[The Treasure beneath Convolutional Layers: Cross-convolutional-layer Pooling for Image Classification]

提出使用卷积出来后的feature经过pooling作为最后的图像特征表示而不是全连接后的特征表示。

Motivation:只使用最后一层fc的特征有一个缺点,就是丢失位置信息,而convolution layer包含了丰富的空间信息。在pooling完后每个local区域都能获得一个特征,并拼接起来作为最后的表示。

prerequisite:
①首先有一个预训练好的模型
②有两层一样$H\times W$的convolution。论文以AlexNet作为例子

假设卷积后的feature map是$H × W × D$,那么可以理解成,我们将图片分为$H × W$的区域,每个区域的特征用$D$维表示。我们称每个$D$维特征一个spatial unit。当使用全连接时,这部分的空间信息就丢失了,并且无法还原。

本文提出,将每个区域提取出一个特征,然后拼起来组成一整张图的特征,如下图,每个长条(也即$1\times 1\times channel$)作为一个特征:

如何判断区域?一种方法是首先检测出多个区域,每个区域对应一种object part,然后对于落入该区域的特征进行pooling,给定D种human-specified object parts,那么可以获得D个feature且拼在一起。

具体而言,$\mathbf{x}_{i}$是特征,$I_{i, k}$是二元的indicator,表明$\mathbf{x}_{i}$是否落入该区域,每个$I$实际上定义了一个池化通道。当然,这里可以进一步将indicator从二元扩展为权重。

但在实现的过程中,并没有human-specified的区域。这里我们就借助下一层的卷积作为indicator。

By doing so, D t+1 pooling channels are created for the local features extracted from the tth convolutional layer

这也就被称为cross-convolutional-layer pooling。

如何做?

the filter of a convolutional layer works as a part detector and its feature map serves a similar role as the part region indicator map.

具体而言,有:

$\mathbf{P}^{t}$表示第t层convolution在卷积过后做cross-pooling后的特征集合,也即我们要获得的表示,该表示通过$D_{t+1}$次pooling后的结果拼接而成。$D_{t+1}$具体来说,就是第t+1层的卷积的channel维数。假设$\mathbf{a}_{i}^{t+1} \in \mathbb{R}^{D_{t+1}}$是第t+1层convolution的第i个空间单位(spatial unit)的feature vector,其中$a_{i, k}^{t+1}$是该向量的一个值,该值就作为pooling的权重。

上述有些绕口且难懂,直接看例子:

即,第t+1层convolution的channel维度为多少,则pooling后的特征个数即为多少。因为第t层与第t+1层的$H\times W$是一致的,那么可以用t+1层的每个slice去对第t层的convolution进行加权。

为什么这样是合理的?
因为第t+1层的convolution提取了$D_{t+1}$个特征,使用的是$m\times n$的kernel size,如果$x$是被$m\times n$的某个kernel提取了,那么很自然的,$x$就是对应该kernel提取出来的feature的一个spatial unit。说白了就是第t层与第t+1层的空间对应。