​​XrayGLM原理与部署

接上一篇:VisualGLM-6B——原理与部署-CSDN博客

XrayGLM技术背景与原理

XrayGLM 是一种基于 VisualGLM-6B 微调开发的多模态医学影像诊断模型,专门用于处理医学影像(如 X 光胸片)的自动诊断和报告生成任务。该模型旨在为中文医学影像分析和诊断提供有效的工具。

一、背景与需求

多模态大模型的发展现状

随着 GPT-4 和 MiniGPT-4 等模型在多模态领域的成功应用,多模态模型能够同时处理文本和图像信息,并在图像理解、描述和生成任务上展现了卓越的表现。然而,这些模型主要集中于通用领域(如图片描述、图像问答等),在医学领域的研究和应用相对较少。

医学影像分析的挑战

医学影像(如 X 光、CT 等)与普通图像在数据分布、特征表达和任务要求上存在显著差异。医学影像中的细节信息至关重要,尤其是在诊断疾病时。现有的多模态模型(如 MiniGPT-4)并没有针对医学影像的特殊性进行优化和微调,因此很难直接应用于此类任务。

二、XrayGLM 的模型设计与改进

基于 VisualGLM-6B 微调

XrayGLM 的基础是 VisualGLM-6B,这是一种支持图像和中英文文本多模态对话的语言模型VisualGLM-6B 本身基于 ChatGLM-6B,并引入了 BLIP2-Qformer 模块,使其能够将图像信息与语言模型的语义空间进行有效对齐。XrayGLM 在此基础上进行微调训练,专注于医学影像诊断任务。

  • 微调数据:XrayGLM 利用医学影像-诊疗报告对进行微调训练。数据集包括来自 OpenI 的胸部 X 光图像数据集,包含 6,459 张图像和 3,955 份诊断报告。此外,还利用 ChatGPT 构建了可用于中文训练的 X-ray 影像-诊疗报告数据对。

  • 语言模型的中英文支持:VisualGLM-6B 原生支持中英文文本,这为 XrayGLM 在中文医学影像分析上的应用提供了基础保障。相比其他仅支持英文的模型,XrayGLM 能够更好地处理中文医学影像和报告生成任务。

主要改进与提升

1、模型结构的改进

XrayGLM 采用 VisualGLM-6B 的模型架构,并针对医学影像任务进行了微调优化。它结合了以下三个部分:

  • 视觉编码器(ViT):用于提取 X 光图像的视觉特征。

  • Q-Former 模块:将视觉编码器提取的特征转化为语言模型可以理解的表示,作为桥梁连接视觉信息和语言语义。

  • ChatGLM-6B 语言模型:用于生成诊断报告或回答医学相关问题。

这种结构使得模型能够同时理解图像和文本信息,并在医学影像诊断任务上生成符合专业要求的报告。

2、数据驱动的优化策略

XrayGLM 采用了大规模的中文医学影像数据进行微调,并结合了少量高质量的标注数据,确保模型在中文医学领域的应用效果。这种策略在提升模型性能的同时,也大大减少了训练时间和计算资源的消耗。

3、医学专用 Prompt 设计

XrayGLM 在训练过程中,针对医学影像任务设计了专用的 Prompt(提示语),例如“描述这张 X 光片的诊断结果”。这种设计使得模型能够更好地理解输入的任务要求,提高生成结果的准确性和专业性。

XrayGLM 的优点

  1. 针对医学影像任务优化:XrayGLM 专门针对 X 光胸片等医学影像进行了微调训练,能够在诊断任务中生成高质量的诊断报告。

  2. 中英文双语支持:模型原生支持中英文,使其在中文医学影像分析和报告生成上具有明显优势。

  3. 高效的训练与推理:通过优化模型架构和数据使用策略,XrayGLM 实现了高效的训练和推理,能够在有限的计算资源下完成医学影像的分析任务。

  4. 多轮对话能力:基于 VisualGLM-6B 的多模态对话能力,XrayGLM 可以与用户进行多轮问答,提供更细致的诊断意见和分析结果。

三、实际应用与效果

1、医学影像诊断

