用于医学分割的实时Test-time adaption

机构:约翰霍普金斯

论文:https://arxiv.org/abs/2203.05574

代码:https://github.com/jeya-maria-jose/On-The-Fly-Adaptation

摘要

基于深度学习的医学成像解决方案的一个主要问题是,当模型在不同于其训练的数据分布上进行测试时,性能会下降。在测试时调整源模型以适应目标数据分布是解决数据迁移问题的有效方法。以前的方法通过使用熵最小化或正则化等技术使模型适应目标分布来解决这个问题。在这些方法中,模型仍然是通过对完整测试数据分布使用无监督损失的反向传播来更新的。在现实世界的临床环境中,动态调整模型以适应新的测试图像更有意义,并且由于隐私问题和部署时缺乏计算资源而避免在推理期间更新模型。为此,我们提出了一种新的设置- On-the-Fly adaptive,它是零镜头和情景的(即,模型一次适应单个图像,并且在测试期间不进行任何反向传播)。为了实现这一点,我们提出了一个名为自适应UNet的新框架,其中每个卷积块都配备了一个自适应批处理归一化层,以根据domain代码调整特征。该域代码是使用在大型医学图像语料库上训练的预训练编码器生成的。在测试过程中,模型只接收新的测试图像,并根据测试数据生成域代码来适应源模型的特征。我们验证了2D和3D数据分布变化的性能,与之前的TTA方法相比,我们获得了更好的性能。

背景

许多医学图像分割的领域自适应技术都在研究解决这一问题[11]。但是,此设置假定我们可以访问源模型、源数据以及目标数据。另一种非常接近实时的设置是完全测试时适应[31],我们假设我们无法访问源数据,并通过每个样本执行一次反向传播来使模型适应目标数据。

然而,由于模型权重至少更新了一个完整的历元,因此该模型适应于完整的测试分布。这种设置可以被认为是one-shot适应,因为模型至少一次看到分布中的所有数据。在这项工作中,我们提出了一种临床动机设置,称为Test-Time adaption,其中模型一次适应单个图像/体积。

相关工作

Unsupervised Domain Adaptation

医学图像分割是一个被广泛探索的课题。已经提出了使用对抗训练(adversarial training)的特征对齐[18,24]、解纠缠表示(disentangling the representation)[32]、集成和使用软标签(ensembling and using soft labels)[25]等方法。然而,这些方法使用源数据和目标数据的训练分布进行适应,由于隐私问题,这对于医学成像并不总是可行的。

Source-free Unsupervised Domain Adaptation

医学图像分割假设没有可用的源数据。在[6]中,使用域不变先验定义了目标分布上的无标签熵损失。文献[7]提出了一种不确定性感知去噪伪标签方法。

Test-time Adaptation

TENT[31]等方法使用批量范数统计的熵最小化来适应新的目标分布。最近,Hu等人[13]提出使用区域核范数regional nuclear norm和轮廓正则化contour regular-ization等新的损失来提高医学图像分割的测试时间性能。自域适应网络Self domain adapted networks[12]使用基于自编码器的适配器来快速适应测试时的新任务。Karani等人[19]提出了一种逐测试图像per-test-image adaptation自适应方法,他们对图像进行自适应,以获得可信的分割。他们仍然在测试期间通过评估给定分割与源数据中的相似度来更新权重。

好奇怪啊,这可怎么训练

 On-the-Fly Adaption

一组输入数据和标签:X,Y

source distribution: Xs, Ys

target distribution: Xt, Yt

normal source 训练中,我们用 Xs train 和 Ys train 训练模型,然后在Xs test上测试数据

direct testing(no adapting)中,我们使用在 Xs train 和 Ys train 训练模型,然后在Xt test上测试

我们能获得最好的性能当模型在Xt train 和 Yt train 上训练然后在Xt test 上测试

 在一般的测试时间适应中,我们假设整个目标测试分布Xt test在测试期间是可用的。权重会用梯度优化用一个从Xt test获得的无监督的损失函数Ltta(Xt test )。

 工作如[19]为每一个测试图片做adaption。然而,他们确实在推理过程中根据手头的证据来优化权重,在测试分布中优化所有数据的网络权重,然后在Xtest t上再次使用新模型进行验证,这并不适合临床环境。

