当前位置: 首页 > news >正文

【扒模块】DFF

医学图像分割任务

代码

import torch
import torch.nn as nnfrom timm.models.layers import DropPath
# 论文:D-Net:具有动态特征融合的动态大核,用于体积医学图像分割(3D图像任务)
# https://arxiv.org/abs/2403.10674
#代码:https://github.com/sotiraslab/DLK
'''
动态特征融合(DFF)模块:
我们提出了一个动态特征融合(DFF)模块,基于全局信息自适应地融合多尺度局部特征(图2)。
它是通过根据其全局信息动态选择重要特征来实现的融合。
具体来说,特征映射F l 1和F l 2沿着通道连接起来。
为了确保以下块可以采用融合特性,
需要一个通道减少机制来将通道的数量减少到原来的通道。
DFF中的信道减少采用1×1×1卷积,而不是简单的全局×信息。
通过级联平均池化(AVGPool)、卷积层(Conv1)和Sigmoid激活来提取这些信息来描述特征的重要性。
主要用于3D医学图像分割任务,同时也适用于所有CV3D图像任务。
'''
class DFF(nn.Module):def __init__(self, dim):# 调用父类的初始化方法super().__init__()# 创建一个自适应平均池化层,用于全局特征提取self.avg_pool = nn.AdaptiveAvgPool3d(1)# 创建一个顺序模型,用于特征的注意力加权self.conv_atten = nn.Sequential(nn.Conv3d(dim * 2, dim * 2, kernel_size=1, bias=False),    # 3D卷积层,用于特征的线性变换nn.Sigmoid()    # Sigmoid激活函数,用于生成注意力权重)# 3D卷积层,用于特征的降维self.conv_redu = nn.Conv3d(dim * 2, dim, kernel_size=1, bias=False)# 3D卷积层,用于生成空间注意力self.conv1 = nn.Conv3d(dim, 1, kernel_size=1, stride=1, bias=True)# 另一个3D卷积层,用于生成空间注意力self.conv2 = nn.Conv3d(dim, 1, kernel_size=1, stride=1, bias=True)# Sigmoid激活函数,用于生成最终的空间注意力权重self.nonlin = nn.Sigmoid()def forward(self, x, skip):'''in: self, x, skipx: 输入特征图1skip: 输入特征图2(跳跃连接)out: output'''# 沿通道维度拼接两个特征图output = torch.cat([x, skip], dim=1)# 使用平均池化和注意力卷积生成全局通道注意力att = self.conv_atten(self.avg_pool(output))# 将全局通道注意力应用于拼接后的特征图output = output * att# 使用降维卷积减少特征图的通道数output = self.conv_redu(output)# 使用两个卷积层分别生成空间注意力att = self.conv1(x) + self.conv2(skip)# 应用非线性激活函数生成最终的空间注意力权重att = self.nonlin(att)# 将空间注意力应用于降维后的特征图output = output * att# 返回最终的输出特征图return output
"""HELP:DFF 类实现了一个动态特征融合模块,它接收两个输入特征图 x 和 skip,这两个特征图通常是来自编码器的不同层。在 __init__ 方法中,定义了模型所需的所有卷积层和激活函数。forward 方法定义了模型的前向传播过程:1 将两个输入特征图沿通道维度拼接。2 使用平均池化和注意力卷积生成全局通道注意力。3 将全局通道注意力应用于拼接后的特征图。4 使用降维卷积减少特征图的通道数。5 使用两个卷积层分别生成空间注意力,并将它们相加。6 应用非线性激活函数生成最终的空间注意力权重。7 将空间注意力应用于降维后的特征图,得到最终的输出特征图。""" if __name__ == '__main__':input1 = torch.randn(1, 32, 16, 64, 64) # x: (B, C, D,H, W) 3D图像维度input2 = torch.randn(1, 32, 16, 64, 64)  # x: (B, C, D,H, W) 3D图像维度model = DFF(32)output = model(input1,input2)print("DFF_input size:", input1.size())print("DFF_Output size:", output.size())

原文

[2403.10674] D-Net: Dynamic Large Kernel with Dynamic Feature Fusion for Volumetric Medical Image Segmentation (arxiv.org)

代码: sotiraslab/DLK (github.com)

摘要:

Hierarchical transformers have achieved significant success in medical image segmentation due to their large receptive field and capabilities of effectively leveraging global long-range contextual information. Convolutional neural networks (CNNs) can also deliver a large receptive field by using large kernels, enabling them to achieve competitive performance with fewer model parameters. However, CNNs incorporated with large convolutional kernels remain constrained in adaptively capturing multi-scale features from organs with large variations in shape and size due to the employment of fixed-sized kernels. Additionally, they are unable to utilize global contextual information efficiently. To address these limitations, we propose Dynamic Large Kernel (DLK) and Dynamic Feature Fusion (DFF) modules. The DLK module employs multiple large kernels with varying kernel sizes and dilation rates to capture multi-scale features. Subsequently, a dynamic selection mechanism is utilized to adaptively highlight the most important spatial features based on global information. Additionally, the DFF module is proposed to adaptively fuse multi-scale local feature maps based on their global information. We integrate DLK and DFF in a hierarchical transformer architecture to develop a novel architecture, termed D-Net. D-Net is able to effectively utilize a multi-scale large receptive field and adaptively harness global contextual information. Extensive experimental results demonstrate that D-Net outperforms other state-of-the-art models in the two volumetric segmentation tasks, including abdominal multi-organ segmentation and multi-modality brain tumor segmentation. Our code is available at this https URL.

在医学图像分割领域,分层变换器(Hierarchical transformers)因其具有较大的感受野和有效利用全局长距离上下文信息的能力而取得了显著的成功。卷积神经网络(CNNs)也可以通过使用大卷积核来实现大感受野,这使得它们在模型参数较少的情况下也能取得有竞争力的性能。然而,采用大卷积核的CNN在适应性地捕获形状和大小变化较大的器官的多尺度特征方面存在限制,因为它们使用的是固定大小的卷积核。此外,它们也未能有效地利用全局上下文信息。为了解决这些限制,我们提出了动态大核(DLK)和动态特征融合(DFF)模块。DLK模块采用多个具有不同核大小和扩张率的大卷积核来捕获多尺度特征。随后,利用动态选择机制根据全局信息自适应地突出显示最重要的空间特征。此外,DFF模块被提出用于根据全局信息自适应地融合多尺度局部特征图。我们将DLK和DFF集成到分层变换器架构中,开发了一种称为D-Net的新型架构。D-Net能够有效地利用多尺度大感受野并自适应地利用全局上下文信息。广泛的实验结果表明,在包括腹部多器官分割和多模态脑肿瘤分割在内的两项体积分割任务中,D-Net的性能超过了其他最先进的模型。我们的代码可在 https://github.com/sotiraslab/DLK 上获取。
 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 成为git砖家(4): git status 命令简介
  • 遗传算法与深度学习实战——进化深度学习
  • 【.NET 8 实战--孢子记账--从单体到微服务】--编写服务端框架
  • mysql超大分页问题处理~
  • LCM接口通讯说明
  • c++11,左值引用和右值引用,右值引用的作用
  • CTF学习笔记汇总(非常详细)零基础入门到精通,收藏这一篇就够了
  • Linux:基础
  • WPF的MVVM架构:如何通过数据绑定简化UI逻辑
  • 【JavaEE】springboot 入门——springboot简介
  • 运维.Linux.bash学习笔记.数组及其使用
  • java中创建对象地方式有哪几种?(面试高频)
  • “八股文”的江湖:助力、阻力还是空谈?深度解析程序员面试的敲门砖
  • 把本地项目推送到远程仓库
  • C# Solidworks二次开发------C#中的进度条
  • Android框架之Volley
  • crontab执行失败的多种原因
  •  D - 粉碎叛乱F - 其他起义
  • DOM的那些事
  • Facebook AccountKit 接入的坑点
  • js如何打印object对象
  • k8s 面向应用开发者的基础命令
  • Otto开发初探——微服务依赖管理新利器
  • PHP的类修饰符与访问修饰符
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • vue-router 实现分析
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 多线程事务回滚
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 少走弯路,给Java 1~5 年程序员的建议
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 首页查询功能的一次实现过程
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #NOIP 2014#Day.2 T3 解方程
  • $.ajax()
  • (19)夹钳(用于送货)
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)RocketMQ初步认识
  • (转)iOS字体
  • (转)德国人的记事本
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .Net mvc总结
  • .net 连接达梦数据库开发环境部署
  • .netcore 获取appsettings
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /3GB和/USERVA开关
  • [Android]将私钥(.pk8)和公钥证书(.pem/.crt)合并成一个PKCS#12格式的密钥库文件
  • [C#小技巧]如何捕捉上升沿和下降沿