| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> SwinUNet2022 -> 正文阅读 |
|
[人工智能]SwinUNet2022 |
1. 概述本文提出了一种以 S w i n Swin Swin变压器层为基本块的 S U N e t SUNet SUNet恢复模型,并将其应用于 U N e t UNet UNet架构中进行图像去噪。 2. 背景图像恢复是一种重要的低级图像处理方法,可以提高其在目标检测、图像分割和图像分类等高级视觉任务中的性能。在一般的恢复任务中,一个被损坏的图像Y可以表示为: 2.1 CNN局限性虽然大多数基于卷积神经网络(CNN)的方法都取得了良好的性能,但卷积层存在几个问题。首先,卷积核与图像的内容无关(无法与图像内容相适应)。使用相同的卷积核来恢复不同的图像区域可能不是最好的解决方案。其次,由于卷积核可以看作是一个小块,其中获取的特征是局部信息,换句话说,当我们进行长期依赖建模时,全局信息就会丢失。 3. 结构3.1 UNet目前,UNet由于具有层次特征映射来获得丰富的多尺度上下文特征,是许多图像处理应用中著名的架构。此外,它利用编码器和解码器之间的跳跃连接来增强图像的重建过程。UNet被广泛应用于许多计算机视觉任务,如分割、恢复[。此外,它还有各种改进的版本,如Res-UNet,Dense-UNet,Attention-UNet[和Non-local-UNet。由于具有较强的自适应骨干网,UNet可以很容易地应用于不同的提取块,以提高性能。 3.2 Swin TransformerTransformer模型在自然语言处理(NLP)领域取得了成功,并具有良好的竞争性能,特别是在图像分类方面。然而,直接使用Transformer到视觉任务的两个主要问题是: (1)图像和序列之间的尺度差异很大。由于Transformer需要参数量为一维序列参数的平方倍,所以存在长序列建模的缺陷。 (2)Transformer不擅长解决实例分割等密集预测任务,即像素级任务。然而,Swin Transfomer通过滑动窗口解决了上述问题,降低了参数,并在许多像素级视觉任务中实现了最先进的性能。 3.3 SUNet所提出的Swin Transformer UNet(SUNet)的架构是基于图像分割模型,如上图所示。SUNet由三个模块组成: (1)浅层特征提取; (2)UNet特征提取; (3)重建模块 浅层特征提取模块: 对于有噪声的输入图像
Y
∈
R
H
×
W
×
3
Y∈R^{H×W×3}
Y∈RH×W×3,其中H,W为失真图像的分辨率。我们使用单个3×3卷积层
M
S
F
E
(
?
)
M_{SFE}(\cdot)
MSFE?(?)获取输入图像的颜色或纹理等低频信息。浅特征
F
s
h
a
l
l
o
w
∈
R
H
×
W
×
C
F_{shallow}∈R^{H×W×C}
Fshallow?∈RH×W×C可以表示为: UNet 特征提取网络: 然后,将浅层特征
F
s
h
a
l
l
o
w
F_{shallow}
Fshallow?输入UNet特征提取
M
U
F
E
(
?
)
M_{UFE}(\cdot)
MUFE?(?),UNet用来提取高级、多尺度深度特征
F
d
e
e
p
∈
R
H
×
W
×
C
F_{deep}∈R^{H×W×C}
Fdeep?∈RH×W×C: 重建层: 最后,我们仍然使用3×3卷积
M
R
(
?
)
M_{R}(\cdot)
MR?(?)从深度特征
F
d
e
e
p
F_{deep}
Fdeep?中生成无噪声图像
X
^
∈
R
H
×
W
×
3
\hat{X}∈R^{H×W×3}
X^∈RH×W×3,其公式为: 3.4 Loss function我们优化了我们的SUNet端到端与规则的
L
1
L1
L1像素损失的图像去噪: 3.5 Swin Transformer Block在UNet提取模块中,我们使用STB来代替传统的卷积层,如下图所示。STL是基于NLP中的原始Transformer Layer。STL的数量总是2的倍数,其中一个是window multi-head-self-attention(W-MSA),另一个是shifted-window multi-head self-attention(SW-MSA)。 STL的公式描述: 3.6 Resizing module由于UNet具有不同的特征图尺度,因此调整大小的模块(例如,下样本和上样本)是必要的。在我们的SUNet中,我们使用 p a t c h ? m e r g i n g patch\ merging patch?merging,并提出 d u a l ? u p ? s a m p l e dual\ up-sample dual?up?sample分别作为下样本和上样本模块。 3.6.1 patch merging对于降采样模块,该文将每一组2×2相邻斑块的输入特征连接起来,然后使用线性层获得指定的输出通道特征。我们也可以把这看作是做卷积操作的第一步,也就是展开输入的特征映射。 3.6.2 Dual up-sample对于上采样,原始的Swin-UNet采用patch expanding方法,等价于上采样模块中的转置卷积。然而,转置卷积很容易面对块效应。在这里,我们提出了一个新的模块,称为双上样本,它包括两种现有的上样本方法(即Bilinear和PixelShuffle),以防止棋盘式的artifacts。所提出的上采样模块的体系结构如下图所示。 4. 结果评估指标: 为了进行定量比较,我们考虑了峰值信噪比(PSNR)和结构相似度(SSIM)指数度量。 训练集: 采用DIV2K作为训练集,一共有900张高清图片。我们对每个训练图像随机裁剪100个大小为 256 × 256 256×256 256×256的斑块,并对 800 800 800张训练图像从 σ = 5 σ=5 σ=5到 σ = 50 σ=50 σ=50的 p a t c h patch patch中随机添加AWGN噪声。至于验证集,我们直接使用包含100张图像的测试集,并添加具有三种不同噪声水平的AWGN, σ = 10 、 σ = 30 和 σ = 50 σ=10、σ=30和σ=50 σ=10、σ=30和σ=50。 测试集: 对于评估,我们选择了CBSD68数据集,它有68张彩色图像,分辨率为768×512,以及Kodak24张数据集,由24张图像组成,图像大小为321×481。 在表1中,我们对去噪图像进行了客观的质量评价,并观察到以下三件事: (1)该文的SUNet具有竞争性的SSIM值,因为Swin-Transformer是基于全局信息(q,k,v可以提取全局信息),使得去噪图像拥有更多的视觉效果。 (2)与基于unet的方法(DHDN、RDUNet)相比,该文所提出的SUNet模型中参数(↓60%)和FLOPs(↓3%)较少,在PSNR和SSIM上仍保持良好的得分 (3)与基于cnn的方法(DnCNN,IrCNN,FFDNet)相比,该文得到了其中最好的PSNR和SSIM结果,以及几乎相同的FLOPs。虽然该文的模型的参数最多(99M),但它是由于自注意操作不能共享核的权值造成的。 4. 总结
Reference: Swin-unet: Unet-like pure transformer for medical image segmentation 5. 某些代码的理解5.1 window attention中的相对位置编码代码位置位于: ./model/SUNet_detail.py 中的89行左右 我这里展示了一个例子:
可以看到 r e l a t i v e _ c o o r d s relative\_coords relative_coords的第一维是2,分别对应x轴和y轴方向(或者高,宽的方向)。剩下两维呢是9*9。SUNet中间使用了一些SwinIR的结构,在SwinIR中是有shift-window的,在这里,我设置的window size为3。又因为再做attention的时候,我们把每一个window中的像素点当作一个token,那么最终的attention map( q ? v q * v q?v)的最后两维就是 w i n d o w _ w i d t h ? w i n d o w _ h e i g h t window\_width \cdot window\_height window_width?window_height。 下面再来看具体的物理意义, 3 × 3 3 \times 3 3×3的window一共有9个数值,第一维度分别代表这两个轴;第一个矩阵中,第一行分别代表着第一个数值(一共有9个)在某个轴上相对于其他位置的距离(在第一个数值的右边为负,左边为正),第二个矩阵类似。不同window的相对位置是一样的。
下面的代码就是将相对位置坐标全部加上 w i n d o w _ s i z e ? 1 window\_size-1 window_size?1,使得全部为正值:
下面是将横纵坐标的相对位置加起来:
下面为定义bias,随机初始化,但是在网络的迭代训练中,是会被反向传播的:
一个window里面明明只有9个数值,为什么定义bias时,矩阵的维度为== 25 , n u m h e a d s 25, num_heads 25,numh?eads==呢?** 这是因为上面我们加了 w i n d o w _ s i z e ? 1 window\_size -1 window_size?1:不加之前最大值为 w i n d o w _ s i z e ? 1 window\_size-1 window_size?1,后面在加上 w i n d o w _ s i z e ? 1 window\_size-1 window_size?1,此时,最大值为 2 × w i n d o w _ s i z e ? 2 2\times window\_size -2 2×window_size?2,再算上零,一共有 2 × w i n d o w _ s i z e ? 1 2\times window\_size-1 2×window_size?1。所以再初始化bias的时候,我觉得维度为 2 × w i n d o w _ s i z e ? 1 2\times window\_size-1 2×window_size?1 就够了,不知道为什么要定义 ( 2 × w i n d o w _ s i z e ? 1 ) × 2 × w i n d o w _ s i z e ? 1 (2\times window\_size-1)\times 2\times window\_size-1 (2×window_size?1)×2×window_size?1呢?。 每个window是独立attention的,所以每个window的relative_position_bias都是一样的。 下面就是加MASK操作了,不再赘述。 5.2 Shifted-window-attention代码位于 S w i n T r a n s f o r m e r B l o c k SwinTransformerBlock SwinTransformerBlock中。 当 s h i f t _ s i z e > 0 shift\_size>0 shift_size>0时:
我们再来看forward函数对x的shift操作:
那为什么要加mask呢,它是由一个假设的,假设各个window之间不相关,各个window单独做attention。其中我们以 H = 9 , W = 9 , w i n d o w _ s i z e = 3 , s h i f t _ s i z e = 1 H=9,W=9, window\_size=3, shift\_size=1 H=9,W=9,window_size=3,shift_size=1为例。 图片参考:SWin Transformer 没有进行shift的window划分图: 再forward中,是会对输入的x进行shift操作的: shift后的操作: 其中,上图黑线代表原来的边界。每个彩色框代表经过shift操作后的window划分,可以看到每个彩色框内部黑线位置是一样的;黑线是window的边界。
我们举个例子说明: 以第一个彩色框为例,第一行代表第一个元素是否可以看到对应位置的元素(0代表看得到,-100代表看不到)。当两个像素点位于不同的window之中(黑线)就是看不到,就赋给一个负数,后面再做softmax,对应权重就会非常小。 5.3 Dual Up Sample使用PixelShuffle和bilinear合起来的特征作为输出。 5.4 Absolute position embedding
大概位置再SUNet的635行左右。 那为什么要加Absolute position embedding呢? 是因为再5.2 window attention中呢,是有一个relative position的,但是relative position作用范围仅仅是在一个window里面,即每个window相同位置上的relative position都是一样的。所以需要absolute position。 5.5 DownSampling下采样是通过Patch Embedding实现的。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 14:29:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |