VILA arxiv / VILA Demo / VILA Huggingface
VILA es un modelo de lenguaje visual (VLM) previamente entrenado con datos de imagen y texto entrelazados a escala, lo que permite capacidades de comprensión de video y de múltiples imágenes . VILA se puede implementar en el borde mediante la cuantificación AWQ de 4 bits y el marco TinyChat. Encontramos: (1) los pares imagen-texto no son suficientes, la imagen-texto entrelazada es esencial; (2) descongelar LLM durante el preentrenamiento de imagen y texto entrelazado permite el aprendizaje en contexto; (3) volver a combinar datos de instrucciones de solo texto es crucial para mejorar el rendimiento tanto de VLM como de solo texto; (4) la compresión de tokens extiende los fotogramas de #video. VILA presenta capacidades atractivas, que incluyen: razonamiento en video, aprendizaje en contexto, cadena de pensamiento visual y un mejor conocimiento del mundo.
[2024/10] ¡Se lanza VILA-M3, un VLM médico SOTA ajustado en VILA1.5! ¡VILA-M3 supera significativamente a Llava-Med y está a la par de Med-Gemini y es totalmente de código abierto! modelo de código
[2024/10] Lanzamos VILA-U: un modelo básico unificado que integra comprensión y generación de video, imagen y lenguaje.
[2024/08] Lanzamos LongVILA que admite la comprensión de vídeos largos (subtítulos, control de calidad, Needle-in-a-Haystack) de hasta 1024 fotogramas.
[2024/07] VILA1.5 también ocupa el primer lugar (modelo OSS) en la clasificación de pruebas de MLVU.
[2024/06] ¡VILA1.5 es ahora el mejor VLM de código abierto en la tabla de clasificación MMMU y en la tabla de clasificación Video-MME!
[2024/05] Lanzamos VILA-1.5, que ofrece capacidad de comprensión de video . VILA-1.5 viene con cuatro tamaños de modelo: 3B/8B/13B/40B.
[2024/05] Lanzamos modelos VILA-1.5 de 4 bits cuantificados con AWQ. VILA-1.5 se puede implementar de manera eficiente en diversas GPU NVIDIA (A100, 4090, 4070 Laptop, Orin, Orin Nano) mediante los backends TinyChat y TensorRT-LLM.
[2024/03] ¡VILA ha sido aceptada por CVPR 2024!
[2024/02] Lanzamos modelos VILA de 4 bits cuantificados con AWQ, implementables en Jetson Orin y computadoras portátiles a través de TinyChat y TinyChatEngine.
[2024/02] Se libera VILA. Proponemos un preentrenamiento de imagen y texto entrelazado que permite VLM de múltiples imágenes . VILA viene con impresionantes capacidades de aprendizaje en contexto. Abrimos todo el código fuente: incluido el código de entrenamiento, el código de evaluación, los conjuntos de datos y los ckpts de modelos.
[2023/12] ¡El artículo está en Arxiv!
Prec. | VQAv2 | GQA | VizWiz | SQA-I | VQA-T | PAPA | MME | MMB | MMB-CN | SEMILLA | SEMILLA-I | MMMU (valor) | MMMU (prueba) | banco-llava | MM-Vet | Promedio | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 |
Llama-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 |
Llama-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 |
NOTA: VQAV2 y VizWiz son desarrolladores de prueba, la precisión promedio se calcula sobre todos los conjuntos de datos y los números de MME se dividen por 20.
Prec. | Prueba de percepción | ActividadNet | MSVD | MSRVTT | TGIF | Esquema del ego (prueba) | CinePila | |
---|---|---|---|---|---|---|---|---|
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 | ||
Llama-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 |
Precisión | A100 | 4090 | Orín | |
---|---|---|---|---|
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 |
Llama-3-VILA1.5-8B | fp16 | 74,9 | 57,4 | 10.2 |
Llama-3-VILA1.5-8B-AWQ | int4 | 168,9 | 150,2 | 28,7 |
VILA1.5-13B | fp16 | 50,9 | OOM | 6.1 |
VILA1.5-13B-AWQ | int4 | 115,9 | 105,7 | 20.6 |
VILA1.5-40B | fp16 | OOM | OOM | -- |
VILA1.5-40B-AWQ | int4 | 57.0 | OOM | -- |
NOTA: Medido utilizando el backend de TinyChat en un tamaño de lote = 1.
Mensaje: Desarrolla en detalle los elementos visuales y narrativos del video.
Leyenda: El video muestra las manos de una persona trabajando sobre una superficie blanca. Están doblando un trozo de tela con un patrón de cuadros en tonos azules y blancos. La tela se dobla hasta darle una forma más pequeña y compacta. Las uñas de la persona están pintadas de rojo y lleva una prenda negra y roja. También hay una regla y un lápiz en la superficie, lo que sugiere que en el proceso intervienen medidas y precisión.
./environment_setup.sh vila
La capacitación de VILA contiene tres pasos; para hiperparámetros específicos, consulte la carpeta scripts/v1_5:
Utilizamos el conjunto de datos LLaVA-CC3M-Pretrain-595K para alinear las modalidades textuales y visuales.
El script de la etapa 1 toma dos parámetros y puede ejecutarse en un único nodo 8xA100. BASE_MODEL_PATH
apunta a un repositorio de huggingface local o en línea, como NousResearch/Llama-2-7b-hf
. OUTPUT_NAME
apunta a un directorio de destino en checkpoints
, que guardará el proyector multimodal entrenado posteriormente.
scripts bash/v1_5/paper/1_mm_align.sh [BASE_MODEL_PATH] [OUTPUT_NAME]
Usamos el conjunto de datos MMC4 y Coyo para entrenar VLM con pares de imagen y texto entrelazados.
bash scripts/v1_5/paper/2_pretrain_mmc4_coyo.sh [CODE_PATH] [BASE_MODEL_PATH] [STAGE1_PATH] [OUTPUT_NAME]
El guión de la etapa 2 incluye cuatro argumentos. CODE_PATH
es la ruta absoluta a nuestro código base VILA, BASE_MODEL_PATH
tiene un significado similar al que se presenta en el script de la etapa 1. STAGE1_PATH
apunta a OUTPUT_NAME
de la etapa 1 (es decir, donde se almacena el punto de control de la etapa 1). OUTPUT_NAME
es el nombre de la carpeta deseada en checkpoints
que guarda el punto de control previo al entrenamiento. El script que proporcionamos para esta etapa se ejecuta en slurm y esperamos que se ejecute en 16 nodos (128 GPU).
Esta es la última etapa del entrenamiento VILA, en la que ajustamos el modelo para seguir instrucciones multimodales en un subconjunto de M3IT, FLAN y ShareGPT4V. Esta etapa se ejecuta en un nodo 8xA100.
scripts bash/v1_5/paper/3_sft.sh [STAGE2_PATH] [OUTPUT_NAME]
El guión de la etapa 3 incluye dos argumentos. STAGE2_PATH
apunta a OUTPUT_NAME
del script de la etapa 2 (es decir, donde se almacena el punto de control de la etapa 2). OUTPUT_NAME
es el nombre de la carpeta deseada en checkpoints
que almacena el punto de control final.
Puede seguir la evaluación de Llava1.5 para descargar todos los conjuntos de datos. Después de descargar todos los conjuntos de datos, colóquelos en playground/data/eval
.
Realice los siguientes cambios en el script de evaluación de MME. Por favor busque:
data_path = "MME_Benchmark_release_version"
y reemplácelo con:
data_path = os.path.join(script_dir, "MME_Benchmark_release_version")
Proporcionamos un script de presionar un botón para realizar la evaluación en los 10 conjuntos de datos que no requieren evaluación asistida por GPT:
./scripts/v1_5/eval/eval_all.sh [CHECKPOINT_PATH] [MODEL_NAME] [CONV_MODE]
Este script toma dos parámetros, CHECKPOINT_PATH
apunta al punto de control del modelo de etapa 3 y MODEL_NAME
será el nombre de los resultados de la evaluación.
Las evaluaciones de VQAv2 y Vizwiz están alojadas en eval.ai. Debe registrar una cuenta y crear un equipo para poder enviar la evaluación.
MMBench y MMBench_CN eval están alojados en otro servidor de evaluación. Asegúrese de cambiar el nombre del archivo antes de enviarlo; de lo contrario, el servidor almacenará en caché los resultados y siempre le devolverá un resultado incorrecto.
Proporcionamos un script rápido para organizar automáticamente los archivos de predicción que deben enviarse a los servidores:
scripts de Python/v1_5/eval/copy_predictions.py [NOMBRE_MODELO]
Podrás encontrar las predicciones en playground/data/predictions_upload/[MODEL_NAME]
después de ejecutar este script.
Siga los pasos de evaluación en Video-LLaVA para la preparación del conjunto de datos.
./scripts/v1_5/eval/video_chatgpt/run_all.sh [CHECKPOINT_PATH] [MODEL_NAME] [CONV_MODE] ./scripts/v1_5/eval/video_chatgpt/eval_all.sh [NOMBRE_MODELO]
Proporcionamos fragmentos para una rápida inferencia con indicaciones e imágenes del usuario.
Inferencia de Llama-3-VILA1.5-8B:
python -W ignorar llamada/eval/run_vila.py --model-path Modelo-grande-eficiente/Llama-3-VILA1.5-8b-Fix --conv-modo llama_3 --query "<imagen>n Describe la condición del tráfico". --archivo de imagen "av.png"
Inferencia VILA1.5-40B:
python -W ignorar llamada/eval/run_vila.py --model-path Modelo-grande-eficiente/VILA1.5-40b --modo-conv hermes-2 --query "<imagen>n Describe la condición del tráfico". --archivo de imagen "av.png"
Inferencia de vídeo VILA1.5-3B:
python -W ignorar llamada/eval/run_vila.py --model-path Modelo-grande-eficiente/VILA1.5-3b --conv-mode vicuña_v1 --query "<video>n Describe este video." --archivo de vídeo "demo.mp4"
Nuestros modelos VILA están cuantificados por AWQ en 4 bits para una inferencia eficiente en el borde. Proporcionamos un script con solo presionar un botón para cuantizar VILA con AWQ.
Admitimos VILA de 4 bits cuantificada con AWQ en plataformas GPU a través de TinyChat. Proporcionamos un tutorial para ejecutar el modelo con TinyChat después de la cuantificación. También proporcionamos instrucciones para iniciar un servidor Gradio (con tecnología de TinyChat y AWQ) para servir modelos VILA cuantificados de 4 bits.
Además, admitimos nuestros modelos VILA de 4 bits cuantificados con AWQ en varias plataformas de CPU con arquitecturas x86 y ARM con nuestro TinyChatEngine. También proporcionamos un tutorial detallado para ayudar a los usuarios a implementar VILA en diferentes CPU.
Se ha proporcionado un servidor API simple para dar servicio a los modelos VILA. El servidor está construido sobre FastAPI y Huggingface Transformers. El servidor se puede ejecutar con el siguiente comando:
python -W ignorar servidor.py --puerto 8000 --model-path Modelo-grande-eficiente/VILA1.5-3B --conv-mode vicuña_v1
docker build -t vila-server:último .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=Modelo-grande-eficiente/VILA1.5-3B -e VILA_CONV_MODE=vicuña_v1 servidor vila: último
Luego puede llamar al punto final con el SDK de OpenAI de la siguiente manera:
desde openai importar OpenAIclient = OpenAI(base_url="http://localhost:8000",api_key="llave-falsa", )respuesta = cliente.chat.compleciones.create(mensajes=[ {"rol": "usuario", "contenido": [ {"type": "text", "text": "¿Qué hay en esta imagen?"}, {"type": "image_url","image_url": {"url": "https://blog.logomyway.com/wp-content/uploads/2022/01/NVIDIA-logo.jpg",# O puedes pase una imagen codificada en base64# "url": "data:image/png;base64,<base64_encoded_image>",}, }, ], } ],max_tokens=300,model="VILA1.5-3B",# Puede pasar parámetros adicionales de la siguiente maneraextra_body={"num_beams": 1, "use_cache": False}, )imprimir(respuesta.opciones[0].mensaje.contenido)
NOTA: Este servidor API está destinado únicamente a fines de evaluación y no ha sido optimizado para uso en producción. Sólo se ha probado en las GPU A100 y H100.
Lanzamos VILA1.5-3B, VILA1.5-3B-S2, Llama-3-VILA1.5-8B, VILA1.5-13B, VILA1.5-40B y los modelos VILA1.5-cuantizados con AWQ de 4 bits. 3B-AWQ, VILA1.5-3B-S2-AWQ, Llama-3-VILA1.5-8B-AWQ, VILA1.5-13B-AWQ, VILA1.5-40B-AWQ.
El código se publica bajo la licencia Apache 2.0 como se encuentra en el archivo LICENCIA.
Las pesas previamente entrenadas se publican bajo la licencia CC-BY-NC-SA-4.0.
El servicio es una vista previa de la investigación destinada únicamente a uso no comercial y está sujeto a las siguientes licencias y términos:
Modelo de Licencia de LLaMA. Para conocer los términos de uso de los puntos de control LLAMA3-VILA, consulte la Licencia LLAMA3 para obtener detalles adicionales.
Condiciones de uso de los datos generados por OpenAI
Licencias de conjuntos de datos para cada uno utilizado durante la capacitación.
*Yao Lu: Nvidia | *Hongxu Yin: Nvidia | *Ji Lin: OpenAI (trabajo realizado en Nvidia y MIT) |
Wei Ping: Nvidia | Pavlo Molchanov: Nvidia | Andrés 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 | Canción 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: el código base sobre el que construimos. Gracias por su maravilloso trabajo.
InternVL: para InternViT de código abierto (utilizado en VILA1.5-40b) y la combinación de datos InternVL-SFT (inspirada en LLaVA-1.6) utilizada en todos los modelos VILA1.5.
Vicuña: ¡el increíble modelo de lenguaje grande de código abierto!
Video-ChatGPT: tomamos prestado un script de evaluación de video de este repositorio.
MMC4, COYO-700M, M3IT, OpenORCA/FLAN, ShareGPT4V, WIT, GSM8K-ScRel, VisualGenome, VCR, ScienceQA, Shot2Story, Youcook2, Vatex, ShareGPT-Video para proporcionar los conjuntos de datos utilizados en esta investigación.