为每个测试图像调整模型更有意义,因为在医疗环境中使用整个测试分布涉及在测试时使用各种患者数据。在部署期间更新模型权重也很困难,因为它需要大量的计算能力。

在提出的on the fly 适应中,我们专注于一次适应单个测试图像/体积,如图1所示。

比起假设我们有一整个Xt test 我们假设我们只有一个在临床部署中的数据实例 Xti。这使得即时适应具有偶然性,因为它重置为初始权重以适应每个数据实例。同时我们限制在test-phase中的反向传播,因为它在测试过程中需要算力或者云端资源,这使得即时适应归零,因为它在测试期间不涉及任何梯度反向传播。

好奇怪啊,这可怎么训练

贡献

1)我们引入了更接近现实世界临床场景的实时适应,其中适应是zero-shot 和偶发的,消除了测试阶段完整目标分布和反向传播的可用性假设。

2)我们提出了一种新的框架adaptive - unet,它利用域代码和自适应批处理归一化来学习适应新的测试数据实例。

3)我们验证了我们的方法在二维眼底图像和三维MRI体积的医学图像分割中的9个域移位,我们得到了比最近的测试时间适应方法更好的性能。

方法

Network Details

我们用的是Unet结构。编码器和解码器分别有五个卷积模块,

编码器中的每个卷积块由一个卷积层、自适应批归一化 adaptive batch normalization、ReLU激活和最大池化层组成。

解码器中的每个卷积块由一个卷积层、自适应批归一化 adaptive batch normalization、ReLU激活和上采样层组成。上采样我们使用的是双线性插值。

3d实验我们使用的是3D UNet ,2d卷积换成3d卷积,2d最大池化换成3d最大池化,双线性插值换成三线性插值。

Adaptive Batch Normalization

这里有点疑问就是bn的想法会不会和前面看的综述有点冲突?

批归一化(Batch Normalization, BN)层[16]用于DNNs,以缓解内部协变量移位的问题。它归一化网络中的特征以帮助训练和更快的收敛。

BN可以被定义为↓,其中 x是输入 batch, z是输出, µ 是E[X]的平均值,σ是 标准差,这里γ和β都是可学习参数在正规化时控制缩放和移动

Adaptive Instance normalization (AdaIN),用于对齐两个特征代码的平均值和标准偏差(通常一个是context,另一个是style)。AdaIN被定义如下↓,其中x和y是两个特征码,z是归一化输出

在我们的Adaptive Unet中,我们用Adaptive Batch Normalization (AdaBN), 它基本上学习缩放和移动操作,同时自适应地规范化两个代码之间的批统计信息。AdaBN可定义为:

请注意,我们的公式与[20]中解释的AdaBN有点不同,因为它试图将模型转移到测试数据的均值和标准差,而不是对齐它们。在这里,我们对齐代码,同时也学习如何通过学习移位和缩放参数来对齐它们。在Adaptive UNet中,AdaBN层的输入是来自UNet的feature code,表示为X,域代码Y由domain prior generator生成。

Domain Prior Generator

域先验发生器(DPG)是一种预训练自编码器的编码器。我们首先将UNet作为医学图像的自编码器进行预训练.这个任务是自监督的,因为我们只是试图预测原始图像,同时提供增强版本的数据作为输入。这样做有助于模型在latent space 中学习抽象代码。我们在由不同模态组成的各种医疗数据上训练模型..我们确保我们进行实验来验证自适应UNet的数据分布不会与自编码器训练的数据重叠。然而,它确实有类似模态的数据。这有助于编码器为不同模态生成不同的域码。例如,T1 MRI的两幅图像与T1 MRI和T2 MRI相比,其对应的域代码在latent space中更接近。

Training source model

在源模型的训练阶段,我们将输入图像同时提供给UNet的编码器和预训练的domain prior generator。从domain prior generator获得的域码被传递到编码器和解码器中的AdaBN层。使用AdaBN根据域代码对特征映射进行归一化。

