• 正文
  • 相关推荐
申请入驻 产业图谱

十分钟实用教程 | Uni-NaVid使用和仿真环境搭建

04/28 15:34
412
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

转载自公众号:敢敢AUTOHUB

1. NaVid-VLN-CE 安装下载

首先,您需要设置 Habitat VLN-CE 环境。
第一步是使用 Python 3.8 安装 Habitat-sim(版本 0.1.7)。 我们建议使用 Miniconda 或 Anaconda 以便于安装:

conda create -n vlnce_navid python=3.8
conda activate vlnce_navid

conda install habitat-sim=0.1.7  withbullet -c conda-forge -c  aihabitat
# 如果出现报错,则直接在conda官网下载:<https://anaconda.org/aihabitat/habitat-sim/files?version=0.1.7>

git clone --branch v0.1.7 git@github.com:facebookresearch/habitat-lab.git
cd habitat-lab
python -m pip install -r requirements.txt
python -m pip install -r habitat_baselines/rl/requirements.txt
python -m pip install -r habitat_baselines/rl/ddppo/requirements.txt
python setup.py develop --all

最后,安装 NaVid仿真器

cd ..
git clone git@github.com:jzhzhang/NaVid-VLN-CE.git
or
git clone <https://github.com/jzhzhang/NaVid-VLN-CE.git>

cd NaVid-VLN-CE
pip install -r requirements.txt

1. VLN-CE(视觉语言导航连续环境) 框架主要组件及功能

1.1 task.py - 数据集和任务定义

    • VLNCEDatasetV1: 加载 R2R 数据集的类• RxRVLNCEDatasetV1: 加载 RxR 多语言数据集的类(支持英语、印地语、泰卢固语)• VLNExtendedEpisode: 扩展的导航片段数据结构,包含指令、目标位置、参考路径等信息

1.2 sensors.py - 传感器定义

提供了多种传感器来获取环境信息:

    • GlobalGPSSensor: 全局 GPS 传感器,获取智能体在全局坐标系中的位置• VLNOracleProgressSensor: 导航进度传感器,计算相对目标的进度• AngleFeaturesSensor: 相机角度特征编码器• ShortestPathSensor: 最短路径跟随传感器,提供下一步最优动作• RxRInstructionSensor: 加载预计算的 BERT 指令特征

1.3 actions.py - 动作定义

    • GoTowardPoint: 航点动作,通过 (r, θ) 参数化,模拟直线移动到指定航点,支持碰撞检测

1.4 measures.py - 评估指标

实现了多种导航任务的评估指标:

    • PathLength (PL): 路径长度• OracleNavigationError (ONE): 预言导航误差• OracleSuccess (OSR): 预言成功率• Success: 成功率• SPL: 成功率加权路径长度• NDTW: 归一化动态时间规整距离• DistanceToGoal: 到目标的距离• TopDownMapVLNCE: 俯视图地图可视化

1.5 utils.py - 工具函数

提供了大量辅助功能:

    • 观察数据到图像的转换• 坐标系转换(极坐标与全局坐标)• 可视化功能(生成视频、绘制地图)• 张量处理工具

1.6 maps.py - 地图处理

    • 地图可视化和着色功能• 迷雾战争效果(fog of war)

1.7 shortest_path_follower.py - 最短路径规划器

    • 提供兼容版本的最短路径跟随器

1.8 discrete_planner.py - 离散规划器

    • 用于离散空间的路径规划

1.9 obs_transformers.py - 观察变换器

    • 对传感器观察数据进行预处理和变换

1.10 config/ - 配置文件目录

包含各种任务配置:

    • vlnce_task_navid_r2r.yaml: NaVid 在 R2R 数据集上的任务配置• vlnce_task_uninavid_r2r.yaml: Uni-NaVid 在 R2R 数据集上的任务配置• vlnce_task_navid_rxr.yaml: NaVid 在 RxR 数据集上的任务配置• vlnce_task_uninavid_rxr.yaml: Uni-NaVid 在 RxR 数据集上的任务配置

