https://blog.csdn.net/u014686356/article/details/79523853

Bilinear model 以及相关的变形

最近读到了一篇关于bilinear cnn的文章,就把几篇相关的文章进行了阅读和汇总,总共有三篇文章。我将对这三篇文章分别进行描述。

Bilinear CNN Models for Fine-grained Visual Recognition-ICCV2015

<手动空格> 这篇文章的主要思想是对于两个不同图像特征的处理方式上的不同。传统的,对于图像的不同特征,我们常用的方法是进行串联(连接),或者进行sum,或者max-pooling。论文的主要思想是,研究发现人类的大脑发现,人类的视觉处理主要有两个pathway, the ventral stream是进行物体识别的,the dorsal stream 是为了发现物体的位置。论文基于这样的思想,希望能够将两个不同特征进行结合来共同发挥作用,提高细粒度图像的分类效果。论文希望两个特征能分别表示图像的位置和对图形进行识别。论文提出了一种Bilinear Model。下面就是bilinear cnn model的示意图
Bilinear model 及其相关文献-LMLPHP
两个不同的stream代表着通过CNN得到的不同特征,然后将两个特征进行bilinear 操作。接下来,我们将要对bilinear model 进行定义。一个bilinear model 由四元组构成,B=(fA,fB,P,C)B=(fA,fB,P,C),其中fA,fBfA,fB为来个不同的特征,P为Pooling操作,C表示分类器;对特征的每一个位置ll,进行如下计算。

bilinear(l,I,fA,FB)=fA(l,I)TfB(l,I)bilinear(l,I,fA,FB)=fA(l,I)TfB(l,I)


通俗一点讲,就是对图像上的每个位置上的特征进行矩阵相乘,然后进行sum pooling 或者进行max-pooling。对于一个CNN来讲,有c个通道数,那么在位置i上的特征就是1*c的大小,然后与同一位置上,不同CNN得到的1*c的矩阵进行乘积,得到c*c的矩阵,然后将所有位置上的c*c的矩阵进行求和,再转换成向量的形式就可以得到Bilinear vector。得到的特征需要进行开平方y←sign(x)|x|−−√y←sign(x)|x|,和归一化操作z←y/||y||2Fz←y/||y||F2。反向传播过程为:
Bilinear model 及其相关文献-LMLPHP
Bilinear model 可以看做是其他特征算子(BOW,FV,VLAD)的通用形式,

 

实验部分

实验采用在ImageNet 上预训练好的两个网络模型进行实验。发现模型的效果很好。另外,对与传统的模型,增加box的监督信息,会对performance有较大的提高,但是对于bilinear model 缺不明显,说明bilinear model可以更好的发现物体的位置信息,只需要图形的类标信息就可以得到一个很好结果,这对于训练数据的选取是非常有效的,可以去除繁杂的图像标注的内容。

Compact Bilinear Pooling-CVPR2016

由于上述模型的得到的特征维度较高,那么得到的参数数目较多,计算量较大,存储和读取开销较大。这篇文章就采用了一种映射的方法,希望能够达到Bilinear model的performance情况,能够尽量的减少特征的维数。
首先,论文将bilinear model 看做是一种核方法的形式,对于不同的 x的不同特征,x,y,可以进行如下的核方法转化。
Bilinear model 及其相关文献-LMLPHP
然后论文希望找到一种映射ϕ(x)ϕ(x),使得<ϕ(x),ϕ(y)>≈k(x,y)<ϕ(x),ϕ(y)>≈k(x,y)这很像是核方法反着用的形式。
Bilinear model 及其相关文献-LMLPHP
论文采用了两种方法的映射,Random Maclaurin(RM)和Tensor Sketch(TS),这两个映射的期望都是<x,y>2<x,y>2,方差为1/d。

实验部分

Bilinear model 及其相关文献-LMLPHP
通过对比,可以发现,当d为较小维度的时候,就可以得到与bilinear model 相同的精度。其中,蓝色线为full bilinear pooling 方法的误差。

Low-rank Bilinear Pooling for Fine-Grained Classification-CVPR2017

这篇文章的目的与第二篇文章相同,都是要降低参数维度。同时,提高模型的精度。论文与第一篇论文模型不同的是,这篇论文采用对称的网络模型,也就是两个steam是相同的,那么只需要训练一个CNN过程就好,大大的减少了计算的开支。同时特征的意义就变为在位置i上特征的相关性矩阵。最后论文采用了一个低秩的分类器进行分类。
Bilinear model 及其相关文献-LMLPHP
上图是三个模型的对比图。在论文中,bilinear model变为如下形式
Bilinear model 及其相关文献-LMLPHP
接下来,我们将要对得到的特征进行向量化,然后放入到SVM分类器中,进行训练。SVM的目标方程为:
Bilinear model 及其相关文献-LMLPHP
这里将W变为一个c*c的矩阵,目标方程变为:
Bilinear model 及其相关文献-LMLPHP
论文也证明了两个方程是就具有相同的优化解。w=vec(W),这个可以根据SVM里对w的求解可以得到。zi=vec(XiXTi)zi=vec(XiXiT)
Bilinear model 及其相关文献-LMLPHP
由于W是一组对称矩阵的sum ,那么很容易得到W也是一个对称矩阵。那么可以将W分解成两个半正定矩阵的差,对W进行特征值分解。如下所示:
Bilinear model 及其相关文献-LMLPHP
+表示特征值为正值的部分,负值为特征值为负数的那部分,这样就可以把W分解为U+,U−U+,U−两个参数。那么为什么要这样分解,因为这样的分解可以使得W具有低秩的特性。那么为什么W要具有低秩的特性呢?论文对200个分类的器的参数求其平均值和方差,发现很多的W的值是接近于0;然后,论文通过降低W的秩来看分类的表现,发现当W的秩为10时,就可以得到与更高秩相同的performance。于是对W进行低秩约束。通过转化,可以将目标方程变为如下形式:
Bilinear model 及其相关文献-LMLPHP
这里可以发现,目标方程里面不在出现XiXTiXiXiT,只有对U+,U−U+,U−进行求解就可以了,这两个参数的维度可以很低。对这个两个参数的更新可以采用反向传播。另外,论文还提出了另外一种模型,就是对UkUk进行降维,来减少参数的数目。
论文采用的方法,添加一个1×1×c×m1×1×c×m的卷积层对U就行降维。
Bilinear model 及其相关文献-LMLPHP

实验结果

Bilinear model 及其相关文献-LMLPHP

【参考文献】

【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】Kong S, Fowlkes C. Low-rank bilinear pooling for fine-grained classification[C]//2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2017: 7025-7034.

--------------------- 本文来自 小黄人的banana 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u014686356/article/details/79523853?utm_source=copy

10-04 13:45