哈哈,好久没写博客了。。。。最近懒癌发作~~主要是因为心情不太好啊,做什么事情都不太顺心,不过已经过去啦。最近一直忙着公司的项目,想用这个网络,就给大家带来了的这篇文章。可能比较老,来自ICCV 2015的一篇关于细粒度分类的文章,文章:B-CNN。由于文章比较简单,我就不介绍的那么详细啦~

科普下:粗粒度与细粒度分类

粗粒度:比如猫狗猪这种差别比较大的。

细粒度:狗类别中,识别是什么品种的狗,这就是细粒度分类。

B-CNN框架:

ICCV 2015 B-CNN细粒度分类-LMLPHP

从图中可以看出,其实就是两个卷积神经网络对图像进行特征抽取,然后用一个bilinear pooling 函数把CNN 抽取的两组特征进行结合,最后代入softmax层进行分类。

在一般的深度学习模型中,都是由一个神经网络构成的,在这里,有两个神经网络 A

和 B,输入图像首先被调整到448 × 448大小,然后用这两个网络分别提取该幅图像的特征,在图像的每一个位置,两个网络分别生成1 × 512大小的特征,在每一个位置 对两个网络提取的特征A(l)和B(l)做外积操作:

ICCV 2015 B-CNN细粒度分类-LMLPHP

得到这个位置的双线性特征ICCV 2015 B-CNN细粒度分类-LMLPHP,大小为512X512。

接下来采用求和池化方式,将所有位置得到的双线性特征进行求和作为本幅

图像的特征:

ICCV 2015 B-CNN细粒度分类-LMLPHP

它的大小也为 512 × 512,接下来对该双线性特征进行如下计算:

ICCV 2015 B-CNN细粒度分类-LMLPHP

得到它的带符号平方根,并进行正则化:

ICCV 2015 B-CNN细粒度分类-LMLPHP

以此作为该幅图片的特征,并用来分类。这个双线性特征比单个卷积网络提

取的特征在分类中获得更好的效果,两个卷积神经网络的作用在这里分别相当于

区域检测和特征提取。因此,它一方面避免了传统方法中大量的人工标记操作,

同时也获得了较高的准确率。

在训练过程中,两个网络可以同时被训练,并且整个训练过程是端到端的,

已知 X的损失函数梯度为ICCV 2015 B-CNN细粒度分类-LMLPHP,A和 B 的损失函数梯度由链式法则求得:

ICCV 2015 B-CNN细粒度分类-LMLPHP

这里的网络 A和网络 B 可以是两个对称的网络,也可以是两个不对称的网

络.文中分别用了VGG-16 和VGG-19两种网络。

关于为什么用向量的外积,我想是吸收两组CNN 抽取的特征,然后进项特征融合,其实在这一步,我们可以做就很多东西。我现在发的有一篇文章,也有类似的思想。

 

首先说说内外积的几何意义

向量ab的内积是长度为 |a||b|cosθ的标量,是向量a在向量b方向上的分量

而向量ab的外积是长度为 |a||b|sinθ、并垂直于向量ab的矢量

这就说明向量ab的外积和向量ab是不在同一平面内,或者说,向量ab在平面上被我们看到了的话,外积我们是看不到的,他应该是一个旋转过程,

所以说,外积在物理上(我感觉运动学会用到)可以说是,对运动产生作用的。

 

05-13 18:43