【医学大模型 尘肺病】PneumoLLM:少样本大模型诊断尘肺病新方法

PneumoLLM:少样本大模型诊断尘肺病新方法

    • 提出背景
    • PneumoLLM 框架
    • 效果

 


提出背景

论文:https://arxiv.org/pdf/2312.03490.pdf

代码:https://github.com/CodeMonsterPHD/PneumoLLM/tree/main

 

历史问题及其背景:

  1. 数据稀缺性问题:尘肺病的诊断数据不足,特别是在缺乏经济发展、医疗资源和专业医疗人员的地区。

    • 背景:尘肺病多发生于长期暴露于含尘环境的个体,如建筑工地或煤矿,而这些地区往往医疗资源匮乏,数据收集困难。
  2. 传统预训练和微调策略的局限性:在数据稀缺的条件下,传统的预训练和微调方法效果不佳。

    • 背景:预训练模型需要大量标记数据来优化权重分布,但尘肺病的有效诊断数据不足,限制了这种方法的应用。

在这里插入图片描述
这张图展示了三种不同的方法来结合视觉(图像)和语言(文本)信息进行医学诊断。

这张图说明了从传统的视觉-语言对比学习到利用LLM进行直接图像诊断的进化路径。

最新的方法(c)简化了流程,省略了文本输入的步骤,直接利用图像数据,通过LLM进行医学诊断,形成了一个简单有效的诊断管道。

(a) 视觉-语言对比学习(Vision-Language Contrastive Learning):

  • 这个方法使用图像编码器将图像转换为视觉表示,同时使用文本编码器将文本转换为语言表示。
  • 然后,这些表示用于进行对比学习,目的是使模型学会将视觉信息和语言信息对齐,从而改善多模态表示。

比如诊断尘肺病,用一个图像编码器来分析X射线图像,并用文本编码器来理解医生的诊断报告。

然后,模型通过对比这两种信息来学习它们之间的关联。

 

(b) 视觉-语言对齐(Vision-Language Alignment):

  • 在这种方法中,图像首先通过图像编码器处理,文本则通过文本分词器处理。
  • 处理后的视觉和语言标记输入到大型语言模型(LLM)中,该模型根据输入的图像和文本生成诊断文本描述。

比如诊断尘肺病,使用一个文本分词器和图像编码器来处理数据,然后让LLM根据视觉标记和文本信息一起工作,生成更准确的诊断描述。

更准确的诊断描述,主要是因为它不仅仅看图像,还听文字。

想象一下,如果医生只看X光片,而不考虑患者的症状描述,那么有时候他可能会错过重要的线索。

但如果医生在看X光片的同时,还听了患者的症状讲述,那么他对患者的状况就会有更全面的了解,从而做出更准确的诊断。
 

© 利用LLM诊断图像(Harnessing LLM to Diagnose Images):

  • 此方法直接使用图像编码器处理图像,不涉及文本输入。
  • 编码后的图像被转换为视觉标记,并直接输入到LLM中。
  • LLM基于视觉标记进行处理,最终直接输出诊断结果,比如判断图像是显示尘肺病(Pneumo.)还是健康(Health)。

比如诊断尘肺病,只使用图像编码器来处理X射线图像,并将编码后的视觉标记直接输入到LLM中。

LLM能够独立分析这些视觉标记,并直接给出一个二元诊断结果——表示图像是健康的还是表明有尘肺病。

这个方法不仅加快了诊断过程(因为它不再需要详细的文本报告),而且还允许团队快速筛选大量的X射线图像,识别出可能的尘肺病症状,这在资源有限的医疗环境中尤其有价值。

在方法©中,LLM通过大量的学习已经变得非常擅长识别图像中的病理特征,它不再需要依赖文本描述来辅助诊断。

它可以直接从图像中识别出健康和尘肺病的标志,然后给出诊断。

这就像是一个经验丰富的医生能够凭借专业的直觉快速诊断,而不需要每次都进行详尽的病史调查。

这种方法旨在减少对大量标记数据的依赖,同时提高诊断的准确性。
 

之所以用这个解法,是因为问题的那个特征:

  1. 直接利用LLMs处理图像的方法:避免传统的文本处理分支,直接通过LLMs处理图像来诊断尘肺病。
    • 特征:LLMs在处理大量语料时学到的知识能够帮助筛选出图像中的关键视觉标记,提高医学图像诊断的准确性。

我们直接将X射线图像输入到经过大规模语料库训练的LLM中。模型已经学习了大量的视觉和文本数据,使其能够理解和处理图像内容。

