FGVC---Bilinear Pooling (双线性池化)及其发展

这里写目录标题

  • 基本的Bilinear CNN
  • 降低维度
        • Compact Bilinear Pooling-CVPR2016
        • Low-rank Bilinear Pooling for Fine-Grained Classification-CVPR2017
  • 跨层双线性池化
        • Hierarchical Bilinear Pooling for Fine-Grained Visual Recognition-ECCV2018
  • AAAI 2020 paper: "Revisiting Bilinear Pooling: A Coding Perspective".

基本的Bilinear CNN

原文:Bilinear CNNs for Fine-grained Visual Recognition
pytorch代码:https://github.com/HaoMood/bilinear-cnn
FGVC---Bilinear Pooling (双线性池化)及其发展_第1张图片
双线性池化包括四个部分: B = ( f A , f B , P , C ) B=(f_A,f_B,P,C) B=(fA,fB,P,C)
其中 f A f_A fA f B f_B fB是特征提取函数,通常基于CNN。 P P P是池化函数, C C C是分类函数。

  • 特征提取
    特征提取一般采用CNN,根据是否共享,可以由如下三种方式:
    FGVC---Bilinear Pooling (双线性池化)及其发展_第2张图片

  • 双线性combination
    主要就是用外积(matrix outer product)来组合两个CNN(A和B)的feature map (当然也可以不用CNN)
    对于图片 I I I和位置 l l l,其双线性combination为:
    在这里插入图片描述
    其中位置 l l l 涵盖了位置和尺度, I I I 是图像。 f f f 的维度是(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,可以进行如下的核方法转化。
FGVC---Bilinear Pooling (双线性池化)及其发展_第3张图片
然后论文希望找到一种映射ϕ(x),使得<ϕ(x),ϕ(y)>≈k(x,y)这很像是核方法反着用的形式。
FGVC---Bilinear Pooling (双线性池化)及其发展_第4张图片
论文采用了两种方法的映射,Random Maclaurin(RM)和Tensor Sketch(TS),这两个映射的期望都是2,方差为1/d。
FGVC---Bilinear Pooling (双线性池化)及其发展_第5张图片
如上图,FB代表原始的full bilinear pooling方法。
通过对比,可以发现,当d为较小维度的时候,就可以得到与bilinear model 相同的精度。其中,蓝色线为full bilinear pooling 方法的误差。(但总体比full bilinear方法要差一点)

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

这篇文章的目的也是要降低参数维度。同时,提高模型的精度。论文与原始论文模型不同的是,这篇论文采用对称的网络模型,也就是两个steam是相同的,那么只需要训练一个CNN过程就好,大大的减少了计算的开支。同时特征的意义就变为在位置i上特征的相关性矩阵。最后论文采用了一个低秩的分类器进行分类。
FGVC---Bilinear Pooling (双线性池化)及其发展_第6张图片

跨层双线性池化

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飞机)进行了综合实验,结果证明了我们方法的有效性。

整体模型结构:
FGVC---Bilinear Pooling (双线性池化)及其发展_第7张图片

总的来说 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操作,得到三组特征,并将这些特征拼接在一起,最后进行分类。
FGVC---Bilinear Pooling (双线性池化)及其发展_第8张图片

结果对比:
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
FGVC---Bilinear Pooling (双线性池化)及其发展_第9张图片
FGVC---Bilinear Pooling (双线性池化)及其发展_第10张图片

AAAI 2020 paper: “Revisiting Bilinear Pooling: A Coding Perspective”.

源代码
新角度看双线性池化,冗余、突发性问题本质源于哪里?

你可能感兴趣的:(图像处理,深度学习,FGVC,细粒度,bilinear,双线性池化)