论文笔记 - NetVLAD: CNN architecture for weakly supervised place recognition

本文提出了一种名为NetVLAD的卷积神经网络结构,用于端到端的弱监督地点识别。NetVLAD层是受到VLAD层启发的改进,能够学习到具有区分性的图像表示。通过Google Street View Time Machine数据集进行训练,利用新的弱监督排序损失函数优化网络。实验证明,NetVLAD获得的特征比传统的非学习图像表示和现有CNN描述子更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

abstract

本文关注的是大规模的地点识别问题,任务是从一张图像中快速准确地识别位置。
1. 提出一种卷积神经网络结构,可以实现端到端的识别。主要组件是 NetVLAD,这是一个新生成的VLAD层。NetVLAD 可以很容易地运用到任何的CNN结构中,并且可以使用BP优化。
2. 基于一种新的弱监督排序损失(a new weakly supervised ranking loss),提出了一个训练过程,来学习得到所需要的参数。使用的数据集是Google Street View Time Machine。
3. 结果显示我们提出的结构得到的特征比其他非学习的图像表示(non-learnt image representations)以及现有的CNN描述子得到的特征要好,

introduction

地点识别现在主要应用在自主驾驶,增强学习等
地点识别一个挑战是,我们如何在一个城市或国家中识别相同的街角,即使有光照等其他因素的影响。关键问题是如何找到这样的一个具有代表性并且具有区分性的地方。

传统做法是将地点识别问题看作实例检索任务,使用具有局部不变性的特征(SIFT)来表示每一个图像,然后将特征聚合成一个向量表示,方法有 BOW, VLAD, FV等。近些年,CNNs的出现为多种类级的识别任务提供了更强性能的图像表示。

虽然CNN能够用在较大的数据集上,但是如果直接迁移使用CNN,那么它作为一个黑盒进行特征提取,对于实例识别任务会在性能上有限制。所以本文的任务是探究这种性能上的差距能够使用CNN特征减小。主要的问题是:

  • 如何定义一个好的CNN结构,
  • 怎样得到足够多的标注数据
  • 怎么训练来提升结构性能

第一,基于现有的神经网络架构,本文提出一种一个带有VLAD层的卷积神经网络结构,NetVLAD,可以被加到任何的CNN结构中,并且可以使用BP算法优化,然后使用PCA降维得到compact descriptor of the image。

第二,为了训练网络,使用 the Google Street View Time Machine 收集了大量的不同时间不同角度相同地点的全景图。通过这些数据进行训练是弱监督学习:两幅相似的全景图是通过他们的GPS特征近似得到的,但是并不知道图像中的哪个部分决定了这两幅全景图是同一个地方。

第三,使用了端到端的模式来学习得到参数。得到的特征对于视角和光照情况具有鲁棒性。

method overview

将地点识别问题看作是图像检索问题,有未知地点的图像作为查询图像,检索一个地理标注的数据集合,然后返回排序较高的图像。

图像特征提取: f(Ii) f ( I i ) offline
待查询图像特征: f(q) f ( q ) online
goal:找到与待查询图像最近的图像,欧氏距离 Euclidean distance d(q,Ii) d ( q , I i ) , 也有其他的距离计算方法,但是本文采用的是欧氏距离。

本文提出以端到端的方式学习图像的特征表示 f(I) f ( I ) ,特征表示通过 θ θ 参数化。 fθ(I) f θ ( I ) ,欧式距离为 dtheta(Ii,Ij)=fθ(Ii)fθ(Ij) d t h e t a ( I i , I j ) = ‖ f θ ( I i ) − f θ ( I j ) ‖

Deep architecture for place recognition

本章主要讨论 fθ f θ

提取图像特征最好使得这些特征对一些特性具有鲁棒性,对于光照以及视角转变的鲁棒性是由特征描述子决定,尺度不变性是通过在多个尺度下提取描述子进行保证的。

本文设计的CNN结构模拟的是标准的检索过程。
第一步、去掉CNN的最后一层,把它作为描述子,输出是 H×W×D H × W × D 的向量,可以将其看作一个D维度的描述子,一共由 H×W H × W 个。
第二部、设计一个新的池化层 NetVLAD(受VLAD启发)对提取到的描述子进行池化,使其成为一个固定的图像表示,参数是通关过BP学习得到的。

NetVLAD: A Generalized VLAD layer ( fVLAD f V L A D )

BoW 统计的是 visual words 的数量,VLAD 统计的是 每个visual word 的残差和(sum of residuals)(描述子和其相应的聚类中心的差值)

input: N×{xi}RD N × { x i } ∈ R D
cluster centers(visual words): K×{ck} K × { c k }
output image representation VRK×D V ∈ R K × D
V(j,k)=Ni=1ak(xi)(xi(j)ck(j)) V ( j , k ) = ∑ i = 1 N a k ( x i ) ( x i ( j ) − c k ( j ) )
ak a k is 1 if cluster ck c k is the closest cluster to descriptor xi x i and 0 otherwise

