NoMaD 深度技术解读

Goal Masked Diffusion Policies for Navigation and Exploration
ICRA 2024 · Ajay Sridhar, Dhruv Shah, Catherine Glossop, Sergey Levine
Berkeley AI Research (BAIR) GitHub · arXiv · 项目主页
← 返回 VLN 技术站

一句话概述

NoMaD 是 Berkeley AI Research 提出的视觉导航策略模型,核心创新是目标掩码扩散策略(Goal-Masked Diffusion Policy):一个模型同时学会目标导向导航(给定目标图像寻路)和自主探索(无目标自由探索)。它属于 GNM/ViNT 系列的第三代,将扩散模型引入机器人导航,实现了多模态轨迹输出。

为什么值得关注?

纯视觉:仅需 RGB 摄像头,不依赖 GPS/激光雷达/预建地图

双模式统一:目标导航 + 探索模式共享一个网络,训练时 50% 概率掩码目标

跨具身泛化:在 5 个不同机器人的数据上训练,可零样本迁移到新平台

扩散策略:输出多模态动作分布(而非确定性轨迹),更灵活地处理路口等歧义场景

GNM → ViNT → NoMaD 演进谱系

NoMaD 不是凭空出现的。它是 Dhruv Shah 等人在 Berkeley 连续推进的通用导航模型(General Navigation Models)系列的第三个里程碑,三篇论文共享同一个代码仓库(visualnav-transformer):

模型时间架构动作输出关键创新
GNM 2022.10 / ICRA 2023 MobileNetV2 + CNN 确定性:单条轨迹 首个跨具身通用导航模型;图像→轨迹端到端
ViNT 2023.06 / CoRL 2023 ViT + Transformer 确定性 + 拓扑图搜索 引入时序上下文(历史观测);拓扑图导航
NoMaD 2023.10 / ICRA 2024 EfficientNet + 扩散策略 多模态分布 扩散模型输出 + 目标掩码双模式

三者的递进关系:GNM 证明了"一个模型控制任何机器人"的可行性;ViNT 引入了 Transformer 架构和时序推理能力;NoMaD 则解决了前两者的两个根本缺陷——动作输出的单模态性(无法处理歧义场景)和必须依赖目标图像(无法自由探索)。

架构详解

NoMaD 由三个模块组成:视觉编码器(NoMaD_ViNT)、噪声预测网络(扩散策略)、距离预测网络。整体数据流:

1
输入 4 帧历史观测 RGB 图像(96×96)+ 1 帧目标图像(或掩码)
2
视觉编码器 NoMaD_ViNT EfficientNet-b0 分别编码观测和目标 → 拼接为 token 序列 → Transformer 自注意力 → 256 维全局表示
3a
扩散策略(噪声预测网络) 以视觉编码为条件,10 步去噪 → 输出 8 个二维路径点(相对坐标,~1m 间距)
3b
距离预测网络 以同样的视觉编码为输入 → 3 层 MLP → 预测到达目标的剩余距离(0-20 档分类)
4
输出 8 个路径点 → PD 控制器 → 机器人线速度/角速度命令;距离预测用于判断是否到达目标

视觉编码器:NoMaD_ViNT

NoMaD 的视觉编码器在 ViNT 基础上改造,名为 NoMaD_ViNT。它有两个独立的 EfficientNet-b0 编码器:

编码器输入通道输入内容输出维度
obs_encoder 3 通道 单帧观测图像(96×96 RGB) 1280 → 压缩至 256
goal_encoder 6 通道 当前观测 + 目标图像拼接 1280 → 压缩至 256

为什么目标编码器用 6 通道? 目标图像单独编码会丢失与当前观测的相对关系。将当前观测和目标图像在通道维度拼接(6 通道),让编码器从第一层就能联合提取两者的对应关系——这是视觉惯性里程计中常用的技巧。

编码后,4 帧观测 + 1 个目标 token 拼接成长度为 5 的序列,加入位置编码,经过 4 层 Transformer 自注意力(4 头,前馈维度 1024,GELU 激活,pre-norm)。最终对序列做加权平均池化,输出 256 维全局表示。

GroupNorm 替换 BatchNorm

NoMaD 将 EfficientNet 中所有 BatchNorm2d 替换为 GroupNorm(每组 16 个特征)。BatchNorm 依赖 batch 内统计量,在跨具身训练(不同摄像头、不同环境)时统计量差异巨大,导致泛化性差。GroupNorm 的统计量与 batch 无关,更适合多源数据训练。

核心创新:目标掩码机制

