VPTTA:为每张医疗图像生成特定的“提示”,解决跨不同设备和条件的医疗图像分割的准确性和适应性

VPTTA:为每张医疗图像生成特定的“提示”,解决跨不同设备和条件的医疗图像分割的准确性和适应性

    • 提出背景
    • VPTTA 方法
    • VPTTA 步骤

提出背景

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

代码:https://github.com/Chen-Ziyang/VPTTA

 

这篇论文主要是为了解决在不同医疗中心采集的医疗图像在分布上的差异对语义分割模型部署的影响。

分布偏移(即不同数据集之间的统计特性差异)是一个常见问题,特别是在医疗图像处理领域,不同的设备或采集条件往往导致算法性能下降。

为了克服这一挑战,作者提出了一种称为视觉提示测试时适应(VPTTA)的新方法。

举个例子,假设我们有一个在数据集A上训练好的医疗图像分割模型,这个模型能够很好地区分不同的组织类型,比如肿瘤和正常组织。

但当我们尝试将这个模型应用到从另一个医疗中心采集的数据集B时,可能会发现模型的性能大大下降。

这是因为数据集A和B在图像的质量、对比度、亮度等方面存在差异,即存在分布偏移。

传统的解决方法可能是更新或调整模型,让它更好地适应新的数据集B。

然而,这种方法有几个缺点,比如可能导致模型忘记原来在数据集A上的知识(灾难性遗忘),或者需要大量的标注数据集B的图像进行重新训练。

相比之下,VPTTA方法提出不直接修改原始模型,而是为每个测试图像生成一个“视觉提示”,通过这个提示来调整模型对新数据集的适应性。

具体来说,这个方法通过训练少量的参数(即视觉提示),在不改变原始模型权重的情况下,使模型能够更好地处理来自不同分布的图像。

这种方法的优点是可以避免灾难性遗忘,并且因为视觉提示参数很少,所以训练过程迅速且高效。此外,作者还引入了一个记忆库机制和预热机制来进一步提高模型的适应能力。

在这里插入图片描述
这张图比较了三种不同的方法,它们都试图解决如何让一个用于分析医疗图像的电脑程序(比如分割脑部扫描图)适应不同医院或设备拍摄的图像,即便这些图像在外观上因为设备或拍摄方式不同而有所变化。

  1. 第一个小图(a)是“损失优化”。

    这是一个基础方法,就像每次有新的图像类型时,你就尝试调整电脑程序的一些设置来适应这些新图像。

    但是这种方法有个问题,就好比你不断地改变一个食谱来适应每一位顾客的口味,最后可能连最初的食谱是什么都忘了。

  2. 第二个小图(b)是“模型重置/正则化”。

    这是一种改进方法,它尝试通过“重置”电脑程序的某些部分或者通过特殊规则来防止它忘记原来的能力。

    这就像在调整食谱的同时,确保一些基本的味道不会改变。

  3. 第三个小图(c)是这篇文章提出的方法,叫“VPTTA”。

    这种方法不去改变原来的程序,而是给它一些提示,帮助它理解新的图像。

    这有点像给食谱添加注释,而不是改变食谱本身。

图下方的表情代表了每种方法处理新类型图像时的表现:

  • 悲伤的脸表示效果很糟糕,程序没能很好地适应新图像。
  • 平静的脸表示效果一般,程序勉强能应对新图像。
  • 微笑的脸表示效果很好,程序成功适应了新图像。

最后,这张图说明通过提供提示(VPTTA方法),电脑程序能更好地适应新的医疗图像,而不会忘记它原来的技能。

这种方法是帮助程序处理不同来源的图像更有效的方法。

VPTTA 方法

问题: 在现实世界中部署医疗图像处理的语义分割模型时,不同医疗中心拍摄的图像在外观上会有所不同(这称为分布偏移),这使得原本在一组数据上训练好的模型在新数据上的性能下降。

解法: 作者提出了一种叫做视觉提示测试时适应(VPTTA)的方法,旨在避免更新模型时产生的错误累积和灾难性遗忘。

VPTTA方法包含了三个关键步骤:提示设计、提示初始化、和提示训练。

子解法和对应特征:

  1. 提示设计:低频提示(子解法1)

    • 利用傅立叶变换,将测试图像的低频成分与提示进行结合,形成适应后的图像。
    • 之所以使用低频提示,是因为低频成分与图像的风格和纹理紧密相关,更改这些成分可以有效地解决分布偏移问题。
  2. 提示初始化:记忆库(子解法2)

    • 使用一个记忆库,它存储了之前测试图像的低频成分和相应的提示,用于初始化新的提示。
    • 之所以采用记忆库初始化,是因为适当的初始值可以显著提升训练的效率和效果。
  3. 提示训练:统计对齐(子解法3)

    • 通过最小化源模型和测试数据特征的批归一化统计数据之间的差异来训练提示。
    • 之所以对统计数据进行对齐,是因为统计数据的不匹配是导致分布偏移的主要原因。
  4. 预热机制(子解法4)

    • 在推理阶段开始时,通过模拟源统计数据和目标统计数据之间的中间状态来减轻训练困难。
    • 引入预热机制的原因是,它可以帮助模型在有限的迭代次数内更平滑地过渡到适应目标数据集的状态。