下面就来详细解释这个 vlnce_task_uninavid_r2r.yaml 配置文件的内容:

1.10.1 1️⃣ ENVIRONMENT (环境配置)
ENVIRONMENT:
  MAX_EPISODE_STEPS: 500
    • MAX_EPISODE_STEPS: 每个导航任务最多允许 500 步• 如果智能体在 500 步内未到达目标,任务将被终止
1.10.2 2️⃣ SIMULATOR (模拟器配置)
SIMULATOR:
  ACTION_SPACE_CONFIG: v0
  AGENT_0:
    SENSORS: [RGB_SENSOR]
  FORWARD_STEP_SIZE: 0.25
  TURN_ANGLE: 30
    • ACTION_SPACE_CONFIG: 使用 v0 版本的动作空间配置• AGENT_0.SENSORS: 智能体配备 RGB 相机传感器• FORWARD_STEP_SIZE: 每次前进移动 0.25 米• TURN_ANGLE: 每次转向旋转 30 度(左转或右转)

RGB 传感器详细配置:

RGB_SENSOR:
  WIDTH: 640           # 图像宽度 640 像素
  HEIGHT: 480          # 图像高度 480 像素
  HFOV: 120            # 水平视野角度 120 度(广角视野)
  TYPE: HabitatSimRGBSensor
  POSITION: [0, 1.25, 0]  # 相机位置:高度 1.25 米(模拟人眼高度)

Habitat 模拟器 V0 配置:

HABITAT_SIM_V0:
  GPU_DEVICE_ID: 0     # 使用第 0 号 GPU
  ALLOW_SLIDING: True  # 允许碰撞时滑动(而非完全停止)
1.10.3 3️⃣ TASK (任务配置)
TASK:
  TYPE: VLN-v0         # 视觉语言导航任务类型
  SUCCESS_DISTANCE: 3.0 # 成功距离阈值:距离目标 3 米内算成功

传感器列表:

SENSORS: [
  INSTRUCTION_SENSOR,           # 语言指令传感器
  SHORTEST_PATH_SENSOR,         # 最短路径传感器(用于监督学习)
  VLN_ORACLE_PROGRESS_SENSOR    # 进度传感器(追踪完成度)
]

可执行动作:

POSSIBLE_ACTIONS: [
  STOP,          # 停止(到达目标)
  MOVE_FORWARD,  # 前进
  TURN_LEFT,     # 左转
  TURN_RIGHT     # 右转
]

评估指标:

MEASUREMENTS: [
  TOP_DOWN_MAP_VLNCE,  # 俯视图地图可视化
  DISTANCE_TO_GOAL,    # 到目标的距离
  SUCCESS,             # 是否成功
  SPL,                 # Success weighted by Path Length(路径长度加权成功率)
  NDTW,                # Normalized Dynamic Time Warping(归一化动态时间规整)
  PATH_LENGTH,         # 路径长度
  ORACLE_SUCCESS,      # 预言成功率(最接近目标的距离)
  STEPS_TAKEN          # 已执行步数
]

成功判定配置:

SUCCESS:
  SUCCESS_DISTANCE: 3.0  # 距离目标 ≤ 3 米视为成功

SPL:
  SUCCESS_DISTANCE: 3.0  # SPL 指标也使用 3 米作为成功阈值

NDTW 指标配置:

NDTW:
  GT_PATH: /media/bigdisk/VLN-CE/data/datasets/R2R_VLNCE_v1-3_preprocessed/{split}/{split}_gt.json.gz
    • GT_PATH: 真实路径(Ground Truth)数据位置• {split} 会被替换为实际的数据集划分(如 val_unseen)
