UNETR:用于三维医学图像分割的Transformer

论文链接:https://arxiv.org/abs/2103.10504

代码链接: https://monai.io/research/unetr

机构:Vanderbilt University, NVIDIA

最近琢磨不出来怎么把3d体数据和文本在cnn中融合,因为确实存在在2d里面用的transformer用在3d里面会爆炸这回事,所以干脆去找个经典3d transformer+cnn的好了。要是有知道朋友也可以一起讨论一下。因为是两年前的文章,所以这篇博文主要集中写方法了。

*妈耶,没想到真的部分解决我的疑问了,好的洛阳铲,爱来自中国

摘要

近十年来,具有收缩和扩展路径的全卷积神经网络(fcnn)在大多数医学图像分割应用中表现出突出的特点。在fcnn中,编码器通过学习全局和局部特征以及上下文表示来发挥不可或缺的作用,这些特征和上下文表示可用于解码器的语义输出预测。尽管取得了成功,但fcnn中卷积层的局部性限制了学习远程空间依赖关系的能力。受自然语言处理(NLP)在远程序列学习中最近成功的启发,我们将体积(3D)医学图像分割任务重新制定为序列到序列的预测问题。我们引入了一种新的架构,称为UNEt-TRansformer(UNETR),它利用Transformer作为编码器来学习输入体积的序列表示并有效捕获全局多尺度信息,同时也遵循编码器和解码器的成功“u形”网络设计。Transformer 编码器通过不同分辨率的跳过连接直接连接到解码器,以计算最终的语义分割输出。我们已经在用于多器官分割的多图谱标记颅顶(BTCV)数据集和用于脑肿瘤和脾脏分割任务的医学分割十项全能(MSD)数据集上验证了我们的方法的性能。我们的基准测试在BTCV排行榜上展示了新的最先进的性能。

背景

fcnn不能有效捕捉全局信息,transformer难以有效捕捉局部信息

我们将3D分割任务重新制定为一维seq to seq 的预测问题,并使用Transformer作为编码器从嵌入的输入补丁中学习上下文信息。从Transformer编码器中提取的表示通过多个分辨率的跳过连接与基于cnn的解码器合并,以预测分割输出。在解码器中我们使用cnn,这是因为Transformer虽然具有学习全局信息的强大能力,但却无法正确捕获局部信息。

贡献

1. 提出了一种新的基于变压器的体积医学图像分割模型。

2. 为此,我们提出了一种新的架构,其中(1)Transformer编码器直接利用嵌入式3D体来有效捕获远程依赖关系;(2)skip-connected decoder结合提取的不同分辨率的表示并预测分割输出

3. 我们在两个公共数据集:BTCV[26]和MSD[38]上验证了我们提出的模型在不同体积分割任务中的有效性。UNETR在BTCV数据集的排行榜上实现了新的最先进的性能,并且在MSD数据集上优于竞争方法。

相关工作

基于cnn的分割网络

暂略

Vision Transformers

暂略

方法

UNETR架构概述。3D输入体数据(例如,MRI图像的C=4通道)被划分为一系列均匀且不重叠的patch,并使用线性层投影到嵌入空间中。该序列与位置嵌入一起添加,并用作变压器模型的输入。提取变压器中不同层的编码表示,并通过跳过连接与解码器合并,以预测最终的分割。给出了补丁分辨率P =16和嵌入尺寸ek =768时的输出大小。

网络结构

我们在上图中概述了所提出的模型。UNETR采用由一堆Transformer组成的收缩-扩展(contracting-expanding)模式作为编码器,编码器通过跳过连接连接到解码器。与NLP中常用的一样,Transformer在输入嵌入的一维序列上运行。

我本人就是在3D作为跟文本一样维度的序列输入tansformer之后会存在长宽高压到一个维度上导致做交叉注意力的时候内存会爆掉,看看本文怎么解决的↓

1)img 输入:x∈R  HxWxDxC,其中H,W是长宽,D是深度,C是channel

2)然后把它拍平成 xv∈R Nx(P^3 x C)   式中P^3表示每个patch的分辨率,N =(H*W*D)/P^3为序列长度。

3) 随后,我们使用线性层将贴片投影到K维嵌入空间中,该嵌入空间在整个Transformer层中保持恒定。

4) 为了保留提取的patch的空间信息,我们添加了一维可学习的位置嵌入 Epos ∈ R NxK 到投影的 patch embedding Epos ∈ R (P^3 x C)xK,根据公式↓

请注意,可学习的[class]令牌没有添加到嵌入序列中,因为我们的变压器主干是为语义分割而设计的。

5)在嵌入层后,我们利用由多头自注意(MSA)和多层感知器(MLP)子层组成的Transformer块堆,根据算式

其中Norm()表示层归一化[1],MLP由两个具有GELU激活函数的线性层组成,i为中间块标识符,L为变压器层数。

MSA子层

由n个并行self-attention层(SA)组成。具体来说,SA块是一个参数化函数,它学习查询(q)与序列Z∈R N*K 中相应的键(k)和值(v)表示之间的映射

