Lazy loaded image
论文笔记
CA-Nav学习笔记
字数 6589阅读时长 17 分钟
2025-11-17
2025-11-24
type
status
date
slug
summary
tags
category
icon
password
comment
color
这篇论文能发tpami,在我看来是他们将VLN问题的Zero-shot解法各个方面都族的做到了极致,也比较符合我所设想的方案,值得学习。

Intro

CA-Nav 通过两个核心模块持续地将子指令转换为导航规划:约束感知子指令管理器(CSM)和约束感知价值映射器(CVM)
  • CSM 将分解后的子指令的完成条件定义为约束,并以约束感知的方式切换子指令,从而跟踪导航进度。
  • CVM 在 CSM 的约束指导下,在线生成价值图(value map),并通过超像素聚类对其进行优化,以增强导航的稳定性。
notion image
值得注意的一点是作者强调了两点,
  1. 连续环境中的视觉-语言导航(VLN-CE)通过允许智能体在 3D 环境中基于导航网格自由移动,缓解了对连通图等结构先验的依赖。
  1. 视觉-语言模型(VLMs)大语言模型(LLMs)的发展使零样本 VLN成为可能,即利用基础模型执行导航任务而无需专家标注的训练数据。
CA-Nav 将 VLN-CE 重新表述为一个顺序的、具有约束感知的子指令完成过程。在每个 episode 中,约束感知子指令管理器(CSM)会将完整指令分解为子指令,并通过判断相应约束是否满足来动态切换子指令。与此同时,约束感知价值映射器(CVM)根据当前约束与观测构建并持续更新价值图,捕获视觉细节与空间结构。利用 CVM 生成的价值图,CA-Nav 制定导航计划,并由经典控制算法执行。整个迭代过程持续引导智能体逐一完成子指令,直到 episode 结束。
notion image
 

Method

notion image
核心总结:我们只要记住,CSM是用来做任务管理的,子任务的拆解,判断是否完成当前子任务。可以理解为任务管理器。而CVM是用来在执行子任务的时候选择接下来去哪里。

Constraint-aware Sub-instruction Manager (CSM)

指令分解

在每个 episode 开始时,CSM 将指令分解为一系列子指令。每条子指令都会描述当前阶段的目标,并给出切换到下一条子指令的约束条件。我们将这些约束分为三类:
  • 对象约束(object constraints)(例如 “chair”);
  • 位置约束(location constraints)(例如 “bedroom”);
  • 方向约束(direction constraints)(例如 “turn left”)。

任务切换

CSM 始终选择队列中第一个尚未满足的约束集作为当前子指令,并且仅当该集合中的所有约束均被满足后,才切换到下一组。智能体在每一步都会检查当前集合中的每个约束。我们利用 VLM 与里程计信息来设计各类约束的满足检测方法:
notion image

Constraint-aware Value Mapper

notion image

约束感知价值图生成

随着导航的推进,我们维护并持续更新一张价值图,它同时编码了环境布局以及与指令相关的价值。
环境布局通过维护一张语义地图来捕获,并根据SemExp到可导航区域。
notion image
notion image
notion image

基于超像素的航路点选择

notion image
建图底层:arxiv.org
快速SAM:
 

实验

个人感觉改到tpami的这个过程中好像添加了大量的实验。
R2R-CE 和 RxR-CE 分别在 11 个未见过的环境中提供了 18393669 条逐步标注的轨迹-指令对,其中 RxR-CE 具有更详细的指令和更长的轨迹。
  • Navigation Error (NE):最终位置与目标之间的平均距离;
  • Success Rate (SR):NE 小于 3 米的 episode 比例;
  • Oracle Success Rate (OSR):使用 oracle 停止策略计算的 SR;
  • Success weighted by Trajectory Length (SPL):依据轨迹长度对 SR 进行归一化;
  • Normalized Dynamic Time Warping (NDTW):评估智能体轨迹与标注轨迹的一致性;
  • Success-weighted Dynamic Time Warping (SDTW):在成功 episode 上对 NDTW 加权。

主要结果

R2R

