SwiftVLN 训练
简体中文 | English
SwiftVLN 使用离线 expert trajectory 进行监督微调。SatNav 与 Habitat 共用训练入口,
通过 VLN_ENV_TYPE 选择训练环境。
轨迹窗口先转换为多模态对话,再构建 embedding 与动作监督标签。
SwiftVLNDataset 将图像和专家动作文本组织为窗口内的多轮对话。Template 构造视觉占位与标签,视觉编码后的历史 token 经压缩后注入对应位置。Assistant 动作轮提供监督,保留的重叠轮提供上下文并屏蔽 loss。具体 token 布局与损失定义见双层记忆与滑动窗口。
1. 准备环境与数据
按照安装创建 swiftvln-train 环境,并完成所需数据准备:
进入仓库并加载本机配置:
cd /path/to/SwiftVLN
export SWIFTVLN_ROOT="${PWD}"
source .local/env.sh
source "${SWIFTVLN_CONDA_SH}"
conda activate swiftvln-train
本页默认使用 Qwen2.5-VL 3B:
export MODEL_FAMILY=qwen2_5_vl
export MODEL_PATH="${SWIFTVLN_QWEN25_MODEL_PATH}"
使用 Qwen3-VL 时设置:
export MODEL_FAMILY=qwen3_vl
export MODEL_PATH="${SWIFTVLN_QWEN3_MODEL_PATH}"
export USE_LIGER_KERNEL=false
2. 默认训练配置
训练入口为:
bash scripts/train/train_swiftvln_qwen_vl.sh
主线训练参数如下:
参数 |
默认值 |
含义 |
|---|---|---|
|
|
基础模型系列 |
|
|
使用 Full SFT 更新模型参数 |
|
|
完整训练轮数 |
|
|
每个训练样本包含的动作帧数 |
|
|
每轮根据当前观测预测的动作数 |
|
|
相邻训练窗口重叠的动作数 |
|
|
每张 GPU 的 batch size |
|
|
梯度累积步数 |
|
|
初始 learning rate |
|
|
单个训练样本的最大 token 长度 |
Precision |
|
训练精度 |
|
|
Attention 实现 |
|
|
DeepSpeed 分布式优化配置 |
2.1 轨迹窗口
长轨迹按照 NUM_FRAMES 切分为训练窗口。相邻窗口的 stride 为:
window stride = NUM_FRAMES - NUM_OVERLAP
NUM_OVERLAP 的单位是动作数。非首个窗口中的重叠动作只提供上下文,对应 assistant
turn 的 loss 会被 mask:
masked turns = NUM_OVERLAP / NUM_FUTURE_STEPS
在默认 NUM_FRAMES=32、NUM_FUTURE_STEPS=4 下:
|
Window stride |
Masked turns |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
NUM_OVERLAP 必须小于 NUM_FRAMES,并且能够被 NUM_FUTURE_STEPS 整除。模型名中的
overlap<N> 记录重叠动作数。
2.2 GPU 与有效 batch size
有效 batch size 为:
BATCH_SIZE × GRAD_ACCUM_STEPS × GPU 数量
使用前 N 张可见 GPU:
TRAIN_NUM_GPUS=8 bash scripts/train/train_swiftvln_qwen_vl.sh
指定 GPU:
TRAIN_CUDA_DEVICES=0,2,4,6 bash scripts/train/train_swiftvln_qwen_vl.sh
3. Memory 训练配置
默认 SatNav 训练使用 per-frame history。SwiftVLN 还支持随机或时间偏置历史帧采样、 Map memory、GTC、Segment-GTC、初始观测、相对位姿与 Satellite-to-UAV Stage-A adapter 等配置。
SatNav 与 Habitat 共用的配置及各项训练命令见 Memory 训练配置。Map memory 仅支持 SatNav。
5. Habitat 训练
Habitat 已验证 per-frame reference、no-memory、random、temporal-biased、initial、 PoseFiLM、GridToMe、Additive pose、GTC 与 Segment-GTC。Satellite-to-UAV Stage-A adapter 与 Map memory 不支持 Habitat。
5.1 配置训练数据
完整 Habitat 训练组合 R2R、RxR 和 EnvDrop:
export VLN_ENV_TYPE=habitat
export VLN_DATA_PATH="${SWIFTVLN_HABITAT_R2R_TRAIN_PATH},${SWIFTVLN_HABITAT_RXR_TRAIN_PATH},${SWIFTVLN_HABITAT_ENVDROP_TRAIN_PATH}"
test -f "${SWIFTVLN_HABITAT_R2R_TRAIN_PATH}/annotations.json"
test -f "${SWIFTVLN_HABITAT_RXR_TRAIN_PATH}/annotations.json"
test -f "${SWIFTVLN_HABITAT_ENVDROP_TRAIN_PATH}/annotations.json"
仅使用部分数据集时,按逗号连接对应的 trajectory 目录:
export VLN_DATA_PATH="${SWIFTVLN_HABITAT_R2R_TRAIN_PATH},${SWIFTVLN_HABITAT_RXR_TRAIN_PATH}"
5.2 启动完整训练
使用 8 张 GPU 启动训练:
TRAIN_NUM_GPUS=8 bash scripts/train/train_swiftvln_qwen_vl.sh
5.3 输出模型名称
上述配置生成的模型名称为:
swiftvln-habitat-3b-1ep-f32s4-overlap0-pf-h8-b1.0-pool-s2-noembed-bs64-lr2e-5-<HHMMSS>
名称片段 |
含义 |
|---|---|
|
SwiftVLN Habitat 模型 |
|
Qwen2.5-VL 3B |
|
训练一个 epoch |
|
每个轨迹窗口包含 32 帧,每轮预测 4 个动作 |
|
相邻窗口不重叠 |
|
Per-frame memory,使用 8 张历史帧与均匀采样 |
|
Average pooling,压缩 stride 为 2 |
|
不使用 embedding enhancement |
|
有效 batch size |
|
Learning rate |
|
训练启动时间 |
模型保存在 output/swiftvln/<model-name>/。habitat 标识用于评测时选择 Habitat backend;
其余片段记录训练时使用的模型与轨迹窗口配置。
6. 恢复训练
完整恢复会加载模型、optimizer、scheduler、随机数状态和 global step。重新使用原训练任务、 模型、数据、GPU 数量与训练参数:
export RUN_ROOT=/path/to/output/run-name
export CHECKPOINT="${RUN_ROOT}/v0-YYYYMMDD-HHMMSS/checkpoint-1000"
OUTPUT_DIR_OVERRIDE="${RUN_ROOT}" \
RESUME_FROM_CHECKPOINT="${CHECKPOINT}" \
RESUME_ONLY_MODEL=false \
bash scripts/train/train_swiftvln_qwen_vl.sh
同一 RUN_ROOT 下会创建新的 vN-<date>-<time>/ 目录保存后续 checkpoint。
只加载模型权重并重新创建 optimizer 与 scheduler:
OUTPUT_DIR_OVERRIDE=/path/to/output/new-run \
RESUME_FROM_CHECKPOINT=/path/to/checkpoint-1000 \
RESUME_ONLY_MODEL=true \
bash scripts/train/train_swiftvln_qwen_vl.sh