​​XrayGLM原理与部署

news2024/9/27 17:32:59

接上一篇: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 quantize

from model import VisualGLMModel, chat
from finetune_XrayGLM import FineTuneVisualGLMModel
from sat.model import AutoModel


def 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 checkpoint
    model, 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 path
    tokenizer = 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 = None
            cache_image = None
            if 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':
                break
            if len(image_path) > 0:
                query = args.prompt_en if args.english else args.prompt_zh
            else:
                if not args.english:
                    query = input("用户:")
                else:
                    query = input("User: ")
            
            while True:
                if query == "clear":
                    break
                if 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)
                    break
                sep = 'A:' if args.english else '答:'
                print("XrayGLM:"+response.split(sep)[-1].strip())
                image_path = None
                if 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.coloradmin.cn/o/2170584.html

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

相关文章

第8章_索引的创建与设计原则

1. 索引的声明与使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以…

医疗器械中的国产光耦合器浅析

光耦合器,也称为光隔离器,在确保医疗器械的安全性和性能方面发挥着关键作用。通过在系统的不同部分之间提供电气隔离,它们可以防止信号干扰、保护敏感元件并保护患者免受电击。近年来,国产光耦合器制造商一直在加紧生产可靠的高性…

时也命也!转念的力量(深度好文)——早读(逆天打工人爬取热门微信文章解读)

时也命也 引言Python 代码第一篇 洞见 转念的力量(深度好文)第二篇 意想不到的收入结尾 早上上交所宕机 很多股票都横成直线 我的股却跳了一下水 我怕出什么监管事故 跟着卖出去了 然后查了一下 发现是上交所被买爆了 我想了一下 服务器问题 那么能否事后…

OpenEuler配置本地yum源

0x00 服务器版本 将本地镜像传输至服务器 操作步骤如下 # 创建一个目录用于挂载光盘映像 mkdir /media/cdrom/# 将光盘映像挂载到指定目录 mount /kvm/openeuler.iso /media/cdrom/#进入Yum仓库配置目录 cd /etc/yum.repos.d/# 备份原有的 openEuler.repo 文件 mv openEuler.…

解读: 火山引擎自研vSwitch技术

最近看到一篇文章介绍火山云的网络vSwitch技术,虽然是2022年的比较老的介绍,但是对于我们看到vSwitch技术的发展还是有些参考的。下面就截取了当时火山vSwitch关心的几个问题,做了一下梳理。 背景 在云计算发展过程中,虚拟网络的…

国内光耦合器制造商如何满足特殊行业的需求

在航空航天、国防、电信等行业,对定制解决方案的需求正在增长。通用光耦合器可能并不总是适合这些专业领域的特定要求,因为这些领域必须满足独特的环境条件、尺寸限制和性能基准。国内光耦合器制造商一直在加紧努力,提供可定制的解决方案&…

从 0 到 1:互联网产品经理核心技能全解析

在互联网的浩瀚海洋中,产品经理如同领航员,决定着产品从无到有的走向和命运。从 0 到 1 打造一款互联网产品,需要产品经理具备多方面的核心技能。今天,我们就来详细解读这些关键能力。 一、洞察市场趋势 时刻关注行业动态 互联网…

AOT源码解析4.1-对输入数据和mask进行处理(Associating Objects with Transformers for Video Object Segmentation)

论文阅读 papergithub论文阅读笔记AOT源码解析1-数据集处理AOT源码解析2-encoderdecoderAOT源码解析3-模型训练AOT源码解析4.1-model主体AOT源码解析4.2-model主体AOT源码解析4.3-model主体AOT源码解析4.4-model主体AOT源码解析4.5-model主体 输入数据 VOS的数据集处理操作可…

Python基础语句教学

Python是一种高级的编程语言,由Guido van Rossum于1991年创建。它以简单易读的语法和强大的功能而闻名,被广泛用于科学计算、Web开发、数据分析等领域。 Python的应用领域广泛,可以用于开发桌面应用程序、Web应用、游戏、数据分析、人工智能等…

【中台资料】数字中台建设资料合集(Word,PPT)

目录 1 编写目的 2 背景概述 3 中台概念 4 推动企业组织模式演进 5 建设方法 6 中台内容 7 数据安全体系 8 参考资料 软件全套资料部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需…

Redis 的 Java 客户端有哪些?官方推荐哪个?

Redis 官网展示的 Java 客户端如下图所示,其中官方推荐的是标星的3个:Jedis、Redisson 和 lettuce。 Redis 的 Java 客户端中,Jedis、Lettuce 和 Redisson 是最常用的三种。以下是它们的详细比较: Jedis: 线程安全&…

springboot在线教学平台

基于springbootvue实现的在线教学平台 (源码L文ppt)4-069 4.1系统结构设计 这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。 图4-1功能结构图 4.2系统功能模块设计 在线教学平台的使用者主要有二类…

AI视频技术:引领影视剧拍摄的未来

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 当科技遇见艺术,一场视听盛宴正…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon(禹贡),基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力,提供专业的GIS(Geographic Information System)功能,赋能传统关系型数据库。 Yukon 支…

破局汽车智能化浪潮:Tire 1供应商的网络优化与升级策略

在汽车行业经历电动化、智能化的深刻变革中,Tier 1供应商正面临着前所未有的挑战与机遇。Tier 1 供应商,即一级供应商,是汽车产业链中占据关键地位的合作伙伴。这类供应商不仅直接向整车制造商提供核心总成和模块,还深度参与整车的…

ISSCC 34.8 用于AI边缘设备的22nm,31.2TFLOPS/W,16Mb ReRAM存内浮点计算架构

本文将分享存内浮点计算前沿论文——ISSCC 2024《34.8 A 22nm 16Mb Floating-Point ReRAM Compute-in-Memory Macro with 31.2TFLOPS/W for AI Edge Devices》。下面将从文章基本信息、创新点解析、芯片测试与对比及未来展望四个部分展开介绍。 基本信息介绍 1、研究背景及面临…

QualiMap:一款强大的二代测序比对文件质控工具

在生物信息学中,数据质量的评估和可视化是很重要的一环。今天我们来聊聊一个常用的工具——Qualimap,它是一个用于评估高通量测序数据质量的开源软件,尤其是对RNA-seq和DNA测序数据的分析非常友好。无论你是本科生还是刚接触生物信息学的新人…

阿博图书馆管理:SpringBoot实战指南

第二章 开发技术介绍此次B/S结构、Java技术以及mysql数据库是该阿博图书馆管理系统的主要开发技术,然后对系统的整体设计、数据库设计、功能模块设计、系统页面设计以及系统程序设计进行了详细的研究与规划。 2.1 系统开发平台 在该阿博图书馆管理系统中&#xff0c…

大学学校用电安全远程监测预警系统

1.概述: 该系统是基于移动互联网、云计算技术,通过物联网传感终端,将办公建筑、学校、医院、工厂、体育场馆、宾馆、福利院等人员密集场所的电气安全数据,实时传输至安全用申管理服务器,为用户提供不间断的数据跟踪&a…

【Axure高保真原型】标签切换动态面板页面

今天和大家分享通过标签切换动态面板页面的原型模板,点击标签可以选择并且打开下方对应的人物详细页面。标签组是用中继器制作的,所以使用也很简单,只需要在中继器表格里填写标签名,就可以生成对应的标签;标签对应的内…