每日Attention学习16——Multi-layer Multi-scale Dilated Convolution

news2024/11/15 15:25:09
模块出处

[CBM 22] [link] [code] Do You Need Sharpened Details? Asking MMDC-Net: Multi-layer Multi-scale Dilated Convolution Network For Retinal Vessel Segmentation


模块名称

Multi-layer Multi-scale Dilated Convolution (MMDC)


模块作用

多尺度特征提取与融合


模块结构

在这里插入图片描述


模块思想

与传统的编码器-解码器结构相比,更好的分割模型应该使其编码器能够尽可能多地获取全局信息。然而,这通常受到小感受野应用的限制,因此传统编码器学习的图像特征包含的全局信息不足。多尺度膨胀卷积可以在一定程度上解决这个问题。但是,它仍然存在以下缺点:1)相应的图像大小通常是单一的,可能会错过不同尺度的全局信息,2)由于多层信息组合效率低下,可能会丢失更多的血管细节,特别是影响眼底图像中那些小血管的分割。为了解决这两个问题,我们提出了 MMDC 模块并将其插入 U-Net 模型的 skip 连接中。与 MSDC 或其他类似方法不同,我们的 MMDC 模块基于一种新颖的级联模式,将不同尺度组合在一起,并融合了多层特性,以更好地解决上述问题。因此,与其他工作不同,MMDC 通过提出的级联模式实现了相对更大的感受野,这有助于提取更多的全局信息并更好地完成视网膜血管分割。此外,所提出的 MMDC 模块是完全即插即用的。


模块代码
import torch.nn.functional as F
import torch.nn as nn
import torch