1.10.4 4️⃣ DATASET (数据集配置)
DATASET:
  TYPE: VLN-CE-v1      # 使用 VLN-CE v1 版本数据集格式
  SPLIT: val_unseen    # 使用验证集的未见场景(Val Unseen)
  DATA_PATH: /media/bigdisk/VLN-CE/data/datasets/R2R_VLNCE_v1-3_preprocessed/{split}/{split}.json.gz
  SCENES_DIR: /raid/data/scene_dataset/
    • • TYPE: VLN-CE-v1 表示 R2R 数据集(对应 task.py 中的 VLNCEDatasetV1)• SPLIT:

val_unseen - 验证集中的未见场景

• 其他选项:trainval_seentest

• DATA_PATH: 导航任务数据(指令、路径等)的存储位置• SCENES_DIR: 3D 场景数据(Matterport3D 模型)的存储位置

habitat_extensions 模块的主要作用是:

    1. 桥接作用: 连接 Habitat 模拟器与 VLN(视觉语言导航)任务需求2. 功能扩展: 为基础的 Habitat 环境添加 VLN 任务特定的传感器、动作和度量指标3. 数据加载: 处理 R2R 和 RxR 数据集的加载和解析4. 评估支持: 提供完整的评估指标体系(SPL、NDTW 等)5. 可视化: 支持导航过程的可视化和视频生成

2. VLN-CE数据准备

按照 VLN-CE 数据部分中的说明设置场景数据集和剧集数据集。具体下载可以参考 NaVILA 导航VLA记录(habitat 0.2.4)

完成数据准备后,更新R2R 配置文件和RxR 配置文件中的数据位置。示例配置如下所示,请修改任务文件以对齐您的数据配置,路径如下

VLN_CE/habitat_extensions/config/vlnce_task_uninavid_rxr.yaml

以及

VLN_CE/habitat_extensions/config/vlnce_task_uninavid_r2r.yaml

。然后对应的数据还是要通过代码完成下载,详细参考