notion image
如表 I 所示,我们的方法在 NE、SR 和 OSR 上均超过了多种使用全景图训练的模型。这表明,基于 LLM 和 VLM 构建自我中心(egocentric)的零样本 VLN-CE 系统是可行且具有潜力的。
然而,CA-Nav 的 SPL 略低于部分方法。这主要是因为在自我中心视角下,智能体获得的观测信息相较全景视角更加有限。因此,它需要更多步骤探索环境,从而稍微降低路径效率。相比之下,OpenNav 使用全景观测和 waypoint predictor,获得更丰富的信息,因此 SPL 更高。同样地,InstructNav 在全景视角下的 SPL 为 24,但当使用自我中心观测时下降到 11。因此,在自我中心视角设定下,CA-Nav 的 SPL 与其他方法相当。
总体而言,在自我中心观测设定下,CA-Nav 在 SR、NE 和 OSR 上达到了当前最优性能,并在 SPL 上取得了具有竞争力的结果。

RxR-CE Dataset

notion image
数据集的这些特性提高了任务难度,因为它们会导致更频繁的指令切换以及更复杂的约束识别。
尽管面临这些挑战,CA-Nav 仍展现出具有竞争力的性能,超过了多种使用全景观测训练的模型(如 LAW)以及使用自我中心观测训练的模型(如 WS-MGMap)。值得注意的是,CA-Nav 在 SR 与 NE 上均超越了 A2Nav,同时在 SPL 上保持竞争力。

Ablation study

notion image
考察八个方面:(1)不同约束的影响;(2)价值图更新方法;(3)基于超像素的航路点选择的有效性;(4)不同超像素尺寸的影响;(5)对子指令切换步数阈值的鲁棒性;(6)不同历史衰减因子的分析;(7)轨迹衰减因子的影响;(8)对不同 LLM 的泛化性。

不同约束的影响

我们首先研究 CA-Nav 在不同类型的约束下的性能,如表 III-1 所示。我们首先移除除最终子指令外的所有约束,使任务更类似于单目标导航,成功率相比最佳结果下降约 21%。接着,我们评估仅使用单一类型约束的情况,结果显示使用对象约束时提升最显著。
随后,我们探究两类约束组合的效果。当包含方向约束时(第 5、6 行),性能下降,尤其是 SPL。原因在于仅依赖方向约束而缺乏对象或位置约束,会导致过度探索,从而降低 SPL。
值得注意的是,当对象与位置约束结合使用时(第 7 行)性能显著提升,表明它们对有效导航贡献最大。只有同时具备对象与位置约束时,方向约束才变得有益,使智能体更好地遵循子指令并获得最优性能。
这进一步验证了 § IV-B 中的分析,即智能体在导航中更多依赖地标而非方向,这也解释了 CA-Nav 为什么优于 A2Nav。
通过合理设计约束并使用约束感知子指令管理器(CSM),我们的方法能够在长时序导航任务中自动切换子指令,不仅弥补了 VLFM [71] 无法处理序列任务的不足,还避免了频繁调用 LLM。

如何更好地更新价值图?

回顾 § III-C,我们在价值图生成中引入历史衰减机制以利用过往探索,并使用轨迹掩码促进探索。表 III-3 展示了其影响。
  • 第 1 行:同时移除历史衰减和轨迹掩码,即每次切换约束均重置价值图 → 性能大幅下降(符合预期)。
  • 第 2 行:移除轨迹掩码后性能下降,并出现智能体在走廊等狭窄空间“卡住”的现象,说明轨迹掩码确实促进探索。
  • 第 3 行:移除历史衰减性能也较差,说明丢弃历史知识会迫使智能体重复探索已访问区域。
  • 第 4 行:结合轨迹掩码与历史衰减,实现对探索与利用的平衡,从而达到最佳性能。

不同航路点选择方法的比较

为验证基于超像素的航路点选择方法的有效性,我们将其与 § III-C 中提到的基于 FBE 的方法进行对比,并额外加入像素级(Pixel-based)和 ORP-based 方法作对照。
  • Pixel-based:直接选择价值图中价值最高的像素作为目标。
  • ORP-based:先选择价值最高的区域,再选其中价值最高的像素作为航路点。