也就是说,VLAD的向量V存储的是所有的x在其对应的聚类中上的残差和

找到每个聚类中心中的所有的X,然后以该聚类中心为基础,计算所有的残差和:遍历所有的样本点,利用a(x) 决定是否属于该样本点,然后计算相应的残差,最后求和,这样得到了一个聚类中心的残差和,就是得到了V的一行。

遍历k个聚类中心,得到 V的k行。

最后对V进行 a vector 处理,然后进行L2归一化。

要通过BP对参数进行优化,就需要对所有参数以及输入都是可微分的,所有对 ak a k 进行修改
这里写图片描述
其中 α α 是一个正数,控制学习速率
将(2)中的平方展开, eαxi2 e − α ‖ x i ‖ 2 会消失,得到
这里写图片描述

新的到的NetVLAD 依赖于三分参数 {wk},{bk},{ck} { w k } , { b k } , { c k } ,使其灵活性更好。
图2 将NetVLAD分解成一个CNN层和一个有向五环图。
这里写图片描述
The output after normalization is a (K×D)×1 ( K × D ) × 1 descriptor.
这里写图片描述

Max pooling (fmax)

在实验中对 H×W H × W 个D维的特征使用了最大池化,产生一个D维度的输出,然后使用 L2normalized L 2 − n o r m a l i z e d

Learning from Time Machine data

本章主要是怎样通过端到端的学习得到涉及到的参数。

  • 怎样得到足够多的带有标记的数据
    通过 the Google Street View Time Machine 得到大量的弱监督图像。这些图像仅仅有地理位置的标记,表示他们是相近的位置,但是没有图像本身上的近似,所以是弱监督问题。
    两个地理位置相近的图像能相互替代(two geographically close perspective images do not necessarily depict the same objects since they could be facing different directions or occlusions could take place)。
    对于一个给定的训练图片,GPS信息的作用:潜在的正确项 {pqi} { p i q } (距离较近),绝对的错误项 {nqj} { n j q } (距离很远)

  • 怎样的损失 loss 是合适的
    设计了一个弱监督三元组损失 ( a new weakly supervised triplet ranking loss) 来解决数据的不完整以及噪声
    给定一个图像,目的是找出与其最为近似的图像,也就是说找到欧氏距离最小的图像与其匹配。 dθ(q,Ii)<dθ(q,Ii) d θ ( q , I i ∗ ) < d θ ( q , I i )
    将其转化为一个三元组 {q,Ii,Ii} { q , I i ∗ , I i }

从Google Street View Time Machine中得到训练集 (q,{pqi},{nqj}) ( q , { p i q } , { n j q } )
{pqi} { p i q } 至少有一个与查询图像匹配的正确项。
这里写图片描述

得到损失函数
这里写图片描述
l(x)=max(x,0) l ( x ) = m a x ( x , 0 )
if the margin between the distance to the negative image and to the best matching positive is violated, the loss is proportional to the amount of violation.
通过随机梯度下降的方法训练得到 fθ f θ

Experiments

Datasets and evaluation methodology

datasets:

  • Pittsburgh (Pitts250k)
  • Tokyo 24/7
  • Evaluation metric

Implementation details:

  • two base architectures: AlexNet and VGG-16
  • both are cropped at the last convolutional layer (conv5), before ReLU
  • K = 64 resulting in 16k and 32k-D image representations for the two base architectures, respectively

Results and discussion

  • Baselines and state-of-the-art.
  • Dimensionality reduction. PCA and whitening followed by L2-normalization
  • Benefits of end-to-end training for place recognition: first, our approach can learn rich yet compact image representations for place recognition. second, the popular idea of using pretrained networks “off-the-shelf” is sub-optimal as the networks trained for object or scene classification are not necessary suitable for the end-task of place recognition. 在分类任务上预训练的网络对于图像检索任务不是最好的
  • Comparison with state-of-the-art.
  • VLAD versus Max.
  • Which layers should be trained?
  • Importance of Time Machine training

Qualitative evaluation

Image retrieval

Conclusions

提出了一种端到端的学习方式进行地点识别,使用的是卷积神经网络,数据集(Street View Time Machine data)是弱监督的。
两个重要的组件:

  • the NetVLAD pooling layer
  • weakly supervised ranking loss

NetVLAD可以容易地用于其他的CNN结构中。
The weakly supervised ranking loss 作用很大 opens up the possibility of end-to-end learning for other ranking tasks where large amounts of weakly labelled data are available, for example, images described with natural language


paper: NetVLAD: CNN architecture for weakly supervised place recognition

