Commit 9409d26f authored by wangsen's avatar wangsen
Browse files

Initial commit

parent 6f803b44
Pipeline #1762 failed with stages
in 0 seconds
> **Note** # 介绍
> 通用领域的大语言模型 (LLM),例如 ChatGPT,在遵循指令和产生类似人类响应方面取得了显著的成功,这种成功间接促进了多模态大模型的研究和发展,如通用领域的多模态大模型MiniGPT-4、mPLUG-Owl、Multimodal-GPT和LLaVA ,然而,此类多模态大模型却很少出现在医学领域的研究中,阻碍了相关研究发展。visual-med-alpaca虽然在医学多模态大模型方面做出了一些很有成效的工作,然而其数据为英文诊断报告,不利于促进中文领域医学多模态大模型的研究发展。为此,我们开发了XrayGLM以解决上述问题。XrayGLM在医学影像诊断和多轮交互对话上显示出了非凡的潜力。
> **欢迎关注我们最新的工作:CareLlama (关怀羊驼),它是一个医疗大语言模型,同时它集合了数十个公开可用的医疗微调数据集和开放可用的医疗大语言模型以促进医疗LLM快速发展:https://github.com/WangRongsheng/CareLlama**
>
> 在开始看这个项目之前,您应该是保持以学术研究的态度,切不可以实际医疗行为作为评价该项目的标准。我们相信很多事情正是因为有了一步一步的积累才会最终走向成功! # 模型结构
> 借助ChatGPT以及公开的数据集,构造了一个X光影像-诊断报告对的医学多模态数据集;把数据集分为TP和FN。
> 为了更好助力中文社区的医学多模态大模型发展,我们特意在该Repo开设了[💬Discussions](https://github.com/WangRongsheng/XrayGLM/discussions) ,帮助大家互相学习。
![Alt text](./images/image2.png)
## 介绍
最近,通用领域的大语言模型 (LLM),例如 ChatGPT,在遵循指令和产生类似人类响应方面取得了显著的成功,这种成功间接促进了多模态大模型的研究和发展,如通用领域的多模态大模型[MiniGPT-4](https://github.com/Vision-CAIR/MiniGPT-4)[mPLUG-Owl](https://github.com/X-PLUG/mPLUG-Owl)[Multimodal-GPT](https://github.com/open-mmlab/Multimodal-GPT)[LLaVA](https://github.com/haotian-liu/LLaVA) ,然而,此类多模态大模型却很少出现在医学领域的研究中,阻碍了相关研究发展。[visual-med-alpaca](https://github.com/cambridgeltl/visual-med-alpaca)虽然在医学多模态大模型方面做出了一些很有成效的工作,然而其数据为英文诊断报告,不利于促进中文领域医学多模态大模型的研究发展。为此,我们开发了`XrayGLM`以解决上述问题。`XrayGLM`在医学影像诊断和多轮交互对话上显示出了非凡的潜力。
# 算法原理
![](./assets/images/hx.png) 诊断数据集在VisualGLM-6B进行微调训练, 最后输出对胸片的询问结果
<p align="center"> ![Alt text](./images/image1.png)
<a href='https://github.com/WangRongsheng/XrayGLM'>
<img src='https://img.shields.io/badge/Project-Page-Green'>
</a>
<a href='https://github.com/WangRongsheng/XrayGLM'> # 环境配置
<img src='https://img.shields.io/badge/Paper-Arxiv-red'> Docker(方式一)
</a> 推荐使用docker方式运行,提供拉取的docker镜像:
<a href="https://colab.research.google.com/drive/1aR8SSaseyprsxnor-gDyMo96V9jD7iGP?usp=sharing">
<img alt="GitHub Contributors" src="https://colab.research.google.com/assets/colab-badge.svg" /> ```
</a> docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
<a href='https://huggingface.co/wangrongsheng'> docker run -dit --shm-size 80g --network=host --name=xrayglm --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /opt/hyhal/:/opt/hyhal/:ro image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10 /bin/bash
<img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue'> docker exec -it xrayglm /bin/bash
</a> ```
</br>
<a href="https://github.com/WangRongsheng/XrayGLM/graphs/contributors"> 安装docker中没有的依赖:
<img alt="GitHub Contributors" src="https://img.shields.io/github/contributors/WangRongsheng/XrayGLM" />
</a> ```
<a href="https://github.com/WangRongsheng/XrayGLM/issues"> pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
<img alt="Issues" src="https://img.shields.io/github/issues/WangRongsheng/XrayGLM?color=0088ff" />
</a>
<a href="https://github.com/WangRongsheng/XrayGLM/pulls">
<img alt="GitHub pull requests" src="https://img.shields.io/github/issues-pr/WangRongsheng/XrayGLM?color=0088ff" />
</a>
<a href=href="https://github.com/WangRongsheng/XrayGLM/stargazers">
<img src="https://img.shields.io/github/stars/WangRongsheng/XrayGLM?color=ccf">
</a>
<a href=href="https://github.com/WangRongsheng/XrayGLM">
<img src="https://img.shields.io/github/repo-size/WangRongsheng/XrayGLM.svg?style=flat-square">
</a>
</br>
<a href=href="https://github.com/WangRongsheng/XrayGLM">
<img src="https://visitor-badge.laobi.icu/badge?page_id=https://github.com/WangRongsheng/XrayGLM">
</a>
<a href=href="https://github.com/WangRongsheng/XrayGLM">
<img src="https://img.shields.io/github/last-commit/WangRongsheng/XrayGLM">
</a>
<a href="https://github.com/WangRongsheng/XrayGLM/blob/main/LICENSE">
<img alt="GitHub Contributors" src="https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg" />
</a>
</p>
||||
|:-|:-|:-|
|🌟[【官方视频教程】ChatGLM-6B 微调:P-Tuning,LoRA,Full parameter](https://www.bilibili.com/video/BV1fd4y1Z7Y5/)|🌟[【官方视频教程】VisualGLM技术讲解](https://www.bilibili.com/video/BV14L411q7fk/)|🌟[【官方视频教程】XrayGLM微调实践](https://www.bilibili.com/video/BV1Yh4y147gx/)|
## 本文贡献
![](./assets/images/xrayglm.png)
- 借助ChatGPT以及公开的数据集,我们构造了一个`X光影像-诊断报告`对的医学多模态数据集;
- 我们将构建的中文胸部X光片诊断数据集在[VisualGLM-6B](https://github.com/THUDM/VisualGLM-6B)进行微调训练,并开放了部分训练权重用于学术研究;
## 数据集
- [MIMIC-CXR](https://physionet.org/content/mimic-cxr-jpg/2.0.0/)是一个公开可用的胸部X光片数据集,包括377,110张图像和227,827个相关报告。
- [OpenI](https://openi.nlm.nih.gov/faq#collection)是一个来自印第安纳大学医院的胸部X光片数据集,包括6,459张图像和3,955个报告。
在上述工作中,报告信息都为非结构化的,不利于科学研究。为了生成合理的医学报告,我们对两个数据集进行了预处理,并最终得到了可以用于训练的**英文报告**。除此之外,为了更好的支持中文社区发展,借助ChatGPT的能力,我们将英文报告进行了中文翻译,并最终形成了可用于训练的数据集。
|数据集|数量|下载链接|质量|
|:-|:-|:-|:-|
|MIMIC-CXR-zh|-|-|-|
|OpenI-zh|6,423|[诊疗报告(英文)](./data/openi-en.json)[诊疗报告(中文)](./data/Xray/openi-zh.json)[X光影像](https://pan.baidu.com/s/13GBsDMKf6xBZBSHpoWH_EA?pwd=k9sh)|低|
|OpenI-zh-plus|6,423|-|高|
## 快速上手
### 1.安装环境
```bash
# 安装依赖
pip install -r requirements.txt
# 国内换源安装依赖
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
```
此时默认会安装`deepspeed`库(支持`sat`库训练),此库对于模型推理并非必要,同时部分`Windows`环境安装此库时会遇到问题。 如果想绕过`deepspeed`安装,我们可以将命令改为:
```bash
# 安装依赖
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements_wo_ds.txt
# 安装SwissArmyTransformer
pip install -i https://mirrors.aliyun.com/pypi/simple/ --no-deps "SwissArmyTransformer>=0.3.6"
``` ```
### 2.模型推理
|模型权重|下载链接|质量|微调方法| Dockerfile(方式二)
|:-|:-|:-|:-|
|checkpoints-XrayGLM-300|<a href='https://huggingface.co/wangrongsheng/XrayGLM-300'><img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue'></a>|低|LoRA|
|checkpoints-XrayGLM-3000|<a href='https://huggingface.co/wangrongsheng/XrayGLM-3000'><img src='https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Spaces-blue'></a>|低|LoRA|
|checkpoints-XrayGLM-xxx-plus|-|高|-|
#### CLI推理 ```
docker build -t xrayglm:latest .
docker run -dit --shm-size 80g --network=host --name=xrayglm --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root -v /opt/hyhal/:/opt/hyhal/:ro geneformer:latest /bin/bash
docker exec -it xrayglm /bin/bash
```python
python cli_demo.py --from_pretrained checkpoints/checkpoints-XrayGLM-3000 --prompt_zh '详细描述这张胸部X光片的诊断结果'
``` ```
更多[参数](https://github.com/WangRongsheng/XrayGLM/blob/main/cli_demo.py#L16)
如果您是**Google Colab Pro**会员,请可以直接在Colab中运行XrayGLM:<a href="https://colab.research.google.com/drive/1aR8SSaseyprsxnor-gDyMo96V9jD7iGP?usp=sharing"><img alt="GitHub Contributors" src="https://colab.research.google.com/assets/colab-badge.svg" /></a>
#### WebUI运行 Conda(方式三)
```python 1.创建conda虚拟环境:
python web_demo.py --from_pretrained checkpoints/checkpoints-XrayGLM-3000
```
conda create -n xrayglm python=3.10
conda activate xrayglm
``` ```
此时访问`http://127.0.0.1:7860`即可 2.关于本项目DCU显卡所需的工具包、深度学习库等均可从光合开发者社区下载安装。
- [DTK 24.04.1](https://cancon.hpccube.com:65024/directlink/1/DTK-24.04.1/Ubuntu20.04.1/DTK-24.04.1-Ubuntu20.04.1-x86_64.tar.gz)
- [Pytorch 2.1](https://cancon.hpccube.com:65024/directlink/4/pytorch/DAS1.2/torch-2.1.0+das.opt1.dtk24042-cp310-cp310-manylinux_2_28_x86_64.whl)
- [DeepSpeed 0.12.3](https://download.sourcefind.cn:65024/directlink/4/deepspeed/DAS1.1/deepspeed-0.12.3+gita724046.abi1.dtk2404.torch2.1.0-cp310-cp310-manylinux_2_31_x86_64.whl)
![](./assets/images/web_demo.png)
### 3.模型训练(复现XrayGLM) Tips:以上dtk驱动、torch等工具版本需要严格一一对应。
<details>
<summary>硬件资源</summary>
<p>* 实验在A100 (4X, 80GB)上进行</p>
</details>
- (1)准备[诊疗报告(中文)](./data/Xray/openi-zh.json)[X光影像](https://pan.baidu.com/s/13GBsDMKf6xBZBSHpoWH_EA?pwd=k9sh)`data/Xray`文件夹下; 3. 其它依赖库参照requirements.txt安装:
- (2)开始训练:
```bash
# 设置CUDA变量,主要是为了解决有时候直接训练而出现无法正确加载到显卡问题
export CUDA_VISIBLE_DEVICES=0,1,2,3
# 开始训练
bash finetune_XrayGLM.sh
``` ```
这里的复现过程非常简单,主要是很多过程我们都为大家准备好了,大家可以随时复现一个自己的`XrayGLM` python setup.py install
pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
### 4.模型训练(通用) # 数据集
- [【官方视频教程】XrayGLM微调实践](https://www.bilibili.com/video/BV1Yh4y147gx/) ```
- [复旦大学《大语言模型理论与实践》](https://intro-llm.github.io/)
## 效果展示
*以下效果来自于**低质量**的数据训练和权重 ```
影像诊断: # 测试
|X光影像|诊疗报告(医生)|XrayGLM|
|:-|:-|:-|
|![](./data/Xray/2_1.png)|根据X射线图像,心脏大小正常,肺部看起来很清晰。已经排除了肺炎、积液、水肿、气胸、腺病、结节或肿块的存在。该发现表明一切正常。换句话说,总体印象是胸部正常。|X光片显示,心脏大小正常。肺部没有气胸或胸腔积液的证据。骨骼结构看起来没有任何异常。总的来说,X光片表明没有发现急性心肺疾病的迹象。|
|![](./data/Xray/2882_1.png)|X光图片显示没有扭曲的区域、可疑的骨质不透明度或胸腺积液。心脏大小轻微增大,但非常稳定。此外,没有气胸的证据,肺野也正常。总体来说,X光片显示没有急性心脏异常,但要注意轻微的心脏扩大。|X光片显示,心脏大小正常。肺部和纵隔轮廓清晰,没有气胸或胸腔积液的证据。骨骼结构完整,没有任何急性异常。|
|![](./data/Xray/2577_1.png)|心影形态在正常范围内。没有急性骨质异常。有可能出现没有明显的吸水或肺实质状况的线索。没有大面积积液或气胸。有可能怀疑其有误吸或肺实质问题。为了确诊和治疗,可能需要进行适当的影像学随访。|心脏大小正常,肺部和纵隔轮廓清晰。没有急性异常或活动受限的证据。没有任何明显的气胸、胸腔积液或肺不张的迹象。此外,也没有发现任何局灶性骨质异常或其他急性疾病。|
多轮对话: ## 模型推理
|X光影像|诊疗报告(医生)|
|:-|:-|
|![](./data/Xray/861_1.png)|右侧主动脉突出观察到。心脏大小正常。胸部未发现明显的肺气肿、胸膜积液或可疑的肺部病变。报告指出已知右侧主动脉情况正常。|
```bash - [checkpoints-XrayGLM-300](https://huggingface.co/wangrongsheng/XrayGLM-300/tree/main)
>> X光影像路径:./data/Xray/861_1.png - [visualglm-6b](http://113.200.138.88:18080/aimodels/visualglm-6b)
## cli推理
>> 用户:这是一张什么图?
>> XrayGLM:这张图片显示的是一张肺部检查的X光片。
>> 用户:请描述这张胸部X光片的诊断结果 根据需要修改预训练模型以及cli_demo.py中48行visualglm-6b模型的位置
>> XrayGLM:心脏大小正常,肺部清晰。没有急性心肺疾病的证据。
>> 用户:是否存在肺气肿? ```
>> XrayGLM:没有肺气肿。心脏大小正常,肺部清晰。没有发现急性心肺疾病的证据。 python cli_demo.py --from_pretrained checkpoints/checkpoints-XrayGLM-300 --prompt_zh '详细描述这张胸部X光片的诊断结果'
>> 用户:平时饮食该注意什么?
>> XrayGLM:饮食应该健康,均衡。建议增加蛋白质的摄入量,因为蛋白质有助于维持肌肉和骨骼的健康。多食用蔬菜、水果、全谷物以及健康的脂肪来源如橄榄油、鱼类等可以帮助获得足够的维生素和矿物质。此外,避免过度饮酒或吸烟,这些习惯可能会对心脏健康产生负面影响。
``` ```
## 未来展望 ## 精度
![Alt text](./images/image3.png)
1. 模型的能力更多来源于数据的支持,`OpenI-zh`作为微调数据集,其数据量足以支持研究,在更广泛的任务和性能表现上,我们认为**在大规模数据集上预训练并在高质量少量数据集上微调是一种可行的方案**
2. 普遍意义的理解上,视觉多模态模型=视觉模型+语言模型。除了需要关注视觉模型信息与语言模型输出的搭配外,还需要**额外关注到语言模型的加强,在人机的对话中,尤其是医疗语言模型的问答上,除了专业的医疗问题回答,带有人文情怀的有温度的回答更应该是我们追寻的目标**
3. **高精度的模型永远打不过大参数的模型**,如果在6B模型和13B模型上选择微调,请在资源充足情况下选择13B的大参数模型;
## 项目致谢
1. [VisualGLM-6B](https://github.com/THUDM/VisualGLM-6B)为我们提供了基础的代码参考和实现; # 应用场景
2. [MiniGPT-4](https://github.com/Vision-CAIR/MiniGPT-4)为我们这个项目提供了研发思路;
3. ChatGPT生成了高质量的中文版X光检查报告以支持XrayGLM训练;
4. [gpt_academic](https://github.com/binary-husky/gpt_academic)为文档翻译提供了多线程加速;
5. [MedCLIP](https://github.com/RyanWangZf/MedCLIP)[BLIP2](https://huggingface.co/docs/transformers/main/model_doc/blip-2)[XrayGPT](https://github.com/mbzuai-oryx/XrayGPT) 等工作也有重大的参考意义;
![](./assets/images/mpu.png) 医学 科研 胸片
这项工作由[澳门理工大学应用科学学院](https://www.mpu.edu.mo/esca/zh/index.php)硕士生[王荣胜](https://github.com/WangRongsheng)[段耀菲](https://github.com/IsBaSO4)[李俊蓉](https://github.com/lijunrong0815)完成,指导老师为檀韬副教授、[彭祥佑](http://www.patrickpang.net/)老师。
*特别鸣谢:[USTC-PhD Yongle Luo](https://github.com/kaixindelele) 提供了有3000美金的OpenAI账号,帮助我们完成大量的X光报告翻译工作
## 免责声明 # 热点应用行业
本项目相关资源仅供学术研究之用,严禁用于商业用途。使用涉及第三方代码的部分时,请严格遵循相应的开源协议。模型生成的内容受模型计算、随机性和量化精度损失等因素影响,本项目无法对其准确性作出保证。即使本项目模型输出符合医学事实,也不能被用作实际医学诊断的依据。对于模型输出的任何内容,本项目不承担任何法律责任,亦不对因使用相关资源和输出结果而可能产生的任何损失承担责任。
## 项目引用 科研 医院
如果你使用了本项目的模型,数据或者代码,请声明引用: # 源码仓库及问题反馈
```
```
# 参考资料
```
https://github.com/WangRongsheng/XrayGLM.git
```bash
@misc{wang2023XrayGLM,
title={XrayGLM: The first Chinese Medical Multimodal Model that Chest Radiographs Summarization},
author={Rongsheng Wang, Yaofei Duan, Junrong Li, Patrick Pang and Tao Tan},
year={2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/WangRongsheng/XrayGLM}},
}
``` ```
我们的工作被[Evaluating Large Language Models for Radiology Natural Language Processing](https://arxiv.org/abs/2307.13693)引用,希望大家去关注一下相关的工作!
## 使用许可
此存储库遵循[CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/) ,请参阅许可条款。
FROM image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10
RUN source /opt/dtk-24.04.1/env.sh
COPY requirements.txt requirements.txt
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
#! /bin/bash
NUM_WORKERS=1
NUM_GPUS_PER_WORKER=4
MP_SIZE=1
script_path=$(realpath $0)
script_dir=$(dirname $script_path)
main_dir=$(dirname $script_dir)
MODEL_TYPE="XrayGLM"
MODEL_ARGS="--max_source_length 64 \
--max_target_length 256 \
--lora_rank 10\
--pre_seq_len 4"
#OPTIONS_SAT="SAT_HOME=$1" #"SAT_HOME=/raid/dm/sat_models"
OPTIONS_NCCL="NCCL_DEBUG=info NCCL_IB_DISABLE=0 NCCL_NET_GDR_LEVEL=2"
HOST_FILE_PATH="hostfile"
HOST_FILE_PATH="hostfile_single"
train_data="./data/Xray/openi-zh.json"
eval_data="./data/Xray/openi-zh.json"
gpt_options=" \
--experiment-name finetune-$MODEL_TYPE \
--model-parallel-size ${MP_SIZE} \
--mode finetune \
--train-iters 300 \
--resume-dataloader \
$MODEL_ARGS \
--train-data ${train_data} \
--valid-data ${eval_data} \
--distributed-backend nccl \
--lr-decay-style cosine \
--warmup .02 \
--checkpoint-activations \
--save-interval 3000 \
--eval-interval 10000 \
--save "./checkpoints" \
--split 1 \
--eval-iters 10 \
--eval-batch-size 8 \
--zero-stage 1 \
--lr 0.0001 \
--batch-size 8 \
--skip-init \
--fp16 \
--use_lora
"
run_cmd="${OPTIONS_NCCL} ${OPTIONS_SAT} deepspeed --master_port 16666 --hostfile ${HOST_FILE_PATH} finetune_XrayGLM.py ${gpt_options}"
echo ${run_cmd}
eval ${run_cmd}
set +x
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment