"NetVLAD"场景识别模型解读

Posted 帅气的小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了"NetVLAD"场景识别模型解读相关的知识,希望对你有一定的参考价值。

c论文: NetVLAD: CNN architecture for weakly supervised place recognition

来源:CVPR 2016

应用:NetVLAD是一种场景识别算法,但实际上其不仅仅能应用于场景识别,该网络结构可以对卷积神经网络得到的中间特征进行编码,并实现了BP,因此可以用于其他任何以卷积神经网络为基础的识别或者检索场景,并获得比SIFT等为基础的其他特征编码算法更强的检索能力。

导读:NetVLAD是于2016年提出的一种场景识别算法,该算法改进于VLAD,VLAD算法以SIFT或该类算法为基础,对其提取的特征进行编码,得到一段较短的特征串,NetVLAD以卷积神经网络作为基础特征提取结构,与该网络连接,实现端到端的训练。该论文主要有两点贡献:1是设计了NetVLAD网络层,实现了其BP功能,从而可以做到端到端的训练,2是提出了一种弱监督的Triplet loss,从而可以有效的利用带有较多噪音的训练数据。

NetVLAD网络

首先给出整个网络的结果,如下图所示,其包含两个部分,首部分截取自一个卷积神经网络最后一个卷积层前,其输出为H*W*D(H,W为图像高宽,D为特征维度)的特征矩阵,尾部分实际上可以理解其为池化层,该层的设计基于VLAD,因此其命名为NetVLAD层。

VLAD在BOF、FV、VLAD算法浅析 这里有过简单阐述,它实际上属于一个特征编码器,被广泛用于实体检索与图像分类领域。一般来说,给定长度为N的D维图像特征xi作为输入,K个聚类中心(视觉词汇)ck作为码本,VLAD的输出为D*K维矩阵,如公式(1)所示,V为D*K维矩阵,该矩阵会reshape为一段向量,在normalization后作为最终输出。

xi(j) 是第i个descriptor的第j维特征, ck(j)是第k个聚类中心,ak(xi)表示xi是否属于第k个聚类中心,如果是则为1,否则为0。也就是说,该矩阵其实最后得到的值是各个D维特征关于某一个聚类中心的累加残差,然后先对每个视觉词汇的残差做归一化,然后reshape为一段向量并做整体归一化。

要想将VLAD融入进神经网络中实现端到端训练,必须使其训练过程能够BP,也就是所有op和所有参数都可微分,其实VLAD的操作中唯一需要修改的就是其hard assignment参数ak(xi)(该参数表示xi属于哪一个聚类中心,取值为0或1),论文将其替换为soft assignment,如公式(2)所示。

上一个公式通俗来说就是,xi是否属于某一个聚类中心不再简单输出0,1,而是输出一个介于0到1的概率值,该概率值反映与某一个聚类中心的相近概率,是一个正的常数,是一个衰减系数,当其为正无穷时,该公式等价于只能取值为0或1。

通过对公式(2)展开,可以发现项能够消掉,因此得到公式(3),其中

NetVLAD的最终表达式如公式(4)所示。

对于每一个聚类中心k来说,都是需要训练的参数,这三个参数相互独立,相比于VLAD的单一参数Ck,作者认为这种方式更具灵活性,下图解释了将中解耦,使得VLAD更加适应新数据集(该处由论文《“All about VLAD"》证明)。

这里解释一下,作者通过这个图想证明,NetVLAD的聚类中心并不是固定在中心,因此在面对图中所示的情况时,能够得到更好的效果,也就是说红绿虽然很接近,但因为聚类中心位置的不同,会得到不好的结果,显然星号位置为聚类中心更好,此时二者计算得到的相似度更接近,也更符合图中所反映的情况。

其实返过来看第一张图,soft-assignment阶段,整个过程可以公式化为,它可以视为分为两个阶段,第一步:先用K个1*1的卷积核卷积矩阵,卷积矩阵参数为,偏置项为,产生结果第二步:上一步的结果送入求得

一种能够处理带噪音数据的Triplet loss(Weakly supervised triplet ranking loss)

之所以提出Weakly supervised triplet ranking loss,是因为作者采用的训练数据含有大量噪音,因为某一相同场景下取到的照片不一定是同一个地方(角度原因等),所以用传统的triple loss不可行。作者提出的这种triple loss,其实可以这样理解,对于给定的一系列图片,要在相邻位置取一张与其最相似的,那么这张最相似的只需要和给定的序列图片最相似且与某一较远位置的序列图片最不相似即可。

以上是关于"NetVLAD"场景识别模型解读的主要内容,如果未能解决你的问题,请参考以下文章

语音识别spinx4切换中文模型时报错IndexOutOfBoundsException

unity怎么打开模型文件

人脸识别变色怎么过

使用“截断”大 68 点模型进行人脸编码

pytorch torch.nn.CTCLoss 参数详解

three.js如何让场景中模型跟随鼠标旋转呀