Swin UNetR:把 UNet 和 Swin Transformer 结合

news2024/12/23 22:17:05

Swin UNetR:把 UNet 和 Swin Transformer 结合

    • 网络结构
    • 使用指南

 


前置知识:Swin Transformer:将卷积网络和 Transformer 结合

Swin UNetR 结合 Swin Transformer 的上下文建模能力和 U-Net 的像素级别预测能力,提高语义分割任务的性能。

  • 把 2D Swin Transformer 变成 3D Swin Transformer
  • 结合 UNet

通过引入 Swin Transformer 的注意力机制和窗口化卷积操作,可以更好地处理大尺寸图像,并捕捉全局上下文信息。同时,还可以通过 U-Net 的解码器结构进行精细的分割预测。

只改了几个层,唯一工作量大的只有 decoder 的 patch expand,做了几个消融实验。

论文地址:https://arxiv.org/abs/2105.05537

算代码目:https://github.com/HuCaoFighting/Swin-Unet

网络结构

Swin UNetR 长什么样子?

在 ViT 图上,加了一个解码器 Decoder

  • ViT 只用了 Transformer 的编码器 Enconder

    UNet 形状的 Swin Transformer:

  • 使用的基本模块是 Swin Transformer block


全局计算视角:

上图添加了关联,编码器Encoder、解码器Decoder、跳跃连接、UNet上采样,编码器部分使用了Swin Transformer。

下图显示,解码器部分是使用卷积网络:

下图,突出子模块的关联:

Encoder

  • 将输入的图像分割成大小为特定分辨率的小块,称为tokenized inputs。这些tokenized inputs被送入两个连续的Swin Transformer块,用于学习表示。这两个Swin Transformer块的特征维度和分辨率与输入保持不变。

  • 同时,在每个Swin Transformer块之间还有一个patch merge层。这个层的作用是将Token的数量减少,实现2倍的下采样,同时将特征维度增加到原始维度的2倍。这样可以在保持特征维度的同时,减少Token的数量,从而降低计算复杂度。

  • 这个过程会在Encoder中重复3次,以逐渐减少分辨率和增加特征维度。通过这种方式,Encoder能够在每个阶段学习到不同尺度的特征表示,从而提供更丰富的上下文信息和多尺度感知能力。

Patch merging layer

  • 把输入的patch被分为四个部分,通常是按照水平和垂直方向平分。然后,这四个部分被连接在一起,形成一个更大的patch。这个操作导致特征分辨率降低了2倍,因为每个patch的尺寸减半。

  • 同时,由于连接操作的结果是特征维度增加了4倍,为了保持维度一致性,会在连接的特征上添加一个线性层。这个线性层将特征的维度统一为原始维度的2倍,以便后续的处理和学习。

  • 这样的处理可以在保持特征维度增加的同时,降低分辨率,以获取更广阔的上下文信息,并提供更丰富的特征表示能力。

Decoder

  • 使用了基于Swin Transformer块的对称结构。与编码器中的patch merge层不同,解码器中使用了patch expand层对提取的深度特征进行上采样。

  • patch expand层会将相邻维度的特征图重新塑造为更高分辨率的特征图,实现了2倍的上采样。同时,特征的维度也会相应地减半。

  • 这个操作的目的是在解码器中进行上采样操作,以恢复图像的分辨率,同时减少特征的维度。这样可以保持特征的上下文信息,并为后续的特征融合和预测提供更多的细节和精度。

  • 通过使用patch expand层,解码器可以将低分辨率的特征图上采样到高分辨率,并且减少特征维度,以逐渐恢复图像的细节和结构。这有助于生成更精细的分割结果。

Patch expanding layer

  • 用于对输入特征进行上采样。

  • 以第1个Patch expanding layer为例,首先对输入特征添加一个线性层,将特征的维度增加到原始维度的2倍。这个线性层的作用是为了保持维度一致性,以便后续的处理和学习。

  • 然后,利用rearrange操作,将输入特征的分辨率扩大到输入分辨率的2倍。rearrange操作是一种操作,它可以将特征的分布重新排列,从而实现上采样操作。通过这个操作,特征的分辨率增加了2倍,而特征的维度减少到输入维度的1/4。

  • 这样的处理可以实现对特征的上采样,同时降低特征的维度。上采样可以恢复图像的细节和结构,而维度降低可以减少计算复杂度和内存消耗。

  • 通过使用Patch expanding layer,解码器能够逐渐恢复图像的分辨率,并减少特征的维度,以提供更多的细节和精度,并为后续的特征融合和预测做准备。


计算过程

  • 训练过程中,将输入切割为多个小的体素块,并对每个体素块进行两次不同的数据增强操作,然后将它们分别输入到网络的编码器中进行处理,并计算自监督损失。这个过程旨在增加训练数据的多样性和丰富性。

  • 网络采用了U-Net结构,其中编码器部分使用了Swin Transformer,而解码器部分则使用了卷积网络。

  • 编码器的具体操作。首先,使用Patch Partition层将输入划分为一个3D的token序列。然后,通过线性嵌入层将token投影到C维空间中,以便进行有效的交互建模。为了实现这个目的,输入被划分为不重叠的窗口,并在每个窗口内计算局部自注意。

  • 编码器的具体参数和结构。编码器使用2x2x2的patch大小,特征维度为8(针对单输入通道的CT图像),嵌入空间维度为48。编码器由4个级别组成,每个级别包括两个Transformer块(L=8),在每个级别之间使用Patch Merge层来降低分辨率。

  • 编码器和解码器之间的连接方式。编码器的输出通过跳跃连接连接到解码器的相应分辨率上,以创建一个"U型"网络结构。这种结构可以为下游任务(如分割)提供更多的上下文信息和多尺度特征。

  • 分割任务的处理过程。将编码器的输出(即Swin Transformer)与经过处理的输入体积特征连接起来,并将它们输入到一个残块中。然后,通过一个具有适当激活函数(如softmax)的1x1x1卷积层,计算出分割概率。

  • 网络的预训练和微调过程。在预训练阶段,编码器的输出端连接了三个任务头。在微调阶段,去掉了三个任务头,并添加了一个分割头。微调时会调整整个网络的参数。

  • 预测头的具体结构。Inpainting任务的预测头是一个卷积层,而旋转任务和对抗任务的预测头是多层感知器(MLP)。

  • 各个任务的损失函数。Inpainting任务使用L1损失,旋转任务使用交叉熵损失,对抗任务使用InfoNce损失。

  • Inpainting任务和旋转任务的一些具体操作。Inpainting任务从二维扩展到了三维,而旋转任务是沿着Z轴进行旋转。

  • 训练过程中使用的混合损失。三个任务的损失函数被组合成一个混合损失来指导训练,每个损失的权重都为1,即平等对待三个任务的损失。

使用指南

monai:专为医学图像定制的框架。

英伟达的这款框架集成了很多医学方面的算法,Swin UNetR 也在里面,直接调用即可。

后续一定会更新monai。

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

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

相关文章

2010年全国地质灾害隐患点数据,shp/excel格式,含灾害类型、等级、经纬度坐标等字段

基本信息. 数据名称: 全国地质灾害隐患点数据 数据格式: Shp、Excel 数据时间: 2010年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1xzqhdm行政区划代码2xzqhmc行政区划名称3mc名称4z…

Halcon一维码识别

文章目录 参数连接halcon 自带案例1(设置校验位识别条码)Halcon 自带案例2(设置对比度识别条码)Halcon 自带案例3(存在曲面变形)Halcon 自带案例4(设置条码扫描线)Halcon 自带案例5&…

HarmonyOS第一课ArkTS开发语言(TypeScript快速入门)

编程语言介绍 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。要了解什么是ArkTS&…

解决设备维修管理问题,易点易动来帮忙!

设备维修管理常常存在一些问题,给企业带来不便和困扰: 1)维修信息不及时准确,导致维修延误或错过重要维护时机; 2)纸质记录容易丢失或难以管理,使得维修历史不完整; 3&#xff09…

MISC之LSB

LSB隐写 简介 LSB隐写(Least Significant Bit Steganography)是一种隐写术,它通过将秘密信息嵌入到图像、音频或视频等多媒体文件中的最低有效位中来隐藏信息。在数字图像中,每个像素由红、绿、蓝三个通道的颜色值组成。每个颜色…

c语言插入排序算法(详解)

插入排序是一种简单直观的排序算法,其主要思想是将一个待排序的元素插入到已经排好序的部分的合适位置。 插入排序的原理如下: 将序列分为两部分:已排序部分和未排序部分。初始时,已排序部分只包含第一个元素,未排序…

Unity 射线检测(Raycast)检测图层(LayerMask)的设置

目录 主要内容 拓展: 主要内容 Raycast函数有很多重载(函数的重载根据函数的参数来决定) 这里只涉及这个重载,其余重载可以很方便得在Visual Studio中看源码获取; public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit…