class MMDC(nn.Module):
    def __init__(self, out_channels):
        super().__init__()
        self.conv3_1 =  nn.Conv2d(out_channels*2,out_channels*2, kernel_size=1)
        self.conv3_3_1 =  nn.Sequential(nn.Conv2d(out_channels*2,out_channels*2, kernel_size=3, padding=1, dilation=1),
                                        nn.ReLU(inplace=True))                   ## conv3_3_x indicates denotes the convolution of different dilation at the lower level
        self.conv3_3_3 =  nn.Sequential(nn.Conv2d(out_channels*2,out_channels*2, kernel_size=3, padding=3, dilation=3),
                                        nn.ReLU(inplace=True))
        self.conv3_3_5 =  nn.Sequential(nn.Conv2d(out_channels*2,out_channels*2, kernel_size=3, padding=5, dilation=5),
                                        nn.ReLU(inplace=True))
        self.conv33 =  nn.Sequential(nn.Conv2d(out_channels*2,out_channels, kernel_size=1),
                                        nn.ReLU(inplace=True))
        self.up = nn.Upsample(scale_factor=2, mode='bilinear', align_corners=True)
        self.conv1_1 = nn.Conv2d(out_channels // 2, out_channels //2, kernel_size=1)
        self.conv1_3_1 = nn.Sequential(
            nn.Conv2d(out_channels //2, out_channels //2, kernel_size=3, padding=1, dilation=1),
            nn.ReLU(inplace=True))
        self.conv1_3_3 = nn.Sequential(
            nn.Conv2d(out_channels //2, out_channels //2, kernel_size=3, padding=3, dilation=3),
            nn.ReLU(inplace=True))
        self.conv1_3_5 = nn.Sequential(
            nn.Conv2d(out_channels // 2, out_channels // 2, kernel_size=3, padding=5, dilation=5),
            nn.ReLU(inplace=True))
        self.max = nn.Sequential(nn.MaxPool2d(2),
                                 nn.Conv2d(out_channels // 2, out_channels, kernel_size=1),
                                 nn.BatchNorm2d(out_channels))
    
    def forward(self, x1,x2,x3):
        """ x1--> 2H * 2W * C/2,  x2--> H * W * C,  x3-->H/2 * W/2 * 2C"""
        x1_1 = self.conv1_1(x1)
        x1_2 = self.conv1_1(self.conv1_3_1(x1))
        x1_3 = self.conv1_1(self.conv1_3_3(self.conv1_3_1(x1)))
        x1_4 = self.conv1_1(self.conv1_3_5(self.conv1_3_3(self.conv1_3_1(x1))))
        x11 = self.max(x1_1 + x1_2 + x1_3 + x1_4)
        x3_1 = self.conv3_1(x3)
        x3_2 = self.conv3_1(self.conv3_3_1(x3))
        x3_3 = self.conv3_1(self.conv3_3_3(self.conv3_3_1(x3)))
        x3_4 = self.conv3_1(self.conv3_3_5(self.conv3_3_3(self.conv3_3_1(x3))))
        x33 = self.conv33(self.up(x3_1 + x3_2 + x3_3 +x3_4))
        return x11 + x2 + x33
    

if __name__ == '__main__':
    x1 = torch.randn([1, 64, 44, 44])
    x2 = torch.randn([1, 128, 22, 22])
    x3 = torch.randn([1, 256, 11, 11])
    mmdc = MMDC(out_channels=128)
    out = mmdc(x1, x2, x3)
    print(out.shape)  # 1, 128, 22, 22

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

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

相关文章

一家物流装备企业终止,业绩下滑严重,恐不符合创业板新上市标准

鸿安机械终止的原因如下:首先,报告期内鸿安机械的营业收入和净利润出现下滑趋势,公司最近一年净利润恐不达标,或许不能满足创业板更新的第一套上市标准;其次,鸿安机械经营业绩对比同行业可比公司&#xff0…

笔记整理—uboot启动过程(5)BL2板级初始化

上一章说到了uboot在BL2阶段大概都要干什么,也说到了为了实现这些要先进行内存排布,实现了这些后便可实现BL2部分的板级初始化。首先先来看一下init_fnc_ptr函数指针。 for(init_fnc_ptrinit_sequence;*init_fnc_ptr;init_fnc_ptr){if((*init_fnc_ptr)(…

一文带你了解html标签

一、文档结构标签 <html>&#xff1a;网页的根标签 &#xff0c;嵌套包含所有标签。 <head>&#xff1a;头标签&#xff0c;包含文档的元数据用于编写网页的修饰内容&#xff0c;附加信息。 <body>&#xff1a;身体标签&#xff0c;用于编写展示内容&…

精益工程师资格证书:2024年CLMP报名指南

随着全球对精益管理的需求日益增长&#xff0c;精益管理专业人士资格认证&#xff08;CLMP&#xff09;正成为越来越多精益工程师和精益管理人员提升职业竞争力的首选。作为一种注重管理而非生产的认证&#xff0c;CLMP不仅适用于制造业的专业人士&#xff0c;也吸引了各行业的…

Qt之窗口

目录 Qt窗口简介: 菜单栏 ⼯具栏 状态栏 浮动窗⼝ 对话框 Qt内置对话框 1.消息对话框QMessageBox 2.颜⾊对话框QColorDialog 3.⽂件对话框QFileDialog 4.字体对话框QFontDialog 5.输⼊对话框QInputDialog 总结 接下来的日子会顺顺利利&#xff0c;万事胜…

Android Studio:模拟器页面闪烁,手机模拟器输入画面闪烁 android studio闪屏

主要解决&#xff0c;android studio 启动app测试&#xff0c;输入数据时&#xff0c;手机画面就会闪烁&#xff0c;闪屏 1. 如图所示&#xff0c;依照顺序找到Edit &#xff0c;并点击Edit 2. 找到Graphics 选择为SoftWare &#xff0c;并保存修改即可 3. 如果此处不能选择S…

奇安信渗透测试岗位三面经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

算法的学习笔记—二叉搜索树与双向链表(牛客JZ36)

&#x1f600;前言 在数据结构的学习过程中&#xff0c;二叉搜索树&#xff08;Binary Search Tree, BST&#xff09;是一个常见的主题。它不仅具有排序的特性&#xff0c;还为各类算法的实现提供了基础。然而&#xff0c;在某些特定的应用场景中&#xff0c;我们可能需要将二叉…

Web安全:SQL注入实战测试.(扫描 + 测试)

Web安全&#xff1a;SQL注入实战测试. SQL注入就是 有些恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容中&#xff0c;同时程序的本身对用户输入的内容过于相信&#xff0c;没有对用户插入的SQL语句进行任何的过滤&#xff0c;从而直接被SQL语句直接被服务端执行&am…

Docker绑定挂载使用手册

目录 目标 官方文档 绑定挂挂载&#xff08;Bind mounts&#xff09; 简介 基本创建方法 控制读写权限&#xff08;默认有读写权限&#xff09; 为什么绑定挂载不适合做数据库持久化 为什么绑定挂载更适合做热部署 临时挂载&#xff08;tmpfs mounts&#xff09; 简介…

CSS中的元素布局与定位详细说明

1、前言 在CSS开发中&#xff0c;很重要的一个工作就是根据UI设计稿&#xff0c;进行元素的布局与定位&#xff0c;使得元素&#xff08;比如某一段文本、按钮、图片等&#xff09;显示在页面正确的位置。本文就元素的布局与定位方面&#xff0c;做一些讲解和说明。 2、元素的…

PHP易支付系统,支付系统源码下载,已测试,带多个支付接口

易支付系统源码&#xff0c;已测试&#xff0c;功能齐全&#xff0c;带有多支付接口&#xff0c;站内有对应的视频教程&#xff0c;详细教程 搭建出来的网站前端和后台还是比较美观的 PHP全开源易支付系统源码&#xff0c;一键安装版 搭建环境&#xff1a;PHP 5.4 以上 推荐7…

数学基础(九)

一、相关分析 相关分析&#xff1a; 衡量事物之间或称变量之间线性相关的强弱&#xff0c;并适当的统计指标表示出来的过程 相关系数&#xff1a; 连续变量的相关分析&#xff1a; 连续变量即数据变量&#xff0c;它的取值之间可以比较大小&#xff0c;可以用加减法计算出差…

Google Colab快速使用

Google Colab快速使用 1. 引言2. Jupyter笔记本的创建3. 上传代码和数据集4. Colab常规指令 1. 引言 Google Colab是谷歌提供的免费Jupyter&#xff0c;很类似于Linux系统这些在终端界面操纵的感觉&#xff0c;不需要深度学习环境配置就可以使用&#xff0c;完全基于云端运行。…

【celery-2】python-Django发送邮件-短信-钉钉通知

一 Python发送邮件 1.1 使用SMTP模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Headermsg_from xxxqq.com # 发送方邮箱 passwd xxx # 填入发送方邮箱的授权码(填入自己的授权码&#xff0c;相当于邮箱密码) msg_to [xxx…

两种方式实现图片标记

效果图 第一种&#xff1a;通过动态添加dom元素实现标记 代码如下 // index.tsx import React from "react"; import "./index.less";export default function index() {const parentRef React.useRef<any>(null);const ulRef React.useRef<a…

网站技术分析必备插件Wappalyzer Chrome介绍

引言 在日常的开发过程中&#xff0c;开发者们经常会对访问的某些网站使用了哪些技术感到好奇。无论是网页的前端框架、后台的编程语言&#xff0c;还是数据库的类型&#xff0c;这些信息对于开发者优化自己的网站或者了解行业趋势都非常有用。然而&#xff0c;直接从浏览器获…

LLM开发之自动编码系统实战开发(一)-- MiniRBAC 集成

文章目录 前言&#x1f387;MiniRBAC部署启动日志修改更换Mysql创建数据库数据库连接修改查询 Next ✨ 前言&#x1f387; 首先这个系统呢&#xff0c;俺们目前是还没有做好的&#xff0c;但是相关的技术积累我们是完全没有问题的。当然这个系统其实将是我们这个项目&#xff…

Android 消息机制Handler完全解析(一)

提到Handler相信即使你是刚入行的android开发也会用过&#xff0c;可能你会觉得很简单&#xff0c;但是Handler中包含的内容真的不是你理解的那么简单&#xff0c;可能有些工作3-5年的同学也没有对其有很深入的了解。但Handler在android中的地位非常重要&#xff0c;并且几乎是…

图解Kafka | 5张图讲透Kafka 消费者交付语义

Kafka 消费者交付语义指的是 Kafka 消费者在处理消息时如何保证消息的可靠性和一致性。这涉及到消息是否被丢失、重复处理或者按顺序消费。 Kafka消费者交付语义有三种&#xff0c;即&#xff1a; 最多一次至少一次精确一次 当消费者组/消费者从 Kafka 消费数据时&#xff0…