VLN 入门学习计划 ------ 基于 InternNav
环境信息
| 项目 | 配置 |
|---|---|
| GPU | NVIDIA RTX 5090 32GB |
| CPU | Intel i9-14900KF (32 threads) |
| RAM | 128 GB |
| 磁盘 | 1.8TB NVMe |
| 框架 | InternNav 0.3.1 + Habitat-Sim 0.3.3 + PyTorch 2.7.1+cu128 |
第一阶段:理解 VLN 基础概念(第 1-2 周)
目标
建立对 Vision-and-Language Navigation (VLN) 领域的整体认知。
1.1 核心概念
- VLN 任务定义:给定一段自然语言导航指令,智能体在 3D 环境中根据视觉观察执行动作,到达目标位置
- 离散 vs 连续动作空间 :
- 离散(VLN-CE):stop, move_forward, turn_left, turn_right, look_up, look_down
- 连续(VLN-PE):直接输出位移/转角轨迹
- 评测指标 :
- NE (Navigation Error):终点到目标的距离 ↓
- SR (Success Rate):成功率(终点距目标 < 3m)↑
- SPL (Success weighted by Path Length):考虑路径效率的成功率 ↑
- OS (Oracle Success):路径上任一点距目标 < 3m 的比率 ↑
- nDTW (normalized Dynamic Time Warping):路径与参考路径的相似度 ↑
1.2 必读论文(按顺序)
- R2R: Vision-and-Language Navigation --- VLN 开山之作,定义了 Room-to-Room 任务
- VLN-CE --- 从离散图导航推广到连续环境
- Matterport3D --- 理解 VLN 使用的 3D 室内场景数据集
- Habitat 平台论文 --- 仿真平台基础
1.3 动手任务
- 阅读 InternNav 官方文档
- 浏览
internnav/目录结构,理解 agent / model / dataset / evaluator / trainer 的分工 - 跑通
scripts/notebooks/inference_only_demo.ipynb,观察模型输入输出 - 修改 demo 中的 instruction 文本,观察模型行为变化
第二阶段:熟悉 InternNav 代码架构(第 3-4 周)
目标
理解 InternNav 的模块化设计,能独立配置和运行实验。
2.1 核心模块阅读
internnav/
├── agent/ # 智能体:将模型输出转化为环境动作
│ ├── base.py # Agent 基类
│ ├── seq2seq_agent.py # Seq2Seq 基线 agent
│ ├── cma_agent.py # CMA agent
│ ├── rdp_agent.py # RDP agent
│ └── internvla_n1_agent.py # InternVLA-N1 agent(重点)
├── model/ # 模型定义
├── dataset/ # 数据加载(LMDB 格式 + LeRobot 格式)
├── evaluator/ # 评测框架
│ ├── base.py # 评测基类
│ ├── default_evaluator.py # 默认评测器
│ └── vln_distributed_evaluator.py # 分布式评测
├── trainer/ # 训练框架
│ ├── base.py # 训练基类
│ └── internvla_n1_trainer.py # InternVLA-N1 训练器
├── configs/ # 配置(Pydantic 模型)
└── env/ # 环境封装(Habitat / Isaac Sim / 真机)
2.2 配置系统理解
- 评测配置:
scripts/eval/configs/下的 Python 文件(如habitat_s2_cfg.py) - Habitat 环境配置:
scripts/eval/configs/*.yaml(传感器、动作空间、度量标准) - 训练配置:
scripts/train/下的配置文件
2.3 动手任务
- 阅读
internnav/agent/base.py和internnav/agent/seq2seq_agent.py,理解 Agent 接口 - 阅读
scripts/eval/eval.py和scripts/eval/start_server.py,理解评测流程 - 阅读
scripts/eval/configs/habitat_s2_cfg.py,理解一个完整的评测配置 - 阅读
scripts/eval/configs/vln_r2r.yaml,理解 Habitat 仿真参数
第三阶段:运行基线模型(第 5-7 周)
目标
训练和评测经典 VLN 基线,建立对模型性能的直觉。
3.1 Seq2Seq 基线(最简单)
Encoder-Decoder 架构:视觉编码器 + 语言编码器 → 动作解码器
bash
# 训练
./scripts/train/base_train/start_train.sh --name seq2seq_train --model seq2seq
# 评测(需要 Scene-N1 数据下载完成)
python scripts/eval/eval.py --config scripts/eval/configs/habitat_seq2seq_cfg.py
预期 R2R val_unseen 性能:SR ~15%, SPL ~10%
3.2 CMA (Cross-Modal Attention)
引入视觉-语言跨模态注意力机制
bash
./scripts/train/base_train/start_train.sh --name cma_train --model cma
预期性能:SR ~24%, SPL ~18%
3.3 RDP
更先进的基线方法
bash
./scripts/train/base_train/start_train.sh --name rdp_train --model rdp
预期性能:SR ~25%, SPL ~18%
3.4 动手任务
- 训练 Seq2Seq 模型,在 R2R val_unseen 上评测
- 训练 CMA 模型,对比 Seq2Seq 的性能提升
- 分析不同模型的失败案例(在哪些场景/指令上表现差)
- 阅读
internnav/dataset/cma_lerobot_dataset.py,理解数据格式
第四阶段:深入理解 InternVLA-N1(第 8-10 周)
目标
理解 InternVLA-N1 的双系统架构,复现论文结果。
4.1 论文阅读
- DualVLN --- InternVLA-N1 的核心论文(ICLR 2026)
- InternVLA-N1 技术报告 --- 完整技术细节
- NavDP --- System1 的扩散策略导航
4.2 双系统架构
InternVLA-N1 = System1 (低层导航) + System2 (高层规划)
System2 (基于 Qwen2.5-VL):
输入: RGB图像 + 语言指令 + 历史帧
输出: 离散动作 (stop/forward/turn) + 像素目标点
System1 (NavDP, 基于扩散策略):
输入: RGB-D图像 + 像素目标点
输出: 连续轨迹 (x, y 坐标序列)
DualVLN 模式: System2 给 System1 下达像素级目标,System1 规划连续路径
4.3 评测 InternVLA-N1
bash
# System2 单独评测(离散动作 + ShortestPathFollower)
python scripts/eval/eval.py --config scripts/eval/configs/habitat_s2_cfg.py
# 双系统评测(DualVLN)
python scripts/eval/eval.py --config scripts/eval/configs/habitat_dual_cfg.py
预期 R2R val_unseen 性能:SR ~64%, SPL ~58%(远超基线)
4.4 代码阅读重点
-
internnav/agent/internvla_n1_agent.py--- 双系统 Agent 逻辑 -
internnav/agent/internvla_n1_agent_realworld.py--- 异步推理实现 -
internnav/model/--- 模型架构定义 -
internnav/trainer/internvla_n1_trainer.py--- 训练流程
4.5 训练 InternVLA-N1
bash
# Step 1: 训练 System2
sbatch ./scripts/train/qwenvl_train/train_system2.sh
# Step 2: 联合训练双系统
sbatch ./scripts/train/qwenvl_train/train_dual_system.sh
4.6 动手任务
- 用预训练权重在 VLN-CE R2R val_unseen 上评测 InternVLA-N1
- 对比 System2-only vs DualVLN 的性能差异
- 可视化模型的 pixel goal 预测和轨迹输出
- 尝试在 RxR 数据集上评测(多语言指令)
第五阶段:进阶探索(第 11 周+)
方向 A:数据与评测
- 学习 InternData-N1 的 LeRobot 数据格式
- 使用
scripts/dataset_converters/vlnce2lerobot.py转换数据 - 配置 Isaac Sim 环境,运行 VLN-PE 物理评测
- 对比 Flash Controller vs Physical Controller 的性能差距
方向 B:模型改进
- 替换 System2 的 VLM backbone(如不同大小的 Qwen-VL)
- 调整推理参数(num_history, plan_step_gap, max_new_tokens)
- 实验不同的训练策略(DAgger, curriculum learning)
- 尝试 StreamVLN 等新模型
方向 C:真机部署
- 阅读
scripts/realworld/部署代码 - 理解 HTTP server/client 架构(
http_internvla_server.py/http_internvla_client.py) - 参考社区部署教程:
方向 D:竞赛与社区
- 关注 IROS Challenge 导航赛道
- 加入 Discord 或微信社区
- 阅读 IROS 冠军方案
关键资源汇总
论文
| 论文 | 说明 | 链接 |
|---|---|---|
| R2R (2018) | VLN 开山之作 | arXiv |
| Matterport3D (2017) | 3D 室内场景数据 | arXiv |
| Habitat (2019) | 仿真平台 | arXiv |
| VLN-CE (2020) | 连续环境 VLN | arXiv |
| VLN-PE (2025) | 物理环境评测 | arXiv |
| NavDP (2026) | System1 扩散策略 | arXiv |
| DualVLN (2026) | InternVLA-N1 核心论文 | arXiv |
| InternVLA-N1 报告 | 完整技术细节 |
代码与文档
| 资源 | 链接 |
|---|---|
| InternNav GitHub | https://github.com/InternRobotics/InternNav |
| InternNav 文档 | https://internrobotics.github.io/user_guide/internnav/index.html |
| InternVLA-N1 主页 | https://internrobotics.github.io/internvla-n1.github.io/ |
| NavDP GitHub | https://github.com/InternRobotics/NavDP |
模型权重 (HuggingFace)
| 模型 | 链接 |
|---|---|
| InternVLA-N1-DualVLN | https://huggingface.co/InternRobotics/InternVLA-N1-DualVLN |
| InternVLA-N1-System2 | https://huggingface.co/InternRobotics/InternVLA-N1-System2 |
| InternVLA-N1-w-NavDP | https://huggingface.co/InternRobotics/InternVLA-N1-w-NavDP |
| VLN-PE 基线模型 | https://huggingface.co/InternRobotics/VLN-PE |
你的环境状态
已完成:
- Miniconda + conda 环境 (habitat, Python 3.9)
- Habitat-Sim 0.3.3 + Habitat-Lab
- PyTorch 2.7.1+cu128 (RTX 5090 Blackwell 原生支持)
- flash_attn 2.7.4 + InternNav 0.3.1
- InternVLA-N1-DualVLN 模型 (16GB)
- DepthAnything v2 深度模型 (95MB)
- Inference demo 验证通过 (0.1-0.2s/帧)
进行中:
- Scene-N1 场景数据(下载中)
- InternData-N1 导航数据(下载中)
数据下载完成后即可开始第三阶段的完整训练和评测。