UNETR++:深入研究高效和准确的3D医学图像分割

news2024/10/5 14:13:48

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

代码:GitHub - Amshaker/unetr_plus_plus: UNETR++: Delving into Efficient and Accurate 3D Medical Image Segmentation

机构:Mohamed Bin Zayed University of Artificial Intelligence1, University of California Merced2, Google Research3, Linkoping University4

UNETR++作者和UNETR居然完全不沾边来着,继续找思路所以主要写写方法部分,别的部分简略一点.....!感觉挺有收获的!

摘要

由于Transformer模型的成功,最近的工作研究了它们在三维医学分割任务中的适用性。在Transformer模型中,自注意力机制是努力获取远程依赖关系的主要构建块之一。然而,自注意运算具有二次复杂度,这被证明是一个计算瓶颈,特别是在体积医学成像中,其中输入是三维的,有许多切片。在本文中,我们提出了一种名为unetr++的三维医学图像分割方法,该方法既提供了高质量的分割mask,又在参数、计算成本和推理速度方面具有效率。我们设计的核心是引入一种新的高效成对注意(efficient paired attention, EPA)块,该块使用基于空间和通道注意的一对相互依赖的分支有效地学习空间和通道方面的判别特征。我们的空间注意公式是有效的,具有相对于输入序列长度的线性复杂性(linear complexity)。为了实现空间分支和以通道为中心的分支之间的通信,我们共享查询(query)和键映射(key mapping)功能的权重,这些功能提供了互补的好处(配对关注),同时还减少了整体网络参数。我们对Synapse、BTCV、ACDC、BRaTs和Decathlon-Lung这五个基准进行了广泛的评估,揭示了我们在效率和准确性方面的贡献的有效性。在Synapse上,我们的UNETR++设置了一个新的最先进的骰子得分为87.2%,同时与文献中最好的方法相比,在参数和FLOPs方面都降低了71%以上,效率显著。

背景

早期基于CNN的网络受限于他们的感受野,但是基于transformer的方法计算成本高

后面也冒出了一些混合方法,一些用基于transformer的encoder和卷积的decoder,另外一些设计编码器和解码器子网的混合块。但是这些网络主要关注于提高分割进度,这反过来又大大增加了模型在参数和FLOPs的大小,导致鲁棒性不理想。我们认为这是由于他们低效的self-attention的设计,在体数据分割中显露出更大的问题。此外,这些现有的方法没有捕捉到空间和通道特征之间的显式依赖关系,这可以提高分割质量。在这项工作中,我们的目标是在一个统一的框架中同时提高分割精度和模型效率。

贡献

1)我们提出了一种高效的混合分层结构用于三维医学图像分割,命名为unetr++,力求在参数、FLOPs和推理速度方面实现更好的分割精度和效率。基于最近的UNETR框架[13],我们提出的UNETR++分层方法引入了一种新的高效的对注意力(EPA)块,该块通过在两个分支中应用空间和通道注意力有效地捕获丰富的相互依赖的空间和通道特征。我们在EPA中的空间注意将键和值投射到一个固定的低维空间,使自注意计算相对于输入令牌的数量呈线性。另一方面,我们的通道注意通过在通道维度中执行查询和键之间的点积操作来强调通道特征映射之间的依赖关系。此外,为了捕获空间和通道特征之间的强相关性,查询和键的权重在分支之间共享,这也有助于控制网络参数的数量。相反,值的权重保持独立,以强制学习两个分支中的互补特征。

2)我们通过在五个基准上进行全面实验来验证我们的UNETR++方法:
Synapse[19]、BTCV[19]、ACDC[1]、BRaTs[24] Decathlon-Lungs[30]。定性和定量结果都证明了UNETR++的有效性,与文献中已有的方法相比,在分割精度和模型效率方面都有更好的表现。

相关工作

CNN-based Segmentation Methods 

unet,多尺度三维全卷积,nnunet