成绩统计(oj题)

一道考验细节的题 最后是&#xff1f;&#xff1a;运算符用错了 代码如下&#xff1a; #include<stdio.h> #include<string.h> typedef struct Grade{int num;int inv; }Grade; Grade tmp[10]; int n, m, g, interval[10] {0};int main(void) {scanf("%d%d…

智能优化算法应用:基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸟群算法4.实验参数设定5.算法结果6.参考文献7.MA…

Vue3-15-事件处理的基本使用详解

什么是事件处理 事件处理 &#xff1a; 就是对页面上的事件进行捕获并进行逻辑上的处理。 例如 &#xff1a; 点击了一个按钮&#xff0c;捕获点击事件&#xff0c;并进行响应的逻辑处理。vue3中的事件处理的语法 主要使用到的是 v-on 指令&#xff0c; 这个指令的语法糖&…

【教程】如何将重要文件进行混淆和加密

怎么保护苹果手机移动应用程序ipa中文件安全&#xff1f; ios应用程序存储一些图片&#xff0c;资源&#xff0c;配置信息&#xff0c;甚至敏感数据如用户信息、证书、私钥等。这些数据怎么保护呢&#xff1f;可以使用iOS提供的Keychain来保护敏感数据&#xff0c;也可以使用加…

机器学习---TF-IDF算法

1、TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文本频率)。TF指词频&#xff0c;IDF指的是逆文本频率。TF-IDF是一种用于信息检索与数据挖掘的常用加权技术&#xff0c;可以评估一个词在一个文件集或者一个语料库中对某个文件的重要程度。一个词语在一篇…

创邻科技上榜中国信通院《高质量数字化转型产品及服务全景图》

近年来&#xff0c;数字化转型浪潮浩浩荡荡&#xff0c;已成为企业高质量发展的必由之路。 但是企业的数字化转型之路并不简单。一方面&#xff0c;企业对数字化转型仍面临着“战略缺位”“能力难建”“价值难现”等问题&#xff1b;另一方面&#xff0c;市场上众多的数字化转…

Day58力扣打卡

打卡记录 下一个更大元素 IV&#xff08;单调栈 x2&#xff09; 链接 class Solution:def secondGreaterElement(self, nums: List[int]) -> List[int]:ans [-1] * len(nums)s []t []for i, x in enumerate(nums):while t and nums[t[-1]] < x:ans[t.pop()] x # t…

班主任,再也不愁怎么给学生发成绩了

作为班主任&#xff0c;我们时常面临着如何有效地将学生的成绩信息传达给家长的问题。传统的纸质成绩单邮寄方式不仅效率低下&#xff0c;而且容易丢失&#xff0c;难以保证信息的及时性和准确性。现在&#xff0c;有了微信「群发成绩」小程序&#xff0c;班主任们终于可以摆脱…

ISP去噪(2)_np 噪声模型

#灵感# ISP 中的去噪&#xff0c;都需要依赖一个噪声模型。很多平台上使用采集的raw进行calibration&#xff0c;可以输出这个模型&#xff0c;通常称为 noise profile。 目录 名词解释&#xff1a; 标定方法&#xff1a; 校准出的noise profile: noise profile 作用域&am…

异常当做业务逻辑处理严重影响性能

一:背景 在项目应该或多或少的见过有人把异常当做业务逻辑处理的情况(┬_┬),比如说判断一个数字是否为整数,就想当然的用try catch包起来,再进行 int.Parse,如果抛异常就说明不是整数,简单粗暴,也不需要写正则或者其他逻辑,再比如一个字符串强制转化为Enum,直接用Enu…

Linux中的堡垒机搭建以及使用

JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕&#xff08;可根据需求更改&#xff09; JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…

python request 不走代理proxy

遇到问题如&#xff1a; requests.exceptions.ProxyError: HTTPSConnectionPool(host‘quake.360.net’, port443): Max retries exceeded with url: /api/v3/search/quake_service (Caused by ProxyError(‘Cannot connect to proxy.’, OSError 解决如下&#xff1a; 一般…

分页存储管理

页框和页面 将内存空间分为一个个大小相等的分区 (比如:每个分区4KB)&#xff0c;每个分区就是一个“页框”(页框页内存块物理块物理页面)。每个页框有一个编号&#xff0c;即“页框号”(页框号页帧号内存块号物理块号物理页号)&#xff0c;页框号从0开始。 为了将各个进程的数…