Aller au contenu

Co-entrainement avec des donnees VLM

Ce guide decrit le processus d’integration de donnees VLM (Vision-Language Model) pour co-entrainer le framework StarVLA (Vision-Language-Action).

Pourquoi le co-entrainement ? Entrainer un VLA uniquement sur des donnees de manipulation robotique peut degrader la comprehension visuelle et linguistique du backbone VLM — c’est ce qu’on appelle l’« oubli catastrophique » : apres un entrainement exclusif sur des donnees robotiques, le modele peut oublier comment interpreter des images, repondre a des questions ou comprendre des instructions complexes. Melanger des donnees VLM (QA sur images, legendes, etc.) preserve la comprehension generale du modele tout en apprenant le controle robotique.


Les donnees VLM doivent respecter la structure de donnees JSON de conversations QwenVL.

Chaque instance de donnees est un objet JSON qui lie un chemin de fichier image a une liste de tours de conversation humain-GPT.

{
"image": "path/to/images/001.jpg",
"conversations": [
{
"from": "human",
"value": "<image>\nWhat's the main object in this picture?"
// <image> est un placeholder qui indique au modele « inserer l'image ici » ;
// le chemin reel de l'image est specifie dans le champ "image" externe
},
{
"from": "gpt",
"value": "A red apple on a wooden table"
}
]
}

Vous pouvez telecharger notre dataset d’exemple LLaVA-OneVision-COCO.

Decomposez sharegpt4v_coco.zip et placez-le dans playground/Datasets/LLaVA-OneVision-COCO.

La structure de fichiers resultante ressemblera a ceci :

Fenêtre de terminal
.../LLaVA-OneVision-COCO
├── images
└── sharegpt4v_coco
└── llava_jsons
└── sharegpt4v_coco.json

Pour ajouter un dataset VLM personnalise, suivez ces etapes :

Enregistrez votre dataset en l’ajoutant au data_dict dans starVLA/dataloader/qwenvl_llavajson/qwen_data_config.py :

# Exemple d'enregistrement
# json_root et image_root sont definis en haut de ce fichier,
# pointant par defaut vers des sous-repertoires de 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, # Utilisez ce nom dans la configuration YAML
}

Incluez la configuration du dataset VLM dans votre fichier YAML d’entrainement (your_train_config.yaml) :

datasets:
vlm_data:
dataset_py: vlm_datasets
dataformat: llava_json
dataset_use: sharegpt4v_coco # Doit correspondre au nom enregistre en 2.1

Astuce : Vous pouvez verifier le dataloader VLM en executant :

Fenêtre de terminal
python starVLA/dataloader/vlm_datasets.py --config_yaml your_train_config.yaml

Choisissez le script approprie selon que vous souhaitez entrainer uniquement sur des donnees VLM ou co-entrainer avec des donnees VLA.

Option A : Entrainer avec des donnees VLM uniquement

Section intitulée « Option A : Entrainer avec des donnees VLM uniquement »

Utilisez ceci pour le pre-entrainement ou le fine-tuning specifique au VLM.

Script : starVLA/training/train_starvla_vlm.py

Fenêtre de terminal
bash examples/CoTrainVLM/train_files/run_train_starvlm.sh

Ceci entraine simultanement le modele sur des donnees robotiques (VLA) et multimodales (VLM).

Script : starVLA/training/train_starvla_cotrain.py

Fenêtre de terminal
bash examples/CoTrainVLM/train_files/run_libero_cotrain.sh