Ce référentiel fournit l'implémentation officielle PyTorch du document suivant :
Déchiffrer l'alignement intermodal dans les grands modèles de langage de vision avec taux d'intégration des modalités
Qidong Huang 1,2 , Xiaoyi Dong 2,3 , Pan Zhang 2 , Yuhang Zang 2 , Yuhang Cao 2 , Jiaqi Wang 2 , Dahua Lin 2 , Weiming Zhang 1 , Nenghai Yu 1
1 Université des sciences et technologies de Chine, 2 Laboratoire d'IA de Shanghai, 3 Université chinoise de Hong Kong
[2024.10.10] Nous publions l'article sur ArXiv et HuggingFace !
[2024.10.10] Cette page de projet a été construite !
Si vous souhaitez simplement utiliser MIR comme indicateur de pré-entraînement de votre propre modèle, aucun environnement supplémentaire n'est requis.
torch
, numpy
et scipy
sont installés.mir.py
par le code de votre propre modèle, nous affichons le code de LLaVA comme référence. python mir.py --model_path PATH/TO/MODEL --base_llm PATH/TO/LLM --text_data_path PATH/TO/TEXT/DATA --image_data_path PATH/TO/VISION/DATA --eval_num 100 --mode fast
Notez que base_llm
n'est pas obligatoire si vous entraînez le LLM de base pendant la pré-formation et incluez son ckpt dans model_path
.
Vous pouvez également ajuster les arguments au style d'initialisation de votre modèle.
Si vous souhaitez simplement utiliser MoCa sur votre propre modèle, nous vous recommandons de suivre les étapes ci-dessous :
modality_mask
, veuillez vous référer à Line183-184, Line269-276 et Line373-382 dans llava/model/llava_arch.py
. Assurez-vous également que le modality_mask
peut être livré avec succès dans la passe avant du modèle, par exemple en l'ajoutant comme paramètre formel de chaque fonction avant, comme Line70, Line88, Line96, Line106, Line127, Line137, Line145, Line157, Line166, Line174. -175 dans llava/model/language_model/llava_llama.py
.use_moca=True
, tels que (il est recommandé de rechercher use_moca
dans ce dépôt pour trouver les endroits qui doivent être révisés) : 1)Ajoutez-le dans la configuration du modèle (ici). 2) Ajoutez-le aux arguments de formation (ici). 3) Débloquez-le pendant l'entraînement (ici). 4) Assurez-vous que le point de contrôle est correctement enregistré (ici 1, ici 2, ici 3).--use_moca
lors de l'exécution de la commande de formation pour activer l'utilisation de MoCa. Si vous souhaitez utiliser notre base de code (modifiée sur LLaVA) pour la reproduction, il vous est recommandé de créer un nouvel environnement en suivant les étapes ci-dessous. Les étapes suivantes sont uniquement répertoriées pour Linux. Si vous utilisez macOS ou Windows, veuillez vous référer à LLaVA.
git clone https://github.com/shikiw/Modality-Integration-Rate.git
cd Modality-Integration-Rate
conda create -n llava python=3.10 -y
conda activate llava
python -m pip install --upgrade pip # enable PEP 660 support
python -m pip install -e .
python -m pip install -e transformers-4.37.2
pythom -m pip install -e ".[train]"
pythom -m pip install flash-attn --no-build-isolation
Pour reproduire l'implémentation MIR sur cette base de code, vous pouvez suivre ces étapes :
text_data_path
et image_data_path
pour le calcul MIR. Vous pouvez également les spécifier comme Line55-64 dans mir.py
, en utilisant les images TextVQA val et le texte CNN/DM par défaut, c'est-à-direPATH/TO/VISION/DATA
.PATH/TO/TEXT/DATA
. python mir.py --model_path PATH/TO/MODEL --base_llm PATH/TO/LLM --eval_num 100 --mode fast
python mir.py --model_path PATH/TO/MODEL --eval_num 100 --mode fast
Notre base de code prend en charge --use_moca
pour activer l'implémentation de MoCa. Consultez scripts/v1_5/pre_sft_moca.sh
pour plus de détails.
Modèle | Taille | Calendrier | Moyenne | MMStar | MME | MMB | MMB-CN | SEED-IMG | TexteVQA | MM-Vet | PAPE | GQA |
---|---|---|---|---|---|---|---|---|---|---|---|---|
LLaVA-v1.5 | 7B | full_ft-1e | 59.1 | 30.3 | 1510.7 | 64,3 | 58.3 | 66.1 | 58.2 | 31.1 | 85,9 | 62,0 |
+MoCa | 7B | full_ft-1e | 60,6 | 36,5 | 1481.0 | 66,8 | 60,0 | 67,0 | 58,7 | 32.2 | 86,9 | 62,8 |
Les points de contrôle pré-entraînés et affinés sont libérés.
Cette base de code est basée sur LLaVA et ShareGPT4V, où nous introduisons quelques nouvelles fonctionnalités et prend désormais en charge les entrées suivantes dans le script de lancement :
--tune_vision_tower
et --tune_vit_from_layer
--tune_language_model
et --tune_llm_utill_layer
--tune_entire_model
--data_scale
--use_moca
et --moca_std
Quelques cas pour référence :
sh scripts/v1_5/pre_data_scale.sh
sh scripts/v1_5/pre_unlock_vit-12_llm-16_sft.sh
sh scripts/v1_5/pre_unlock_vit-12_llm-all_sft.sh
sh scripts/v1_5/pre_sft_moca.sh
Nous suivons l'évaluation originale dans LLaVA pour la plupart des benchmarks. Pour MMStar, nous utilisons VLMEvalKit.
Voir Évaluation.md.
Ce dépôt est basé sur la base de code de LLaVA et ShareGPT4V. Merci pour leurs travaux impressionnants!
Si vous trouvez ce travail utile pour votre recherche, veuillez citer notre article :
@article{huang2024deciphering,
title={Deciphering Cross-Modal Alignment in Large Vision-Language Models with Modality Integration Rate},
author={Huang, Qidong and Dong, Xiaoyi and Zhang, Pan and Zang, Yuhang and Cao, Yuhang and Wang, Jiaqi and Lin, Dahua and Zhang, Weiming and Yu, Nenghai},
journal={arXiv preprint arXiv:2410.07167},
year={2024}
}