这是 NoMaD 最本质的设计——让一个模型同时处理两种截然不同的导航任务

模式目标 token 状态训练概率语义
目标导航 不掩码(mask=0) 50% "我看到目标图像,规划通往那里的路径"
自主探索 掩码(mask=1) 50% "没有目标,自由探索未知区域"

实现方式极其优雅——不改变任何网络结构,仅通过 Transformer 的 src_key_padding_mask 参数控制:

# 训练时随机选择是否掩码目标(goal_mask_prob = 0.5)
# 当 mask=1 时,Transformer 自注意力忽略最后一个 token(目标)
goal_mask = [False, False, False, False, True]   # 掩码目标
no_mask   = [False, False, False, False, False]   # 不掩码

# 掩码时,平均池化重新加权:
# 不掩码 → 每个 token 权重 1/5
# 掩码   → 前 4 个 token 权重 1/4,目标 token 权重 0

这个设计的精妙之处在于:掩码操作使得 Transformer 在探索模式下自然地"忘记"目标信息。同一组参数,掩码时学会"探索开阔区域",不掩码时学会"朝目标前进"。推理时只需切换 mask 即可切换模式,无需加载不同模型。

扩散策略:多模态轨迹输出

NoMaD 用条件扩散模型替代了 GNM/ViNT 的确定性回归头,这是动作质量提升的关键。

扩散策略的核心思想:将路径点生成建模为从高斯噪声逐步去噪的过程。给定视觉编码器的 256 维输出作为全局条件 global_cond,噪声预测网络(一个 U-Net 变体)学习预测每一步添加的噪声。

参数说明
扩散步数num_diffusion_iters = 10仅需 10 步去噪(非标准 DDPM 的 1000 步),实时性足够
U-Net 下采样维度[64, 128, 256]轻量网络,推理速度 < 50ms
输出长度len_traj_pred = 88 个二维路径点,间距约 1 米
角度预测learn_angle = False只预测 xy 坐标,朝向由路径点切线推导
条件缩放cond_predict_scale = False使用简单的 FiLM 条件注入

为什么扩散模型比回归头好?

在路口、分叉处,正确的行动方向可能不止一种(左转或右转都可能通向目标)。回归头会对所有训练样本取平均,输出一条"直行"的无效轨迹。扩散模型天然支持多模态分布——每次采样可能给出不同的合理路径,更符合真实导航中的不确定性。

距离预测网络

这是一个轻量 MLP(256 → 64 → 16 → 1),以视觉编码输出为输入,预测到达目标的离散化距离(0-20 档,每档约 1 米)。它的两个作用:

训练数据与配置

NoMaD 在 5 个公开数据集上训练,总数据量超过 100 小时的机器人轨迹:

数据集来源环境机器人特点
RECON Shah et al. 室外校园/公园 Clearpath Jackal 856 km 轨迹,覆盖最广
GoStanford2 Stanford 室内+室外混合 TurtleBot 系列 校园漫游,goals_per_obs=2 倍增样本
Cory Hall UC Berkeley 室内办公楼 LoCoBot 工程楼走廊,窄通道导航
TartanDrive CMU 越野/非铺装路面 Clearpath Jackal 崎岖地形,室外高速
SACSoN/HuRoN Stanford 室内人机共存 多平台 人机交互场景,动态避障

训练超参数

Batch size: 256(大 batch 利于跨具身特征对齐)

Epochs: 100 · LR: 1e-4 · 优化器: AdamW

调度器: Cosine annealing + 4 epoch warmup

输入分辨率: 96×96(极低分辨率,降低计算量但限制了细节感知)

上下文窗口: 3 帧历史 + 1 帧当前 = 4 帧观测序列

负样本挖掘: 所有数据集启用(ViNG 论文方法),提升目标区分度

双模式部署

NoMaD 的代码仓库提供两种部署脚本,对应两种导航模式:

