本文最后更新于:2026年7月7日 上午
NetVLAD(CVPR 2016)把经典 VLAD 聚合改造成一个可微的 CNN 层,接在卷积主干后面,把整张图端到端映射成紧凑的全局描述子,专门为位置检索/回环训练。这篇梳理它的原理、核心的重参数化推导、训练如何端到端优化、相比 BoW 的利弊,以及一个关键反直觉点——全局描述子为什么位置无关。它是 词袋模型 BoW 的学习型后继。
一句话定位
NetVLAD 把经典的 VLAD 聚合改造成一个可微的 CNN 层,接在卷积主干后面,把一整张图端到端映射成一个紧凑的全局描述子,专门为"位置检索/回环"任务训练。 它不是 BoW 的"另一个版本",而是把"提特征 → 量化 → 聚合"整条流水线用一个可学习的网络替代——特征不再手工(ORB/SIFT),词典不再离线 k-means,全部用检索任务的损失联合优化。
要解决什么问题
NetVLAD 解决的是视觉位置检索(Visual Place Recognition, VPR):给定一张查询图,在大规模图像库里找出"拍的是同一处地方"的图。这正好是 SLAM 回环检测、机器人重定位、AR 持久定位的前端——和 BoW 干的是同一件事。
BoW 方案在这件事上有几个结构性短板(详见 词袋模型 BoW 的 DBoW2 关键缺陷一节):
- 手工描述子(ORB/SIFT)对大视角、光照、季节变化不鲁棒——这是回环召回掉的根本原因;
- 离线固定词典,换场景不贴合;
- 硬量化丢距离(argmin 扔掉误差大小);
- 特征和词典都不是为"检索"任务优化的——SIFT/ORB 是通用特征,k-means 是无监督聚类,没有一个环节知道"这是用来做位置检索的"。
NetVLAD 的核心动机就一句话:既然整条流水线都是为了检索,为什么不直接用检索损失把它整体学出来? 手工的那几步(提特征、聚类、聚合)不是错,只是没为任务优化。
背景:从 BoW → VLAD → NetVLAD
理解 NetVLAD 必须先理解 VLAD,因为 NetVLAD 就是"可微版 VLAD"。三者是一条清晰的脉络:
| 方法 | 局部特征来源 | "词"怎么来的 | 聚合方式 | 是否可学 |
|---|---|---|---|---|
| BoW | 手工(SIFT/ORB) | 离线 k-means 聚类中心 | 词频直方图(数每个词出现几次) | 否(全手工) |
| VLAD | 手工 | 离线 k-means 聚类中心 | 残差聚合(累加每个词内"描述子−中心"的残差) | 否(全手工) |
| NetVLAD | CNN 学出来 | 学出来的中心 | 软残差聚合(可微) | 是(端到端) |
可以看出:NetVLAD 在每一层都把手工换成可学——特征换成 CNN,词典换成可学参数,硬分配换成软分配。下面先把 VLAD 讲透,再看 NetVLAD 怎么把它"软化"。
前置:VLAD —— 残差聚合,为什么比 BoW 直方图更有信息
VLAD(Vector of Locally Aggregated Descriptors,Jégou 2010)和 BoW 一样先把描述子聚成 K 类,但聚合方式不同:
- BoW:第 k 个词的分量 = 这个图里有多少特征落进词 k(词频,一个标量计数)。
- VLAD:第 k 个词的分量 = 落进词 k 的所有特征,相对中心 c_k 的残差之和(一个 D 维向量)。
数学上,给定一张图的 N 个局部描述子 $\{x_i\}_{i=1}^N$(每个 D 维),K 个聚类中心 $\{c_k\}_{k=1}^K$。先定义硬分配指示函数 $a_k(x_i)\in\{0,1\}$——描述子 $x_i$ 是否被分到簇 k:
$$ a_k(x_i) = \begin{cases} 1, & \text{若 } c_k \text{ 是离 } x_i \text{ 最近的中心(即 } k=\arg\min_j\|x_i-c_j\|\text{)}\\ 0, & \text{否则} \end{cases} $$每个描述子只分给唯一一个最近的簇,所以 $\sum_{k=1}^K a_k(x_i)=1$(这就是"硬"的含义,也是后面 NetVLAD 要软化的地方)。VLAD 聚合就是:对每个簇 k,把分到它的所有描述子的残差(相对中心 $c_k$)累加起来:
$$ V_k = \sum_{i=1}^{N} a_k(x_i)\,(x_i - c_k)\;\in\mathbb{R}^D,\qquad k=1,\dots,K $$把 K 个 $V_k$ 拼起来,得到 KD 维的全局描述子 $V=[V_1;\dots;V_K]$。再做幂归一化(power normalization)和 L2 归一化,就是最终用来检索的向量。
为什么残差比计数更有信息? BoW 的直方图只记"词 k 出现了几次"——把这一类里所有特征的差异全抹平成一个数。VLAD 保留的是"这一类里的特征平均偏离中心多少"——一个 D 维向量,记录了方向和幅度。同样 K 个词,VLAD 的 KD 维比 BoW 的 K 维直方图携带的信息量高一个量级,判别力更强,这也是它在图像检索里一度取代 BoW 的原因。
VLAD 的痛点是:它和 BoW 一样用硬分配(argmin 选最近中心),不可微,没法和 CNN 一起训练。这正是 NetVLAD 要解决的。
NetVLAD 层:把硬分配软化(核心推导)
NetVLAD 的全部精髓就一件事:把 VLAD 的硬分配 $a_k(x_i)$ 改成软分配 $\bar{a}_k(x_i)$,让整层可微、可学。 这一步有个非常漂亮的重参数化推导。
软分配的"自然"形式
最自然的软分配是"软的最近中心"——对每个描述子 $x_i$,给每个中心 $c_k$ 一个权重,越近权重越大,且所有权重归一化(和为 1):
$$ \bar{a}_k(x_i) = \frac{e^{-\alpha\|x_i-c_k\|^2}}{\sum_{k'} e^{-\alpha\|x_i-c_{k'}\|^2}} $$ $\alpha$ 是个温度系数:$\alpha\to\infty$ 时退化成硬分配(最近中心独占权重),$\alpha$ 小时趋向均匀。形式上没问题,但带 $\|x_i-c_k\|^2$ 这种平方距离,工程上不方便做反向传播里的高效卷积实现。关键的重参数化技巧
把指数里的平方距离展开:
$$ -\alpha\|x_i-c_k\|^2 = -\alpha\big(\underbrace{x_i^\top x_i}_{\text{A:与 }k\text{ 无关}} - 2c_k^\top x_i + c_k^\top c_k\big) = \underbrace{(-\alpha\|x_i\|^2)}_{\text{A 项}} + \underbrace{(2\alpha\,c_k^\top x_i - \alpha\|c_k\|^2)}_{\text{B 项}} $$关键是 A 项 $-\alpha\|x_i\|^2$ 不依赖 k——它对每个簇都是同一个常数。把它代回软分配,分子分母都能提出公因数 $e^{-\alpha\|x_i\|^2}$(用 $e^{a+b}=e^a\cdot e^b$ 把它拆成单独的因子):
$$ \bar{a}_k(x_i) = \frac{e^{-\alpha\|x_i-c_k\|^2}}{\sum_{k'} e^{-\alpha\|x_i-c_{k'}\|^2}} = \frac{\overbrace{e^{-\alpha\|x_i\|^2}}^{\text{A}}\cdot e^{2\alpha c_k^\top x_i - \alpha\|c_k\|^2}}{\sum_{k'} \overbrace{e^{-\alpha\|x_i\|^2}}^{\text{A}}\cdot e^{2\alpha c_{k'}^\top x_i - \alpha\|c_{k'}\|^2}} $$ $e^{-\alpha\|x_i\|^2}$ 在分子里、在分母的**每一项**里都出现,是公因数——上下同时约掉: $$ \bar{a}_k(x_i) = \frac{e^{2\alpha\,c_k^\top x_i - \alpha\|c_k\|^2}}{\sum_{k'} e^{2\alpha\,c_{k'}^\top x_i - \alpha\|c_{k'}\|^2}} $$本质:softmax 只关心各 logit 之间的"差"、不关心"绝对值"。A 项 $-\alpha\|x_i\|^2$ 对每个 k 都一样,等于给所有 logit 加了同一个常数;而 $\mathrm{softmax}(z+c\mathbf{1})=\mathrm{softmax}(z)$(给所有 logit 加常数 c 结果不变,就像 $\tfrac{2a}{2b}=\tfrac{a}{b}$),所以约掉。剩下的就是:
于是软分配可以改写成一个线性层加 softmax:
$$ \boxed{\;\bar{a}_k(x_i) = \mathrm{softmax}_k\!\big(W_k^\top x_i + b_k\big)\;},\qquad W_k = 2\alpha c_k,\;\; b_k = -\alpha\|c_k\|^2 $$这就是 NetVLAD 论文里实际用的形式。它有两个好处:
- 可微且高效:就是个 $1\times1$ 卷积(对每个空间位置算 K 个 logit)加 softmax,标准 CNN 算子,反向传播直接;
- 保留了 VLAD 的归纳偏置:$W_k,b_k$ 不是凭空学的线性层,而是"软最近中心"的等价参数化,初始化时可以直接用 k-means 中心设 $c_k$、设 $\alpha$ 让初始软分配模仿硬分配——相当于把 VLAD 当成网络的热启动,再在数据上微调。
软残差聚合
把软分配代回 VLAD 的残差聚合,就得到 NetVLAD 层的完整公式:
$$ V(j,k) = \sum_{i=1}^{N} \bar{a}_k(x_i)\cdot\big(x_i(j) - c_k(j)\big),\qquad j=1,\dots,D;\; k=1,\dots,K $$输出 $V\in\mathbb{R}^{K\times D}$,摊平成 KD 维向量,再做两步归一化得到最终描述子:
① 幂归一化(power normalization):逐元素 $V \leftarrow \mathrm{sign}(V)\,|V|^\alpha$,常取 $\alpha=0.5$(逐元素开方,也叫 sqrt 归一化)。
为什么要这步?聚合向量有个通病叫突发性(burstiness):少数维度幅度特别大、大多数很小(比如某个视觉词在一帧里反复出现,它的残差分量就远超其他词)。直接做 L2 归一化时,这几个大分量会"独占"范数——向量有效维度坍缩到少数几个方向、其余维度的信息被压没,描述子变得不够判别。幂归一化用 $\alpha<1$ 压缩大值、相对抬高小值(开方:$0.04\to0.2$、$0.81\to0.9$、$4\to2$),把动态范围拉平、让范数重新分散到更多维度上——形象说是"削峰填谷"。这和 tf-idf 里对词频做子线性缩放、音频里的 µ-law 压缩是同一个道理:防一个高频项独大。
② L2 归一化:把向量缩成单位长度,让所有描述子等长、可直接比内积/余弦。
两步分工:幂归一化对付"突发性/长尾",L2 归一化对付"尺度"。
整层的可学参数:簇中心 $\{c_k\}$($K\times D$)、分配权重 $\{W_k, b_k\}$(等价于 $\{c_k\}$ 加温度 $\alpha$)。论文里典型取 K=64、CNN 主干输出 D=512,得到 $64\times512=32768$ 维,再降维到 4096 甚至更低。
一个常被忽略的细节:VLAD 的残差用 $x_i - c_k$,而软分配的 logit 用 $W_k^\top x_i + b_k$(即 $2\alpha c_k$ 的内积)。也就是说残差中心和分配权重是两套参数,初始化时按 $W_k=2\alpha c_k$ 对齐,之后各自学。这给了网络灵活性:残差往哪个方向聚合、和谁来比距离,可以分别调整。
完整架构
1 | |
注意一个根本区别:NetVLAD 不提"关键点"。BoW/VLAD 要先做关键点检测(FAST/DoG)再算描述子;NetVLAD 直接把 CNN 特征图的每个空间位置当成一个"局部描述子"(稠密的)。这省掉了关键点检测这一步,也让特征对关键点稳定性不再敏感——这是它对弱纹理、重复纹理更鲁棒的一个原因。
全局描述子为什么位置无关:空间累加把位置"折叠"掉了
读到这里常有个反直觉的疑问:CNN 特征是按图像区域生成的(feature map 的每个空间位置一个特征),如果同一纹理在两张图里出现在不同位置(比如视角平移让一扇窗户从左上挪到右下),那区域特征岂不是对不上、全局向量不就被拉开了?这个担忧直觉上很合理,但它落空了——因为 NetVLAD(和 BoW 一样)本质是个"袋",聚合那一刻就把位置信息丢了。分四层看:
① 聚合 = 求和 = 扔掉位置。 NetVLAD 的核心公式 $V(j,k)=\sum_{i=1}^{N}\bar a_k(x_i)\,(x_i(j)-c_k(j))$ 对所有空间位置 i 求和。求和不关心位置,只关心"出现了哪些特征值"。所以一扇窗户不管在图像左上还是右下,它贡献的特征值一样 → 软分到同一个簇、残差一样 → 对全局向量 V 的贡献完全一样。这就是"袋"(bag)的字面含义:装进去的是"有哪些东西",不是"东西在哪"。
② NetVLAD 不做逐特征对齐;软簇 id 就是它的"词 id"。 全局描述子检索不是拿图 A 的某个特征去图 B 里找对应——它根本不匹配特征,而是把整张图压成一个向量 V,直接比两个完整向量的距离。所以"区域特征对不上"这个步骤在全局检索里根本不存在。至于"没有 BoW 的词 id"——其实 NetVLAD 的软簇分配 $\bar a_k(x_i)$(特征 $x_i$ 对簇 k 的归属权重)就是词 id 的角色,只是软的、学出来的。两者结构同构:
| BoW | NetVLAD | |
|---|---|---|
| 局部特征 → 归属 | 硬词 id(argmin) | 软簇 id(softmax) |
| 聚合 | 直方图(数每个 id 出现几次) | 残差和(每个 id 簇内残差累加) |
| 位置信息 | 丢弃 | 丢弃 |
| 比较方式 | 两个直方图的距离 | 两个向量的距离 |
③ 平移靠"结构"免疫,旋转/尺度/透视靠"学习"鲁棒。 卷积是平移等变(translation equivariant)的:一个模式出现在 $(x,y)$,feature map 的 $(x,y)$ 就有对应特征;模式移到 $(x',y')$,特征值不变、只是跟着移位。再经 $\sum$ 聚合扔掉位置 → 纯平移在数学上对 NetVLAD 免疫。但卷积对旋转/尺度/透视不等变——这部分鲁棒性靠训练:训练数据(Street View Time Warp)里同一地点有各种视角的图,ranking loss 逼着 CNN 学出"同一面墙从不同角度看、特征尽量相似"的视角不变性。这是 ORB 这类固定手工算子永远做不到的。一句话:平移靠等变性加聚合(白送),其它视角靠训练出的不变性(这才是相对 BoW 的真优势)。
④ 扔位置是个"局限",不是 bug——它就是感知偏差的来源。 两个不同地点只要"特征袋"长得像(比如两条相似纹理的走廊),全局向量就会很近 → 误判同一处。这正是 VPR 版的感知偏差,和 BoW 一模一样。所以全局检索的定位永远是"粗筛、保召回",几何验证(RANSAC 空间一致性)在后段把扔掉的空间信息补回来做最终确认——扔位置换视角容忍,几何验证换精度,两者分工。这与 BoW 的设计哲学完全一致。
一条收束:NetVLAD 和 BoW 在"怎么处理位置"上是同一招——都扔。NetVLAD 的进步不在位置处理(这层两者一样),而在 ① 袋里装的特征质量(CNN 视角鲁棒 vs ORB 脆)和 ② 怎么数(软簇残差、端到端优化 vs 硬词频、手工 TF-IDF)。理解了"全局描述子 = 位置无关的袋",就同时理解了它为什么能容忍纹理位置变化、也理解了它为什么仍会感知偏差。
训练:弱监督 + ranking loss + hard negative mining
NetVLAD 的训练策略和它的架构一样关键。
数据:弱监督(GPS 共定位)
真实场景的"同一位置"标注极贵。NetVLAD 用 Google Street View 的 Time Warp 数据:同一个街景位置在不同时间、不同季节、不同光照下被拍多次。用 GPS 距离判定共定位——两张图 GPS 在阈值内就算"同一处地方"(正样本),否则负样本。这样无需人工标注,"弱监督"即可。
ranking loss(triplet 式)
对查询图 q、正样本 p(同位置)、一组负样本 $\mathcal{N}(q)$(不同位置),目标是让 q 在描述子空间里离 p 近、离负样本远。用带间隔(margin)的 hinge loss:
$$ L = \sum_q \sum_{n\in\mathcal{N}(q)} \big[\,\delta + d(q,n) - d(q,p)\,\big]_+ $$其中 $d(\cdot,\cdot)$ 是归一化描述子间的 L2 距离,$\delta$ 是间隔,$[\cdot]_+=\max(0,\cdot)$。直觉:如果 q 到某负样本 n 的距离已经比到 p 远了 $\delta$ 以上,这一项就为 0(已经分对了);否则就有损失,逼着网络把 n 推远、把 p 拉近。
hard negative mining
如果负样本池是随机采的,绝大多数负样本"离 q 远得很"、损失为 0,训练效率低。NetVLAD 用非平凡负样本(non-trivial negatives):只取当前 $d(q,n) < d(q,p)+\delta$ 的负样本(即当前还没分对、或勉强分对的),这些才是有信息量的。而且负样本从整个数据库(不只是当前 batch)里挖——这显著提升了训练效率和判别力。
这是检索/度量学习的标配范式:不预测类别,而是学一个距离/相似度结构——同类拉近、异类推远。NetVLAD 之后的 CosPlace、AP-GeM 等基本都沿用这套(损失形式略变,但本质都是 ranking/contrastive)。
NetVLAD 是如何"优化"的——任务驱动的端到端
优化对象:整条流水线一起学
这是 NetVLAD 相对 BoW 的根本性优势。BoW 的三个环节——特征(SIFT/ORB)、词典(k-means)、聚合(TF-IDF 直方图)——没有一个是为"位置检索"优化的:
- SIFT/ORB 是通用局部特征,设计目标是旋转/尺度不变,不知道下游是检索;
- k-means 是无监督聚类,目标是最小化量化误差,不知道哪些特征对判别位置重要;
- TF-IDF 是从文本检索搬来的加权,也不知道视觉场景的结构。
NetVLAD 把这三步合成一个网络,用同一个检索损失联合训练:CNN 学出来的局部特征、NetVLAD 学出来的"软词"和残差中心,全部为了"把同位置的图拉近、不同位置的推开"而调整。结果是特征本身就为视角/光照变化下的位置判别而优化——这是 BoW 用通用特征永远做不到的。
优化的数学结构:可微 + 端到端反传
正因为把 VLAD 软化成了可微层,损失能通过 NetVLAD 层一路反传到 CNN 主干——簇中心 $c_k$、分配权重 $W_k,b_k$、CNN 卷积核,全部一起用 SGD 更新。这一点是经典 VLAD 结构上做不到的:它的硬分配有 argmin,梯度断了。
所以 NetVLAD 的"优化"不是某个巧妙的损失项,而是架构本身让"为任务优化整条流水线"成为可能。这是它的真正贡献。
相比 BoW 的利弊
| 维度 | BoW(DBoW2) | NetVLAD |
|---|---|---|
| 特征 | 手工 ORB/SIFT,通用 | CNN 学出来,为检索优化 |
| “词”/聚合 | 离线 k-means + 词频直方图 + TF-IDF | 学出来的软簇 + 残差聚合,端到端 |
| 量化 | 硬分配(argmin,丢距离) | 软分配(softmax,可微、保留软度) |
| 视角/光照/季节鲁棒性 | 弱(手工特征天花板) | 强(训练数据见过这些变化) |
| 是否提关键点 | 是(依赖关键点稳定) | 否(稠密 CNN 特征图) |
| 输出 | 稀疏词直方图(百万维,几百非零) | 稠密全局描述子(~4096 维) |
| 检索结构 | 倒排索引(CPU 毫秒级) | ANN/FAISS(需算 L2 距离) |
| 训练 | 无(离线 k-means 一次) | 需弱监督数据 + GPU 训练 |
| 推理 | CPU 快、无 GPU 也能跑 | 需 GPU 跑 CNN |
| 可解释性 | 高(哪些词匹配上一目了然) | 低(黑箱 CNN 特征) |
| 在线增量 | 支持(iBoW 系列可边跑边加词) | 不支持(改网络要重训) |
| 跨域泛化 | 通用词典泛化一般但稳定 | 在训练域外可能掉点,需微调 |
| 冷启动 | 加载预训词典即用 | 加载预训权重即用,但域要匹配 |
一句话总结利弊:NetVLAD 用"端到端学习 + 强表征"换来了 BoW 给不了的视角/光照鲁棒性,代价是"要 GPU、要训练数据、黑箱、稠密描述子检索"。在大视角/跨季节这类 BoW 会漏检的难场景里,NetVLAD 是碾压性的;在资源受限、需要在线更新、或追求可解释的工业 SLAM 里,BoW 仍占优。两者不是替代关系,而是互补——现代系统常把 BoW 当轻量粗筛、把学习型全局描述子当难场景兜底。
后续工作:NetVLAD 开出的几条线
NetVLAD 是学习型 VPR 的开山之作,但它本身已被多个后继超越:
- GeM Pooling(Generalized Mean,Radenović 2018):一个比 NetVLAD 更简单的聚合——对每个通道做广义平均($\ell_p$ 范数,p 可学)。出人意料的是,GeM 这种"无结构"聚合在很多 benchmark 上和 NetVLAD 打平甚至更好,说明特征质量比聚合结构更重要。现在很多 VPR 系统直接用 GeM 而非 NetVLAD。
- CosPlace / EigenPlaces / MixVPR(2022-2023):换主干(ResNet 等)、换聚合(MixVPR 用 token mixing)、换损失(classification proxy),把 VPR 推到更高精度。
- DELG:把全局描述子(检索)和局部特征(几何验证)统一在一个网络里。
- 基础模型路线(当前 SOTA):DINOv2 特征对视角/光照惊人鲁棒,AnyLoc(DINOv2 + VLAD)在非街景数据集上比之前方法好最多 4×。这条线进一步印证了 GeM 时代的结论——特征(基础模型)比聚合更重要。
一个值得深思的趋势:从 NetVLAD(精心设计的可微 VLAD 层)到 GeM(极简的平均池化)到 DINOv2+VLAD(任意聚合都好),聚合结构在逐渐"去精致化",胜负面越来越取决于特征本身。NetVLAD 的历史地位在于它第一次证明了"端到端学习"在 VPR 上能赢手工 BoW,从此这条路的重心从"怎么聚合"转向了"特征从哪来"。
在 SLAM 回环/重定位里的角色
回到 SLAM 的语境,NetVLAD(及更现代的 VPR 方法)能补 BoW 的几个具体短板:
- 重定位(迷路找回家):跟踪丢失后,当前帧要和历史关键帧匹配。大视角变化下 BoW 的 ORB 描述子匹配率暴跌,重定位失败;NetVLAD 的全局描述子对视角鲁棒,重定位成功率显著提高。
- 跨季节/昼夜回环:机器人白天建图、晚上回环,或春夏秋冬建了又回——BoW 在这类外观剧变下基本失效,学习型 VPR 是目前唯一可行的方案。
- 大尺度环境:城市级 SLAM 几十万关键帧,BoW 的倒排索引也会膨胀,而全局描述子 + FAISS 的 ANN 检索扩展性更好。
但代价是实时性和部署门槛:SLAM 一般跑在边缘设备(无人机、机器人)上,GPU 资源有限,而 NetVLAD 推理要 CNN 前向。所以工程上常做分级:BoW 做毫秒级粗筛,仅当 BoW 给不出高置信候选、或场景被判定为难工况时,再调 NetVLAD 兜底。近期像 DPV-SLAM(2026)这类工作就是直接把 AnyLoc 集成进 SLAM 做回环,是这条线的最新落地。
深度思考
NetVLAD 的真正贡献:把归纳偏置保留下来再学
一个容易忽略的设计哲学:NetVLAD 没有用一个纯黑箱的 CNN+池化去硬学检索,而是把经典 VLAD 的结构(簇 + 残差)当先验嵌进网络,只把它软化、可学化。这比"从零硬学"好——VLAD 的残差结构是个好归纳偏置(保留了 BoW 直方图丢掉的幅度/方向信息),NetVLAD 把这个先验当热启动,再用数据精调。这是"经典方法 + 深度学习"融合的范本,而不是"深度学习取代经典"。
重参数化($W_k=2\alpha c_k,\;b_k=-\alpha\|c_k\|^2$)就是这种哲学的具体体现:它让"软最近中心"在数学上严格等价于一个线性层+softmax,从而既保留了 VLAD 的语义、又获得了可微性。
端到端 vs 手工:核心是"为任务优化"
BoW 三个环节都没为"检索"优化——这是它和 NetVLAD 最本质的差距,比"用了 CNN"本身更重要。NetVLAD 的胜利不是"深度学习更强"这么简单,而是"整条流水线为同一个目标联合优化"的胜利。理解这点,就能预测:任何"特征/词典/聚合各自独立设计、互不为下游任务优化"的方案,最终都会被端到端方案超过——除非它有端到端给不了的工程优势(速度、可解释、在线更新)。
软分配 vs 硬分配——和 BoW 那条线的呼应
BoW 里讨论过的"硬分配丢距离"(见 词袋模型 BoW 的量化误差一节),NetVLAD 的软分配正好从特征表示层面部分回应了:软分配让"接近多个簇"的描述子把贡献分散,而不是赌一个 argmin。不过要注意,NetVLAD 的软分配缓解的是"量化信息丢失",它没有直接解决"同 cell 碰撞才贡献"那个二值门问题——后者是任何基于聚合的检索都有的(碰撞门靠的是特征的局部一致性,跟硬/软分配无关)。换句话说:NetVLAD 用更好的特征 + 软量化提高了碰撞率,但没有改变"匹配靠碰撞"这个机制。
一个反直觉的趋势:聚合在"去精致化"
NetVLAD 精心设计了可微 VLAD;GeM 却证明一个广义平均池化就能打平;DINOv2+任意聚合又把两者都超了。趋势是特征质量越来越主导,聚合结构越来越不重要。这反过来说明:NetVLAD 时代的瓶颈在特征(手工 ORB/SIFT 的天花板),NetVLAD 用 CNN 把特征提上来了,功不可没;但一旦特征足够强(基础模型),聚合回到最朴素的都行。所以学 NetVLAD 的价值,与其说是"它的结构现在还要用",不如说是"它示范了如何把经典方法可微化、如何为任务端到端训练"——这套方法论在别处仍然反复出现。
小结
NetVLAD 把经典 VLAD 的硬分配软化成一个可微的 CNN 层(核心是 $W_k=2\alpha c_k$ 的重参数化),接在卷积主干后面,把一整张图端到端映射成紧凑的全局描述子,用弱监督的 ranking loss + hard negative mining 训练。它解决了 BoW 的两个根本问题——手工特征对视角/光照不鲁棒、整条流水线没为检索任务优化——代价是要 GPU、要训练数据、可解释性差、稠密描述子检索。
相比 BoW,NetVLAD 在大视角/跨季节/重定位这类难场景碾压,但在资源受限、需在线更新、追求可解释的工业 SLAM 里 BoW 仍不可替代,两者互补。它的历史地位是第一次证明端到端学习能在 VPR 上赢手工 BoW,开启了学习型位置检索这条线;但后续 GeM、基础模型(DINOv2/AnyLoc)表明,胜负越来越取决于特征质量而非聚合结构——这条线正在从"怎么聚合"转向"特征从哪来"。
参考资料
- R. Arandjelović, P. Gronát, A. Torii, T. Pajdla, J. Sivic, “NetVLAD: CNN Architecture for Weakly Supervised Place Recognition,” CVPR, 2016.
- H. Jégou et al., “Aggregating local descriptors into a compact image representation” (VLAD), CVPR, 2010.
- F. Radenović, G. Tolias, O. Chum, “Fine-Tuning CNN Image Retrieval with No Human Annotation” (GeM pooling), IEEE TPAMI, 2019.
- “AnyLoc: Towards Universal Visual Place Recognition”(DINOv2 + VLAD), RA-L, 2024.
- 相关笔记:词袋模型 BoW 与回环检测(NetVLAD 的手工前身)、回环检测:候选之后(几何验证兜底)、SLAM 全景
文章链接:
https://www.zywvvd.com/notes/study/SLAM/netvlad/netvlad/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付