LLM识别出图像中的关键视觉标记,比如肺部的纤维化斑点,这些是尘肺病的典型迹象。通过分析这些视觉标记,模型直接提供了一个初步的尘肺病诊断结果,大大提高了诊断的准确性。

 

  1. 上下文多标记引擎:生成与图像标记条件相关的诊断标记,确保源图像标记保留所有相关的图像细节。
    • 特征:这种方法能够在保留图像表示的同时,利用LLMs的诊断智能,达到保留图像细节与诊断智能之间的平衡。

尽管LLM已经提供了初步诊断,但为了进一步提高精度,需要确保模型能够充分理解和利用图像中的所有细节信息。

引入上下文多标记引擎,该引擎生成与图像标记条件相关的诊断标记。

这意味着模型不仅分析了肺部的纤维化斑点,还考虑了图像中的其他相关特征,如肺部阴影的分布和形状,以及与尘肺病相关的其他可视迹象。

通过这种方法,确保了从图像中提取的信息是全面而细致的,提高了模型对尘肺病的诊断能力,同时保持了对图像细节的高度敏感性。

 

  1. 信息发射模块:从源标记到诊断标记单向发射信息,引导学习过程朝向准确的诊断。
    • 特征:通过精确控制信息的流动,这个模块帮助模型集中于对尘肺病的诊断,优化了学习轨迹。

有了全面的图像理解,下一步是确保这些信息能够有效地指导诊断过程。

信息发射模块被设计来从源标记(即图像的各个部分)向诊断标记单向发射信息。

这个过程涉及到从图像细节中抽象出诊断所需的关键信息,并将这些信息集中起来,形成一个明确的诊断结果。

这个模块的作用确保了诊断过程是有针对性的,能够忽略不相关的信息,专注于对尘肺病诊断有决定性意义的视觉标记。

最终,模型提供了一个准确和可靠的尘肺病诊断结果,优化了学习轨迹,提高了整体的诊断效率和准确性。

 
通过结合LLMs的强大图像处理能力和为尘肺病诊断专门设计的新型模块(上下文多标记引擎和信息发射模块),PneumoLLM框架能够有效地克服数据稀缺性问题和传统策略的局限性,为尘肺病等职业病的诊断提供了一个简化而高效的新途径。

 
总结:

  1. 逻辑起点是面对的主要挑战——数据稀缺性问题

    这个问题是由于尘肺病多发生在资源匮乏的地区,导致有效诊断数据难以收集,从而影响了疾病诊断的准确性和效率。

  2. 紧接着,传统方法——预训练和微调策略的局限性。

    这些策略在数据丰富的条件下效果显著,但在数据稀缺的情况下效果大打折扣,因为它们依赖大量标记数据进行模型优化。

  3. 为了解决上述两个问题,提出了直接利用LLMs处理图像的新方法

    这种方法避免了传统文本处理分支的需求,能直接从图像中提取关键信息,以LLMs学到的知识为基础,提高了对尘肺病的诊断准确性。

  4. 进一步地,为了优化这一方法,引入了上下文多标记引擎信息发射模块两个专门设计的模块。

    这些模块的加入,不仅保持了图像细节的完整性,同时确保了模型能够更加专注和有效地学习对尘肺病的诊断,进一步提高了诊断的精确度和效率。

首先识别挑战,然后通过创新的方法和专门设计的模块来解决这些挑战,最终实现了一个既能克服数据稀缺性问题又能有效诊断尘肺病的新框架——PneumoLLM。

 

PneumoLLM 框架

在这里插入图片描述

这幅图是PneumoLLM框架的图解,这是一个用于处理胸部X光图像并诊断尘肺病的系统。

整个流程分为几个关键步骤:

  1. 视觉编码器:首先,胸部X光图像经过视觉编码器处理。

    这个编码器负责提取图像的特征,并将这些特征转换为一系列的“源标记”(Source Tokens),这些标记包括一个特殊的分类标记(Class Token),通常在自监督学习模型中用作整体图像的代表。

    假设医院收到了一个矿工的胸部X光图像。

    这张图像首先通过视觉编码器,该编码器识别图像中的关键特征,如肺部的阴影和纹理变化,并将这些特征转换成一组源标记,包括一个代表整体图像的分类标记。

  2. LLM Transformer层:然后,这些源标记被传递到一系列的LLM Transformer层。

    这些层通过自我注意力机制加深模型对图像特征的理解,能够捕捉不同部分之间的复杂关系。

    接着,源标记输入到LLM Transformer层。

    在这里,模型使用注意力机制来探索不同标记之间的关系,理解哪些特征是诊断尘肺病的关键指标。

  3. 上下文多标记引擎:此外,图中展示了一个“上下文多标记引擎”(Contextual Multi-Token Engine)。

    这个引擎接受源标记,并生成一系列的“诊断标记”(Generated Diagnosis Tokens),这些标记为诊断任务提供了更丰富的上下文信息和诊断线索。

