关键词:NetVLAD Pooling layer triplet-loss fmax function weakly-supervised-learning
摘要:
针对大规模的位置识别问题(place recognition),本文设计了一种NetVLAD结构,在保留经典VLAD算法优点的同时又可以利用神经网络可以反馈学习参数的优点,从而生成即优于VLAD图像描述子又优于神经网络的原始feature-map层特征向量的图像描述子。在Oxford 5k Paris 6k Holidays 上的mAP分别是63.5%,73.5%,79.9%,其中对Oxford 5k的提升达到了20%,可以说是一种很优秀的算法了。
补充两点:一、关于vlad可以参考我的博客https://blog.csdn.net/zshluckydogs/article/details/81003966。
二、MAP(Mean Average Precision)盗一张图
写在前面:
本文的主要工作由两部分组成:
1、NetVLAD的结构
2、triplet-loss函数
论文作者转化问题的思想和构造数学模型的能力值得我们学习借鉴。作者没有直接训练识别位置的网络,而是把位置识别问题转化成了基于内容的图像实体检索。虽然这种方法不是作者原创,只是借此说明我们在解决一个很抽象很不熟悉的问题时尽量把它转化为我们熟悉的问题,这样会大大提高解决问题的效率。如果你遇到了一个无法转化从未见过的问题,如果你解决了,那你可以发论文了。。23333
还有就是作者独立思考的能力,VLAD很成熟很多人知道,CNN也是耳熟能详,但是能够把两者结合起来又用来解决实际问题的人就很少了。
上面两段读者可以自行忽略。。。。。。。。。。
进入正题:
第一个问题:为什么是弱监督学习?
这个跟数据集有关。作者训练用的是Google Street View Time Machine,这个数据集中的图像都有一个GPS标签标记图像的地理位置,但是由于精度等问题,这只是地图上的一个较为接近的位置,可能跟实际位置有误差。用过高德、百度地图等导航软件的小伙伴应该有所体会,GPS总是会有些许误差。但是查询图像是通过camera phone得到的,有较为准确的位置信息,所以它可以用来识别距离较近的全景图,但是无法给出部分场景之间的对应关系。(which can be used to identify close-by panoramas but does not provide correspondences between parts of the depicted scenes.)原文在括号内,博主是这样理解的,有不同理解的可以跟博主讨论。因此,在地理位置上接近的两张图像,由于拍摄角度和遮挡问题,图像的内容可以不同,但只要有相同的GPS位置标记即可。这区别于传统的图像检索算法要求图像内容必须是相同的,所以GPS标记的样本数据只能做弱监督的学习,提供潜在的正样本(和查询图像在地理位置上接近的样本)和确定的负样本(和查询图像在地理位置上相距甚远的样本)。
第二个问题:VLAD有什么参数是可以学习的?
神经网络的学习过程也即是卷积层参数的自我更新过程。损失函数是对问题模型的数学表示,用来评估一个网络模型的好坏并且控制权值的更新方向(梯度)。最好的模型即是问题的最优解是在损失函数取得最优解时得到的(此时网络收敛)。
对于VLAD当我们通过K-means训练出码书时已经完成了相应的最优化问题,此时得到的K-centroids是一个最优解。如果要把VLAD加入到CNN网络中,那么VLAD必须写成可微的函数,并且要设计新的损失函数用来评估模型和参数学习。对于VLAD算法来说,向量 V 如果和第k个聚类中心的距离最近,他就会被分配到k,这是一个0或1的硬分配,不可微。为了解决这个问题作者提出了一种soft-assignment的算法。
公式如下:
(1)
如果你对softMax函数有所了解的话,这个公式是很容易理解的。虽然xi仍然是分配到了它最有可能属于的聚类中心,但是这个用来判断属于关系的数值变成了一个连续可微的值,满足CNN反馈学习的要求。
我们对公式(1)展开令,
,公式(1)可以写成如下公式(2)
(2)
VLAD就可以写成下面公式(3)的形式
(3)
参数,可以通过网络训练学习得到,然后之后的处理步骤与VLAD类似。然后公式(3)可以看作一个卷积层加一个softMax层。
上图是NetVLAD的框架图,左边是一个传统的卷积神经网络,但是没有分类层,在卷积层后接NetVLAD layer,来自CNN的featureMap x 输入到NetVLAD layer中,做一次卷积和soft-max得到x的最可能属于的聚类中心,然后在VLAD core中按照VLAD的方式对x进行处理。最后做两次归一化得到最终的VLAD特征向量。
Conclude: NetVLAD层的W和b可以通过网络学习得到。W和b又跟聚类中心有关,所以网络最终是通过调整聚类中心的值完成参数的学习调整。相当于在原来做完K-means的基础上进一步的优化调整。
第三个问题:loss-function
确切的损失函数可以进行参数的调整,以及模型的调优。类似face Net的三元组损失函数,作者提出了triplet-loss-function,查询图像和潜在正样本的距离小于和确定的负样本的距离。用公式(5)描述如下:
(4)
(5)
(6)
因为潜在的正样本有很多,为了避免冲突和麻烦,我们选取和查询图像距离最近的正样本,损失函数可以写成公式(6)的形式,,m 是一个常数,之后通过优化
训练网络学习参数。
至此,整个网络的训练过程就完整了。
博主实现后会写具体的实施部署过程。