XrayGLM 能够对输入的 X 光影像进行自动分析,并生成详细的诊断报告。例如,模型可以识别心脏大小、肺部阴影、异常结节等细节信息,并对是否存在炎症、积液等问题给出明确判断。这对于医生在诊断过程中提供辅助参考具有重要意义。

2、医患交流中的应用

XrayGLM 生成的诊断报告不仅仅局限于医学术语,它还可以结合上下文进行“有温度”的对话,例如用更通俗的语言解释病情,帮助患者更好地理解自己的健康状况。这种能力对于提升医患交流的质量具有重要作用。

四、未来展望

XrayGLM 在医学影像分析方面展现了很大的潜力,但也有进一步提升的空间:

  1. 更多医学影像类型的支持:目前 XrayGLM 主要针对 X 光胸片进行微调,可以考虑扩展到 CT、MRI 等其他类型的医学影像数据。

  2. 引入更多的专业知识:通过引入更多的医学专业知识,如病历数据、手术记录等,可以进一步提升模型的诊断精度和专业性。

  3. 增强多轮对话能力:进一步优化模型在多轮对话中的表现,使其能够在更复杂的医疗场景下提供精准、连贯的回答。

XrayGLM 基于 VisualGLM-6B 进行了针对医学影像的微调训练,是一个能够有效处理医学影像自动诊断和报告生成的多模态模型。它在中文医学影像分析领域具有明显优势,并为未来多模态大模型在医学中的应用提供了有力支持。

XrayGLM部署

项目地址:GitHub - WangRongsheng/XrayGLM: 🩺 首个会看胸部X光片的中文多模态医学大模型 | The first Chinese Medical Multimodal Model that Chest Radiographs Summarization.

部署该模型,我认为最好是先将底层模型VisualGLM-6B部署成功,将VisualGLM-6B成功代表着大部分的环境都配备好了,需要的很多依赖也都安装好了。一开始我尝试直接部署XrayGLM,但是出了很多问题,后面我重开服务器直接部署底层模型VisualGLM-6B,然后在VisualGLM-6B部署成功的基础上部署XrayGLM,整个过程就很顺利,也没有报什么错。

VisualGLM-6B部署可以参考我的上一篇博客:VisualGLM-6B——原理与部署-CSDN博客

一、下载模型文件

云服务器的话可以先开一下学术加速。

克隆XrayGLM repo:

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

此处除了XrayGLM模型文件,我还建议下载一下chatglm-6b模型,因为我们的模型运行需要chatglm-6b的支持,它主要负责文本生成部分的内容。所以后续开始推理模型文件的时候,推理文件会自动从hugging face上拉取chatglm-6b文件。但是之前也提过,hugging face是国外的网站,直接拉取几乎都会报网络连接超时的错误。当然,你开一下学术加速可能可以解决。

总之,还是建议直接去官网下载chatglm-6b模型到服务器上,然后更改涉及文件中的相关路径,建议全部写成绝对路径。

chatglm-6b模型下载地址:GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型

https://huggingface.co/THUDM/chatglm-6b

二、准备数据集

中文数据集已经放到了指定文件夹下面:

英文数据集也是,放到了文件夹下面:

现在需要的就是下载影像数据集,放到指定位置——./XrayGLM/data/Xray/ 目录下

影像下载:百度网盘 请输入提取码

下载本地后上传服务器,然后在指定目录下面解压缩即可:

三、配置虚拟环境及安装依赖

虚拟环境仍然使用部署VisualGLM-6B时配置好的虚拟环境,其实大部分环境都配的差不多了。

然后进入XrayGLM模型文件,安装依赖:

pip install -r requirements.txt

推荐使用国内源

​pip install -i Simple Index -r requirements.txt

四、模型推理

XrayGLM是官方在VisualGLM-6B基础上,用医学数据集训练得到的新模型,我们可以自己对其进行微调,改变参数设定然后训练得到指定步数的权重模型文件。

但是官方已经给出了微调300步和微调3000步的模型了,不想花时间微调模型的可以直接在hugging face上下载这两个模型:

https://huggingface.co/wangrongsheng/XrayGLM-300/tree/main

https://huggingface.co/wangrongsheng/XrayGLM-3000/tree/main

注意,上述3000步的模型,只需要下载3000这个文件夹里面的模型文件即可,不需要下载全部模型文件。

下载模型后上传服务器,并且将这两个模型文件的大文件夹拖拽到XrayGLM/checkpoints/ 目录下面。

然后记得更改相关文件里面对应的路径为现在你自己模型文件的绝对路径。

目前,我们要加载的推理模型是 "checkpoints/XrayGLM-300"或"checkpoints/XrayGLM-3000"。

tokenizer 依然是 chatglm-6b,它已经被下载到我自己的本地路径 "/root/autodl-tmp/THUDM/chatglm-6b"。

推理模型需要运行下面的指令:

python cli_demo.py --from pretrained checkpoints/XrayGLM-300 --prompt_zh '详细描述这张胸部X光片的诊断结果'python cli_demo.py --from pretrained checkpoints/XrayGLM-3000 --prompt_zh '详细描述这张胸部X光片的诊断结果'

model 使用 checkpoints/XrayGLM-300 路径。

tokenizer 使用 "/root/autodl-tmp/THUDM/chatglm-6b" 路径。

因为我把chatglm-6b下载到了本地目录下,所以对整个cli_demo.py做出一定的调整,可以通过在命令行参数中分别指定 model 和 tokenizer 的路径来实现这一点:

# -*- encoding: utf-8 -*-import os
import sys
import torch
import argparse
from transformers import AutoTokenizer
from sat.model.mixins import CachedAutoregressiveMixin
from sat.quantization.kernels import quantizefrom model import VisualGLMModel, chat
from finetune_XrayGLM import FineTuneVisualGLMModel
from sat.model import AutoModeldef main():parser = argparse.ArgumentParser()parser.add_argument("--max_length", type=int, default=2048, help='max length of the total sequence')parser.add_argument("--top_p", type=float, default=0.4, help='top p for nucleus sampling')parser.add_argument("--top_k", type=int, default=100, help='top k for top k sampling')parser.add_argument("--temperature", type=float, default=.8, help='temperature for sampling')parser.add_argument("--english", action='store_true', help='only output English')parser.add_argument("--quant", choices=[8, 4], type=int, default=None, help='quantization bits')parser.add_argument("--from_pretrained", type=str, default="/root/autodl-tmp/THUDM/visualglm-6b", help='pretrained model path')parser.add_argument("--tokenizer_path", type=str, default="/root/autodl-tmp/THUDM/chatglm-6b", help='tokenizer path')parser.add_argument("--prompt_zh", type=str, default="描述这张图片。", help='Chinese prompt for the first round')parser.add_argument("--prompt_en", type=str, default="Describe the image.", help='English prompt for the first round')args = parser.parse_args()# Load model from pretrained checkpointmodel, model_args = AutoModel.from_pretrained(args.from_pretrained,args=argparse.Namespace(fp16=True,skip_init=True,use_gpu_initialization=True if (torch.cuda.is_available() and args.quant is None) else False,device='cuda' if (torch.cuda.is_available() and args.quant is None) else 'cpu',))model = model.eval()if args.quant:quantize(model.transformer, args.quant)model.add_mixin('auto-regressive', CachedAutoregressiveMixin())# Load tokenizer from local pathtokenizer = AutoTokenizer.from_pretrained(args.tokenizer_path, trust_remote_code=True)if not args.english:print('欢迎使用 XrayGLM 模型,输入图像URL或本地路径读图,继续输入内容对话,clear 重新开始,stop 终止程序')else:print('Welcome to XrayGLM model. Enter an image URL or local file path to load an image. Continue inputting text to engage in a conversation. Type "clear" to start over, or "stop" to end the program.')with torch.no_grad():while True:history = Nonecache_image = Noneif not args.english:image_path = input("请输入图像路径或URL(回车进入纯文本对话): ")else:image_path = input("Please enter the image path or URL (press Enter for plain text conversation): ")if image_path == 'stop':breakif len(image_path) > 0:query = args.prompt_en if args.english else args.prompt_zhelse:if not args.english:query = input("用户:")else:query = input("User: ")while True:if query == "clear":breakif query == "stop":sys.exit(0)try:response, history, cache_image = chat(image_path, model, tokenizer,query, history=history, image=cache_image, max_length=args.max_length, top_p=args.top_p, temperature=args.temperature,top_k=args.top_k,english=args.english,invalid_slices=[slice(63823, 130000)] if args.english else [])except Exception as e:print(e)breaksep = 'A:' if args.english else '答:'print("XrayGLM:"+response.split(sep)[-1].strip())image_path = Noneif not args.english:query = input("用户:")else:query = input("User: ")if __name__ == "__main__":main()

