(compact) Bilinear Pooling, Confusion

来源

Learn by attention, learn with confusion.

先引用几段魏秀参大神的论述「见微知著」——细粒度图像分析进展综述 

细粒度物体的差异仅体现在细微之处。如何有效地对前景对象进行检测,并从中发现重要的局部区域信息,成为了细粒度图像分类算法要解决的关键问题。对细粒度分类模型,可以按照其使用的监督信息的多少,分为“基于强监督信息的分类模型”和“基于弱监督信息的分类模型”两大类。 
……略过一万字,建议自己去看…… 
一种对Bilinear CNN模型的解释是,网络A的作用是对物体/部件进行定位,即完成前面介绍算法的物体与局部区域检测工作,而网络B则是用来对网络A检测到的物体位置进行特征提取。两个网络相互协调作用,完成了细粒度图像分类过程中两个最重要的任务:物体、局部区域的检测与特征提取。另外,值得一提的是,bilinear模型由于其优异的泛化性能,不仅在细粒度图像分类上取得了优异效果,还被用于其他图像分类任务,如行人重检测(person Re-ID)。

不多解释,直接开始正文了,建议先读上面这篇综述吧。

Bilinear CNN[1][3] 
先放网络架构图镇楼: 

网络架构很简单,主要就是用外积(matrix outer product)来组合两个CNN(A和B)的feature map (当然也可以不用CNN),bilinear layer如下: 

其中位置l 涵盖了位置和尺度,I 是图像。f 的维度是(K,D)。D是指channel。如果A和B输出的特征维度分别是(K,M)和(K,N),经过bilinear后维度变为(M,N)。用求和池化函数(sum pooling)来综合不同位置的特征,得到一个全局的图片表示: 

由于特征的位置维度被积分掉了,得到的bilinear特征是orderless的。另外注意,外积导致特征的维度D 增大为原来的平方。 
最后将bilinear特征经过符号平方根变换,并增加l2标准化(elementwise normalization layer),然后输入分类器,完成分类任务。 
这里的两个CNN可以共享部分参数,三种不同的方式如下图: 

整体架构依然是DAG,可以直接使用BP算法来优化参数。另外外积的组合方式使得梯度反向传播变得简单,如下图: 

但是作者好像只使用了VGG网络。[1]中的内容基本上说完了,下面来看[3]。 
[3]比较新,里面综述了一些bilinear cnn的进展。然后主要将上述elementwise normalization layer换成了matrix-normalization layer或者它们的组合,有效提高了准确度(2-3%)。另外在这一layer作者还研究了一些更快的梯度计算方法(如Lyapunov equation,SVD),有些近似计算的方法得到的结果没有变差,速度获得了数量级的提高。 
Compact bilinear pooling[2] 
如前所述,full bilinear表示中的外积运算使得特征图的维度变为之前的平方。本文提出了两种紧凑的bilinear表示。首先,将bilinear pooling的结果写出来: 

与之前的符号不太一样,这里的s表示位置,x是SIFT, HOG或CNN输出的局部描述符(即特征),B的维度是c^2。从核方法的角度来看,对于两组特征X和Y,用线性核分类可以作如下推导: 

可见最后相当于是一个二阶多项式核,这有可能解释了实证研究中观察到的优秀表现。 
我们使用k(x,y)来表示这个二阶多项式核函数。记得上面刚说过B(X)的维度是c^2,那么这里我们希望找到一个d维的映射phi,使得d远小于c^2,且满足: 

即使得降维到d后的内积约等于原来k(x,y)中对c^2的内积。如果能够找到这样的phi,则: 

C(X)就是compact bilinear表示。可以看出任何多项式核的低维度近似都可以拿来做compact bilinear pooling。这里研究了Random Maclaurin (RM) 和 Tensor Sketch(TS) 这两种方法。看一下效果与原始bilinear的对比: 

可见在投影维度比较大时与Full Bilinear的差别已经很小。Random Maclaurin Projection算法如下: 

非常简单,有兴趣可阅读改算法原始论文。Tensor Sketch Projection算法如下: 

