当前位置: 首页 > news >正文

【VLNs篇】13:JanusVLN 数据说明

在这里插入图片描述

本文档详细说明 JanusVLN 项目中使用的数据集、数据格式、数据处理流程以及如何准备和配置数据。

目录

  • 数据集概述
  • 数据目录结构
  • 数据集详细说明
  • 数据格式规范
  • 数据处理流程
  • 数据准备步骤
  • 数据配置

数据集概述

JanusVLN 使用三类数据集进行训练:

1. 基础数据集 (Base Dataset)

  • R2R-CE (Room-to-Room Continuous Environment)

    • 场景: Matterport3D (MP3D)
    • 语言: 英语
    • 规模: ~14k 训练轨迹
  • RxR-CE (Room-across-Room Continuous Environment)

    • 场景: Matterport3D (MP3D)
    • 语言: 英语、印地语、泰卢固语 (本项目使用英语)
    • 规模: ~70k 训练轨迹

2. 扩展数据集 (Extra Dataset)

  • ScaleVLN

    • 场景: HM3D (Habitat-Matterport 3D)
    • 规模: 150k 子集
    • 用途: 大规模预训练
  • DAgger 数据

    • R2R DAgger: 从 R2R-CE 基础模型收集
    • RxR DAgger: 从 RxR-CE 基础模型收集
    • 用途: 改善模型的在线学习能力

数据目录结构

完整的数据目录组织如下:

data/
├── datasets/                    # VLN-CE 原始数据集
│   ├── r2r/
│   │   ├── train/
│   │   │   ├── train.json.gz           # R2R 训练集 episodes
│   │   │   └── train_gt.json.gz        # R2R ground truth (用于 DAgger)
│   │   ├── val_seen/
│   │   │   └── val_seen.json.gz        # R2R 验证集 (seen)
│   │   └── val_unseen/
│   │       └── val_unseen.json.gz      # R2R 验证集 (unseen)
│   │
│   ├── rxr/
│   │   ├── train/
│   │   │   ├── train_guide.json.gz     # RxR 训练集 (guide)
│   │   │   ├── train_guide_gt.json.gz  # RxR ground truth (用于 DAgger)
│   │   │   ├── train_guide_en.json.gz  # 英语指令
│   │   │   └── ...
│   │   ├── val_seen/
│   │   │   └── val_seen_guide.json.gz
│   │   └── val_unseen/
│   │       └── val_unseen_guide.json.gz
│   │
│   └── scalevln/
│       └── scalevln_subset_150k.json.gz # ScaleVLN 子集
│
├── scene_datasets/              # 3D 场景数据
│   ├── mp3d/                    # Matterport3D 场景
│   │   ├── 17DRP5sb8fy/         # 场景 ID
│   │   │   ├── 17DRP5sb8fy.glb
│   │   │   ├── 17DRP5sb8fy.house
│   │   │   ├── 17DRP5sb8fy.navmesh
│   │   │   └── ...
│   │   ├── 1LXtFkjw3qL/
│   │   └── ...
│   │
│   └── hm3d/                    # Habitat-Matterport3D 场景
│       ├── train/
│       │   ├── 00000-kfPV7w3FaU5/
│       │   ├── 00001-UVdNNRcVyV1/
│       │   └── ...
│       └── ...
│
├── trajectory_data/             # 预收集的观察-动作轨迹数据
│   ├── R2R-CE-640x480/
│   │   └── images/
│   │       ├── {episode_id}/
│   │       │   ├── {step_id}_move_forward.png
│   │       │   ├── {step_id}_turn_left.png
│   │       │   └── ...
│   │
│   ├── RxR-CE-640x480/
│   │   └── images/
│   │       └── (同上结构)
│   │
│   └── ScaleVLN/
│       ├── images/
│       │   └── {scene_name}/
│       │       └── rgb/
│       │           ├── 0000.jpg
│       │           ├── 0001.jpg
│       │           └── ...
│       └── annotations.json     # ScaleVLN 标注文件
│
└── dagger_data/                 # DAgger 收集的数据├── R2R/│   ├── images/│   │   └── {scene_name}/│   │       └── rgb/│   │           └── *.jpg│   └── annotations.json│└── RxR/├── images/└── annotations.json

