模型简介
模型特点
模型能力
使用案例
🚀 LLaVA-Med:在VQA-Rad上微调
面向生物医学领域,通过课程学习方法将LLaVA模型适配到生物医学领域,以构建具备GPT - 4水平能力的大语言与视觉模型。
[论文,NeurIPS 2023数据集与基准测试赛道(亮点展示)] | [LLaVA - Med GitHub仓库]
Chunyuan Li*、Cliff Wong*、Sheng Zhang*、Naoto Usuyama、Haotian Liu、Jianwei Yang、Tristan Naumann、Hoifung Poon、Jianfeng Gao (*同等贡献)
*由 GLIGEN 使用基于文本的图像修复模式生成,包含三个提示框:“白色医生外套”、“听诊器”、“带有红十字标志的白色医生帽”。*
*LLaVA - Med以通用领域的LLaVA为基础进行初始化,然后以课程学习的方式进行持续训练(首先进行生物医学概念对齐,然后进行全面的指令微调)。我们在标准的视觉对话和问答任务上对LLaVA - Med进行了评估。*
⚠️ 重要提示
数据、代码和模型检查点仅用于研究目的,并且还需遵守LLaMA、Vicuna和GPT - 4各自的使用条款所规定的额外限制。数据遵循CC BY NC 4.0许可协议。数据、代码和模型检查点可用于非商业目的,并且使用该数据集训练的任何模型都只能用于研究目的。严禁将基于此数据训练的模型用于临床护理或任何临床决策目的。
🚀 快速开始
本项目为生物医学领域的大语言与视觉模型LLaVA - Med,以下将为你介绍其安装、使用和评估的相关步骤。
✨ 主要特性
- 领域适配:通过课程学习方法将LLaVA模型适配到生物医学领域,提升在生物医学领域的问答性能。
- 基于大规模数据:基于PMC - 15M数据集构建,该数据集包含1500万对从生物医学研究文章中提取的图 - 文对。
- 多任务评估:在多个生物医学视觉问答任务上进行了评估,如VQA - Rad、SLAKE、Pathology - VQA等。
📦 安装指南
克隆仓库
https://github.com/microsoft/LLaVA-Med.git
cd LLaVA-Med
创建conda环境
conda create -n llava-med python=3.10 -y
conda activate llava-med
pip install --upgrade pip # 启用PEP 660支持
安装训练所需的额外包
pip uninstall torch torchvision -y
pip install torch==2.0.0+cu117 torchvision==0.15.1+cu117 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu117
pip install openai==0.27.8
pip uninstall transformers -y
pip install git+https://github.com/huggingface/transformers@cae78c46
pip install -e .
pip install einops ninja open-clip-torch
pip install flash-attn --no-build-isolation
💻 使用示例
获取LLaVA - Med权重
由于模型权重为增量权重,需要通过以下步骤获取完整的LLaVA - Med权重:
- 下载增量权重。
- 按照此处的说明,以Hugging Face格式获取原始LLaMA权重。
- 使用以下脚本应用增量权重:
python3 -m llava.model.apply_delta \
--base /path/to/llama-7b \
--target /output/path/to/llava_med_in_text_60k \
--delta path/to/llava_med_in_text_60k_delta
📚 详细文档
模型描述
大语言与视觉生物医学助手(LLaVA - Med)是一个使用课程学习方法训练的大语言与视觉模型,旨在将LLaVA适配到生物医学领域。它是一个开源版本,仅用于研究目的,以促进相关论文结果的可重复性。该模型在开放式生物医学问答任务上表现出了改进的性能,包括常见的视觉问答(VQA)基准数据集,如PathVQA和VQA - RAD。
模型用途
预期用途
数据、代码和模型检查点仅用于(I)未来的视觉 - 语言处理研究和(II)复现参考论文中报告的实验结果。不应用于临床护理或任何临床决策目的。
主要预期用途
主要用于支持AI研究人员复现和扩展本工作。LLaVA - Med及其相关模型有助于探索各种生物医学视觉 - 语言处理(VLP)和视觉问答(VQA)研究问题。
非预期用途
模型的任何部署用例(商业或其他用途)均不在预期范围内。尽管我们使用了广泛的公开研究基准对模型进行了评估,但模型和评估仅用于研究目的,不适合部署使用。更多详细信息请参考相关论文。
数据
该模型基于PMC - 15M数据集构建,这是一个用于生物医学视觉 - 语言处理的大规模并行图像 - 文本数据集。它包含从PubMed Central的生物医学研究文章中提取的1500万对图 - 文对,涵盖了多种生物医学图像类型,如显微镜图像、放射图像、组织学图像等。
局限性
- 语言限制:该模型使用英文语料库开发,因此可能仅适用于英文。
- 任务局限性:该模型仅在有限的生物医学基准任务上进行了评估,不适合在任何临床环境中使用。在某些情况下,模型可能会做出不准确的预测并表现出局限性,可能需要额外的缓解策略。
- 数据偏差:该模型部分基于PMC - 15M数据集开发,该数据集的图 - 文对可能存在反映当前学术出版实践的偏差。例如,相应的论文可能更倾向于正面结果,包含极端案例,并且不能代表其他生物医学数据源的分布。
信息表格
属性 | 详情 |
---|---|
模型类型 | 大语言与视觉生物医学模型,通过课程学习方法将LLaVA适配到生物医学领域 |
训练数据 | PMC - 15M数据集,包含1500万对从生物医学研究文章中提取的图 - 文对 |
🔧 技术细节
医学视觉聊天(GPT辅助评估)
生成LLaVA - Med回复
python model_vqa.py \
--model-name ./checkpoints/LLaVA-7B-v0 \
--question-file data/eval/llava_med_eval_qa50_qa.jsonl \
--image-folder data/images/ \
--answers-file /path/to/answer-file.jsonl
评估生成的回复
python llava/eval/eval_multimodal_chat_gpt_score.py \
--question_input_path data/eval/llava_med_eval_qa50_qa.jsonl \
--input_path /path/to/answer-file.jsonl \
--output_path /path/to/save/gpt4-eval-for-individual-answers.jsonl
总结评估结果
python summarize_gpt_review.py
医学VQA
准备数据
- 请参考VQA - Rad 仓库设置数据集。
- 为LLaVA - Med对话风格格式生成VQA - Rad数据集(与指令微调格式相同)。对于每个数据集,将其处理为三个组件:
train.json
、test.json
、images
。
微调
torchrun --nnodes=1 --nproc_per_node=8 --master_port=25001 \
llava/train/train_mem.py \
--model_name_or_path /path/to/checkpoint_llava_med_instruct_60k_inline_mention \
--data_path /path/to/eval/vqa_rad/train.json \
--image_folder /path/to/eval/vqa_rad/images \
--vision_tower openai/clip-vit-large-patch14 \
--mm_vision_select_layer -2 \
--mm_use_im_start_end True \
--bf16 True \
--output_dir /path/to/checkpoint_llava_med_instruct_60k_inline_mention/eval/fine_tuned/vqa_rad \
--num_train_epochs 3 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 5000 \
--save_total_limit 3 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--tf32 True \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
--model_max_length 2048 \
--gradient_checkpointing True \
--lazy_preprocess True \
--report_to wandb
评估
生成LLaVA回复
- 多GPU推理
python llava/eval/run_med_datasets_eval_batch.py --num-chunks 8 --model-name /path/to/checkpoint_llava_med_instruct_60k_inline_mention/eval/fine_tuned/vqa_rad \
--question-file path/to/eval/vqa_rad/test.json \
--image-folder path/to/eval/vqa_rad/images \
--answers-file /path/to/checkpoint_llava_med_instruct_60k_inline_mention/eval/fine_tuned/vqa_rad/test-answer-file.jsonl
- 单GPU推理
python llava/eval/model_vqa_med.py --model-name /path/to/checkpoint_llava_med_instruct_60k_inline_mention/eval/fine_tuned/vqa_rad \
--question-file path/to/eval/vqa_rad/test.json \
--image-folder path/to/eval/vqa_rad/images \
--answers-file /path/to/checkpoint_llava_med_instruct_60k_inline_mention/eval/fine_tuned/vqa_rad/test-answer-file.jsonl
评估生成的回复
- 评估所有三个VQA数据集
python llava/eval/run_eval_batch.py \
--pred_file_parent_path /path/to/llava-med \
--target_test_type test-answer-file
- 评估一个特定的VQA数据集
python llava/eval/run_eval.py \
--gt /path/to/eval/vqa_rad/test.json \
--pred /path/to/checkpoint_llava_med_instruct_60k_inline_mention/eval/fine_tuned/vqa_rad/test-answer-file.jsonl
📄 许可证
本项目遵循Microsoft Research License,具体请参考许可证链接。
致谢
如果你发现LLaVA - Med对你的研究和应用有帮助,请使用以下BibTeX引用:
@article{li2023llavamed,
title={Llava-med: Training a large language-and-vision assistant for biomedicine in one day},
author={Li, Chunyuan and Wong, Cliff and Zhang, Sheng and Usuyama, Naoto and Liu, Haotian and Yang, Jianwei and Naumann, Tristan and Poon, Hoifung and Gao, Jianfeng},
journal={arXiv preprint arXiv:2306.00890},
year={2023}
}
相关项目