表 III-4 显示:
  • 基于超像素的方法在 SR、NE、SPL 上均优于 FBE 与 Pixel-based 方法。
其原因包括:
  • 价值图更新可能不均匀,FBE 易受到局部价值突变的影响(见 § IV-D)。
  • 虽然价值图生成中用了置信度掩码进行加权,但轨迹掩码与历史衰减会影响图的平滑度。
ORP-based 的性能接近超像素方法,也明显优于 FBE 与 Pixel-based,说明对区域进行聚类有助于提升环境理解并实现更稳定的导航规划。

超像素尺寸的鲁棒性分析

超像素尺寸决定了航路点的细粒度程度。小尺寸带来更细的分辨率,大尺寸则区域更粗糙,可能影响准确导航。
我们测试了 4 种超像素尺寸,分辨率比为 5,即每个像素对应现实中的 5 cm × 5 cm。
表 III-7 显示:
  • 25 × 25 较小超像素带来更低 NE 和更高 OSR,因为航路点更精准;
  • 但 SR 降低,因为更易受价值图噪声影响;
  • 100 × 100 过大时导航性能显著下降,尤其在面对小障碍或狭窄通道时易选不中精确区域。
结果表明:约 50 × 50 的超像素尺寸最平衡性能与鲁棒性。最终我们采用 48 × 48 作为默认尺寸。

定量与定性分析

经济性与低延迟

notion image
我们比较了 CA-Nav 与 NavGPT-CE 的响应速度与成本效率。响应速度方面,我们测量了两种方法执行每一步动作所需的时间:
  • CA-Nav:包含 Grounding-DINO、BLIP2、地图构建、SLIC 与 FMM 的运行时间;
  • NavGPT-CE:包含 caption 模型调用以及 LLM 调用的时间。
由于 CSM 能显著减少 GPT-4 的调用次数,CA-Nav 在两项指标上都优于 NavGPT-CE。
如图 5 所示:
  • NavGPT-CE:每步约需 1.29 秒,每个 episode 成本约 $0.85
  • CA-Nav:每步仅需 0.45 秒,每个 episode 成本仅 $0.04
因此,CA-Nav 的速度约为其 3 倍,成本为其 5%

指令复杂度的影响

为分析指令复杂度对导航性能的影响,我们将 R2R-CE val-unseen 划分中的指令根据子指令数量分为 1 至 7 个区间。对于每一类别,我们统计成功与失败轨迹数量并计算成功率(SR)。
notion image
图 6 显示:
  • 随着子指令数量增加,SR 整体呈下降趋势
  • 子指令越多,智能体需要执行更多动作与决策,导致错误累计的概率上升。
  • 当子指令达到 5 条或以上时,SR 下降更为明显。
这个实验挺有意思的。我个人也非常赞同。子任务越多,错误累积的可能性就越大。比如我在第三个任务走入了错误的房间,因为没有纠错机制,后面的子任务肯定会一直错下去了。

约束完成度评估

为展示 CSM 模块的有效性,我们通过人工评估测量当前约束的完成情况。
  • 从成功轨迹中选取 SPL 排名前 25 的轨迹,检查高质量轨迹是否具有更高的约束完成度;
  • 从 oracle 成功集中随机抽取 25 条轨迹,评估那些到达真实目标但未正确停止的 episode 的约束完成情况;
  • 对失败轨迹,为覆盖不同长度,分别从短、中、长轨迹各随机抽取 25 条。
notion image
notion image

导航可视化

notion image

失败分析

notion image

1. 仿真环境中的视觉重建误差

仿真环境的视觉不准确可能导致目标检测失败。渲染误差会改变物体外观,使检测模型错过或误判关键对象。

2. 目标检测模型的语义歧义

例如 GroundingDINO 等模型可能将视觉或语义上相似的物体混淆,从而导致错误导航决策。
示例:把 bar 误识别为 message table。

3. 位置识别失败

视觉语言模型(如 BLIP2 VQA)可能给出错误的场景判定,即使图像中存在明确线索,也可能未识别位置。例如:
  • 即便画面中有明显的马桶,BLIP2 仍无法正确识别为“bathroom”,导致定位错误。