通过测量z中两个元素及其键值对之间的相似性来计算注意权重(A)

其中Kh = K=n是一个比例因子,用于将参数的数量保持在一个常数上,其中键K的值不同。

6) 使用计算的注意力权重,序列z中值v的SA输出计算为

这里,v表示输入序列和中的值 Kh = K/n是一个比例因子(scaling factor.)
此外,MSA的输出被定义为

其中Wmsa ∈ R n.Kh x K表示多头可训练参数权重。

7) 受类似于U-Net[36]的架构的启发,其中编码器的多个分辨率的特征与解码器合并。我们从transformer提取了大小为 (HxWxD)/P^3 x K 的序列表示zi(i∈{3,6,9,12}),并把他们变形成一个 H/P x W/P xD/P x K的tensor

我们定义中的表示在嵌入空间中被重塑为特征大小为K的Transformer 的输出(即变压器的嵌入大小)。此外,如图2所示,在每个分辨率下,我们利用连续3x3x3的卷积层,然后是规范化层,将嵌入空间中的重塑张量投影到输入空间中。

8)在我们encoder的bottleneck(即变压器最后一层的输出)中,我们将反卷积层应用于变换后的特征映射,将其分辨率提高2倍。

9) 然后,我们将调整大小的特征图与先前变压器输出(例如z9)的特征图连接起来,并将它们馈送到连续的3x3x3的卷积层中,并使用反卷积层对输出进行上采样。这个过程在所有其他后续层中重复,直到原始输入分辨率,其中最终输出被送入带有softmax激活函数的1x1x1卷积层,以生成体素语义预测。

损失函数

soft dice loss

实验

数据集

BTCV (CT):多器官分割

MSD (MRI/CT):脑肿瘤分割

实现细节

框架:pytorch 和 monai(monai听说作为医学深度学习的框架还挺方便的,也是基于pytorch的,有机会学学)

硬件:NVIDIADGX-1服务器

所有模型都以6个批大小进行训练,使用AdamW优化器[31],初始学习率为0.0001,迭代20000次。

Transformer 模型 :VIT-B16,L=12层,嵌入尺寸k =768

结果

BTCV

MSD

评估指标

Dice(Dice score)

HD (Hausdorff Distance)

总结

本文介绍了一种新的基于Transformer的结构,称为UNETR,通过将该任务重新表述为一维序列到序列预测问题,用于体医学图像的语义分割。我们建议使用转换器编码器来增加模型学习远程依赖关系和在多个尺度上有效捕获全局上下文表示的能力。我们验证了UNETR在CT和MRI模式下不同体积分割任务中的有效性。UNETR在BTCV排行榜上的多器官分割的标准和自由竞赛中都取得了新的最先进的表现,并且在MSD数据集上优于脑肿瘤和脾脏分割的竞争方法。最后,UNETR已显示出有效学习医学图像中所表示的关键解剖关系的潜力。该方法为医学图像分析中一类新的基于变压器的分割模型奠定了基础。

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

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

相关文章

leetcode刷题之用栈实现队列(C语言版)

leetcode刷题之用栈实现队列(C语言版) 一、题目描述二、题目要求三、题目解析Ⅰ、typedef structⅡ、MyQueue* myQueueCreateⅢ、void myQueuePush(MyQueue* obj, int x)Ⅳ、int myQueuePeek(MyQueue* obj)Ⅴ、int myQueuePop(MyQueue* obj)Ⅶ、bool myQ…

编译器核心技术概览

编译技术是一门庞大的学科,我们无法对其做完善的讲解。但不同用途的编译器或编译技术的难度可能相差很大,对知识的掌握要求也会相差很多。如果你要实现诸如 C、JavaScript 这类通用用途语言(general purpose language)&#xff0c…

