Uma implementação de código aberto da série LLava-NEXT para facilitar a grande comunidade de modelos multimodais.
Recursos: [? Huggingface]
Veja mais detalhes no Modelzoo.md.
| Nome | Vit | Llm | Pesos | Mme | SEMENTE | SQA | MMB | MMB-CN | TextVqa | GQA |
|---|---|---|---|---|---|---|---|---|---|---|
| llava-next-vicuna-7b | Clip-L-336 | Vicuna-7b | Sft | 1519 | 70.2 | 70.1 | 67.4 | 60.6 | 64.9 | 64.2 |
| Open-LLAVA-NEXT-VICUNA-7B | Clip-L-336 | Vicuna-7b | Pt, sft | 1540 | 71.1 | 70.7 | 68.5 | 60.7 | 67.2 | 64.3 |
| llava-next-llama3-8b | Clip-L-336 | Llama3-8b | Sft | 1591 | 72.7 | 73.4 | 72.6 | 69.0 | 65.0 | 65.5 |
| Open-llava-next-llama3-8b | Clip-L-336 | Llama3-8b | Pt, sft | 1552 | 74.4 | 77.3 | 74.4 | 70.4 | 69.8 | 65.9 |
git clone https://github.com/xiaoachen98/Open-LLaVA-NeXT.git
cd Open-LLaVA-NeXTconda create -n llava-next python=3.10 -y
conda activate llava-next
pip install --upgrade pip # enable PEP 660 support
pip install -e . pip install -e ".[train]"
pip install flash-attn --no-build-isolation
Você deve seguir este instrução Data.md para gerenciar os conjuntos de dados de treinamento.
O treinamento aberto-LAVA-NEXT consiste em dois estágios: (1) Estágio de alinhamento de recursos: use 558k subconjunto do conjunto de dados Laion-CC-SBU para conectar um codificador de visão pré-treinada congelada a um LLM congelado ; (2) Estágio de ajuste de instrução visual: Finetune todo o modelo com 1M de dados de código aberto completamente . A estática detalhada dos dados é fornecida no ajuste da instrução visual. Tomamos a variante Vicuna-V1.5-7b como exemplo para apresentar os detalhes de treinamento e avaliação.
A série Open-Llava-NEXT é treinada em GPUs A100 com memória de 80 GB. Para treinar com menos GPUs, você pode reduzir o per_device_train_batch_size e aumentar o gradient_accumulation_steps de acordo. E a utilização do DeepSpeed Zero-3 pode reduzir ainda mais os requisitos de memória. Mantenha sempre o tamanho do lote global o mesmo: per_device_train_batch_size x gradient_accumulation_steps x num_gpus .
Utilizamos o mesmo conjunto de hiperparâmetros que Llava no Finetuning. Ambos os hiperparâmetros usados em pré -treinamento e finetuning são fornecidos abaixo.
| Hiperparâmetro | Tamanho global do lote | Projector LR | Épocas | Comprimento máximo | Decaimento de peso |
|---|---|---|---|---|---|
| Open-LLAVA-NEXT-7B | 256 | 1e-3 | 1 | 4096 | 0 |
| Hiperparâmetro | Tamanho global do lote | Llm lr | Projector LR | Vision Tower LR | Épocas | Comprimento máximo | Decaimento de peso |
|---|---|---|---|---|---|---|---|
| Open-LLAVA-NEXT-7B | 128 | 2E-5 | 2E-5 | 2E-6 | 1 | 4096 | 0 |
Faça o download do subconjunto 558K do conjunto de dados Laion-CC-SBU com legendas de BLIP aqui.
O Pretain leva cerca de 5 horas para o Open-LLAVA-NEXT-7B em 16 x A100 (80G).
Script de treinamento com DeepSpeed Zero-2: pretrain.sh .
--mm_projector_type mlp2x_gelu : o conector de duas camadas MLP Vision-Language.--vision_tower openai/clip-vit-large-patch14-336 : Clip Vit-L/14 336px. Script de treinamento com DeepSpeed Zero-2: finetune.sh .
Novas opções a serem observadas:
--unfreeze_mm_vision_tower True : Finetune Vision Tower.--mm_vision_tower_lr 2e-6 : taxa de aprendizado da torre de visão.--image_aspect_ratio anyres : Processe uma imagem com resoluções variáveis.--mm_patch_merge_type spatial_unpad : Isso não pode por um tensor de pytorch de uma imagem acolchoada e redimensionada e, ao inserir vetores de nova linha aprendidos em tokens de imagem, o modelo se torna ciente das informações espaciais bidimensionais. Isso é usado para processar o token de imagem. Consulte avaliação.md.
Se você achar este projeto útil em sua pesquisa, considere citar:
@misc { chen2024open ,
title = { Open-LLaVA-NeXT: An open-source implementation of LLaVA-NeXT series for facilitating the large multi-modal model community. } ,
author = { Chen, Lin and Xing, Long } ,
howpublished = { url{https://github.com/xiaoachen98/Open-LLaVA-NeXT} } ,
year = { 2024 } ,
doi = { 10.5281/zenodo.13935471 }
}