FGVC---Bilinear Pooling (双线性池化)及其发展
这里写目录标题
基本的Bilinear CNN
原文:Bilinear CNNs for Fine-grained Visual Recognition
pytorch代码:https://github.com/HaoMood/bilinear-cnn
双线性池化包括四个部分:
其中和是特征提取函数,通常基于CNN。是池化函数,是分类函数。
-
特征提取
特征提取一般采用CNN,根据是否共享,可以由如下三种方式: -
双线性combination
主要就是用外积(matrix outer product)来组合两个CNN(A和B)的feature map (当然也可以不用CNN)
对于图片和位置,其双线性combination为:
其中位置 涵盖了位置和尺度, 是图像。 的维度是(K,D),D是指channel。如果A和B输出的特征维度分别是(K,M)和(K,N),经过bilinear后维度变为(M,N)。外积导致特征的维度D 增大为原来的平方。 -
pooling函数
pooling函数整合所有位置的bilinear combination,来得到图片的全局信息:
由于特征的位置维度被求和运算消除掉了,得到的bilinear特征与位置、顺序无关,是orderless的。
最后将bilinear特征经过符号平方根变换,并增加l2标准化(elementwise normalization layer) -
分类
原文分类采用了SVM
降低维度
Compact Bilinear Pooling-CVPR2016
由于上述模型的得到的特征维度较高,那么得到的参数数目较多,计算量较大,存储和读取开销较大。这篇文章就采用了一种映射的方法,希望能够达到Bilinear model的performance情况,能够尽量的减少特征的维数。
首先,论文将bilinear model 看做是一种核方法的形式,对于不同的 x的不同特征,x,y,可以进行如下的核方法转化。
然后论文希望找到一种映射ϕ(x),使得<ϕ(x),ϕ(y)>≈k(x,y)这很像是核方法反着用的形式。
论文采用了两种方法的映射,Random Maclaurin(RM)和Tensor Sketch(TS),这两个映射的期望都是<x,y>2,方差为1/d。
如上图,FB代表原始的full bilinear pooling方法。
通过对比,可以发现,当d为较小维度的时候,就可以得到与bilinear model 相同的精度。其中,蓝色线为full bilinear pooling 方法的误差。(但总体比full bilinear方法要差一点)
Low-rank Bilinear Pooling for Fine-Grained Classification-CVPR2017
这篇文章的目的也是要降低参数维度。同时,提高模型的精度。论文与原始论文模型不同的是,这篇论文采用对称的网络模型,也就是两个steam是相同的,那么只需要训练一个CNN过程就好,大大的减少了计算的开支。同时特征的意义就变为在位置i上特征的相关性矩阵。最后论文采用了一个低秩的分类器进行分类。
跨层双线性池化
Hierarchical Bilinear Pooling for Fine-Grained Visual Recognition-ECCV2018
Hierarchical Bilinear Pooling for Fine-Grained Visual Recognition论文笔记
作者源码—caffe
pytorch实现1 —acc=80.42
pytorch实现2—骨干网resnet
贡献:
- 我们开发了一种简单但有效的跨层双线性池技术,它同时支持特性的层间交互,并以一种相互增强的方式学习细粒度表示。
- .在跨层双线性池的基础上,提出了一种分层双线性池集成框架,对多个跨层双线性模块进行集成,从中间卷积层获取互补信息,提高性能。 2.在跨层双线性池的基础上,提出了一种分层双线性池集成框架,对多个跨层双线性模块进行集成,从中间卷积层获取互补信息,提高性能。
- 我们对三个具有挑战性的数据集(幼鸟、斯坦福汽车、fgvc飞机)进行了综合实验,结果证明了我们方法的有效性。我们对三个具有挑战性的数据集(幼鸟、斯坦福汽车、fgvc飞机)进行了综合实验,结果证明了我们方法的有效性。
整体模型结构:
总的来说 Hierarchical Bilinear Pooling 比 Bilinear Pooling多的就是层之间的交互,具体是这样实现的:以最简单的结构举例,假设两个CNN都采用VGG-16结构,去掉VGG的全连接层,卷积层最后三层定义为relu5_1, relu5_2, relu5-3,Bilinear Pooling 就是将CNN1的relu5-3和CNN2的relu5-3做了Bilinear Pooling操作,得到的结果进行分类。而Hierarchical Bilinear Pooling是将CNN2的relu5-3分别和CNN1的relu5-1,relu5-2,relu5-3做Bilinear Pooling操作,得到三组特征,并将这些特征拼接在一起,最后进行分类。
结果对比:
FBP表示Factorized Bilinear Pooling(Hadamard product for low-rank bilinear pooling. arXiv preprint arXiv:1610.04325 (2016))
CBP表示Cross-layer Bilinear Pooling
HBP表示Hierarchical Bilinear Pooling