VPTTA方法通过三个子解法来实现目标数据集的适应:

  • 设计低频提示以调整图像风格
  • 使用记忆库来高效初始化提示
  • 通过统计对齐来训练提示
  • 以及利用预热机制来优化模型在推理阶段初期的适应过程

VPTTA 步骤

在这里插入图片描述
图中的流程描述了如何处理和适应连续变化的目标域的医疗图像。

整个过程分为四个主要步骤:

  1. 傅里叶变换(FFT)和逆变换(IFFT):

    • 对每个测试图像首先应用快速傅里叶变换(FFT)将其转换到频率域。
    • 在频率域中,使用图像的低频部分与记忆库中存储的提示进行查询和初始化。
    • 然后通过与低频提示相乘,再应用逆傅里叶变换(IFFT),将其转换回空间域以形成调整过的图像。
  2. 记忆库:

    • 记忆库储存了先前图像的低频成分和相应的调整过的提示。
    • 当新的图像通过FFT进行查询时,记忆库用来初始化当前图像的提示,使用先进先出(FIFO)的方式进行更新。
  3. 统计转换和损失计算:

    • 对于预训练模型中的每个批次归一化(BN)层,将源统计数据(源域的均值和标准差)转换成温和的启动统计数据。
    • 使用绝对距离损失函数 ( L_p ),根据启动统计数据和目标统计数据之间的差异来微调提示。
  4. 最终输出和反向传播:

    • 微调后的提示被用来更新图像,并将结果输入到冻结的源模型中以产生最终的输出。
    • 根据损失函数通过反向传播来更新提示。

图中还包括了符号和缩略语的解释,如“Stat”表示统计数据。“C”表示卷积层,“B”表示批次归一化层,“L”表示层,这些是构成预训练模型的不同类型的层。

这张图解释了作者提出的系统是如何在不改变预训练模型参数的情况下,通过为每个测试图像创建和优化一个特定的提示,来适应新的目标域数据。

这个方法有助于减少模型适应新数据时出现的错误累积和灾难性遗忘。

在这里插入图片描述
当医疗图像来自不同的医疗中心时,图像的外观可能会有所不同,这使得自动识别系统难以准确地识别图像中的特定部分(比如眼底图像中的视盘和视杯)。

这张图展示了一个方法,该方法通过给每张图像添加一个"提示",帮助自动识别系统更好地理解和处理这些图像,使其能够在新的图像上取得更好的识别效果。

在图中,每一行显示了来自一个特定医疗中心的图像。

"原始图像"是没有修改的图像,而"适应图像"是通过这个新方法处理过的图像。

"提示"是这个方法生成的,用于帮助调整图像以改善识别结果。

为了说明这种方法的效果,图中用Dice分数系数(DSC)来衡量识别的准确性。

DSC值越高,表示识别的准确性越好。图表显示,在应用了提示之后,许多图像的DSC值都有所提高,这意味着识别的准确性得到了改善。

简而言之,这张图展示了一种技术如何帮助医疗图像识别系统更准确地工作,尤其是当它们处理来自不同来源的图像时。

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

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

相关文章

PHP<=7.4.21 Development Server源码泄露漏洞 例题

打开题目 dirsearch扫描发现存在shell.php 非预期解 访问shell.php&#xff0c;往下翻直接就看到了flag.. 正常解法 访问shell.php 看见php的版本是7.3.33 我们知道 PHP<7.4.21时通过php -S开起的WEB服务器存在源码泄露漏洞&#xff0c;可以将PHP文件作为静态文件直接输…

【JAVA】Servlet开发

目录 HttpServlet HttpServletRequest HttpServletResponse 错误页面 设置网页自动刷新时间 构造重定向相应 js发起http请求 服务器端对js发起的http请求进行处理 前端获取后端数据&#xff0c;添加到当前页面的末尾&#xff0c;代码示例&#xff1a; 前后端交互&…

HTML选择文件的实时预览

HTML选择文件的实时预览 目录 HTML选择文件的实时预览HTML代码JS代码预览 HTML代码 <input type"file" id"adv_img_input" style"width: 1000px ;height:30px"> <img src"#"id"adv_img">JS代码 <script>…

Netty中的核心概念

事件传播机制 当pipeline中有多个handler时&#xff0c;netty内部的事件是如何向后传递到每个handler中的&#xff1f; 结论&#xff1a;需要在当前handler中手动将当前事件传递下去 1&#xff0c;如果handler是直接实现的接口&#xff0c;使用ChannelHandlerContext的fireXXX…

使用 ONLYOFFICE API 构建 Java 转换器,在 Word 和 PDF 之间进行转换

文章作者&#xff1a;ajun 随着文档处理需求的增加&#xff0c;格式转换成为了一个重要的需求点。由于PDF格式具有跨平台、不易被篡改的特性&#xff0c;将Word格式(.docx)转换为PDF格式(.pdf)的需求尤为强烈。ONLYOFFICE作为一个强大的办公套件&#xff0c;提供了这样的转换功…