在这里插入图片描述

上图展示了如何生成额外的诊断标记,这些标记用于辅助尘肺病的诊断。

“源标记”通过多层感知机(MLP)处理,然后经过Softmax规范化生成“注意力掩码”。

注意力掩码用于加权源标记,通过一个矩阵转置操作生成“诊断标记”。

这个过程可以加强模型对诊断所需上下文的理解。

  1. 信息发射模块:在LLM Transformer层内,设计有一个“信息发射模块”(Information Emitter Module)。

    这个模块确保从源标记到诊断标记的信息流是单向的,即信息只能从源标记流向诊断标记,这样做可以保留完整的放射学源细节,并汇总关键的诊断信息。

在这里插入图片描述
描述了如何将信息从源标记传递到诊断标记,同时保留源标记的完整性。

展示了源标记之间的自注意力机制(a),信息从源标记发射到诊断标记的过程(b),以及诊断标记之间没有信息交换©。

这种设计保持了源标记的一致性,同时允许新生成的诊断标记利用这些信息进行更精确的诊断推理。

  1. 分类器:最后,经过处理的诊断标记被送入分类器,该分类器基于累积的诊断信息来决定图像是表示尘肺病还是正常。

 

核心逻辑:

子解法1:PneumoLLM框架

  • 特征:为了解决数据稀缺性的问题,PneumoLLM使用视觉编码器和LLM联合处理图像,抽取关键信息进行诊断。

子解法2:上下文多标记引擎和信息发射模块

  • 特征:为了有效结合视觉编码器和LLM的知识,并产生上下文诊断标记,设计了上下文多标记引擎和信息发射模块。

子解法3:适配器层

  • 特征:为了避免破坏LLM的稳健表示,引入了适配器层以适应视觉编码器和LLM模型,保持LLM原有结构的同时,提供了新的信息流。

举例:

  1. 视觉编码阶段:一个矿工的胸部X光图像被输入到系统中。视觉编码器处理图像并提取源标记,这是解决数据稀缺性问题的第一步。

  2. 上下文增强阶段:通过上下文多标记引擎生成额外的上下文诊断标记,并通过信息发射模块确保信息的单向流动。这是为了适应具体的诊断任务而设计的。

  3. 适配器转换阶段:使用适配器层将视觉特征转换为LLM兼容的维度,然后将这些特征输入到LLM中。这保持了LLM的原有结构,并且能够处理由于参数空间变化带来的挑战。

  4. 分类诊断阶段:最后,LLM处理并输出最终的分类分数,用于确定患者是否患有尘肺病。这是PneumoLLM框架的最终目标,通过交叉熵损失函数训练适配器层、多标记引擎和分类网络,保持其他参数固定。
     


效果

优于其他方法:
在这里插入图片描述
红色代表尘肺病,蓝色代表正常:
在这里插入图片描述
PneumoLLM 展示了较为紧密的同类点聚合和不同类别间的清晰分隔,这表明其具有较强的特征表示能力。

在这里插入图片描述
PneumoLLM在大多数情况下正确诊断出健康和疾病图像,相比其他方法具有更高的信心分数和准确率。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevOps落地笔记-13|自动化测试:提高测试效率的不二之选

上一课时主要介绍了通过 API 管理平台来管理企业内部的 API。持续集成是能够保证软件处于可工作状态的实践,但实施持续集成有一个必不可少的步骤——测试。只有尽可能全面的测试覆盖,才能降低软件出错的概率。但是,大多数企业里还是基于人工来…

第二十六回 母夜叉孟州道卖人肉 武都头十字坡遇张青-Ubuntu 防火墙ufw配置

武松到县里投案,县官看武松是个汉子,就把诉状改成:武松与嫂一时斗殴杀死,后西门庆前来,两人互殴,打死西门庆。上报东平府。东平府尹也可怜武松,从轻发落,最后判了个:脊杖…

2024 年 12 款最佳录屏软件【录屏必备指南】