4. LLM 的指令约束分解错误

大型语言模型在解析或分解指令时偶尔会遗漏某些约束。
例如:
  • 指令中包含“turn left at table clock”,
  • 但 LLM 忽略了这条子指令,因此未提取对应的方向约束。
此类错误会破坏导航规划,导致智能体偏离目标路径。

真机实验

notion image
该机器人半径为 22.5 cm,高度为 137 cm。与仿真实验(§ III)一致,我们仍采用低层动作:MOVE FORWARD(0.25 m)、TURN LEFT/RIGHT(30°)、STOP。唯一的改动是:成功导航定义为机器人在目标 1 米范围内停止。
在航路点导航方面,我们继续使用 FMM(Fast Marching Method),而并未使用 ROS 导航包或其他训练的 PointNav 策略 [84]。线速度与角速度分别设为 0.1 m/s 和 0.1 rad/s。
为评估 CA-Nav 的有效性,我们在多种室内环境中进行实验,包括:休息区(lounge)、会议室(meeting room)、接待室(reception room)、入口大厅(entrance hall)和办公室(office),如图 9 所示。这些多样化环境用于测试方法对不同空间布局与语义场景的适应性。
notion image

总结

在本研究中,我们致力于为具有挑战性的零样本连续环境视觉-语言导航任务(zero-shot VLN-CE)开发一种全新的 约束感知导航器(Constraint-Aware Navigator)。为实现这一目标,我们提出了 约束感知子指令管理器(CSM)约束感知价值映射器(CVM)。这两个模块协同工作,通过识别并适应每条子指令的约束,使智能体能够在未知环境中完成导航。
我们在仿真和真实环境中进行了大量实验,验证了该方法的鲁棒性与适应性。这些结果表明,CA-Nav 具有将仿真基准与真实世界应用相连接的潜力,为未来零样本导航任务的发展提供了一个有效框架。

局限性与未来工作

在自我中心(egocentric)设定下,智能体通常需要更多步骤探索环境,从而使 SPL 略低。构建一种能够预测当前视野之外环境的 导航世界模型(world model) 是一个潜在的改进方向。
此外,CA-Nav 的性能还受到当前感知模型缺陷的限制,导致在指令分解与约束检测方面的准确性不足,尤其是在处理长指令时。未来可以探索使用更强大的基础模型或对特定模块进行微调,以进一步提升系统性能。

代码

多进程运行设置

我之前还在思考设置到LLM推理的VLNCE代码如何多进程的跑,这里作者很聪明,先用LLM处理一边所有的任务,然后将回复都写入LLM_REPLYS_VAL_UNSEEN。这样运行的时候就不涉及到LLM推理了。 run_mp.py中完成的多进程设置。为不同的进程配置数据集并分配GPU。
 

程序入口

程序的入口在ZS_Evaluator_mp.py中的eval函数,
一共做了 4 件核心事:
  1. 设置配置参数
  1. 初始化 Habitat 环境
  1. 加载 GT 路径(用于 NDTW)
  1. 初始化模型(SAM + Mapping + Policy)
之后多个episode环做rollout,rollout就是程序的核心

重点关注

语义处理

我们注意到代码中的class包含base_class以及destination_class,base_class是程序默认检测的类别,destination_class是指令中的landmark。
在拿到obs之后,_batch_obs_preprocess_obs_preprocess_state_get_sem_pred
这里其实有一个疑点,我应该是只需要关注和当前指令有关的物体种类就行啊?为什么要预测这么多种?似乎是没有必要的,多检测出来的类别还会调用更多次SAM,耽误时间。
_preprocess_state 返回的变量是一个concat之后的图像(RGB+depth+self.detected_classes的类别)
最后处理好的obs为一个变量batch_obs [1, N ,120, 160]。N就是RGB+depth+self.detected_classes的数量,120与160,为480与640除4.
 

语义地图的构建与更新

