:::info 可以作为特征融合的一种方式,除了concatenate. :::

Bilinear pooling

在获得图像的深层描述符之后,双线性池计算
这些深层描写词的外积之和。双线性池
捕获所有成对描述符交互,即
不同的部分,以平动不变的方式。
B-CNN提供比线性模型更丰富的表示,B-CNN实现了
性能优于基于部件的细粒度模型,无需
进一步的零件注释。
参考:双线性池化(Bilinear Pooling)详解、改进及应用

  • bilinear pooling主要用于特征融合,对于从同一个样本提取出来的特征x和特征y,通过bilinear pooling得到两个特征融合后的向量,进而用来分类。
    • 如果特征x和特征y来自两个特征提取器,则被称为多模双线性池化(MBP,Multimodal Bilinear Pooling);如果特征x=特征y,则被称为同源双线性池化(HBP,Homogeneous Bilinear Pooling)或者二阶池化(Second-order Pooling)。
    • 原始的Bilinear Pooling存在融合后的特征维数过高的问题,融合后的特征维数=特征x和特征y的维数之积。

Bilinear Pooling - 图1

  • 定义:直观上理解,所谓bilinear pooling,就是先把在同一位置上的两个特征双线性融合(相乘)后,得到矩阵 ,对所有位置的 进行sum pooling(也可以是max pooling,但一般采用sum pooling以方便进行矩阵运算)得到矩阵 ,最后把矩阵 张成一个向量,记为bilinear vector 。对进行矩归一化操作和L2归一化操作后,就得到融合后的特征 。之后,就可以把特征 用于fine-grained分类了

bilinear CNN的关键在于那个bilinear pooling,即如何融合不同通道的信息来实现细粒度分类。传统的方法比如求和或者平均,只用了一阶统计信息。而bilinear pooling 用了二阶统计信息,意在当一阶信息相同的时候利用二阶信息的不同来做分类。这个本质上和FISHER VECTOR是类似的。 当然,传统的特征融合方法里面也包括feature concatenation。这个从代数上可以看做direct sum,而bilinear pooling可以看做direct product. 因此造成的特征纬度会很高,可以做细粒度分类的同时也容易过拟合。

作者:Yan 链接:https://www.zhihu.com/question/287864216/answer/463846652 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Bilinear CNN及PyTorch实现 计算不同空间位置的外积,并对不同空间位置计算平均池化以得到双线性特征。外积捕获了特征通道之间成对的相关关系,并且这是平移不变的。双线性池化提供了比线性模型更强的特征表示,并可以端到端地进行优化。 双线性汇合(Bilinear pooling)数学推导 因此,类间差异通常比类内差异更小。双线性汇合(bilinear pooling)计算不同空间位置的外积,并对不同空间位置计算平均汇合以得到双线性特征。外积捕获了特征通道之间成对的相关关系,并且这是平移不变的。双线性汇合提供了比线性模型更强的特征表示,并可以端到端地进行优化,取得了和使用部位(parts)信息相当或甚至更高的性能。