金字塔[35]、大核[26]、扩展卷积[6]和可变形卷积[20]等方法,在基于cnn的框架内编码整体上下文信息

Transformers-based Segmentation Methods

ViT, 1d-embedding,shifted windows for 2D

Hybrid Segmentation Methods

TransFuse[34]提出了一种带有BiFusion模块的并行cnn-Transformer架构,用于融合编码器中的多级特征。

MedT[31]在自注意中引入了门控的位置敏感轴向注意机制来控制编码器中的位置嵌入信息,而解码器中的ConvNet模块产生分割模型。

TransUNet[5]结合了Transformer和U-Net架构,其中Transformer对来自卷积特征的嵌入图像补丁进行编码,解码器将上采样编码特征与高分辨率CNN特征相结合进行定位。

Ds-transunet[21]采用双尺度编码器 Swin-transformer[22]处理多尺度输入,并通过自注意编码来自不同语义尺度的局部和全局特征表示。

UNETR,三维混合模型, 该模型将变压器的远程空间依赖关系与CNN的感应偏置结合成“u形”编码器结构。其参数量是nnunet的2.5倍,但是如果nnFormer要在UNETR的基础上获得了更好的性能,需要进一步增加了1.6X参数和2.8Xflop。 UNETR:用于三维医学图像分割的Transformer-CSDN博客

nnFormer, 该方法适应swing - unet[3]架构。在这里,卷积层将输入扫描转换成三维patches,并引入基于体积的自关注模块来构建分层特征金字塔。nnFormer在取得良好性能的同时,其计算复杂度明显高于UNETR和其他混合方法。

我们认为上述混合方法难以有效捕获特征通道之间的相互依赖关系,以获得丰富的特征表示,既编码空间信息,也编码通道间的特征依赖关系。

方法

我们首先确定了我们要设计混合框架的两个理想属性:

1)Efficient Global Attention 高效的全局注意力:

在体积医学分割的情况下,计算上是昂贵的,并且在混合设计中交织窗口关注和卷积组件时变得更加成问题。与这些方法不同的是,我们认为跨特征通道计算自关注而不是计算体积维度,有望将相对于体积维度的复杂性从二次型降低到线性型。此外,通过将键和值的空间矩阵投影到较低维空间中,可以有效地学习空间注意信息。

2) Enriched Spatial-channel Feature Representation丰富的空间通道特征表示:

现有的混合体医学图像分割方法大多是通过注意力计算来捕获空间特征,而忽略了以编码不同通道特征映射之间相互依赖关系的形式来获取通道信息。

整体框架

我们的UNETR++框架基于最近推出的UNETR[13],在编码器和解码器之间使用跳过连接,然后是卷积块(ConvBlocks)来生成预测掩码。

我们的unetr++采用分层设计,而不是在整个编码器中使用固定的特征分辨率,其中特征的分辨率在每个阶段逐渐降低两倍。在我们的UNETR++框架中,编码器有四个阶段,其中第一阶段包括Patch embedding,将体积输入划分为3D补丁,然后是我们新颖的高效成对注意(EPA)块。

Patch embedding

UNETR++的这个部分和 UNETR挺像的呢,但是有点好奇的是为什么UNETR里面用的直接是P,而没有分为P1,P2,P3这样,到时候看看代码其中P1,P2,P3是否不同好了

把3D输入 x∈R  HxWxD 变成不重叠的补丁 xu∈R Nx(P1,P2,P3),其中P1,P2,P3是每个patch的分辨率, N=H/P1 x W/P2 xD/P3,是序列长度。

然后,将这些补丁投影到C通道维度,得到的特征图尺寸为 H/P1 x W/P2 xD/P3 x C

对于每个剩余的编码器阶段,我们使用非重叠卷积的下采样层将分辨率降低两倍,然后是EPA块。

在我们提出的unetr++框架中,每个EPA块包括两个注意模块,通过使用共享关键字查询方案对空间和通道维度的信息进行编码,有效地学习丰富的空间通道特征表示