也不是很复杂。 
目前没有见到bilinear的PyTorch实现(Fast Fourier transform support in PyTorch),其他框架似乎都有相关的代码,似乎是在等我来实现 :) 刚装完,发现几天前一下出现了两个实现: 
DeepInsight-PCALab/CompactBilinearPooling-Pytorch, https://github.com/gdlg/pytorch_compact_bilinear_pooling, 
真刺激! 
Multimodal compact bilinear pooling [4][5][8-10] 
这一块主要是一些针对Visual Question Answering的工作,暂时不细看了。不过有些对bilinear pooling的改进具有通用性。这里稍微看一下[8]。文章指出前述的Tensor Sketch Projection为了降低固定参数导致的偏差仍需采用较高的投影维度,虽然相比于FB降低了两个数量级,但是仍然可能成为计算的瓶颈。鉴于步子太大容易扯着蛋,我决定先不看这篇的具体实现了。

Fine-grained Image Recognition最近的一些进展[6][7] 
Confusion[6] 
作者都是流弊学校的。主要想法是交叉熵损失函数在训练有歧义或比较难以分类的图片时,会倾向于学习到图片的一些特有的特征来降低训练误差,对泛化可能没有帮助。作者提出了两种在交叉熵损失函数中增加confusion的办法,Pairwise Confusion(希望预测的logits差别不要太大,更确切的说,是希望不同类别学习到的表示不要区别太大)和Entropic Confusion(希望logits和随机瞎猜的区别不要过大)。目前版本的文章写的不是很清晰,直接看代码很简单:PyTorch和Caffe实现。注意,这里的Confusion本质是一种正则化,带来了新的weighting parameter。作者发现Confusion获得的准确度高于使用weight decay和DeCov。还可以与Dropout联合使用,在三个实验中都获得了最佳的测试准确率。

Look closer to see better[7] 
是微软亚洲研究院梅涛研究员等人发表的论文,CVPR 2017大会的亮点之一,提出了一个新的循环注意力卷积神经网络,参见微软亚洲研究院CVPR 2017 Oral论文:逐层集中Attention的卷积模型。后面有必要再细看这篇吧。

Kernel pooling[11] 
来自康村的工作,将[2]的二阶多项式核函数推广到高阶泰勒核函数。大概看了下,在鸟数据集比[7]要好一个点,在斯坦福车数据集也和[7]差不多。另外[3]引用了这篇。其tf代码尚未公开。算法如下: 

References 
1. Lin T Y, RoyChowdhury A, Maji S. Bilinear cnn models for 
fine-grained visual recognition[C]//Proceedings of the IEEE 
International Conference on Computer Vision. 2015: 1449-1457. 
2. Gao Y,Beijbom O, Zhang N, et al. Compact bilinear pooling[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 317-326. 
3. Lin T Y, Maji S. Improved Bilinear Pooling with CNNs[J]. arXiv preprint arXiv:1707.06772, 2017. 
4. Fukui A, Park D H, Yang D, et al. Multimodal compact bilinear pooling for visual question answering and visual grounding[J]. arXiv preprint arXiv:1606.01847, 2016. 
5. VQA 之 Multimodal Compact Bilinear Pooling 
6. Dubey A, Gupta O, Guo P, et al. Training with Confusion for Fine-Grained Visual Classification[J]. arXiv preprint arXiv:1705.08016, 2017. 
7. Fu J, Zheng H, Mei T. Look closer to see better: recurrent attention 
convolutional neural network for fine-grained image 
recognition[C]//IEEE Conference on Computer Vision and Pattern 
Recognition (CVPR). 2017.MLA 
8. Kim J H, On K W, Kim J, et al. Hadamard product for low-rank bilinear pooling[J]. arXiv preprint arXiv:1610.04325, 2016. 
9. Yu Z, Yu J, Fan J, et al. Multi-modal Factorized Bilinear Pooling with Co-Attention Learning for Visual Question Answering[J]. arXiv preprint arXiv:1708.01471, 2017. 
10. Yu Z, Yu J, Xiang C, et al. Beyond Bilinear: Generalized Multi-modal Factorized High-order Pooling for Visual Question Answering[J]. arXiv preprint arXiv:1708.03619, 2017. 
11. Cui Y, Zhou F, Wang J, et al. Kernel pooling for convolutional neural networks[C]//Computer Vision and Pattern Recognition (CVPR). 2017.
--------------------- 
作者:Wayne2019 
来源:CSDN 
原文:https://blog.csdn.net/wayne2019/article/details/78441001 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_16234613/article/details/85293110