接下来就可以直接运行推理指令了:

python cli_demo.py --from_pretrained checkpoints/XrayGLM-300 --tokenizer_path /root/autodl-tmp/THUDM/chatglm-6b --prompt_zh '详细描述这张胸部X光片的诊断结果'

需要注意的一点是,输入最好一口气输完,用到delete键很有可能导致“not a string”的报错。

并且,我发现许多图像应答的首次回答都比较简短,需要提示“具体描述”这类提示词才会有较长的应答。

XrayGLM-3000也是如此:

至于模型微调,可以参考官方的文档和讲解视频,官方已经在某站发过了该模型的相关讲解视频,主要是关于该模型的技术背景介绍以及模型的部署和微调的大致流程:【官方教程】XrayGLM微调实践_哔哩哔哩_bilibili

同时,官方的报告文件下载: https://pan.baidu.com/s/1gfdpyfT6EVnygMPDO_iwvQ?pwd=8wpc

提取码: 8wpc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1546973.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

归并排序,外排序,计数排序(非比较排序)

归并排序:(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序…

智能软件开启精准品牌控价

在当今竞争激烈的商业世界中,品牌的价值如同璀璨的明珠,需要精心呵护。而价格管控,则是守护这颗明珠的关键防线。 当面对众多的产品和 SKU 时,传统的人力监测已显得力不从心。此时,力维网络自主开发的数据监测系统如同…

Redis 篇-深入了解在 Linux 的 Redis 网络模型结构及其流程(阻塞 IO、非阻塞 IO、IO 多路复用、异步 IO、信号驱动 IO)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 用户空间与内核空间概述 2.0 Redis 网络模型 2.1 Redis 网络模型 - 阻塞 IO 2.2 Redis 网络模型 - 非阻塞 IO 2.3 Redis 网络模型 - IO 多路复用 2.3.1 IO 多路复…

如何守护变美神器安全?红外热像仪:放开那根美发棒让我来!

随着智能家电市场的迅速发展,制造商们越来越关注生产过程中效率和质量的提升。如何守护变美神器安全?红外热像仪:放开那根卷发棒让我来! 美发棒生产遇到什么困境? 美发棒生产过程中会出现设备加热不均情况&#xff0c…

图片该怎么转二维码展示?轻松将图片做成二维码的方法

随着现在互联网的不断发展,在日常生活中很多场景下会选择用二维码来展示信息或其他内容,让图片、文本、音视频、文件以及其他内容展示更加便捷,有效提升用户获取内容的效率。那么怎么用二维码来提供图片预览呢? 大家可以学习下面…

太速科技-389-基于KU5P的双路100G光纤网络加速计算卡

基于KU5P的双路100G光纤网络加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm KU5P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x8智能加速计算卡,该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…

黑盒测试与白盒测试总结

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 黑盒测试与白盒测试是软件测试中两种不同的测试方法,它们的主要区别在于测试者对被测试软件的了解程度。下面,我们将详细介绍这两种测试方…

华为申请鸿蒙甄选、鸿蒙优选商标,加词的注意!

近日华为在35类广告销售上申请鸿蒙智选、鸿蒙优选、鸿蒙精品,鸿蒙甄选等商标,后面所加的词智选、优选、精品、甄选等基本上是属于通用词。 这样在35类拿到鸿蒙通用词商标,需要先拿到“鸿蒙“商标,经普推知产商标老杨检索发现&…

001. OBS (obs-studio)

1. 下载 https://obsproject.com/download windows c 插件下载 https://obsproject.com/visual-studio-2022-runtimes 2. 操作步骤 https://renwen.shnu.edu.cn/_s40/9a/2c/c28309a760364/page.psp https://zhuanlan.zhihu.com/p/597231652

智慧公厕:引领公共卫生新潮流@卓振思众

随着科技的不断进步,智慧公厕应运而生,为人们带来了全新的如厕体验。作为智慧公厕厂家,我们致力于打造更加舒适、便捷、环保的公共厕所。智慧公厕究竟有哪些神奇之处呢?让我们一起来揭开它的神秘面纱。【卓振思众】 一、环境监测&…

【FPGA必知必会】(二)7系列的配置(三)多FPGA配置

在一些复杂的应用中,会在同一张板卡上使用多个FPGA设备,如果每个FPGA都引出一组JTAG管脚,无疑增加了板卡的布局密度。 Xilinx提供了一种解决方案,可以使用同一个配置源来配置所有的FPGA设备。 如果多个FPGA使用相同的配置文件&a…

Linux 文件目录结构(详细)

一、基本介绍 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。 Linux世界中,一切皆文件! 二、相关目录 /bin[常用](/usr/bin、/usr/local/bin) 是Binary的缩写,…

监测打鼾app

监测打鼾app,在现代生活中,打鼾不仅是一个常见的夜间问题,它对健康的隐患也越来越被人们所重视。随着科技的进步,监测打鼾的应用程序如雨后春笋般涌现,为改善睡眠质量提供了新的希望。其中,流静(LiuJing&am…

信息,就是位+上下文什么是文本文件和二进制文件

信息&#xff0c;就是位上下文 计算机系统是由硬件和软件系统组成的&#xff0c;它们共同工作来运行应用程序 hello.c #include <stdio.h>int main(){printf("Hello World~");return 0; }hello程序的生命周期是从一个源程序&#xff08;或者说源文件&#xf…

【高阶数据结构】平衡二叉树(AVL)的删除和调整

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《高阶数据结构》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多《高阶数据结构》点击专栏链接查看&a…

《数据结构与算法之美》学习笔记五之队列

前情提要&#xff1a;上一章学习了栈相关的知识&#xff0c;主要有下面的内容&#xff1a; 栈操作的时间复杂度&#xff0c;对于顺序栈&#xff0c;入栈时如果栈的空间不够涉及到数据搬移&#xff0c;此时使用摊还分析法&#xff0c;将数据搬移的耗时均摊到不需要搬移数据的入…

django开发流程1

一、官方网站&#xff1a; Django documentation | Django documentation | Djangohttps://docs.djangoproject.com/en/5.1/ 1.安装 django : pip install django 2. django项目的配置文件 (settings.py) BASE_DIR 项目根路径 DEBUG 调试模式 INSTALLE…

DC00018基于java swing+MySQL花卉信息管理系统

1、项目功能演示 DC00018基于java swingMySQL花卉信息管理系统java项目信息管理系统 2、项目功能描述 基于java swingMySQL花卉信息管理系统 系统包括用户信息管理以及花卉信息管理等功能。 3、项目运行截图 4、项目核心代码 4.1 日期格式化 package utils;import java.t…

二进制文件与文本文件的区别【字符集Charset】

计算机上存储的文件在比特位上都是以二进制数字0或1表示&#xff0c;因此在物理层面上&#xff0c;文本文件和二进制文件没有本质差异&#xff0c;都是由数字0或1组成的比特位集合。 文本文件和二进制文件&#xff0c;两者的差异体现在编码逻辑&#xff0c;需要根据文件头中标…

线程中的条件变量pthread_cond_t

条件变量不是锁&#xff0c;但通常结合锁使用&#xff0c;条件变量用于检查某个条件是否满足。 条件变量基本函数 int pthread_cond_init(pthread_cond_t *restrict cond, pthread_condattr_t *restrict attr);// 动态初始化条件变量&#xff0c;参数cond&#xff1a;条件变量…