[论文阅读]Attention U-Net: Learning Where to Look for the Pancreas

2023-12-26 14:30

本文主要是介绍[论文阅读]Attention U-Net: Learning Where to Look for the Pancreas,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Attention Gate for Image Analysis

粗粒度的特征映射可以捕获上下文信息,突出显示前景对象的类别和位置

UNet:在多个尺度上提取的特征图随后通过跳过连接进行合并,以结合粗和细级别的密集预测

标准CNN通过不断堆叠卷积层和池化层,使得特征图捕获足够大的感受野和语义上下文信息,然而,仍然难以减少对于形状变化较大的小物体的假阳性预测, 为了提高准确性,当前的分割框架依赖于额外的先前对象定位模型,以将任务简化为单独的定位和后续分割步骤。我们证明了在一个标准的CNN模型中集成注意力门(AGs)可以达到同样的目标。这并不需要训练多个模型和大量额外的模型参数。与多阶段CNNs的局部化模型相比,AGs逐步抑制无关背景区域的特征响应,不需要在网络间裁剪ROI。

AG(additive attention gate)示意图

 Attention coefficients \alpha_{i}\in [0,1]识别突出的图像区域并删除特征响应,只保留与特定任务相关的激活

计算原理:

输入: x_{i}^{l}\in \mathbb{R}^{F_{l}}:编码器第l层第i个空间位置对应的特征向量,g_{i} \in \mathbb{R}^{Fg}:与编码器第l层对应的解码器上采样特征图第i个空间位置对应的特征向量

AG的参数:

 对X \in \mathbb{R}^{F_{l}*H_{x}*W_{x}*D_{x}}G \in \mathbb{R}^{F_{g}*H_{g}*W_{g}*D_{g}}每一个空间位置向量进行线性变换后得到长度相等的向量进行元素加,再送入\sigma _{1}激活函数进行非线性变换得到响应值向量,响应值向量再进行线性变换为标量,之后再送入\sigma_{2}激活函数得到标量响应值。

具体实现:1*1*1的same卷积

W_{x}\in \mathbb{R}^{F_{l}*F_{int}}:Conv3d(F_l,Fint,kernel_size=1,stride=1,padding=0,bias=True)

W_{g}\in \mathbb{R}^{F_{g}*F_{int}}:Conv3d(F_g,Fint,kernel_size=1,stride=1,padding=0,bias=True)

\psi \in\mathbb{R}^{F_{int}*1}:Conv3d(F_int,1,kernel_size=1,stride=1,padding=0,bias=True)

2D源码:

class Attention_block(nn.Module):def __init__(self,F_g,F_l,F_int):super(Attention_block,self).__init__()self.W_g = nn.Sequential(nn.Conv2d(F_g, F_int, kernel_size=1,stride=1,padding=0,bias=True),nn.BatchNorm2d(F_int))self.W_x = nn.Sequential(nn.Conv2d(F_l, F_int, kernel_size=1,stride=1,padding=0,bias=True),nn.BatchNorm2d(F_int))self.psi = nn.Sequential(nn.Conv2d(F_int, 1, kernel_size=1,stride=1,padding=0,bias=True),nn.BatchNorm2d(1),nn.Sigmoid())self.relu = nn.ReLU(inplace=True)def forward(self,g,x):g1 = self.W_g(g)x1 = self.W_x(x)psi = self.relu(g1+x1)psi = self.psi(psi)return x*psiclass U_Net(nn.Module):def __init__(self,img_ch=3,output_ch=1):super(U_Net,self).__init__()self.Maxpool = nn.MaxPool2d(kernel_size=2,stride=2)self.Conv1 = conv_block(ch_in=img_ch,ch_out=64)self.Conv2 = conv_block(ch_in=64,ch_out=128)self.Conv3 = conv_block(ch_in=128,ch_out=256)self.Conv4 = conv_block(ch_in=256,ch_out=512)self.Conv5 = conv_block(ch_in=512,ch_out=1024)self.Up5 = up_conv(ch_in=1024,ch_out=512)self.Up_conv5 = conv_block(ch_in=1024, ch_out=512)self.Up4 = up_conv(ch_in=512,ch_out=256)self.Up_conv4 = conv_block(ch_in=512, ch_out=256)self.Up3 = up_conv(ch_in=256,ch_out=128)self.Up_conv3 = conv_block(ch_in=256, ch_out=128)self.Up2 = up_conv(ch_in=128,ch_out=64)self.Up_conv2 = conv_block(ch_in=128, ch_out=64)self.Conv_1x1 = nn.Conv2d(64,output_ch,kernel_size=1,stride=1,padding=0)def forward(self,x):# encoding pathx1 = self.Conv1(x)x2 = self.Maxpool(x1)x2 = self.Conv2(x2)x3 = self.Maxpool(x2)x3 = self.Conv3(x3)x4 = self.Maxpool(x3)x4 = self.Conv4(x4)x5 = self.Maxpool(x4)x5 = self.Conv5(x5)# decoding + concat pathd5 = self.Up5(x5)d5 = torch.cat((x4,d5),dim=1)d5 = self.Up_conv5(d5)d4 = self.Up4(d5)d4 = torch.cat((x3,d4),dim=1)d4 = self.Up_conv4(d4)d3 = self.Up3(d4)d3 = torch.cat((x2,d3),dim=1)d3 = self.Up_conv3(d3)d2 = self.Up2(d3)d2 = torch.cat((x1,d2),dim=1)d2 = self.Up_conv2(d2)d1 = self.Conv_1x1(d2)return d1

提出的AG被合并到标准U-Net架构中,从粗略提取的信息用于门控以消除不相关和嘈杂的歧义在跳过连接中的响应,以突出通过跳过连接传递的显着特征。

 在对 encoder 每个分辨率上的特征与 decoder 中对应特征进行拼接之前,使用了一个AGs,重新调整了encoder的输出特征X \in \mathbb{R}^{F_{l}*H_{x}*W_{x}*D_{x}}。该模块生成一个门控信号,用来控制不同空间位置处特征的重要性。

门控信号g不是用于所有图像像素的全局单个矢量,而是用于图像空间信息的网格信号。 更重要的是,每个跳跃连接的门控信号聚合来自多个成像尺度的信息

 

这篇关于[论文阅读]Attention U-Net: Learning Where to Look for the Pancreas的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539771

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

2、PF-Net点云补全

2、PF-Net 点云补全 PF-Net论文链接:PF-Net PF-Net (Point Fractal Network for 3D Point Cloud Completion)是一种专门为三维点云补全设计的深度学习模型。点云补全实际上和图片补全是一个逻辑,都是采用GAN模型的思想来进行补全,在图片补全中,将部分像素点删除并且标记,然后卷积特征提取预测、判别器判别,来训练模型,生成的像

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

什么是 Flash Attention

Flash Attention 是 由 Tri Dao 和 Dan Fu 等人在2022年的论文 FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 中 提出的, 论文可以从 https://arxiv.org/abs/2205.14135 页面下载,点击 View PDF 就可以下载。 下面我

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super