修改/etc/resolve.conf重启NetworkManager之后自动还原

我ping 百度报错&#xff1a; [rootk8snode1 ~]# ping baidu.com ping: baidu.com: Name or service not known很明显&#xff0c;这是DNS解析问题。 于是我修改 /etc/resolv.conf 文件后&#xff0c;执行完sudo systemctl restart NetworkManager&#xff0c;/etc/resolv.con…

leetcode刷题(javaScript)——动态规划相关场景题总结

动态规划在 JavaScript 刷题中有一定的难度&#xff0c;但也是非常常见和重要的算法思想。动态规划通常适用于需要求解最优解、最大值、最小值等问题的场景&#xff0c;可以将复杂问题拆分成子问题&#xff0c;通过存储子问题的解来避免重复计算&#xff0c;从而提高效率。 理解…

微信小程序 nodejs+vue+uninapp学生在线选课作业管理系统

基于微信小程序的班级作业管理助手使用的是MySQL数据库&#xff0c;nodejs语言和IDEA以及微信开发者工具作为开发工具&#xff0c;这些技术和工具我在日常的作业中都经常的使用&#xff0c;并且因为对编程感兴趣&#xff0c;在闲暇时间也进行的进行编程的提高&#xff0c;所以在…

js判断对象是否有某个属性

前端判断后端接口是否返回某个字段的时候 <script>var obj { name: "John", age: 30 };console.log(obj.hasOwnProperty("name")); // 输出 trueconsole.log(obj.hasOwnProperty("email")); // 输出 falselet obj11 { name: "Joh…

Android SystemServer进程解析

SystemServer进程在android系统中占了举足轻重的地位&#xff0c;系统的所有服务和SystemUI都是由它启动。 一、SystemServer进程主函数流程 1、主函数三部曲 //frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zy…

详解Python中的缩进和选择

缩进 Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件&#xff0c;如果条件成立&#xff0c;则执行归属于if的一个代码块。 先看C语言的表达方式&#xff08;注意&#xff0c;这是C&#xff0c;不是Python!&#xff09; if ( i > 0 …

搜索二叉树迭代和递归的两种*简单*实现方式

判断搜索二叉树 概念 一棵树所有结点的左节点小于父节点&#xff0c;右节点大于父节点&#xff0c;则为搜索二叉树。 迭代方法 中序遍历二叉树&#xff0c;如果总是升序则是搜索二叉树。如果存在降序&#xff0c;那肯定不是搜索二叉树。 Coding checkTreeOrder()方法 boo…

Spring Bean的生命周期流程

前言 Java 中的公共类称之为Java Bean&#xff0c;而 Spring 中的 Bean 指的是将对象的生命周期&#xff0c;交给Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时&#xff0c;无需通过 new 来创建对象&#xff0c;只需要通过 DI&#xff08;依赖注入&#x…

ElasticSearch架构设计

一、基础概念 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单&#xff0c;它不仅包括了全文搜索功能&#xff0c;还可以进行以下工作: 一个分布式的实时文档…

中国移动端第三方输入法市场专题2024

易观分析&#xff1a;伴随移动互联网市场发展成熟&#xff0c;第三方输入法用户规模呈现同比小幅增长态势&#xff0c;截止2023年12月已经达到7.83亿&#xff0c;相比2022年同期增长2.7%。从运营端数据表现看&#xff0c;输入法用户粘性稳定&#xff0c;人均单日使用时长在年初…

掘根宝典之C++迭代器简介

简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式&#xff0c;使程序员可以对容器中的元素进行逐个访问和操作&#xff0c;而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器 迭代器的作用类似于指针&#xff0c;可以指向容器中的某个…

C/C++中{}的用法总结(全)

C基础专栏&#xff1a;http://t.csdnimg.cn/UjhPR 目录 1.定义初始化列表&#xff08;Initializer List&#xff09; 2.类成员初始化列表 3.无默认构造函数的类的默认初始化&#xff08;C11 及以后版本&#xff09; 4.初始化器列表构造函数&#xff08;C11 及以后版本&…

后端工程师快速使用vue和Element

文章目录 Vue1 Vue概述2 快速入门3 Vue指令3.1 v-bind和v-model3.2 v-on3.3 v-if和v-show3.4 v-for3.5 案例 4 生命周期 Element快速使用1 Element介绍2 快速入门3 当前页面中嵌套另一个页面案例代码案例截图 Vue 1 Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了…

从历年315曝光案例,看APP隐私合规安全

更多网络安全干货内容&#xff1a;点此获取 ——————— 随着移动互联网新兴技术的发展与普及&#xff0c;移动APP的应用渗透到人们的衣食住行方方面面&#xff0c;衍生出各类消费场景的同时&#xff0c;也带来了无数的个人隐私数据泄露、网络诈骗事件。 历年来&#xff…

FPGA——DDR3的IP核

FPGA——DDR3的ip核 IP核配置基于MIG核代码基于AXI接口的DDR3 IP核配置 1 2 3 4 5 6 基于MIG核代码 控制MIG核的信号进行读写 module MIG_APP_Drive(input i_ui_clk ,input i_ui_rst ,input init_calib_…
最新文章