主要内容在mapping.py中,重点关注forward以及update_map函数。
地图每层的含义如下,其整体采用local map在global map上滑动更新的策略。
forward
  • 从 Depth 得到 3D 点云
  • 将点云变换到世界坐标系
  • 将点云 + 语义 “splat” 成体素(voxel)
  • 沿高度方向投影为 BEV 地图
  • 得到当前一帧 bird’s-eye map(agent_view)
  • 用当前 pose 将其对齐并融合进 local_map
update_map
  • 在 local_map 中标记 agent 位置(channel 2,3)
  • 将 local_map 写入 full_map 的一个窗口(lmb):
    • 更新 full_pose
    • 每隔 CENTER_RESET_STEPS:
      • 重新计算 lmb
      • 调整 origin
      • 从 full_map 裁剪新的 local_map
      • 保证 agent 始终位于 local_map 中心

    roullout的逻辑

    总体的思路如下

    如何判断子任务完成

    通过constraints_monitor判断。核心代码都在constraint.py中。
    location_constraint
    VQA(视觉问答)模型询问是否在某个场景中
    object_constraint
    与当前的目标检测做配对
    direction_constraint
    计算当前位姿与之前位姿的差
     

    value map的更新

    算是本文的一个核心,核心函数在value_map.py中,forward中的_update_value_map,对应论文中的用blip计算当前视野与object之间的相似度部分。
     

    history map与direction map的作用

    history map
    它在地图上记录机器人走过的轨迹(history/footprint),而且会随着时间“变淡”,从而形成一张访问历史权重图
    含义
    1.0
    从来没走过
    <1
    走过,并被衰减过
    →0
    走过很多次
    direction map
    根据指令里的方向词(前/后/左/右),在地图上生成一个“重点鼓励前往的扇形区域”
     

    self.floor以及self.traversible

    floor 必须同时满足:
    1. 在 explored area 里(我已经看到它了)
    1. 不是 obstacle
    1. 不是 object
    1. 是 ground / navigable 类
    traversible
    这里完全没要求 "必须 explored"
    也就是说:
    ✅ 即使你没有看到,只要它不在“已知障碍/物体”里
    ✅ 通过形态学处理后
    ✅ 就可能被认为是 “traversible”
     

    如何选择下一个路点

    • 这个策略融合了两个东西:
        1. SuperPixelPolicy:用超像素、价值图等信息,从地图中挑出“好”的探索 waypoint。(论文中主要介绍的超体素方法)
        1. search_destination:最后一个子任务的时候触发,进入目标点搜索模式。
    • 然后用 FMMPlannertraversible(可通行)地图上做最短路规划,得到短期目标点 stg,再根据当前朝向,输出一个离散动作。

    如何处理楼梯问题

    constant.py中,设置了。在前问所说的建立floor或者是traversible的时候,会自动将识别到的navigable_classes中的区域设置为可以通行。

    指令分解中的decision作用?

    我想问的是拆分出的任务中的move awayapproach之类的咋用的,因为我确实也思考过这个问题。有些指令是让我经过某个物体,这就特别的麻烦。最好能有个move away之类的东西,不过确实也不好做。
    作者有个_check_destination 函数,不过似乎没有任何地方调用过。

    个人评论

    总的来说,这篇文章在ICLR被拒之后,添加了大量的实验,最后中了tpami,是有含金量在其中的。
    我个人是很喜欢这种 子任务拆解 的方法,但是这种类型的方法存在以下不足
    1. 一步错,步步错,没有错误的纠正方法。导致子任务一多,错误率就高。
    1. 方法本身是提供了一种约束,其性能的主要提升来自于VLM模型的性能提升。方法设计者能做的很有限。往往会遇到一些人类看起来很蠢的错误案例。
    1. 这种方法的实时性很难保证,就像作者说的,0.45秒一个step,一个step只会前进0.25m。现实场景中的实时性很难保证。
    我个人认为这种方法已经做到了zero shot中非常顶尖的状态,可以改进的空间似乎不大。

    参考

     
     

    义父,请我喝杯蜜雪冰城吧。
    notion image
    notion image
    上一篇
    OpenIN学习笔记
    下一篇
    EmbodiedSAM学习笔记

    评论
    Loading...