哈哈,好久没写博客了。。。。最近懒癌发作~~主要是因为心情不太好啊,做什么事情都不太顺心,不过已经过去啦。最近一直忙着公司的项目,想用这个网络,就给大家带来了的这篇文章。可能比较老,来自ICCV 2015的一篇关于细粒度分类的文章,文章:B-CNN。由于文章比较简单,我就不介绍的那么详细啦~
科普下:粗粒度与细粒度分类
粗粒度:比如猫狗猪这种差别比较大的。
细粒度:狗类别中,识别是什么品种的狗,这就是细粒度分类。
B-CNN框架:
从图中可以看出,其实就是两个卷积神经网络对图像进行特征抽取,然后用一个bilinear pooling 函数把CNN 抽取的两组特征进行结合,最后代入softmax层进行分类。
在一般的深度学习模型中,都是由一个神经网络构成的,在这里,有两个神经网络 A
和 B,输入图像首先被调整到448 × 448大小,然后用这两个网络分别提取该幅图像的特征,在图像的每一个位置,两个网络分别生成1 × 512大小的特征,在每一个位置 对两个网络提取的特征A(l)和B(l)做外积操作:
得到这个位置的双线性特征,大小为512X512。
接下来采用求和池化方式,将所有位置得到的双线性特征进行求和作为本幅
图像的特征:
它的大小也为 512 × 512,接下来对该双线性特征进行如下计算:
得到它的带符号平方根,并进行正则化:
以此作为该幅图片的特征,并用来分类。这个双线性特征比单个卷积网络提
取的特征在分类中获得更好的效果,两个卷积神经网络的作用在这里分别相当于
区域检测和特征提取。因此,它一方面避免了传统方法中大量的人工标记操作,
同时也获得了较高的准确率。
在训练过程中,两个网络可以同时被训练,并且整个训练过程是端到端的,
已知 X的损失函数梯度为,A和 B 的损失函数梯度由链式法则求得:
这里的网络 A和网络 B 可以是两个对称的网络,也可以是两个不对称的网
络.文中分别用了VGG-16 和VGG-19两种网络。
关于为什么用向量的外积,我想是吸收两组CNN 抽取的特征,然后进项特征融合,其实在这一步,我们可以做就很多东西。我现在发的有一篇文章,也有类似的思想。
首先说说内外积的几何意义
向量a、b的内积是长度为 |a||b|cosθ的标量,是向量a在向量b方向上的分量
而向量a、b的外积是长度为 |a||b|sinθ、并垂直于向量a、b的矢量
这就说明向量a、b的外积和向量a、b是不在同一平面内,或者说,向量a、b在平面上被我们看到了的话,外积我们是看不到的,他应该是一个旋转过程,
所以说,外积在物理上(我感觉运动学会用到)可以说是,对运动产生作用的。