コンテンツにスキップ

VLMデータとの共同トレーニング

このガイドでは、VLM(Vision-Language Model)データを統合してStarVLA(Vision-Language-Action)フレームワークを共同トレーニングするプロセスを説明します。

なぜ共同トレーニングするのか? ロボット操作データのみでVLAをトレーニングすると、VLMバックボーンの視覚・言語理解能力が劣化する可能性があります。これは「壊滅的忘却」として知られています。ロボットデータだけでトレーニングすると、モデルは画像の解釈、質問への回答、複雑な指示の理解を忘れてしまう可能性があります。VLMデータ(画像QA、キャプショニングなど)を混合することで、ロボット制御を学習しながらモデルの一般的な理解力を維持します。


1. マルチモーダルデータの準備

Section titled “1. マルチモーダルデータの準備”

VLMデータはQwenVL Conversations JSONデータ構造に準拠する必要があります。

各データインスタンスは、画像ファイルパス人間-GPTの会話ターンのリストをリンクする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 に配置してください。

結果として以下のファイル構造になります:

Terminal window
.../LLaVA-OneVision-COCO
├── images
└── sharegpt4v_coco
└── llava_jsons
└── sharegpt4v_coco.json

カスタムVLMデータセットを追加するには、以下の手順に従ってください:

2.1 データセットの登録(Python)

Section titled “2.1 データセットの登録(Python)”

starVLA/dataloader/qwenvl_llavajson/qwen_data_config.pydata_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設定でこの名前を使用
}

トレーニングYAMLファイル(your_train_config.yaml)にVLMデータセット設定を含めます:

datasets:
vlm_data:
dataset_py: vlm_datasets
dataformat: llava_json
dataset_use: sharegpt4v_coco # 2.1で登録した名前と一致させる

ヒント: VLMデータローダーを以下のコマンドで確認できます:

Terminal window
python starVLA/dataloader/vlm_datasets.py --config_yaml your_train_config.yaml

VLMデータのみでトレーニングするか、VLAデータと共同トレーニングするかに応じて、適切なスクリプトを選択してください。

オプションA: VLMデータのみでトレーニング

Section titled “オプションA: VLMデータのみでトレーニング”

VLM固有の事前学習またはファインチューニングに使用します。

スクリプト: starVLA/training/train_starvla_vlm.py

Terminal window
bash examples/CoTrainVLM/train_files/run_train_starvlm.sh

オプションB: VLMデータとVLAの共同トレーニング

Section titled “オプションB: VLMデータとVLAの共同トレーニング”

ロボティクス(VLA)とマルチモーダル(VLM)データの両方で同時にモデルをトレーニングします。

スクリプト: starVLA/training/train_starvla_cotrain.py

Terminal window
bash examples/CoTrainVLM/train_files/run_libero_cotrain.sh