NetVLAD:CNN architecture for weakly supervised place recognition

NetVLAD:CNN architecture for weakly supervised place recognition

写在前面:博主并不是做这个place recognition方向的,所以这篇paper我大概只看到netvlad层,后面的loss并不懂。因为近期做行为识别,想改进一下帧与帧之间的融合方案,所以过来学习一下vlad。

ps.github的netvlad用pytorch实现的代码并不多啊~好多都是tensorfow写的,可读性非常差....

abstract

本文的两点贡献:

1)提出NetVLAD,改进了原始的VLAD,该层可接在CNN结构后面

2)提出一种训练方案,based on a new weakly supervised ranking loss,使得VALD在CNN中的应用变成end-to-end

Method

1)给定一张图片Ii,函数f(放在网络中,就是一系列卷积+bn+激活+pooling等)产生一个固定size的向量,f(Ii)。如何优化产生的向量表征f(Ii)?通过改进的netvald。

2)place recognition的整体框架

        a)我们裁剪掉CNN的最后一个卷积层之后的其他层,并将它视为 a dense descriptor extractor。那么最后一个卷积层的输出为H*W*D的特征,对于每个空间点,都是一个D维度的向量。

        b)参考VLAD,设计新的pooling层,即NetVLAD,将得到的特征转化为固定大小的图像表征

3)NetVLAD

          回顾一下VLAD:captures information about the statistics of local descriptors aggregated over the image。给定N个D维度的图像描述符{xi}和k个聚类中心{ck},则VLAD的输出为V,V是K*D维向量,V中第(j,k)个元素的计算方式:

这里ak(xi)是权重,表示空间特征上第i个点和第k个聚类中心的关系。如果对于xi,如果ck是最近的类别,则权重为1,否则为0。

但这里权重ak(xi)只能为1或0,改进一下,使得权重变为0-1之间的小数。

其实我看的也不太懂(之后看懂了再过来补)。直接上代码吧(pytorch版本):

假设输入为2d图像,netvlad一般接在最后一个conv后面,那么输入到netvlad的特征,shape=[b,c,h,w]。一般c会很大,例如在resnet50中,c=2048。

1)如果normalize_input,则在dim=1进行归一化,也就是c的维度

2)求soft_assign,也就是上述的ak(xi),这里的conv是1*1卷积,将原channel维度降到k(聚类中心个数),然后view对特征x进行reshape,此时soft_assign的shape为[b,k,h*w]。再在dim=1,也就是k的维度进行softmax归一化

3)展开x,x_flatten的shape为[b,c,h*w]

计算x_flatten与聚类中心,self.centroids的残差,self.centroids的原始shape=[k,c],将x_flatten和self.centroids都扩展为适合减的维度。

4)残差与soft_assign相乘,后面就是参照公式的求和,归一化等等。

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值