<think>好的,我现在需要帮助用户了解多类标记Transformer(MCTformer)在弱监督语义分割中的应用或实现。首先,我得先回顾一下用户提供的引用内容,看看有哪些关键点需要覆盖。 根据引用[2]和[4],MCTformer的核心是使用多个类别特定的token,替代传统ViT中的单一cls token。这样每个类别的token可以生成对应的注意力图,从而定位不同类别的对象。这点很重要,需要详细解释。 然后,用户提到实现和应用。应用方面,引用[5]指出MCTformer能生成高质量的伪标签,用于训练语义分割模型。实现的话,可能需要包括模型架构,比如多类token的设计,类感知训练策略,以及如何结合补丁到补丁的注意力来优化定位图,如引用[2]所述。 还有,引用[3]讨论的过度平滑问题,MCTformer可能通过多类token和注意力机制来缓解,这也是一个值得提到的点。此外,如何与CAM互补,如引用[2]和[5]提到的,需要说明两者结合的优势。 用户可能需要具体的实现步骤或代码结构,但根据引用中没有提供代码,可能需要从架构层面描述。例如,模型由哪些部分组成,训练时如何利用多类token,如何计算损失等。 需要确保回答结构清晰,分点说明原理、实现步骤和应用场景,并引用正确的来源。同时,要使用中文,数学公式用$...$,独立公式用$$...$$,但根据问题描述,可能不需要太多公式,但如果有的话要注意格式。 最后,生成相关问题,帮助用户进一步探索。比如优化方法、与其他技术的对比、实验效果等。这些问题应该基于引用内容,比如引用[3]提到的过度平滑解决方案,可以作为相关问题之一。 现在,整理这些思路,确保覆盖所有关键点,引用正确的文献,并保持回答的自然流畅。</think>### 多类标记Transformer(MCTformer)在弱监督语义分割中的应用与实现 #### 核心原理 1. **多类标记设计** 传统视觉Transformer(ViT)仅使用单个`[CLS]`标记生成类别无关的注意力图(class-agnostic)。而MCTformer引入与类别数量相等的多个`[CLS]`标记,每个标记对应一个特定类别(class-specific)。通过类到补丁(class-to-patch)的注意力机制,可直接定位不同类别对象的空间区域[^4]。 **数学表示**:设类别数为$C$,则注意力图矩阵为$A \in \mathbb{R}^{C \times N}$($N$为图像块数量),每个类别对应一行注意力权重。 2. **补丁间关联优化** 通过补丁到补丁(patch-to-patch)的Transformer自注意力,捕捉图像块之间的语义关联性。例如,若两个补丁的注意力权重较高,则可能属于同一物体。这有助于细化初始定位图,解决边界模糊问题[^2]。 3. **与CAM的互补性** MCTformer生成的注意力图可与传统的类激活图(CAM)结合: $$ L_{final} = \alpha L_{MCT} + (1-\alpha)L_{CAM} $$ 其中$\alpha$为权重系数,实验表明两者结合可显著提升伪标签质量[^5]。 #### 实现步骤 1. **模型架构** - **输入**:图像分割为$N$个补丁,嵌入为序列$X \in \mathbb{R}^{N \times d}$。 - **多类标记**:添加$C$个可学习的类别标记$\{t_1, t_2, ..., t_C\}$,构成输入序列$[t_1, t_2, ..., t_C; X]$。 - **Transformer编码器**:通过多层自注意力计算,输出标记与补丁的交互特征。 2. **类感知训练策略** - 仅用图像级类别标签监督,损失函数为多标签分类损失: $$ \mathcal{L}_{cls} = -\sum_{c=1}^C y_c \log(p_c) $$ 其中$y_c$为类别$c$的标签,$p_c$为预测概率。 - **注意力图生成**:从最后一层Transformer提取类标记与补丁的注意力权重,归一化后得到定位热图。 3. **定位图优化** - 利用低层Transformer的patch-to-patch注意力构建亲和矩阵$S \in \mathbb{R}^{N \times N}$,通过随机游走(Random Walk)优化初始定位图: $$ \hat{A}_c = S \cdot A_c $$ 其中$A_c$为类别$c$的初始注意力图。 #### 应用场景 1. **伪标签生成** MCTformer输出的定位图可直接作为语义分割模型的训练标签。例如,在PASCAL VOC数据集上,其生成的伪标签mIoU达到68.2%,优于CAM基线(56.3%)[^5]。 2. **与其他技术的结合** - **弱监督目标检测**:定位图可扩展用于对象边界框预测。 - **医学图像分析**:在标注稀缺的医疗影像(如肿瘤分割)中减少人工标注成本。 #### 代码框架(伪代码) ```python class MCTformer(nn.Module): def __init__(self, num_classes, embed_dim): super().__init__() self.cls_tokens = nn.Parameter(torch.randn(num_classes, embed_dim)) # 多类标记 self.transformer = TransformerEncoder() # 标准Transformer编码器 def forward(self, x): # x: [batch_size, num_patches, embed_dim] cls_tokens = self.cls_tokens.unsqueeze(0).expand(x.size(0), -1, -1) x = torch.cat([cls_tokens, x], dim=1) # 拼接多类标记 x = self.transformer(x) # 提取类标记与补丁的注意力权重 attn_weights = self.transformer.get_last_selfattention()[:, :, :num_classes, :] return attn_weights ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值