简介

作者提出了一种新型CNN架构用于细粒度图像识别,简单来说就是将图像输入进两个CNN里,将输出的结果矩阵相乘,从而生成两个网络的信息的融合,两个网络倾向于提取不同的特征,比如一个网络用于提取零件,另一个网络用于提取低层特征,将两个矩阵结果关联后可以获得更好的分类结果,一般而言,可以使用两个相同的卷积神经网络架构,保证输出结果的一致性,方便计算
双线性CNN模型用于细粒度图像识别 - 图1

方法

计算方法

首先,输入图像的尺寸是(H,W,C),作者将每个网络输出的特征图的长宽合并,尺寸变为(H×W,C),这样各自形成最后一个维度相同的二维矩阵,现在将其中给一个CNN输出的矩阵转置再与另一个相乘torch.mm(X.T,Y),输出结果的尺寸为(C,C),这样的结果可以同时包含两个矩阵的信息,最后接入softmax层输出预测结果
在输出结果后,作者为了防止梯度爆炸,将其使用l2规范化,保证(C,C)大小的矩阵中各值的和为1,

梯度计算

因为在相乘融合阶段,第一个CNN的梯度信息就是B特征图的值,所以在做反向传播时只需要将另一个矩阵的值做一个转置就是当前矩阵的梯度。进行梯度计算时不会有额外的计算开销,保证模型的运行速度

兼容性

因为文章发表在2015年,那时候CNN还没有普及,类似支持向量机之类的分类方法仍然占主导,这样的分类方法可以融合进当时的各种分类方法中,不过我估计和ResNet相结合也有着不错的结果

问题

主要的问题就是特征图的通道数过多,哪怕是简单的卷积神经网络架构最后的输出层都有512个通道,那融合后的矩阵尺寸就有512×512,参数量过大,影响运算速度,如何在保留信息同时减少通道数量是需要进一步研究的问题

总结

作者使用两个独立的卷积神经网络处理细粒度图像,再将两个图像输出的特征图相乘后进行l2规范化,可以融合多维度的信息得到更好的结果