因此,在训练过程中,模型已经学会了适应当前模态/分布的域代码。AdaBN层的可学习参数γ和β学习适应每一层风格代码所需的scale和shift,以提供最佳的分割预测。注意,权重仅针对UNet分段网络更新。预训练的域先验生成器在训练源模型期间被冻结。

Inference on target data instance

当在Xs train上训练的模型在目标数据实例xt上得到验证时,我们将图像xt传递给域先验生成器和源模型。首先,我们使用域先验生成器为新图像xt生成新的域代码。接下来,我们将此域代码传递给Adaptive UNet中的所有AdaBN层。在前馈过程中,自适应UNet每层提取的特征都适应于新的域代码.因此,模型可以根据新模态/目标域的代码进行调整。由于前馈本身已经适应了特征,因此不涉及反向传播。同样,由于模型权重没有改变,这个框架是偶然性episodic的,并且不依赖于验证的整个测试数据分布。

实验

数据集

2D:

CHASE [10],

RITE [14] ,

HRF[23]

对于二维实验,DPG是对来自[1]的眼底图像进行预训练的

3D: 

BraTS

对于MRI实验,我们在Kaggle MRI数据集[2]和IXI数据集的MRI图像上预训练DPG

实现细节

框架:Pytorch

损失函数:

2d:

binary cross entropy (BCE) 和dice loss

优化器:

Adam lr:0.0001(这个损失函数也太小了吧)动量:0.9

我们还使用了最小学习率高达0.00001的余弦退火学习率调度程序。

batchsize:8

3d:

我们使用类似的损失,但使用0.001的学习率,同时将批大小减少到2。

实验结果

总结

在这项工作中,我们提出了一种新的适应设置,称为On-the-Fly adaptation。在这种情况下,我们将自适应约束为偶发性和零射击,从而假设在测试期间整个目标分布和模型更新不可用。这使得在现实世界的临床环境中部署深度学习模型时,实时适应非常接近场景。我们提出了一个新的框架——Adaptive UNet,利用自适应批归一化和域先验来解决这一自适应问题。我们在眼底图像和MRI体积的2D和3D域位移上验证了我们的模型,并表明即使在更严格的实时适应约束下,所提出的方法也比最近的测试时间适应方法具有竞争力。

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

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

相关文章

紫光展锐T760_芯片性能介绍_展锐T760安卓核心板定制

展锐T760核心板是一款基于国产5G芯片的智能模块,采用紫光展锐T760制程工艺为台积电6nm工艺,支持工艺具有出色的能效表现。其采用主流的44架构的八核设计,包括4颗2.2GHz A76核心和4颗A55核心设计,内存单元板载可达8GB Ram256GB ROM…

HCIA——29HTTP、万维网、HTML、PPP、ICMP;万维网的工作过程;HTTP 的特点HTTP 的报文结构的选择、解答

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

【python爬虫】爬虫编程技术的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏: 爬虫】网络爬虫探秘⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🌼实验目的 &#x1f…

Android开发修炼之路——(一)Android App开发基础-2

本专栏文章 上一篇 Android开发修炼之路——(一)Android App开发基础-1 2 App的工程结构 本节介绍App工程的基本结构及其常用配置,首先描述项目和模块的区别,以及工程内部各目录与配置文件的用途说明;其次阐述两种级别…

BabylonJS 6.0文档 Deep Dive 摄像机(六):遮罩层和多相机纹理

1. 使用遮罩层来处理多个摄影机和多网格物体 LayerMask是分配给每个网格(Mesh)和摄像机(Camera)的一个数。它用于位(bit)级别用来指示灯光和摄影机是否应照射或显示网格物体。默认值为0x0FFFFFFF&#xff…

SpringBoot使用druid

SpringBoot使用druid 一、前言二、配置1、pom依赖2、配置文件yml3、配置类 一、前言 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C…

【wink】草稿损坏如何恢复?

为节省储存空间,我们不会缓存您的原始视频。 原视频被删除或上传云盘后,可能会由于读取不到原视频而提示草稿损坏。 草稿损坏后,您可以尝试以下方法进行恢复: 从相册「最近删除」中恢复原视频;从云盘中下载原视频&…

单元测试——题目十二