[shader] 光照入门(未完结。。。

反射 漫反射:而当物体表面粗糙时,我们把物体表面看作无数不同方向的微小镜面,则这些镜面反射出的光方向均不相同,这就是漫反射。 高光反射:我们假定物体表面光滑,只有一个镜面,那么所有的光都…

微信小程序前端环境搭建

搭建微信小程序前端环境 申请小程序测试账号 访问路径 使用微信扫描二维码进行申请,申请成功之后,进入界面,获取小程序ID(AppID)和秘钥(AppSecret) 安装微信web开发者工具 访问路径 选择稳定开发的版本 需要在小程序的设置中将默认关闭…

深入理解JVM 类加载机制

深入理解JVM 类加载机制 虚拟机如何加载Class文件? Class文件中的信息进入到虚拟机后会发生什么变化? 类加载机制就是Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机…

AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU

全球半导体解决方案供应商瑞萨电子(TSE:6723)宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B,扩展32位微控制器(MCU)产品线。新产品作为广受欢迎的RX产品家族的一员,具有高精度模拟前…

3D火山图绘制教程

一边学习,一边总结,一边分享! 本期教程内容 **注:**本教程详细内容 Volcano3D绘制3D火山图 一、前言 火山图是做差异分析中最常用到的图形,在前面的推文中,我们也推出了好几期火山图的绘制教程&#xff0…

如何通过宝塔面板搭建一个本地MySQL数据库服务并实现远程访问

宝塔安装MySQL数据库,并内网穿透实现公网远程访问 文章目录 宝塔安装MySQL数据库,并内网穿透实现公网远程访问前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网…

Axios 通过a标签下载文件 跨域下载

<!-- a标签占位 --><a ref"down" ></a>getTest() {this.$axios.request({url: https://cnv13.55.la/download?file_key3695fa9461a0ae59cf3148581e4fe339&handle_typeexcel2pdf,method: get,responseType: blob, // 切记类型 blob}).then(re…

java:CommandLineRunner命令行操作

背景 CommandLineRunner是一个SpringBoot提供的接口&#xff0c;这个接口可以让我们在SpringBoot启动之后&#xff0c;执行一些特定的命令行操作。 实现CommandLineRunner接口后&#xff0c;SpringBoot在启动的时候会自动执行run方法。通常&#xff0c;我们可以在run方法中进…

TableStructureRec: 表格结构识别推理库来了

目录 引言lineless_table_rec: 无线表格识别库安装使用结果 wired_table_rec&#xff1a;有线表格识别库安装使用结果 写在最后 引言 TableStructureRec 仓库是用来对文档中表格做结构化识别的推理库&#xff0c;包括来自 PaddleOCR 的表格结构识别算法模型、来自阿里读光有线…

Python监控服务进程及自启动服务方法与实践

1. 需求概述 当我们在Windows Server环境中部署XX系统的实际应用中&#xff0c;往往会遇到一些运维管理的挑战。为了确保系统的持续稳定运行&#xff0c;特别是在服务程序因各种原因突然关闭的情况下&#xff0c;我们可以借助Python的强大生态系统来构建一个监控与自动重启的管…

Linux下载工具XDM下载安装与使用

Windows上IDM多线程下载非常强大&#xff0c;即能捕捉页面上的视频、图片、音频&#xff0c;又能作为浏览器下载器使用&#xff0c;但是IDM无法在Linux下使用&#xff0c;除非使用wine。不过我们可以在Linux中用XDM(Xtreme Download Manager)代替IDM。 1、XDM下载 Xtreme Dow…

线性回归中的函数求导

在线性回归中&#xff0c;函数求导是一个重要的数学工具&#xff0c;用于计算损失函数关于模型参数的导数。通过求导&#xff0c;我们可以找到最优的参数值&#xff0c;以实现更好的线性回归拟合。 本文将介绍线性回归的基本原理&#xff0c;以及如何通过函数求导来优化线性回…

C++设计模式之工厂模式(下)——抽象工厂模式

抽象工厂模式 介绍示例示例使用运行结果抽象工厂模式的优缺点优点缺点 总结 介绍 抽象工厂模式是一种创建型设计模式&#xff0c;它提供了一种封装一组相关或相互依赖对象的方式&#xff0c;而无需指定它们具体的类。它允许客户端使用抽象接口来创建一系列相关的对象&#xff…

Java常用类

目录 包装类 装箱和拆箱 包装类型和String的转换&#xff0c;包装类的常用方法 包装类 装箱和拆箱 package com.edu.wrapper;public class Interger01 {//演示int<-->Integer的装箱和拆箱//手动装箱int n1100;Integer integer new Integer(n1);Integer integer01 In…

UML建模图文详解教程01——Enterprise Architect的安装与使用

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方网站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;图示如下&#xff1a; Enterprise Architect是一个全功能的、基于…

【数据结构(四)】前缀、中缀、后缀表达式(逆波兰表达式)和逆波兰计算器的代码实现(2)

文章目录 1. 前缀表达式(波兰表达式)1.1. 前缀表达式的计算机求值 2. 中缀表达式3. 后缀表达式(逆波兰表达式)3.1. 后缀表达式的计算机求值3.2. 逆波兰计算器的实现 4. 中缀表达式 转 后缀表达式4.1. 思路分析4.2. 代码实现 5. 逆波兰计算器的完整版 1. 前缀表达式(波兰表达式)…

Django(十、中间件)

文章目录 一、中间件的介绍中间件有什么用中间件功能自定义中间中间件的顺序 一、中间件的介绍 中间件顾名思义&#xff0c;是介于request与response处理之间的一道处理过程&#xff0c;相对比较轻量级&#xff0c;并且在全局上改变django的输入与输出。因为改变的是全局&…

【精选】​​深度学习:构建卷积神经网络的表情识别系统(源码&教程)

1.研究背景与意义 随着社交媒体和在线通信的普及&#xff0c;人们越来越多地使用表情符号来表达情感和情绪。表情识别系统的发展成为一个重要的研究领域&#xff0c;旨在通过计算机自动识别和理解人类的表情&#xff0c;从而提高人机交互的效果和用户体验。 传统的表情识别方…
最新文章