数据集详细说明

R2R-CE (Room-to-Room)

来源: VLN-CE GitHub

特点:

  • 基于 Matterport3D 场景
  • 每条指令约 3-5 句话
  • 平均路径长度: ~10米
  • 动作空间: MOVE_FORWARD (0.25m), TURN_LEFT (15°), TURN_RIGHT (15°), STOP

Episode 格式:

{"episode_id": "123","scene_id": "mp3d/17DRP5sb8fy/17DRP5sb8fy.glb","start_position": [x, y, z],"start_rotation": [x, y, z, w],"goals": [{"position": [x, y, z], "radius": 3.0}],"instruction": {"instruction_text": "Walk forward and turn left...","instruction_tokens": [...]},"trajectory_id": "456","reference_path": [[x1, y1, z1], [x2, y2, z2], ...]
}

RxR-CE (Room-across-Room)

来源: RxR GitHub

特点:

  • 基于 Matterport3D 场景
  • 多语言支持 (英语、印地语、泰卢固语)
  • 更长更详细的指令 (平均 85 个词)
  • 更长的路径 (平均 ~23米)
  • 提供 “guide” 和 “guide_gt” 版本

数据分片:

  • train_guide_en.json.gz: 英语训练指令
  • train_guide_gt.json.gz: Ground truth 路径 (用于专家监督)

ScaleVLN

来源: StreamVLN

特点:

  • 基于 HM3D 场景
  • 大规模数据集 (本项目使用 150k 子集)
  • 用于增强模型的泛化能力

数据格式:

{"id": "episode_id","video": "hm3d/scene_name","instructions": ["Navigate to the bedroom..."],"actions": [0, 1, 2, 3, 1, 0]  // 动作序列
}

DAgger 数据

生成方式: 使用训练好的基础模型在 Habitat 仿真环境中进行推理收集

关键参数 (在 scripts/dagger.sh 中配置):

DAGGER_UPDATE_SIZE=160000    # 收集样本数量
DAGGER_COMMIT_FREQ=50        # 每 50 次更新保存一次
DAGGER_P=0                   # 0=纯模型推理, >0=混合专家策略

数据格式: 同 ScaleVLN 格式


数据格式规范

训练数据格式 (JSON)

经过 create_data/create_data.py 处理后,生成统一的训练格式:

[{"id": "episode_id/image_filename","conversations": [{"from": "human","value": "You are a visual language navigation model...\n This is your historical observation:<image><image><image>\n This is your current observation:<image>\n Your task is to {instruction}\n You should take one of the following actions:\n MOVE_FORWARD\n TURN_LEFT\n TURN_RIGHT\n STOP."},{"from": "gpt","value": "MOVE_FORWARD"}],"images": ["path/to/history_image_1.png","path/to/history_image_2.png","path/to/history_image_3.png","path/to/current_image.png"]},...
]

关键字段说明

  • id: 唯一标识符, 格式为 {episode_id}/{image_filename}
  • conversations: 对话格式
    • from: "human": 用户输入, 包含历史观察、当前观察和任务指令
    • from: "gpt": 模型输出动作
  • images: 图像路径列表
    • 前 N-1 张为历史观察
    • 最后 1 张为当前观察
    • 历史观察数量: 最多 8 张 (可配置 max_history_images)

图像采样策略

max_history_images = 8if current_step <= max_history_images:# 如果步数 <= 8, 使用所有历史图像idxs = list(range(current_step + 1))
else:# 如果步数 > 8, 线性采样 9 张图像 (包括当前)idxs = np.linspace(0, current_step, 9, dtype=int).tolist()

数据处理流程