目录 题目要求: 定义类 测试类 题目要求: 根据下列流程图编写程序实现相应处理,执行j=10*x-y返回文字“j1=:”和计算值,执行j=(x-y)*(10⁵%7)返回文字“j2=:”和计算值,执行j=y*log(x+10)返回文字“j3=:”和计算值。 编写程序代码,使用JUnit框架编写测试类对编写的…

力扣646. 最长数对链

动态规划 思路: 思路与 力扣354. 俄罗斯套娃信封问题 类似将序列进行排序,然后假设 dp[i] 为第 i 个元素的最长数对链个数;则其状态转移方程: 第 i 个元素之前的某一个元素(假设是下标是 j),如…

残留扭矩测量方法有哪些——SunTorque智能扭矩系统

残留扭矩是指在设备或机器的转动部分停机后仍然存在的扭矩,通常是由于摩擦力、粘性阻力等因素引起的。残留扭矩测量是设备维护和故障诊断的重要环节,SunTorque智能扭矩系统一起和大家学习了解几种常见的残留扭矩测量方法。 suntoruqe智能扭矩系统 静态扭…

C++技术要点总结, 面试必备, 收藏起来慢慢看

目录 1. 语言对比 1.1 C 11 新特性 2.2 C 和 C 的区别 2.3 Python 和 C 的区别 2. 编译内存相关 2.1. C 程序编译过程 2.2. C 内存管理 2.3. 栈和堆的区别 2.4. 变量的区别 2.5. 全局变量定义在头文件中有什么问题? 2.6. 内存对齐 2.7. 什么是内存泄露 …

Tomcat运维

目录 一、Tomcat简介 二、系统环境说明 1、关闭防火墙,selinux 2、安装JDK 3、安装Tomcat 三、Tomcat目录介绍 1、tomcat主目录介绍 2、webapps目录介绍 3、Tomcat配置介绍(conf) 4、Tomcat的管理 四、Tomcat 配置管理页面(了解) …

【Linux】从新认识Linux 服务(Service)

文章目录 Linux中service的概念Linux中常见的service常见的服务管理方式Linux中列出serviceLinux中service的特点推荐阅读 Linux中service的概念 在Linux操作系统中,服务(Service)是一个基本概念,它通常指的是运行在后台的、持续…

Vue自定义成功弹窗H5实现类似于小程序的效果

效果图: <div class="father"><div class="success-box" v-if="isSuccess"><img src="../../assets/insure/success-logo.png" alt=""><span>{{ successTitle }}</span></div> </d…

Go、容器以及Linux调度器

在容器中运行Go应用程序时&#xff0c;需要设置合理的GOMAXPROCS&#xff0c;从而避免调度中因为资源不足而造成STW。原文: Go, Containers, and the Linux Scheduler Go开发的应用程序通常部署在容器中。在容器中运行时&#xff0c;重要的一点是要设置CPU限制以确保容器不会耗…

Linux基础指令【下篇】

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.时间指令----date1…

【EI会议征稿】第三届大数据、区块链与经济管理国际学术会议 (ICBBEM 2024)

第三届大数据、区块链与经济管理国际学术会议 (ICBBEM 2024) The 3rd International Conference on Bigdata Blockchain and Economy Management 第三届大数据、区块链与经济管理国际学术会议(ICBBEM 2024)&#xff0c;将于2024年3月22-24日在中国南昌召开。大会由江西科技师…

SpringBoot01

一、SpringBoot项目中常见的依赖 1.1、spring-boot-starter-parent 这个是SpringBoot项目必须导入的依赖,这个父模块内部定义了springboot整合各个技术的依赖版本,降低版本的冲突。 <parent><artifactId>spring-boot-starter-parent</artifactId><group…

[git] windows系统安装git教程和配置

一、何为Git Git(读音为/gɪt/)是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 二、git安装包 有2种版本&#xff0c;Git for Windows Setup和Git for Windows Portable(便携版)两个版本都可以。 三、Git for Windows Por…

数据结构——图的存储结构

一、邻接矩阵 图的邻接矩阵(Adjacency Matrix) 存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息&#xff0c;一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。 设图G 有n 个顶点&#xff0c;则邻接矩阵A 是一个n ∗ n 的方阵&#xff0c;定义为: 下图是一个…