VILA arxiv / Démo VILA / VILA Huggingface
VILA est un modèle de langage visuel (VLM) pré-entraîné avec des données image-texte entrelacées à grande échelle, permettant des capacités de compréhension vidéo et de compréhension multi-images . VILA est déployable en périphérie grâce à la quantification AWQ 4 bits et au framework TinyChat. Nous trouvons : (1) les paires image-texte ne suffisent pas, l'entrelacement image-texte est essentiel ; (2) le dégel du LLM pendant la pré-formation image-texte entrelacée permet un apprentissage en contexte ; (3) le mélange des données d'instructions en texte uniquement est crucial pour améliorer les performances du VLM et du texte uniquement ; (4) la compression des jetons étend les images #video. VILA dévoile des fonctionnalités attrayantes, notamment : le raisonnement vidéo, l'apprentissage en contexte, la chaîne de pensée visuelle et une meilleure connaissance du monde.
[2024/10] VILA-M3, un VLM médical SOTA affiné sur VILA1.5 est disponible ! VILA-M3 surpasse considérablement Llava-Med et est à égalité avec Med-Gemini et est entièrement open source ! modèle de code
[2024/10] Nous publions VILA-U : un modèle de base unifié qui intègre la compréhension et la génération de la vidéo, de l'image, du langage.
[2024/08] Nous publions LongVILA qui prend en charge la compréhension des vidéos longues (sous-titrage, assurance qualité, Needle-in-a-Haystack) jusqu'à 1024 images.
[2024/07] VILA1.5 se classe également à la 1ère place (modèle OSS) dans le classement des tests MLVU.
[2024/06] VILA1.5 est désormais le meilleur VLM open source du classement MMMU et du classement Vidéo-MME !
[2024/05] Nous publions VILA-1.5, qui offre une capacité de compréhension vidéo . VILA-1.5 est disponible en quatre tailles de modèle : 3B/8B/13B/40B.
[2024/05] Nous lançons des modèles VILA-1.5 4 bits quantifiés AWQ. VILA-1.5 est déployable efficacement sur divers GPU NVIDIA (A100, 4090, 4070 Laptop, Orin, Orin Nano) par les backends TinyChat et TensorRT-LLM.
[2024/03] VILA a été acceptée par le CVPR 2024 !
[2024/02] Nous publions des modèles VILA 4 bits quantifiés AWQ, déployables sur Jetson Orin et les ordinateurs portables via TinyChat et TinyChatEngine.
[2024/02] VILA est libérée. Nous proposons un pré-entraînement image-texte entrelacé qui permet un VLM multi-images . VILA est doté de capacités d'apprentissage en contexte impressionnantes. Nous open source tout : y compris le code de formation, le code d'évaluation, les ensembles de données, les modèles de chèques.
[2023/12] L'article est sur Arxiv !
Préc. | VQAv2 | GQA | Visualisation | SQA-I | VQA-T | PAPE | MME | MMB | MMB-CN | GRAINE | SEED-I | MMMU (valeur) | MMMU (test) | banc de lave | MM-Vet | Moyenne | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
VILA1.5-3B | fp16 | 80,4 | 61,5 | 53,5 | 69,0 | 60,4 | 85,9 | 1442.44 | 63,4 | 52,7 | 60,9 | 67,9 | 33.3 | 30,8 | 75,9 | 35.4 | 60,2 |
VILA1.5-3B-AWQ | int4 | 80,0 | 61.1 | 53,8 | 67,8 | 60,4 | 85,9 | 1437.34 | 63,3 | 51.4 | 59,8 | 66,6 | 32,7 | 31.1 | 75,0 | 37.3 | 59,9 |
VILA1.5-3B-S2 | fp16 | 79,8 | 61,4 | 61,3 | 69,6 | 63,4 | 85,3 | 1431.65 | 62,8 | 52.2 | 60,0 | 66,4 | 32,8 | 31.3 | 76,7 | 38,6 | 60,9 |
VILA1.5-3B-S2-AWQ | int4 | 79,4 | 61,3 | 62,3 | 69,2 | 63,0 | 85,8 | 1417.06 | 61,6 | 51,5 | 59.1 | 65,7 | 33.4 | 30.4 | 77.1 | 36,7 | 60,5 |
Lama-3-VILA1.5-8B | fp16 | 83,0 | 63,5 | 63.2 | 82,0 | 68,5 | 85,6 | 1634.91 | 75.3 | 69,9 | 66,4 | 73,8 | 38,6 | 32,7 | 71,9 | 43.2 | 66,6 |
Lama-3-VILA1.5-8B-AWQ | int4 | 80,3 | 61,7 | 59.3 | 79,0 | 65,4 | 82,9 | 1593.65 | 71,0 | 64,9 | 64,0 | 71.1 | 36,0 | 36.1 | 79,0 | 37.2 | 64,5 |
VILA1.5-13B | fp16 | 82,8 | 64,3 | 62,6 | 80,1 | 65,0 | 86,3 | 1569.55 | 74,9 | 66,3 | 65.1 | 72,6 | 37,9 | 33,6 | 80,8 | 44.3 | 66,3 |
VILA1.5-13B-AWQ | int4 | 82,7 | 64,5 | 63,3 | 79,7 | 64,7 | 86,7 | 1531.35 | 74,7 | 66,7 | 65.1 | 72,6 | 37,8 | 34,0 | 81,9 | 46.4 | 66,5 |
VILA1.5-40B | fp16 | 84,3 | 64,6 | 62.2 | 87,2 | 73,6 | 87,3 | 1726.82 | 82,4 | 80,2 | 69.1 | 75,8 | 51,9 | 46,9 | 81,3 | 53,0 | 72,4 |
VILA1.5-40B-AWQ | int4 | 84.1 | 64,4 | 61,3 | 86,7 | 73.2 | 88,2 | 1714.79 | 83.2 | 79,6 | 68,9 | 75,6 | 49.3 | 46.2 | 83,0 | 51.4 | 72.1 |
REMARQUE : VQAV2 et VizWiz sont des tests de développement, la précision moyenne est calculée sur tous les ensembles de données et les nombres MME sont divisés par 20.
Préc. | Test de perception | ActivitéNet | MSVD | MSRVTT | TGIF | EgoSchema (test) | CinéPile | |
---|---|---|---|---|---|---|---|---|
VILA1.5-3B | fp16 | 47 | 50,2 | 76,6 | 57,5 | 51,7 | 42,6 | 37,9 |
VILA1.5-3B-S2 | fp16 | 49,7 | 50,7 | 76,9 | 57,6 | 51,7 | ||
Lama-3-VILA1.5-8B | fp16 | 54.1 | 54.3 | 78.3 | 60,1 | 54.1 | 50,4 | 48,7 |
VILA1.5-13B | fp16 | 53,6 | 54,7 | 77,9 | 60,2 | 56 | 52.2 | 50,1 |
VILA1.5-40B | fp16 | 54 | 58 | 80,1 | 63 | 58.2 | 58,7 | 51.3 |
Précision | A100 | 4090 | Orin | |
---|---|---|---|---|
VILA1.5-3B | fp16 | 104,6 | 137,6 | 25.4 |
VILA1.5-3B-AWQ | int4 | 182,8 | 215,5 | 42,5 |
VILA1.5-3B-S2 | fp16 | 104.3 | 137.2 | 24.6 |
VILA1.5-3B-S2-AWQ | int4 | 180.2 | 219.3 | 40.1 |
Lama-3-VILA1.5-8B | fp16 | 74,9 | 57.4 | 10.2 |
Lama-3-VILA1.5-8B-AWQ | int4 | 168,9 | 150,2 | 28,7 |
VILA1.5-13B | fp16 | 50,9 | MOO | 6.1 |
VILA1.5-13B-AWQ | int4 | 115,9 | 105,7 | 20.6 |
VILA1.5-40B | fp16 | MOO | MOO | -- |
VILA1.5-40B-AWQ | int4 | 57,0 | MOO | -- |
REMARQUE : Mesuré à l'aide du backend TinyChat avec une taille de lot = 1.
Invite : développez en détail les éléments visuels et narratifs de la vidéo.
Légende : La vidéo montre les mains d'une personne travaillant sur une surface blanche. Ils plient un morceau de tissu avec un motif à carreaux dans des tons de bleu et de blanc. Le tissu est plié pour obtenir une forme plus petite et plus compacte. Les ongles de la personne sont peints en rouge et elle porte un vêtement noir et rouge. Il y a aussi une règle et un crayon sur la surface, ce qui suggère que les mesures et la précision sont impliquées dans le processus.
./environment_setup.sh vila
La formation VILA contient trois étapes, pour des hyperparamètres spécifiques, veuillez consulter le dossier scripts/v1_5 :
Nous utilisons l'ensemble de données LLaVA-CC3M-Pretrain-595K pour aligner les modalités textuelles et visuelles.
Le script de l'étape 1 prend en compte deux paramètres et peut s'exécuter sur un seul nœud 8xA100. BASE_MODEL_PATH
pointe vers un référentiel huggingface en ligne ou local, tel que NousResearch/Llama-2-7b-hf
. OUTPUT_NAME
pointe vers un répertoire cible sous checkpoints
, qui enregistrera ensuite le projecteur multimodal formé.
bash scripts/v1_5/paper/1_mm_align.sh [BASE_MODEL_PATH] [OUTPUT_NAME]
Nous utilisons les ensembles de données MMC4 et Coyo pour entraîner VLM avec des paires image-texte entrelacées.
bash scripts/v1_5/paper/2_pretrain_mmc4_coyo.sh [CODE_PATH] [BASE_MODEL_PATH] [STAGE1_PATH] [OUTPUT_NAME]
Le script de l'étape 2 comprend quatre arguments. CODE_PATH
est le chemin absolu vers notre base de code VILA, BASE_MODEL_PATH
a une signification similaire à celle présentée dans le script de l'étape 1. STAGE1_PATH
pointe vers le OUTPUT_NAME
de l'étape 1 (c'est-à-dire où le point de contrôle de l'étape 1 est stocké). OUTPUT_NAME
est le nom du dossier souhaité sous checkpoints
qui enregistre le point de contrôle de pré-entraînement. Le script que nous avons fourni pour cette étape est exécuté sur slurm et nous nous attendons à ce qu'il s'exécute sur 16 nœuds (128 GPU).
Il s'agit de la dernière étape de la formation VILA, dans laquelle nous ajustons le modèle pour suivre des instructions multimodales sur un sous-ensemble de M3IT, FLAN et ShareGPT4V. Cette étape s'exécute sur un nœud 8xA100.
bash scripts/v1_5/paper/3_sft.sh [STAGE2_PATH] [OUTPUT_NAME]
Le script de l'étape 3 prend en compte deux arguments. STAGE2_PATH
pointe vers le OUTPUT_NAME
du script de l'étape 2 (c'est-à-dire où le point de contrôle de l'étape 2 est stocké). OUTPUT_NAME
est le nom du dossier souhaité sous checkpoints
qui stocke le point de contrôle final.
Vous pouvez suivre l'évaluation Llava1.5 pour télécharger tous les ensembles de données. Après avoir téléchargé tous les ensembles de données, veuillez les placer sous playground/data/eval
.
Veuillez apporter les modifications suivantes au script d'évaluation MME. Veuillez rechercher :
data_path = "MME_Benchmark_release_version"
et remplacez-le par :
data_path = os.path.join(script_dir, "MME_Benchmark_release_version")
Nous fournissons un script en appuyant sur un bouton pour effectuer une évaluation sur les 10 ensembles de données qui ne nécessitent pas d'évaluation assistée par GPT :
./scripts/v1_5/eval/eval_all.sh [CHECKPOINT_PATH] [MODEL_NAME] [CONV_MODE]
Ce script prend en compte deux paramètres, CHECKPOINT_PATH
pointe vers le point de contrôle du modèle de l'étape 3 et MODEL_NAME
sera le nom des résultats de l'évaluation.
Les évaluations VQAv2 et Vizwiz sont hébergées sur eval.ai. Vous devez créer un compte et créer une équipe pour pouvoir soumettre une évaluation.
MMBench et MMBench_CN eval sont hébergés sur un autre serveur d'évaluation. Assurez-vous de changer le nom du fichier avant de le soumettre, sinon le serveur met en cache les résultats et vous renverra toujours un résultat erroné.
Nous fournissons un script rapide pour organiser automatiquement les fichiers de prédiction qui doivent être soumis aux serveurs :
scripts python/v1_5/eval/copy_predictions.py [MODEL_NAME]
Vous pourrez trouver les prédictions sous playground/data/predictions_upload/[MODEL_NAME]
après avoir exécuté ce script.
Veuillez suivre les étapes d'évaluation dans Video-LLaVA pour la préparation de l'ensemble de données.
./scripts/v1_5/eval/video_chatgpt/run_all.sh [CHECKPOINT_PATH] [MODEL_NAME] [CONV_MODE] ./scripts/v1_5/eval/video_chatgpt/eval_all.sh [MODEL_NAME]
Nous fournissons des extraits pour une inférence rapide avec des invites utilisateur et des images.
Inférence Llama-3-VILA1.5-8B :
python -W ignorer llava/eval/run_vila.py --model-path Efficient-Large-Model/Llama-3-VILA1.5-8b-Fix --conv-mode lama_3 --query "<image>n Veuillez décrire les conditions de circulation." --fichier-image "av.png"
Inférence VILA1.5-40B :
python -W ignorer llava/eval/run_vila.py --model-path Efficace-Grand-Modèle/VILA1.5-40b --conv-mode hermes-2 --query "<image>n Veuillez décrire les conditions de circulation." --fichier-image "av.png"
Inférence vidéo VILA1.5-3B :
python -W ignorer llava/eval/run_vila.py --model-path Efficace-Grand-Modèle/VILA1.5-3b --conv-mode vicuna_v1 --query "<video>n Veuillez décrire cette vidéo." --fichier vidéo "demo.mp4"
Nos modèles VILA sont quantifiés par AWQ en 4 bits pour une inférence efficace en périphérie. Nous fournissons un script appuyant sur un bouton pour quantifier VILA avec AWQ.
Nous prenons en charge VILA 4 bits quantifié AWQ sur les plates-formes GPU via TinyChat. Nous fournissons un tutoriel pour exécuter le modèle avec TinyChat après quantification. Nous fournissons également une instruction pour lancer un serveur Gradio (alimenté par TinyChat et AWQ) pour servir des modèles VILA quantifiés 4 bits.
Nous prenons également en charge nos modèles VILA 4 bits quantifiés AWQ sur diverses plates-formes de processeur avec des architectures x86 et ARM avec notre TinyChatEngine. Nous fournissons également un didacticiel détaillé pour aider les utilisateurs à déployer VILA sur différents processeurs.
Un simple serveur API a été fourni pour servir les modèles VILA. Le serveur est construit sur FastAPI et Huggingface Transformers. Le serveur peut être exécuté avec la commande suivante :
python -W ignorer server.py --port 8000 --model-path Efficace-Grand-Modèle/VILA1.5-3B --conv-mode vicuna_v1
docker build -t vila-server:dernier .docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -v ./hub:/root/.cache/huggingface/hub -it --rm -p 8000:8000 -e VILA_MODEL_PATH=Efficient-Large-Model/VILA1.5-3B -e VILA_CONV_MODE=vicuna_v1 vila-server:dernier
Ensuite, vous pouvez appeler le point de terminaison avec le SDK OpenAI comme suit :
depuis openai import OpenAIclient = OpenAI(base_url="http://localhost:8000",api_key="fake-key", )response = client.chat.completions.create(messages=[ {"role": "utilisateur", "contenu": [ {"type": "text", "text": "Qu'y a-t-il dans cette image ?"}, {"type": "image_url","image_url": {"url": "https://blog.logomyway.com/wp-content/uploads/2022/01/NVIDIA-logo.jpg",# Ou vous pouvez transmettre une image codée en base64# "url": "data:image/png;base64,<base64_encoded_image>",}, }, ], } ],max_tokens=300,model="VILA1.5-3B",# Vous pouvez transmettre des paramètres supplémentaires comme suitextra_body={"num_beams": 1, "use_cache": False}, )print(response.choices[0].message.content)
REMARQUE : Ce serveur API est destiné uniquement à des fins d'évaluation et n'a pas été optimisé pour une utilisation en production. Il n'a été testé que sur les GPU A100 et H100.
Nous publions VILA1.5-3B, VILA1.5-3B-S2, Llama-3-VILA1.5-8B, VILA1.5-13B, VILA1.5-40B et les modèles quantifiés AWQ 4 bits VILA1.5- 3B-AWQ, VILA1.5-3B-S2-AWQ, Lama-3-VILA1.5-8B-AWQ, VILA1.5-13B-AWQ, VILA1.5-40B-AWQ.
Le code est publié sous la licence Apache 2.0 telle que trouvée dans le fichier LICENSE.
Les poids pré-entraînés sont publiés sous la licence CC-BY-NC-SA-4.0.
Le service est un aperçu de recherche destiné à un usage non commercial uniquement et est soumis aux licences et conditions suivantes :
Modèle de licence de LLaMA. Pour connaître les conditions d'utilisation des points de contrôle LAMA3-VILA, veuillez vous référer à la licence LAMA3 pour plus de détails.
Conditions d'utilisation des données générées par OpenAI
Licences d'ensemble de données pour chacun utilisé pendant la formation.
*Yao Lu : Nvidia | *Hongxu Yin : Nvidia | *Ji Lin : OpenAI (travail effectué chez Nvidia et MIT) |
Wei Ping : Nvidia | Pavlo Molchanov : Nvidia | Andrew Tao : Nvidia |
Haotian Tang : MIT | Shang Yang : MIT | Ligeng Zhu : Nvidia, MIT |
Wei-Chen Wang : MIT | Fuzhao Xue : Nvidia, NUS | Yunhao Fang : Nvidia, UCSD |
Yukang Chen : Nvidia | Zhuoyang Zhang : Nvidia | Yue Shen : Nvidia |
Wei-Ming Chen : Nvidia | Huizi Mao : Nvidia | Baifeng Shi : Nvidia, UC Berkeley |
Jan Kautz : Nvidia | Mohammad Shoeybi : Nvidia | Chanson Han : Nvidia, MIT |
@misc{lin2023vila, title={VILA: On Pre-training for Visual Language Models}, author={Ji Lin and Hongxu Yin and Wei Ping and Yao Lu and Pavlo Molchanov and Andrew Tao and Huizi Mao and Jan Kautz and Mohammad Shoeybi and Song Han}, year={2023}, eprint={2312.07533}, archivePrefix={arXiv}, primaryClass={cs.CV} }
LLaVA : la base de code sur laquelle nous avons construit. Merci pour leur merveilleux travail.
InternVL : pour InternViT open source (utilisé dans VILA1.5-40b) et le mélange de données InternVL-SFT (inspiré de LLaVA-1.6) utilisé dans tous les modèles VILA1.5.
Vicuna : l'incroyable grand modèle de langage open source !
Video-ChatGPT : nous avons emprunté le script d'évaluation vidéo à ce référentiel.
MMC4, COYO-700M, M3IT, OpenORCA/FLAN, ShareGPT4V, WIT, GSM8K-ScRel, VisualGenome, VCR, ScienceQA, Shot2Story, Youcook2, Vatex, ShareGPT-Video pour avoir fourni les ensembles de données utilisés dans cette recherche.