1.简介
双线性池化是 2015 年在《Bilinear CNN Models for Fine-grained Visual Recognition》首次用于细粒度识别,随后更是出现了一系列双线性算法的改进。双线性池化主要用于特征融合,对于同一样本提取的特征 x 和 y,通过 bilinear pooling 融合特征获得更具有表征能力的特征描述符。如果 x 和 y 来自于不同特征提取器,则称之为多模双线性池化,如果来自同一个特征提取器则称之为同源双线性池化或者二阶池化。
2.各种双线性池化
2.1 原始 bilinear pooling——《Bilinear CNN Models for Fine-grained Visual Recognition》
语言描述就是在说对两个特征在每个 location 上(共有 h*w 个 location)的 c 维向量做外积融合得到矩阵 b,对所有 location 上的 b 做和池化得到矩阵\phi,为什么是和池化而不是最大或平均池化应该是因为最大池化损失的信息量最少,再把\phi拉伸成c_ac_b维向量 x,记为 bilinear vector。最后对 x 做符号平方根运算得到 y,对 y 做 L2 归一化得到最终特征 z 输入到分类网络进行分类。
总结:bilinear pooling 之所以取得了不错的效果是融合了一阶特征得到高维的二阶特征从而包含更多的信息量,由于是对所有 location 做和池化所以还具有平移不变性但由于其巨大的维度导致性能低下无法在实际中应用,比如原文的 feature map 通道数为 512,那么最后的特征有 26K 的维度。