每日Attention学习12——Exterior Contextual-Relation Module
模块出处
[ISBI 22] [link] [code] Duplex Contextual Relation Network for Polyp Segmentation
模块名称
Exterior Contextual-Relation Module (ECRM)
模块作用
内存型特征增强模块
模块结构
模块思想
原文表述:在临床环境中,不同样本之间存在息肉的同步视觉模式。基于这一关键观察,属于所有训练数据的同一语义类的区域特征应该具有上下文关系。因此,我们提出了一种新颖的跨不同样本的上下文关系探索模块。
具体做法则是,对于编码器最后一层得到的全局特征(图中红色方块),进行两次增强:
第一次是直接将全局特征送入一个 1 × 1 1 \times 1 1×1卷积(图中浅紫色部分)以获取一个粗糙分割mask,该mask与全局特征相乘后便能得到过滤掉背景特征的增强特征(图中enqueue左边的部分)。
第二次增强则是基于网络存储的源自其他训练样本的历史上下文信息(图中的Cross-Batch Memory)。即,当前特征与Memory内特征进行Cross Attention操作,从而利用历史经验对当前状态进行补全。
模块代码
代码实现有几个额外要注意的地方:
- 模块返回的aux_out要进行side supervision监督,以保证准确性;
- Memory负责维护网络的历史信息,为防止被破坏,这部分信息并不参与梯度更新过程;
- 在测试阶段,Memory不再更新,直接使用训练所存储的历史信息,这一思想与BatchNorm类似。
import torch
from torch import nndef conv2d(in_channel, out_channel, kernel_size):layers = [nn.Conv2d(in_channel, out_channel, kernel_size, padding=kernel_size // 2, bias=False),nn.BatchNorm2d(out_channel),nn.ReLU(),]return nn.Sequential(*layers)def conv1d(in_channel, out_channel):layers = [nn.Conv1d(in_channel, out_channel, 1, bias=False),nn.BatchNorm1d(out_channel),nn.ReLU(),]return nn.Sequential(*layers)class ECRM(nn.Module):def __init__(self, bank_size=20, feat_channels=512, num_classes=1):super(ECRM, self).__init__() # BANK CONFIGself.bank_size = bank_sizeself.register_buffer("bank_ptr", torch.zeros(1, dtype=torch.long)) # memory bank pointerself.register_buffer("bank", torch.zeros(self.bank_size, feat_channels, num_classes)) # memory bankself.bank_full = False# ATTENTION CONFIGself.feat_channels = feat_channelsself.L = nn.Conv2d(feat_channels, num_classes, 1)self.X = conv2d(feat_channels, 512, 3)self.phi = conv1d(512, 256)self.psi = conv1d(512, 256)self.delta = conv1d(512, 256)self.rho = conv1d(256, 512)self.g = conv2d(512 + 512, 512, 1)def init(self):self.bank_ptr[0] = 0self.bank_full = False@torch.no_grad()def update_bank(self, x):ptr = int(self.bank_ptr)batch_size = x.shape[0]vacancy = self.bank_size - ptrif batch_size >= vacancy:self.bank_full = Truepos = min(batch_size, vacancy)self.bank[ptr:ptr+pos] = x[0:pos].clone()# update pointerptr = (ptr + pos) % self.bank_sizeself.bank_ptr[0] = ptrdef enhance_by_memory(self, bank, X_flat, X):batch, n_class, height, width = X.shape# query = S * Cquery = self.phi(bank).squeeze(dim=2)# key: = B * C * HWkey = self.psi(X_flat)# logit = HW * S * B (cross image relation)logit = torch.matmul(query, key).transpose(0,2)# attn = HW * S * Battn = torch.softmax(logit, 2)# delta = S * Cdelta = self.delta(bank).squeeze(dim=2)# attn_sum = B * C * HWattn_sum = torch.matmul(attn.transpose(1,2), delta).transpose(1,2)# x_obj = B * C * H * WX_obj = self.rho(attn_sum).view(batch, -1, height, width)concat = torch.cat([X, X_obj], 1)out = self.g(concat)return outdef get_prototype(self, input):L = self.L(input)aux_out = Lbatch, n_class, _, _ = L.shapel_flat = L.view(batch, n_class, -1)M = torch.softmax(l_flat, -1)X = self.X(input)channel = X.shape[1]X_flat = X.view(batch, channel, -1)f_k = (M @ X_flat.transpose(1, 2)).transpose(1, 2)return aux_out, f_k, X_flat, Xdef forward(self, x, flag='train'):# x [3, 512, 11, 11]# patch [3, 512, 1]aux_out, patch, feats_flat, feats = self.get_prototype(x)if flag == 'train':self.update_bank(patch)ptr = int(self.bank_ptr)if self.bank_full == True:out = self.enhance_by_memory(self.bank, feats_flat, feats)else:out = self.enhance_by_memory(self.bank[0:ptr], feats_flat, feats)elif flag == 'test':out = self.enhance_by_memory(patch, feats_flat, feats)return out, aux_outif __name__ == '__main__':x = torch.randn([3, 512, 11, 11])ecrm = ECRM()out = ecrm(x)print(out[0].shape) # 3, 512, 11, 11print(out[1].shape) # 3, 1, 11, 11
相关文章:

每日Attention学习12——Exterior Contextual-Relation Module
模块出处 [ISBI 22] [link] [code] Duplex Contextual Relation Network for Polyp Segmentation 模块名称 Exterior Contextual-Relation Module (ECRM) 模块作用 内存型特征增强模块 模块结构 模块思想 原文表述:在临床环境中,不同样本之间存在息肉…...

为什么现在电销公司这么难?
现在电销公司普遍底薪就4000,员工要干的工作: 1、自己办卡、现在大部分人对隐私方面比较在意,一般电销公司还都需要自己身份证实名办卡,打几天又封号,有的人甚至被移动拉黑 2、天天打电话,遇见的什么人都…...
每天一个数据分析题(四百四十二)- 标签与指标
数据分析师在工作中常常会涉及两个概念:标签、指标,下面关于标签与指标的描述正确的是()? A. 指标通常可以量化,但是标签一般是不可量化的 B. 标签是用来定义、评价和描述特定事物的一种标准或方式 C. 指…...
[论文笔记] pai-megatron-patch Qwen2-72B/7B/1.5B 长文本探路
[论文笔记] Pai-megatron-patch cpu-offload 改到 Qwen2-CSDN博客 Pai-Megatron-Patch (mcore代码) 长文本限制: 开SP之后,72B能开到16K,7B能开到32K。 但是72B开16K,或者7B开32K时,如果训练时训练样本中有长文本的话,则还是会OOM。 code: 相对于原repo加了一些代…...

【SpringCloud】微服务远程调用OpenFeign
工作原理流程图 上代码 common中添加依赖: <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency><groupId>org.spri…...

MySQL零散拾遗(四)
聚合函数 聚合函数作用于一组数据,并对一组数据返回一个值。 常见的聚合函数:SUM()、MAX()、MIN()、AVG()、COUNT() 对COUNT()聚合函数的更深一层理解 COUNT函数的作用:计算指定字段在查询结果中出现的个数(不包含NULL值&#…...

大语言模型-检索测评指标
1. MRR (Mean Reciprocal Rank)平均倒数排名: 衡量检索结果排序质量的指标。 计算方式: 对于每个查询,计算被正确检索的文档的最高排名的倒数的平均值,再对所有查询的平均值取均值。 意义: 衡量…...
Zookeeper集群中节点之间数据是如何同步的
1.首先集群启动时,会先进行领导者选举,确定哪个节点是Leader,哪些节点是Follower和Observer 2.然后Leader会和其他节点进行数据同步,采用发送快照和发送Diff日志的方式 3.集群在工作过程中,所有的写请求都会交给Lead…...

HTTPServer改进思路2(mudou库核心思想融入)
mudou网络库思想理解 Reactor与多线程 服务器构建过程中,不仅仅使用一个Reactor,而是使用多个Reactor,每个Reactor执行自己专属的任务,从而提高响应效率。 首先Reactor是一种事件驱动处理模式,其主要通过IO多路复用…...
Kubernetes Secret 详解
Kubernetes Secret 是一种用于存储和管理敏感信息的对象,如密码、OAuth 令牌和 SSH 密钥等。使用 Secret 可以避免将机密数据直接放在 Pod 规约或容器镜像中,从而增加了应用程序的安全性。 Secret 的类型 Kubernetes 支持多种类型的 Secret,包括: Opaque:默认的…...

docker笔记4-部署
docker笔记4-部署 一、部署nginx二、部署Tomcat三、部署ESKibana3.1 部署ES3.2 部署kibana 一、部署nginx docker search nginx #搜索nginx的最新版本docker pull nginx #这里可以指定nginx版本,如果不指定,那么就拉取最新版本latestdocker run -d --na…...

有监督学习基础
基本概念 给定输入有为(x,y),其中x表示学习特征,y表示输出,m表示输入总数,有监督学习旨在根据输入建立能够预测可能输出的模型,大致可以分为回归和分类两种,代表可能输出是无限的或…...

揭开 AI 绘画提示词的神秘密码!
前言 ** 揭秘AI 绘画 ** 提示词的神秘密码 亲爱的朋友们,今天我们要一起探索 AI 绘画世界中那神秘的“密码”——提示词。 在 AI 绘画的奇妙领域里,提示词就像是一把神奇的钥匙,能够开启无尽的创意之门。它是我们与 AI 进行心灵对话的桥…...

macOS 10.15中屏蔽Microsoft Edge浏览器的更新提示
文章目录 1.效果对比2.安装描述文件3.停用描述文件4.高级操作(可选)参考文献 最近在macOS10.15系统,打开Microsoft Edge浏览器,每次打开都有个烦人的提示“ 要获取将来的 microsoft edge 更新,需要 macos 10.15 或更高…...
Qt 实战(3)数据类型 | 3.2、QVariant
文章目录 一、QVariant1、存储数据1.1、存储Qt内置数据1.2、存储自定义数据 2、获取数据3、判断数据类型4、清空数据5、总结 前言: QVariant是Qt框架中一个非常强大且灵活的类,它提供了一种通用的方式来存储和转换几乎任何类型的数据。无论是基本数据类型…...
Docker中安装的postgresql14在启用vector扩展的时候,找不到该扩展的控制文件。
ERROR: could not open extension control file “/usr/share/postgresql/14/extension/vector.control”: No such file or directory 进入容器 docker exec -it CONTAINER ID /bin/bash 1.更新 apt-get apt-get update 2.安装插件 #不同版本对应修改数字即可 apt-get i…...

JS防抖和节流
一、防抖和节流的适用场景 防抖(Debounce): 适合在输入框输入时的实时搜索、窗口大小调整时的resize事件等。节流(Throttle): 适合如页面滚动时的scroll事件、按钮点击时的请求发送等需要控制频率的场景。 …...

OpenWrt 为软件包和docker空间扩容
参考资料 【openwrt折腾日记】解决openwrt固件刷入后磁盘空间默认小的问题,关联openwrt磁盘扩容空间扩容【openwrt分区扩容】轻松解决空间可用不足的尴尬丨老李一瓶奶油的YouTube 划分空间 参考一瓶奶油的YouTube 系统 -> 磁盘管理 -> 磁盘 -> 修改 格…...

重要的工作任务,怎么在电脑桌面设置倒计时?
在日常工作中,我们总是面临着众多工作任务,如何高效地管理和完成这些任务成为了每个职场人的必备技能。为任务设置倒计时,不仅能让我们清晰地看到任务的先后顺序,还能帮助我们更好地把握时间,提高工作效率。想象一下&a…...
Failed to build get_cli:get:的解决方案
项目场景: 今天安装Getx命令行的时候,输入这面文档报了一个错: dart pub global activate get_cli 问题描述 提示:这里描述项目中遇到的问题: 例如:数据传输过程中数据不时出现丢失的情况,偶尔…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...