• XrayGLM - 医学大模型



    关于 XrayGLM

    XrayGLM: 首个会看胸部X光片的中文多模态医学大模型 | The first Chinese Medical Multimodal Model that Chest Radiographs Summarization.
    基于VisualGLM-6B 微调


    研究背景

    MiniGPT-4 [1] 在500万全英文数据集(LAION+CC3M+CC12M+SBU)上预训练,并在3200多张高质量图像数 据描述上进行微调。

    希望有一个原生支持中文预训练的多 模态模型来支持我们的一些工作

    通用领域的多模态大模型风声水起,如MiniGPT-4,然而,此类多模态大模型却很少出现在医学领域的研 究中,阻碍了相关研究发展。

    MedCLIP 提出了 X-ray 和配对报告的公开数据集。XrayGPT 基于 MiniGPT-4 的思路训练了一个X-ray的医学多模态模型。

    OpenI 一份是来自印第安纳大学医院的胸部 X 光图 像数据集,包含 6,459 张图像和 3,955 份报告。


    VisualGLM-6B

    VisualGLM-6B [1] 是一个开源的,支持图像、中文和英文的多模态对话语言模型,语言模型基 于 ChatGLM-6B,具有 62 亿参数;

    图像部分通 过训练 BLIP2-Qformer 构建起视觉模型与语言 模型的桥梁,整体模型共78亿参数。

    VisualGLM-6B 依靠来自于 CogView 数据集的 30M高质量中文图文对,与300M经过筛选的 英文图文对进行预训练,中英文权重相同。该 训练方式较好地将视觉信息对齐到ChatGLM的 语义空间;之后的微调阶段,模型在长视觉问 答数据上训练,以生成符合人类偏好的答案。

    XrayGLM基于VisualGLM-6B进行微调训练而来。借助ChatGPT构建了一个可用于支持中文训练的X-ray影像- 诊疗报告对。


    XrayGLM微调实践

    1、克隆XrayGLM repo:

    git clone https://github.com/WangRongsheng/XrayGLM.git 
    
    • 1

    2、 安装依赖:

    pip install -r requirements.txt
    # 国内换源安装依赖
    pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
    
    • 1
    • 2
    • 3

    3、准备数据集:

    ./data/Xray/ 
    ├── 1000_1.png 
    ├── 1000_2.png 
    ├── ...
    └── openi-zh.json
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、配置训练文件finetune_XrayGLM.sh
    5、开启微调训练:

    # 报错:CUDA out of memory. Tried to allocate 20.00 MiB (GPU 4; 3.82 GiB total capacity; 2.94 GiB already allocated; 6.62 MiB free; 3.06 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
    
    # 设置CUDA变量,解决直接训练而出现无法正确加载到显卡问题 export CUDA_VISIBLE_DEVICES=0,1,2,3
    
    # 开始训练
    bash finetune_XrayGLM.sh
    
    # 训练过程很快,四卡A100训练2-3个小时就可以完成!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6、CLI测试:

    python cli_demo.py \
    --from_pretrained checkpoints/$fintune_weights$ \ --prompt_zh '详细描述这张胸部X光片的诊断结果'
      
    
    • 1
    • 2
    • 3
    • max_length: 总序列的最大长度
    • top_p
    • top_k
    • temperature:采样温度

    7、WebUI测试:

    python web_demo.py \
    --from_pretrained checkpoints/$fintune_weights$
     
    
    • 1
    • 2
    • 3

    1、不同的prompt构建对于整个模型的回答是否有影响?

    {"img": "fewshot-data/pig.png", "prompt": "这张图片的背景里有什么内容?", "label": "这张图片的背景是是虚化的。"},
    {"img": "fewshot-data/meme.png", "prompt": "这张图片的背景里有什么内容?", "label": "这张图片的背景是蓝色的木质地板。"},
    
     
    {"img": "./data/Xray/162_1.png", "prompt": "通过这张胸部光照片,可以诊断出什么?", "label": "根据X射线图像,心脏大小正常,胃部看起来很清晰。已经排除了胃炎、积液、水肿、气胸、腰病、结节或胃块的存在。该发现表明一切正常。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、大模型训练中,训练的精度(int4,int8,float16…)不是特别重要,模型的参数(6B、13B…) 很影响模型的性能。
    3、如果数据多的话可以考虑增加训练的参数,目前的训练脚本只训练了2层lora:

    https://github.com/THUDM/VisualGLM-6B/issues/61#issuecomment-1562856845


    未来展望

    1. 模型的能力更多来源于数据的支持,OpenI-zh作为微调数据集,其数据量足以支持研究,在更广泛的 任务和性能表现上,我们认为在大规模数据集上预训练并在高质量少量数据集上微调是一种可行的方案;
    2. 普遍意义的理解上,视觉多模态模型=视觉模型+语言模型。除了需要关注视觉模型信息与语言模型输 出的搭配外,还需要额外关注到语言模型的加强,在人机的对话中,尤其是医疗语言模型的问答上,除 了专业的医疗问题回答,带有人文情怀的有温度的回答更应该是我们追寻的目标;

    2023-10-03

  • 相关阅读:
    js数组方法归纳——concat、join、reverse
    解析java中的clone方法
    前后端分离跨域问题解决方案
    Centos指令合集
    扬尘监测:智能化解决方案让生活更美好
    知识蒸馏(Knowledge Distillation)简述
    比较全面的身份证校验、提取的方法
    K8S发布应用步骤详解
    ClickHouse数据类型完整使用 第三章
    设计模式——七大设计原则
  • 原文地址:https://blog.csdn.net/lovechris00/article/details/133530459