与 VLM 数据联合训练
本指南介绍如何整合 VLM(Vision-Language Model)数据来联合训练 StarVLA(Vision-Language-Action)框架。
为什么要联合训练? 纯粹用机器人操作数据训练 VLA 时,VLM 骨干的视觉和语言理解能力可能会退化——这就是所谓的”灾难性遗忘”:只喂机器人数据训练后,模型可能忘了怎么看图说话、理解复杂指令。混入 VLM 数据(图文问答、描述等)可以保持模型的通用理解能力,同时学习机器人操作。
1. 多模态数据准备
Section titled “1. 多模态数据准备”VLM 数据必须遵循 QwenVL Conversations JSON 数据结构。
每个数据实例是一个 JSON 对象,将图片文件路径与人机对话轮次列表关联起来。
{ "image": "path/to/images/001.jpg", "conversations": [ { "from": "human", "value": "<image>\nWhat's the main object in this picture?" // <image> 是占位符,告诉模型"这里要插入图片", // 实际图片路径由外层的 "image" 字段指定 }, { "from": "gpt", "value": "A red apple on a wooden table" } ]}你可以下载我们的示例数据集 LLaVA-OneVision-COCO。
解压 sharegpt4v_coco.zip 并放置到 playground/Datasets/LLaVA-OneVision-COCO。
最终的文件结构如下:
.../LLaVA-OneVision-COCO├── images│ └── sharegpt4v_coco└── llava_jsons └── sharegpt4v_coco.json2. VLM 数据集配置
Section titled “2. VLM 数据集配置”要添加自定义 VLM 数据集,请按以下步骤操作:
2.1 注册数据集(Python)
Section titled “2.1 注册数据集(Python)”在 starVLA/dataloader/qwenvl_llavajson/qwen_data_config.py 的 data_dict 中注册你的数据集:
# 注册示例# json_root 和 image_root 在文件顶部定义,# 默认指向 playground/Datasets/LLaVA-OneVision-COCO/ 下的子目录:# json_root = "playground/Datasets/LLaVA-OneVision-COCO/llava_jsons"# image_root = "playground/Datasets/LLaVA-OneVision-COCO/images"
SHAREGPT4V_COCO = { "annotation_path": f"{json_root}/sharegpt4v_coco.json", "data_path": f"{image_root}/",}
data_dict = { "sharegpt4v_coco": SHAREGPT4V_COCO, # 在 YAML 配置中使用此名称}2.2 更新训练 YAML
Section titled “2.2 更新训练 YAML”在训练 YAML 文件(your_train_config.yaml)中包含 VLM 数据集配置:
datasets: vlm_data: dataset_py: vlm_datasets dataformat: llava_json dataset_use: sharegpt4v_coco # 必须与 2.1 中注册的名称匹配提示: 你可以通过运行以下命令验证 VLM 数据加载器:
python starVLA/dataloader/vlm_datasets.py --config_yaml your_train_config.yaml3. 训练执行
Section titled “3. 训练执行”根据你是想仅使用 VLM 数据训练还是与 VLA 数据联合训练,选择相应的脚本。
选项 A:仅使用 VLM 数据训练
Section titled “选项 A:仅使用 VLM 数据训练”用于 VLM 特定的预训练或微调。
脚本: starVLA/training/train_starvla_vlm.py
bash examples/CoTrainVLM/train_files/run_train_starvlm.sh选项 B:VLA 与 VLM 数据联合训练
Section titled “选项 B:VLA 与 VLM 数据联合训练”同时在机器人(VLA)和多模态(VLM)数据上训练模型。
脚本: starVLA/training/train_starvla_cotrain.py
bash examples/CoTrainVLM/train_files/run_libero_cotrain.sh