在我们提出的unetr++框架中,每个EPA块包括两个注意模块,通过使用共享keys-queries方案对空间和通道维度的信息进行编码,有效地学习丰富的空间通道特征表示。编码器级通过skip-connection 与解码器级连接以合并不同分辨率的输出。这可以恢复下采样操作期间丢失的空间信息,从而预测更精确的输出。与编码器类似,解码器也包括四个阶段,其中每个解码器阶段包括一个上采样层,使用反卷积将特征图的分辨率提高两倍,然后是EPA块(最后一个解码器除外)。Channel 的数量在每两个解码器阶段之间减少2倍。因此,最后一个解码器的输出与卷积特征映射融合,以恢复空间信息并增强特征表示。然后将结果输出馈送到3x3x3和1x1x1个卷积块中以生成voxel-wise的最终掩码预测。

Efficient PairedAttention Block

空间注意模块将自注意的复杂度从二次型降低到线性型。另一方面,通道注意模块有效地学习了通道特征映射之间的相互依赖关系。EPA块基于两个注意模块之间的共享keys-queries查询方案,以相互通知,以产生更好和更有效的特征表示。这可能是由于通过共享keys-queries来学习互补特性,但使用不同的value layer。

如图所示,输入特征映射x被馈送到EPA块的通道和空间注意模块。

Q和K线性层的权值是在两个注意模块之间共享的,每个注意模块使用不同的V层。两个注意模块计算为:

其中,^X s和^X c分别表示空间和通道注意图。SA为空间注意模块,CA为通道注意模块。Qshared、Kshared、Vspatial和Vchannel分别是共享查询、共享键、空间值层和通道值层的矩阵。!就是这里的QK都是共享的但是值做单独注意

Spatial attention

我们用这个模块把获取空间信息的复杂度从O(n^2)降低到O(np) (所以到底和原先的相比怎么降的呢🤔),其中n为记号的个数,p为投影向量的维数,其中p << n。

给定shape为 HW DXC的归一化张量x,我们使用三个线性层计算Qshared, Kshared和vspace投1影,收益率Qshared = WQX, Kshared=WKX, vspace =WVX,其中,WQ、WK、WV分别为Qshared、Kshared、Vspatial的投影权值。

1)Kshared和Vspatial层从HWD XC投影到形状为p C的低维矩阵中。(坏了我怎么记得是把channel压瘪,我再回去看看先)

2)其次,通过将Qshared层乘以投影Kshared的转置来计算空间注意图,然后使用softmax来度量每个特征与其他空间特征之间的相似性。

3)这些相似度乘以投影的vspace层,生成shapeHWDxC的最终空间注意图。空间注意的定义如下:

(我记忆中的空间注意力是CBAM的这个↓

Channel attention 

该模块通过在通道值层和通道注意图之间的通道维度中应用点积运算来捕获特征通道之间的相互依赖关系。

利用空间注意模块相同的Qshared和Kshared,计算通道的值层,利用线性层学习互补特征,得到Vchannel = WVX,维数为 HWDxC,其中wv为Vchannel的投影权值。

定义如下

式中,Vchannel、Qshared、Kshared分别表示通道值层、共享查询、共享键,d为每个向量的大小。

最后,我们对两个关注模块的输出进行和融合,并通过卷积块对其进行变换,以获得丰富的特征表示。EPA块的最终输出^X为:

其中,^X s和^X c表示空间和通道注意图,Conv1和Conv3分别为1x1x1和3x3x3卷积块。

dbq我到时候在琢磨一下CBAM的通道和空间注意力和这个什么关系好了,感觉不太一样

损失函数

soft dice loss + cross-entropy loss

式中,I为类数;V为体素数;Yv;i和Pv;i分别表示类i在体素v处的真实情况和输出概率。

实验

数据集

Synapse 多器官CT分割

BTCV 多器官CT分割

ACDC 心脏自动诊断

BraTS 脑肿瘤分割

Decathlon-Lung

实现细节

Pytorch v1.10.1, MONAI库(可恶这个也用的是那个库,我有空直接进行一个学!)

硬件:A100 40GB GPU

1k epochs

learning rate :0.01 , weight decay :3e^5.

评估指标

Dice Similarity Coefficient (DSC

95% Hausdorff Distance (HD95

结果

Synapse

BTCV

ACDC

BRATS

Lungs

展望

为了观察UNETR++的潜在局限性,我们分析了Synapse的不同异常情况。虽然我们的预测比现有的方法更好,更接近真实情况,但我们发现,在一些情况下,我们的模型和现有的方法一样,难以分割某些器官。当一些切片中器官的几何形状异常(由细边界描绘)时,我们的模型和现有的模型很难准确地分割它们。原因可能是与正常样本相比,具有这种异常形状的训练样本的可用性有限。我们计划在预处理阶段应用几何数据增强技术来解决这个问题。

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

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

相关文章

从Redis反序列化UserDetails对象异常后中发现FastJson序列化的一些问题

最近在使用SpringSecurityJWT实现认证授权的时候&#xff0c;出现Redis在反序列化userDetails的异常。通过实践发现&#xff0c;使用不同的序列化方法和不同的fastJson版本&#xff0c;异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…

**QT与目标板联合调试_断点仿真**

原文地址: https://blog.csdn.net/u012851408/article/details/86715626

浅析电力电容器的防火防爆及改进措施

安科瑞 华楠 摘要&#xff1a;电容器着火爆炸的原因有管理上的疏忽、保养不到位、频繁投切、高次谐波、存在于易燃易爆的环境之中以及电容器选型、安装、保护不恰当等&#xff0c;电容器的防火防爆&#xff0c;应根据这些原因采取相应的措施。关键词&#xff1a;电力电容器&am…

保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档

1 K8S 简介 K8S是Kubernetes的简称&#xff0c;是一个开源的容器编排平台&#xff0c;用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的系统。它可以跨多个主机聚集在一起&#xff0c;控制和自动化应用的部署与更新。 K8S 架构 Kubernete…

如何开发有趣而富有创意的营销小游戏

在数字化时代&#xff0c;企业通过创意而独特的方式与目标受众互动&#xff0c;已成为提高品牌知名度和用户参与度的重要手段之一。其中&#xff0c;设计一款引人入胜的营销小游戏&#xff0c;不仅能吸引用户的眼球&#xff0c;还能有效传达品牌信息。以下是一些建议&#xff0…

软件测试还能找到工作吗?答案全在这...

观点&#xff1a;如果你还是以前的思维来学习测试&#xff0c;那你肯定是找不到工作 我做测试工作有将近8年的时间&#xff0c;蚂蚁金服做过2年&#xff0c;因为加班太多离职了。目前在一家国企上市公司&#xff0c;一年能拿三四十个左右&#xff0c;对比头部互联网公司来说&a…

Linux系统下脚本操作、host文件修改

1&#xff1a;Linux系统下给.sh添加可执行权限并运行 linux下的sh文件变成可执行文件&#xff08;可执行文件有颜色&#xff08;默认绿色&#xff09;&#xff09; chmod 777 xxx.sh 添加可执行权限 chmod ux xxx.sh 解释&#xff1a; chmod(change the permissions mode o…

【STM32单片机】LED点阵花样显示设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用8*8LED点阵模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;默认以静态模式显示&#xff0c;此时点阵左右循环切换图像。 当按下K…

GEE:kNN(k-最近邻)分类教程(样本制作、特征添加、训练、精度、最优参数、统计面积)

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine (GEE)平台上进行kNN(k-最近邻)分类的方法和代码,其中包括制作样本点教程(本地、在线和本地在线混合制作样本点,合并样本点等),加入特征变量(各种指数、纹理特征、时间序列特征、物候特征等),运行kNN(k-最近…

mysql 更改密码

由于两台设备的mysql数据库的密码不一样&#xff0c;开发时每次连接数据库都需要更改配置文件&#xff0c;所以想修改一下mysql数据库的密码。 mysql 修改密码千万不要直接修改&#xff0c;直接修改的话会出现两种情况&#xff1a; 1&#xff0c;修改成功&#xff0c;无法登录。…

UEditor编辑器实现上传图片自动加水印功能PHP源码

UEditor编辑器是百度旗下的免费开源富文本编辑器,使用很方便,但是也有缺点,比如,上传图片不能自动添加水印,下边我们就来说说如何在UEditor编辑器中自动实现上传图片添加水印功能,操作很简单。 首先找到UEditor/PHP目录下的Uploader.class.php的文件,打开该文件,找到以…

ThreeJs绘制仓库场景

之前有做过关于threejs开发的一些小功能项&#xff0c;最近正好在做一个仓库相关的3D场景&#xff0c;这里贴出核心代码和大家分享下。 首先要做3D场景&#xff0c;除了基础的组件要引入生成外&#xff0c;要先加入地板&#xff0c;在地板上添加一些3D模型达到各种各样的效果&a…

wiondow系统-python中缺少JDK安装(超详解)!!!

因为学习python中&#xff0c;用到Pysaprk,但因缺少JDK而报错&#xff0c;解决方法如下 下载新款且稳定的17版本&#xff08;21不推荐&#xff09;官网下载有限速设置&#xff0c;压缩包我已经放在下面了&#xff0c;注意提取 百度网盘链接&#xff1a;https://pan.baidu.com/…

Mobaxterm 使用lrzsz传输文件(rz/sz)

Mobaxterm 使用lrzsz传输文件报错 1. 现象 最近从xshell切换到Mobaxterm其他一切正常,就是使用rz传输文件时会出现错误,比较苦恼. 会出现以下错误 [rootcentos7 rpmbuild]# rz ▒CCCCCCCCCCC23be50ive.**B0100000023be502. 解决方法 去官网(https://mobaxterm.mobatek.net…

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。 IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器&#xff0c;支持4K HDMI2.0显示&#xff0c;接口丰富&#xff0c;拥有千兆以太网&#xff0c;全协议TypeC接口&#xff0c;USB3.0 &#xff0c;eDP 和…

Android : ListView + SimpleAdapter(简单适配器)-简单应用

示例图&#xff1a; MainActivity.java package com.example.mylistviewsimpleadapter;import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import …

LangChain(0.0.339)官方文档一:快速入门

LangChain官网、LangChain官方文档 、langchain Github、langchain API文档、llm-universe 文章目录 一、LangChain简介&#xff08;v0.0.338&#xff09;1.1 整体框架1.2 主要组件1.2.1 Model I/O1.2.2 Retrieval1.2.2.1 RAG1.2.2.2 Retrieval 1.2.3 Chain 1.3 其它组件1.3.1 …

windbg双机调试

1&#xff1a;虚拟机增加串行端口 2&#xff1a;操作步骤&#xff1a;编辑虚拟机设置 -> 添加 -> 串行端口 -> 完成 参数配置&#xff1a;使用命名管道 -> \\.\pipe\com_1 -> 该端是服务器&#xff0c;另一端是应用程序 -> 轮询时主动放弃CPU->确定 3 -b…

App Inventor 2 什么情况下需要使用字典?

介绍 字典在其他语言中称为映射、关联数组或列表&#xff0c;是一种将一个值&#xff08;通常称为键&#xff09;与另一个值关联的数据结构。 Q&#xff1a;App Inventor 2 什么情况下需要使用字典&#xff1f; A&#xff1a;列表能完成字典的绝大部分功能&#xff0c;不过字…

C++之unordered_map/set的使用

前面我们已经学习了STL中底层为红黑树结构的一系列关联式容器——set/multiset 和 map/multimap(C98). unordered系列关联式容器 在C98中, STL提供了底层为红黑树结构的一系列关联式容器, 在查询时效率可达到log2N,即最差情况下需要比较红黑树的高度次, 当树中的节点非常多时,…