模式一:拓扑图导航(navigate.sh

1
人工示教采集拓扑图 遥控机器人在目标环境中走一遍路径,record_bag.sh 录制 ROS bag
2
生成拓扑图 create_topomap.sh 将 bag 按固定间隔提取关键帧图像,构成拓扑节点
3
自主导航 navigate.sh — NoMaD 接收当前观测,匹配最近的拓扑节点,预测通往下一节点的路径点

模式二:自由探索(exploration.sh

1
无需拓扑图 不给定目标图像,直接启动探索模式(goal_mask=1)
2
扩散策略驱动 NoMaD 在没有目标的情况下,根据当前观测预测"合理的探索方向"
3
距离预测引导 距离预测网络输出可辅助判断何时停止探索

注意:探索模式(explore.sh)是 NoMaD 独有的——GNM 和 ViNT 只支持目标导向导航,无法在无目标情况下工作。这归功于目标掩码训练策略。

GNM / ViNT / NoMaD 深度对比

维度GNMViNTNoMaD
视觉骨干 MobileNetV2 ViT (Patch) EfficientNet-b0 + GroupNorm
时序建模 无(单帧) Transformer 自注意力 Transformer 自注意力(4 层 4 头)
动作生成 CNN 回归头 Transformer 回归头 条件扩散模型(10 步)
输出特性 确定性 确定性 多模态分布
探索模式 ❌ 不支持 ❌ 不支持 ✅ 目标掩码实现
距离感知 隐式(图距离) ✅ 显式距离预测头
输入分辨率 96×96 96×96 96×96
输出维度 4 路径点(xyθ) 4 路径点(xyθ) 8 路径点(xy,无 θ)
部署复杂度 中(需拓扑图) 中(支持无图探索)

与地库出库任务的匹配度

对于汽车从地下车库导航到地面这一实际场景,NoMaD 是当前最接近的开源方案,但仍存在显著差距:

维度地库出库需求NoMaD 能力匹配度
无 GPS 环境 必须纯视觉/惯性 ✅ 纯 RGB 视觉
无预建地图 首次进入即需导航 ✅ 探索模式支持
找出口能力 需要识别出口标志/光线 ⚠️ 探索模式随机游走,无语义目标
运动速度 汽车 5-15 km/h ❌ 训练数据为机器人 ~1 m/s (3.6 km/h)
车辆动力学 非完整约束、最小转弯半径 ❌ 差速底盘运动学,无汽车动力学
感知范围 需要看 10-20 米远 ⚠️ 96×96 分辨率 + 广角,远距离细节模糊
柱子/车辆避障 地库密集立柱、停放车辆 ⚠️ 无显式障碍物检测,依赖训练数据泛化

实践建议:组合方案

直接用 NoMaD 做地库出库不可行(速度/动力学差距太大),但其核心思想可借鉴:

定位:VIO/SLAM(如 ORB-SLAM3)提供精确位姿

探索决策:NoMaD 探索模式 + 出口标志语义检测(如 YOLO 检测"出口 EXIT"标牌)

运动控制:路径跟随控制器(Pure Pursuit / Stanley),匹配车辆运动学

更简方案:出口光线检测(地面亮度梯度)→ 路径规划 → 运动控制,不依赖学习模型

局限性与改进方向

当前局限

局限影响根本原因
96×96 输入分辨率 无法识别远处的小物体(行人、出口标志) 计算效率与感知精度的权衡
无角度预测 路径点仅含 xy,朝向由切线推导,弯道精度受限 训练数据中里程计 yaw 噪声较大
探索模式无语义 "找出口"无法表达为"无目标探索" 模型不理解"出口"概念,仅学习运动先验
训练数据速度范围窄 无法直接迁移到汽车 数据来自低速轮式机器人(<2 m/s)
无动态障碍物显式建模 行人/车辆密集场景安全性不足 扩散策略隐式学习避障,无安全约束

后续发展:ViNT-Large

NoMaD 发布后,同一团队在 2024 年推出了 ViNT-Large(基于 Transformer 的扩展版本),将参数量从 ~10M 扩展到 ~300M,引入了语言目标条件(可用文字描述目标而非图像),并在更大规模数据上训练。ViNT-Large 在部分场景下取代了 NoMaD 的位置,但 NoMaD 的目标掩码扩散策略思想仍是最核心的方法论贡献。

快速上手

# 1. 克隆代码仓库
git clone https://github.com/robodhruv/visualnav-transformer.git
cd visualnav-transformer

# 2. 创建训练环境
conda env create -f train/train_environment.yml
conda activate vint_train
pip install -e train/

# 3. 下载预训练权重(nomad.pth)
# Google Drive: visualnav-transformer/model_weights/

# 4. 部署到 LoCoBot(需 ROS Noetic)
conda env create -f deployment/deployment_environment.yaml
conda activate vint_deployment

# 5. 拓扑图导航
cd deployment/src
./navigate.sh "--model nomad --dir "

# 6. 自由探索(NoMaD 独有)
./explore.sh "--model nomad"

已验证的部署平台

Clearpath Jackal · DJI Tello · Unitree A1 · TurtleBot2 · LoCoBot · Vizbot · CARLA 仿真器

官方测试硬件:LoCoBot + NVIDIA Jetson Orin Nano + 广角鱼眼摄像头