Este repositorio proporciona la implementación oficial de PyTorch del siguiente documento:
Descifrando la alineación intermodal en modelos de lenguaje-visión amplios con tasa de integración de modalidades
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 Universidad de Ciencia y Tecnología de China, 2 Laboratorio de IA de Shanghai, 3 Universidad China de Hong Kong
[2024.10.10] ¡Publicamos el artículo en ArXiv y HuggingFace!
[2024.10.10] ¡ Esta página de proyecto ha sido creada!
Si solo desea utilizar MIR como indicador de preentrenamiento de su propio modelo, no se requiere ningún entorno adicional.
torch
, numpy
y scipy
estén instalados.mir.py
con el código de su propio modelo, mostramos el código de LLaVA como referencia. 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
Tenga en cuenta que base_llm
no es necesario si entrena el LLM base durante el entrenamiento previo e incluye su ckpt en model_path
.
También puede ajustar los argumentos al estilo de inicialización de su modelo.
Si sólo desea utilizar MoCa en su propio modelo, le recomendamos que siga los pasos a continuación:
modality_mask
; consulte Line183-184, Line269-276 y Line373-382 en llava/model/llava_arch.py
. Además, asegúrese de que modality_mask
se pueda entregar con éxito en el paso directo del modelo, por ejemplo, agregándolo como parámetro formal de cada función directa, como Línea70, Línea88, Línea96, Línea106, Línea127, Línea137, Línea145, Línea157, Línea166, Línea174. -175 en llava/model/language_model/llava_llama.py
.use_moca=True
, como (se recomienda buscar use_moca
en este repositorio para encontrar qué lugares deben revisarse): 1)Agréguelo a la configuración del modelo (aquí). 2) Agréguelo a los argumentos de entrenamiento (aquí). 3) Desbloquéalo durante el entrenamiento (aquí). 4) Asegúrese de guardar el punto de control correcto (aquí1, aquí2, aquí3).--use_moca
cuando ejecute el comando de entrenamiento para habilitar el uso de MoCa. Si desea utilizar nuestro código base (modificado en LLaVA) para la reproducción, se le recomienda crear un nuevo entorno siguiendo los pasos a continuación. Los siguientes pasos solo se enumeran para Linux. Si está utilizando macOS o Windows, consulte 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
Para reproducir la implementación MIR en este código base, puede seguir estos pasos:
text_data_path
e image_data_path
para el cálculo MIR. También puede especificarlos como Line55-64 en mir.py
, usando imágenes TextVQA val y texto CNN/DM de forma predeterminada, es decir,PATH/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
Nuestro código base admite --use_moca
para activar la implementación de MoCa. Consulte scripts/v1_5/pre_sft_moca.sh
para obtener más detalles.
Modelo | Tamaño | Cronograma | Promedio | MMStar | MME | MMB | MMB-CN | SEMILLA-IMG | TextoVQA | MM-Vet | PAPA | 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 |
Se liberan los puntos de control previamente entrenados y ajustados.
Este código base se basa en LLaVA y ShareGPT4V, donde presentamos algunas características nuevas y ahora admite las siguientes entradas en el script de inicio:
--tune_vision_tower
y --tune_vit_from_layer
--tune_language_model
y --tune_llm_utill_layer
--tune_entire_model
--data_scale
--use_moca
y --moca_std
Algunos casos de referencia:
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
Seguimos la evaluación original en LLaVA para la mayoría de los puntos de referencia. Para MMStar, utilizamos VLMEvalKit.
Consulte Evaluación.md.
Este repositorio se basa en el código base de LLaVA y ShareGPT4V. ¡Gracias por sus impresionantes trabajos!
Si encuentra este trabajo útil para su investigación, cite nuestro artículo:
@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}
}