1. 数据收集流程

VLN-CE Episodes (json.gz)+
3D Scene Data (glb/navmesh)↓
Habitat Simulator↓
Observation-Action Trajectory↓
Images + Annotations (trajectory_data/)

2. 数据构建流程

# 构建基础数据集
python create_data/create_data.py
# 输出: train_r2r_rxr.json# 构建扩展数据集
python create_data/create_data.py --use_extra_data
# 输出: train_r2r_rxr_extra.json

处理步骤:

  1. 加载原始数据

    • R2R: data/datasets/r2r/train/train.json.gz
    • RxR: data/datasets/rxr/train/train_guide.json.gz
    • ScaleVLN: data/trajectory_data/ScaleVLN/annotations.json
    • DAgger: data/dagger_data/{R2R,RxR}/annotations.json
  2. 处理每个 Episode

    • 读取图像序列
    • 采样历史图像
    • 构造对话格式
    • 提取动作标签
  3. 并行处理

    • 使用 ProcessPoolExecutor 并行处理
    • 显示 tqdm 进度条
  4. 保存结果

    • 保存为 JSON 格式
    • 记录总样本数

3. DAgger 收集流程

# 收集 DAgger 数据
bash scripts/dagger.sh

流程:

  1. 加载基础模型检查点
  2. 在 Habitat 环境中运行 episodes
  3. 使用 ShortestPathFollower 作为专家
  4. 收集模型推理的观察和专家动作
  5. 保存图像和标注

数据准备步骤

Step 1: 下载场景数据

Matterport3D (用于 R2R 和 RxR)
  1. 访问 Matterport3D 官方页面
  2. 申请并下载场景数据
  3. 解压到 data/scene_datasets/mp3d/
HM3D (用于 ScaleVLN)
  1. 访问 HM3D GitHub
  2. 下载 train split
  3. 解压到 data/scene_datasets/hm3d/train/

Step 2: 下载 VLN-CE Episodes

# R2R-CE
wget https://drive.google.com/file/d/1fo8F4NKgZDH-bPSdVU3cONAkt5EW-tyr/view
# 重命名: R2R_VLNCE_v1-3_preprocessed/ -> r2r/
mv R2R_VLNCE_v1-3_preprocessed data/datasets/r2r# RxR-CE
wget https://drive.google.com/file/d/145xzLjxBaNTbVgBfQ8e9EsBAV8W-SM0t/view
# 重命名: RxR_VLNCE_v0/ -> rxr/
mv RxR_VLNCE_v0 data/datasets/rxr

Step 3: 下载预收集的轨迹数据

从 ModelScope 下载:

  • R2R-CE-640x480.tar.gz
  • RxR-CE-640x480.tar.gz
  • ScaleVLN.tar.gz

解压到相应目录:

tar -xzf R2R-CE-640x480.tar.gz -C data/trajectory_data/
tar -xzf RxR-CE-640x480.tar.gz -C data/trajectory_data/
tar -xzf ScaleVLN.tar.gz -C data/trajectory_data/

Step 4: 下载 DAgger 数据 (可选)

如果不想自己收集 DAgger 数据,可以直接下载预收集的数据:

# 从 ModelScope 下载
tar -xzf R2R_DAgger.tar.gz -C data/dagger_data/
tar -xzf RxR_DAgger.tar.gz -C data/dagger_data/

或者使用基础模型自行收集:

bash scripts/dagger.sh

Step 5: 构建训练数据集

# 基础数据集 (R2R + RxR)
python create_data/create_data.py# 扩展数据集 (+ ScaleVLN + DAgger)
python create_data/create_data.py --use_extra_data

数据配置

配置数据集路径

编辑 src/qwen_vl/data/__init__.py:

# 取消注释并配置基础数据集
TRAIN_R2R_RxR = {"annotation_path": "train_r2r_rxr.json",  # 由 create_data.py 生成"data_path": "","tag": "train_r2r_rxr"
}# 取消注释并配置扩展数据集
TRAIN_R2R_RxR_EXTRA = {"annotation_path": "train_r2r_rxr_extra.json",  # 由 create_data.py --use_extra_data 生成"data_path": "","tag": "train_r2r_rxr_extra"
}# 添加到 data_dict
data_dict = {# ... 其他数据集 ..."train_r2r_rxr": TRAIN_R2R_RxR,"train_r2r_rxr_extra": TRAIN_R2R_RxR_EXTRA
}

训练脚本配置

scripts/train.sh 中指定使用的数据集:

# 基础训练
DATASETS="train_r2r_rxr"# 扩展训练
DATASETS="train_r2r_rxr_extra"

数据采样率

支持通过后缀指定采样率:

# 使用 50% 的数据
DATASETS="train_r2r_rxr%50"# 使用 10% 的数据
DATASETS="train_r2r_rxr%10"

数据统计

数据规模

数据集Episodes平均步数总样本数 (估计)
R2R-CE Train~14k6~84k
RxR-CE Train~70k8~560k
ScaleVLN (150k)150k10~1.5M
DAgger R2R~14k6~84k
DAgger RxR~70k8~560k
基础总计~84k-~644k
扩展总计~318k-~2.8M

动作分布

在 VLN 任务中,动作分布通常为:

  • MOVE_FORWARD: ~60%
  • TURN_LEFT: ~15%
  • TURN_RIGHT: ~15%
  • STOP: ~10%

图像规格

  • 分辨率: 640 × 480
  • 格式: PNG (VLN-CE) / JPG (ScaleVLN, DAgger)
  • 视场角 (HFOV): 79°
  • 深度范围: 0.0 - 10.0m (如果使用深度)

参考资源

  • VLN-CE 论文
  • RxR 论文
  • ScaleVLN/StreamVLN 论文
  • Habitat 文档
  • Matterport3D 数据集
  • JanusVLN代码
http://www.dtcms.com/a/554418.html

相关文章:

  • 打印机共享维护工具
  • 做钢管的去什么网站发信息wordpress插件选项
  • 【RPA教学】E-mail
  • 郑州网站设计 品牌 视觉中国教育建设协会网站
  • 过年做啥网站致富加强网站制度建设
  • 网站打不开 其它能打开怎么做网站 新手做网站
  • 记录:用proxy解决前后端跨域限制问题
  • ps如何做网站横幅网站seo优化多少钱
  • 构建AI智能体:八十、SVD知识整理与降维:从数据混沌到语义秩序的智能转换
  • 【Docker Desktop+wsl+Hyper-V】下载与安装(Windows系统Docker环境)
  • 网站管理规范朔州企业网站建设公司
  • Win10开机自启动怎么设置?关闭开机启动6大方法
  • 网站宣传语女装标题优化关键词
  • 国内网站建设推荐建立平台的步骤
  • 记一次redis主从切换导致的数据丢失与陷入只读状态故障
  • Anthropic 最新研究深度解析:大型语言模型中涌现的内省意识
  • 广州一起做的网站大连九死一疯事件
  • 让智能家居开口说话:米雪龙描绘AI硬件的下一个时代
  • SSH连接云服务器超时的快速修复指南
  • 如果创建网站做网站横幅的图片
  • 黄骅市做网站价格哪个网站能叫我做直播回放
  • 怎样做金融理财网站wordpress 常用函数
  • U-Net 系列算法全解析:从基础到进阶,图像分割的经典架构演进
  • Lombok 新手教程
  • 湖南企业网站营销设计聊城网站百度推广
  • 做电影网站服务器需求英国做网站的人
  • 钢板“记忆”的橡皮擦:液压矫平机的第三次视角
  • 如何建立免费的个人企业网站开发者模式打开好还是关闭好
  • 避免 JS 报错阻塞 Vue 组件渲染:以 window.jsbridge 和 el-tooltip 为例
  • json的注入