在数字时代,共享屏幕就像发送短信一样常见。 无论是工作、创建教程还是流媒体游戏,找到合适的截屏软件可以决定您的在线形象。 我们测试并整理了一系列最佳的截屏和屏幕录制工具,可将您的内容提升到一个新的水平。 从功能丰富的选项到用户…

RM电控--机械入门

SW常用的快捷键: 多种视角观看: 左侧为自攻螺丝,右侧为钻尾螺丝 钻尾螺丝可以依靠自身进行钻孔操作,而自攻螺丝打之前必须先打好小孔。 螺钉; 这些螺钉大家认得全吗?你还知道哪些呢?_哔哩哔哩_bilibili …

今年春节联欢晚会中的扑克魔术到底是咋变的?

今年的刘谦给全国观众带来了俩魔术,一个是洗牌一个是撕牌,前面第一个魔术看不出来太神奇了,但是第二魔术感觉挺有趣的我可以简单分析分析。 然后我们列出这个魔术的关键步骤: 打乱四张牌 1 2 3 4 对折、撕开、面向同一个方向重…

机器学习系列——(二十二)结语

随着我们的机器学习系列的探索画上句号,我们不禁感慨于这一领域的广阔和深邃。从最初的基础概念到复杂的算法,从理论的探讨到实际应用的示例,我们一起经历了一段非凡的旅程。机器学习不仅是当前技术创新的核心驱动力之一,也是塑造…

【MySQL进阶之路】MySQL 中表空间和数据区的概念以及预读机制

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

ssm+vue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…

React18原理: 渲染与更新时的重点关注事项

概述 react 在渲染过程中要做很多事情,所以不可能直接通过初始元素直接渲染还需要一个东西,就是虚拟节点,暂不涉及React Fiber的概念,将vDom树和Fiber 树统称为虚拟节点有了初始元素后,React 就会根据初始元素和其他可…

使用Arcgis裁剪

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、掩膜提取二、随意裁剪三、裁剪 前言 因为从网站下载的是全球气候数据,而我们需要截取成中国部分,需要用到Arcgis的裁剪工具 一、掩…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Toggle组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Toggle组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Toggle组件 组件提供勾选框样式、状态按钮样式及开关样式。 子组件 仅当Toggl…

基于片段的3D分子生成扩散模型 - AutoFragDiff 评测

AutoFragDiff 是一个基于片段的,自回归的,口袋条件下的,3D分子生成扩散模型。 AutoFragDiff方法来源于文章《Autoregressive fragment-based diffusion for pocket-aware ligand design》,由加州大学的Mahdi Ghorbani等人于2023年…

[收藏] 数据结构知识全览

以下是数据结构技术主要知识的总结: 1. 基本数据结构 - 数组:固定大小的连续内存空间存储元素,支持随机访问。 - 链表:由节点组成的线性结构,每个节点包含数据和指向下一个节点的指针。 - 栈:后进先出&…

一文讲透SPSS中查看文件和变量信息

数据文件建立后,我们可能希望看到数据文件的结构和变量的组成以确定是否需要完善或修改,此时我们就需要用到文件和变量信息查看功能。 1. 查看变量信息 (1)在结果输出窗口中查看变量信息 在菜单栏中选择“文件”|“显示数据文件…

机器学习:回归决策树(Python)

一、平方误差的计算 square_error_utils.py import numpy as npclass SquareErrorUtils:"""平方误差最小化准则,选择其中最优的一个作为切分点对特征属性进行分箱处理"""staticmethoddef _set_sample_weight(sample_weight, n_samp…

websocket简易基操

一、概述 1.1 简介 WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议),它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,Websocket是一个持久化的协议。…

【MySQL】数据库基础 -- 详解

一、什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据(内容)的管理能力(用户角度)。 文件保存数据有以下几个缺点&…

LeetCode 0094.二叉树的中序遍历:递归/迭代(栈模拟递归)

【LetMeFly】94.二叉树的中序遍历:递归/迭代(栈模拟递归) 力扣题目链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/ 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root […

CVE-2022-0760 漏洞复现

CVE-2022-0760 NSS [HNCTF 2022 WEEK2]ohmywordpress 【CVE-2022-0760】 题目描述:flag在数据库里面。 开题: 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面,有一个搜索框。 F12看看network。 又出现了这个Wor…

C++入门学习(二十五)do-while循环

do { // 代码块,至少会执行一次 } while (条件); 对比一下while和do-while循环: 因为while循环先判断条件,所以数字10直接就没有进入for循环里,卡在了判断条件这一步,所以就没有输出数据; do-while循环是…