NaVILA 导航VLA记录(habitat 0.2.4)(https://hermit.blog.csdn.net/article/details/155981280?spm=1011.2415.3001.5331)

NDTW:
  GT_PATH: data/datasets/R2R_VLNCE_v1-3_preprocessed/{split}/{split}_gt.json.gz
DATASET:
  TYPE: VLN-CE-v1 # for R2R
  SPLIT: val_unseen
  DATA_PATH: data/datasets/R2R_VLNCE_v1-3_preprocessed/{split}/{split}.json.gz # episodes dataset
  SCENES_DIR: data/scene_datasets/ # scene datasets

3. 仿真数据

我们来看一下Uni-NaVid的数据,作者提供了论文中使用的一小部分数据,以方便使用自己的数据进行快速复制和定制。数据可以从这里(https://huggingface.co/Jzzhang/Uni-NaVid/tree/main/Nav-Finetune)下载

对应的数据格式如下

    {
        "id": "NAV_ID_VLN_22912_094",
        "video": "nav_videos/22912_094.mp4",
        "conversations": [
            {
                "from": "human",
                "value": "Imagine you are a robot programmed for navigation tasks. You have been given a video of historical observations and an image of the current observation <image>. Your assigned task is: 'You are in the washroom right now, exit the washroom, move towards the bed, turn left and exit the bedroom, go straight until you see a mirror and a flower vase infront of the mirror, turn left, you can find a stair case, go near the stairs, turn slightly to your right, you can find two chairs, go near the first chair, turn slightly to your left, you can find a dining table and a couch, stand in between the dining table and the couch, move forward, you can find a mirror infront of you, stand infront of the mirror, that would be your end point.'. Analyze this series of images to determine your next four actions. The predicted action should be one of the following: forward, left, right, or stop."
            },
            {
                "from": "gpt",
                "value": "forward forward right forward"
            }
        ]
    },

4. 实际体验

安装 Package 和依赖项

conda create -n uninavid python=3.10 -y
conda activate uninavid
cd Uni-NaVid
pip install --upgrade pip  # enable PEP 660 support
pip install -e .

安装 flash-attn

pip install <https://github.com/Dao-AILab/flash-attention/releases/download/v2.5.8/flash_attn-2.5.8+cu122torch2.3cxx11abiFALSE-cp310-cp310-linux_x86_64.whl>

需要下载视觉编码器和语言模型。以下是下载链接:

git clone <https://huggingface.co/Jzzhang/Uni-NaVid>

wget <https://storage.googleapis.com/sfr-vision-language-research/LAVIS/models/BLIP2/eva_vit_g.pth>

然后按如下方式设置项目目录

Uni-NaVid
├── data
    ├── Nav-Finetune
        ├── nav_videos
        ├── open_uninavid_sampled_500.json
├── model_zoo
    ├── eva_vit_g.pth
    ├── <vicuna_weights> # optinoal, if you want to finetune from vicuna
    ├── <uninavid_weights>
├── scripts
├── uninavid
├── test_cases # optinoal, if you want to offline evaluate uni-navid

5. 训练&评估

5.1 训练

如果想要训练。则需要将 uninavid_stage_1.sh 和 uninavid_stage_2.sh 脚本中的 DATA_PATH 和 MODEL_PATH 设置为您的数据和模型路径。

如果您想从 Vicuna-7B 进行微调(确保收集足够的数据):

bash uninavid_stage_1.sh

如果您想基于 Uni-NaVid 进行微调:

bash uninavid_stage_2.sh

5.2 评估

5.2.1 VLN-CE评估

任何位置克隆 Uni-NaVid 存储库,然后链接 uninavid 模型文件。

conda activate vlnce_navid
ln -s  Uni-NaVid/uninavid uninavid # link architecute files in this repo
ls -lh Uni-NaVid/model_zoo model_zoo

要在多个 GPU 上评估模型,请使用提供的评估

eval_navid_vlnce.sh

脚本。每个 GPU 将处理所有剧集的一个拆分。在运行脚本之前,请按如下方式修改环境变量:

CHUNKS=8 # GPU numbers
MODEL_PATH="" # model wieght
CONFIG_PATH="" # task configuration configure, see script for an example
SAVE_PATH="" #  results
MODEL_NAME="" # uninavid or navid
EXP_SAVE="video-data" # save both video and data

Uni-NaVid 利用在线令牌合并 (run_type=eval),在单个 A100 GPU 上实现约 5 Hz 的推理速度。通过采用更先进的技术,例如量化,可以进一步提高速度。

bash eval_uninavid_vlnce.sh # SET MODEL_NAME="uninavid"

结果将保存在指定的

SAVE_PATH

中,其中包括日志目录和视频目录。若要在评估过程中监视结果,请运行:

watch -n 1 python  analyze_results.py --path YOUR_RESULTS_PATH

若要停止评估,请使用:

bash kill_navid_eval.sh

5.2.2 真实世界图像评估

下面提供 Uni-NaVid 在真实视频上的离线评估代码,包括 VLN 样本 vln_1 和跟踪样本 tracking_1。您可以从这里(https://huggingface.co/Jzzhang/Uni-NaVid/tree/main/test_cases)下载示例视频。

python offline_eval_uninavid.py track track_output # or test_cases/tracking_1

6. 总结

NaVid-VLN-CE 是基于 Habitat 仿真平台构建的视觉语言导航系统,通过整合 RGB传感器、语言指令和路径规划模块,实现智能体在 3D 室内环境中的自主导航。系统支持 R2R 和 RxR数据集,采用 SPL、NDTW 等指标进行评估。Uni-NaVid作为其核心模型,结合视觉编码器(EVA-ViT)与大语言模型(Vicuna),通过视频序列理解历史观测并预测导航动作,支持仿真环境训练与真实世界部署,为具身智能导航研究提供了完整的端到端解决方案。

相关推荐