【Block总结】Conv2Former中的Block,卷积调制块,简化了自注意力机制,提高了内存效率

论文介绍

论文链接:https://arxiv.org/pdf/2211.11943

  • 研究背景:论文指出,尽管当前研究者们通过利用大核卷积、高阶空间交互或稀疏卷积核等方法对卷积神经网络(ConvNets)的设计进行了重新思考,但如何更有效地利用卷积来构建强大的ConvNet架构仍是一个热门研究课题。
  • Conv2Former提出:论文提出了一种新的卷积网络架构Conv2Former,它采用了一种简化的自注意力机制,仅使用卷积和Hadamard乘积。

创新点

  • 卷积调制操作:Conv2Former的核心是卷积调制操作,它简化了自注意力机制,提高了内存效率,特别是当处理高分辨率图像时。
  • 大核卷积的优势:与之前的ConvNets不同,Conv2Former可以从更大的卷积核(如11×11和21×21)中获益,这带来了更好的性能提升。

方法

  • 卷积调制块:Conv2Former使用了卷积调制块,该块利用深度卷积的特征作为权重来调制值表示。
  • 与自注意力和经典残差块的比较:相比自注意力,Conv2Former的方法在构建关系时更加内存高效;与经典残差块相比,由于调制操作,Conv2Former的方法可以适应输入内容。
    在这里插入图片描述

模块作用

  • 卷积调制块的优势:卷积调制块能够同时捕捉通道和空间维度的信息,并且比传统的自注意力机制更加高效。
  • 在下游任务中的表现:Conv2Former在物体检测和语义分割等下游任务中表现出色,证明了其卷积调制块的有效性和实用性。

整体而言,Conv2Former通过提出卷积调制操作,简化了自注意力机制,提高了内存效率,并展示了在视觉识别任务中的优越性能。代码如下:

import torch
import torch.nn as nn
import torch.nn.functional as Ffrom timm.models.layers import DropPathclass MLP(nn.Module):def __init__(self, dim, mlp_ratio=4):super().__init__()self.norm = LayerNorm(dim, eps=1e-6, data_format="channels_first")self.fc1 = nn.Conv2d(dim, int(dim * mlp_ratio), 1,padding=0)self.pos = nn.Conv2d(int(dim * mlp_ratio), int(dim * mlp_ratio), 3, padding=1, groups=int(dim * mlp_ratio))self.fc2 = nn.Conv2d(int(dim * mlp_ratio), dim, 1)self.act = nn.GELU()def forward(self, x):B, C, H, W = x.shapex = self.norm(x)x = self.fc1(x)x = self.act(x)x = x + self.act(self.pos(x))x = self.fc2(x)return x
class LayerNorm(nn.Module):r""" LayerNorm that supports two data formats: channels_last (default) or channels_first.The ordering of the dimensions in the inputs. channels_last corresponds to inputs withshape (batch_size, height, width, channels) while channels_first corresponds to inputswith shape (batch_size, channels, height, width)."""def __init__(self, normalized_shape, eps=1e-6, data_format="channels_last"):super().__init__()self.weight = nn.Parameter(torch.ones(normalized_shape))self.bias = nn.Parameter(torch.zeros(normalized_shape))self.eps = epsself.data_format = data_formatif self.data_format not in ["channels_last", "channels_first"]:raise NotImplementedErrorself.normalized_shape = (normalized_shape,)def forward(self, x):if self.data_format == "channels_last":return F.layer_norm(x, self.normalized_shape, self.weight, self.bias, self.eps)elif self.data_format == "channels_first":u = x.mean(1, keepdim=True)s = (x - u).pow(2).mean(1, keepdim=True)x = (x - u) / torch.sqrt(s + self.eps)x = self.weight[:, None, None] * x + self.bias[:, None, None]return x
class SpatialAttention(nn.Module):def __init__(self, dim, kernel_size, expand_ratio=2):super().__init__()self.norm = LayerNorm(dim, eps=1e-6, data_format="channels_first")self.att = nn.Sequential(nn.Conv2d(dim, dim, 1),nn.GELU(),nn.Conv2d(dim, dim, kernel_size=kernel_size, padding=kernel_size//2, groups=dim))self.v = nn.Conv2d(dim, dim, 1)self.proj = nn.Conv2d(dim, dim, 1)def forward(self, x):B, C, H, W = x.shapex = self.norm(x)x = self.att(x) * self.v(x)x = self.proj(x)return xclass Block(nn.Module):def __init__(self, dim, kernel_size, num_head, window_size=14, mlp_ratio=4., drop_path=0.):super().__init__()self.attn = SpatialAttention(dim, kernel_size)self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()self.mlp = MLP(dim, mlp_ratio)layer_scale_init_value = 1e-6self.layer_scale_1 = nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)self.layer_scale_2 = nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)def forward(self, x):x = x + self.drop_path(self.layer_scale_1.unsqueeze(-1).unsqueeze(-1) * self.attn(x))x = x + self.drop_path(self.layer_scale_2.unsqueeze(-1).unsqueeze(-1) * self.mlp(x))return xif __name__ == '__main__':# 生成随机输入数据input_data = torch.randn(2, 64, 40, 40)mca = Block(64,3,16)output = mca(input_data)# 打印输入和输出形状print("Input size:", input_data.size())print("Output size:", output.size())

输出结果:

Input size: torch.Size([2, 64, 40, 40])
Output size: torch.Size([2, 64, 40, 40])

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

w139华强北商城二手手机管理系统

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

ThreadPoolExecutor keepAliveTime 含义

现象 在线上环境排查问题时,某个线程池在某个时间点新建线程达到设定的最大线程数 maximumPoolSize,后续流量降低后当前线程数仍未回落,仍然为最大线程数,阻塞队列中有任务,但是活跃线程数显著减少。 之前的认知 固…

如何恢复已删除的 Telegram 消息 [iOSamp;Android]

Telegram 是一款功能强大的消息应用程序,因其易用性、隐私保护和众多炫酷功能而深受用户喜爱。然而,有时我们会不小心删除重要的消息。在这种情况下你应该做什么? 本文将为您提供简单有效的解决方案来恢复 Telegram 上已删除的消息&#xff…

Outlook2024版如何回到经典Outlook

Outlook2024版如何回到经典Outlook 如果新加入一家公司,拿到的电脑,大概率是最新版的Windows, 一切都是新的。 如果不coding, 使用国产的foxmail大概就可以解决一切问题了。可惜老程序员很多Coding都是基于传统Outlook的,科技公司所有人都是I…

动态库dll与静态库lib编程4:MFC规则DLL讲解

文章目录 前言一、说明二、具体实现2.1新建项目2.2 模块切换的演示 总结 前言 动态库dll与静态库lib编程4:MFC规则DLL讲解。 一、说明 1.前面介绍的均为Win32DLL,即不使用MFC的DLL。 2.MFC规则DLL的特点:DLL内部可以使用MFC类库、可以被其他…

若依中Feign调用的具体使用(若依微服务版自身已集成openfeign依赖,并在此基础上定义了自己的注解)

若依中Feign调用具体使用 注意:以下所有步骤实现的前提是需要在启动类上加入注解 EnableRyFeignClients 主要是为开启feign接口扫描 1.创建服务提供者(provider) 导入依赖(我在分析依赖时发现若依本身已经引入openfeign依赖,并在此基础上自定义了自己的EnableRyF…

CSS3——3. 书写格式二

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写&#xff1a;--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…

zookeeper 数据类型

文章目录 引言I Znodezonde stat (状态信息)znode类型临时\永久序列化特性引言 在结构上与标准文件系统非常类似,拥有一个层次的命名空间,都是采用树形层次结构 Zookeeper树中的每个节点被称为:Znode,没有文件和目录之分。Znode兼具文件和目录两种特点Znode存储数据大小有…

Hadoop集群之间实现免密登录

实现虚拟机之间能够互相登录&#xff0c;比如可以在hadoop1上面登录hadoop2。 第一步&#xff1a;执行”ssh-keygen -t rsa”命令&#xff0c;生成该虚拟机的密钥 第二步&#xff1a;密钥文件存储在/root/.ssh目录&#xff0c;执行cd /root/.ssh命令进入存储密钥文件的目录&am…

【linux基础I/O(1)】文件描述符的本质重定向的本质

目录 前言1. 理解C语言的文件接口2. 操作文件的系统调用接口2.1 open函数详解2.2 close函数详解2.3 write函数详解2.4 read函数详解 3. 文件描述符fd详解4. 文件描述符的内核本质5. 怎样理解Linux下一切皆文件?6. 理解输出输入重定向7. 重定向的系统调用8. 总结 前言 “在Lin…

C++:范围for

范围for&#xff08;range-based for&#xff09;是C的一种循环结构&#xff0c; 是在 C11 这个标准中引入的&#xff0c;这种类型的for循环使得遍历数组、容器中的元素更加简便和直观。 一、范围for语法 for ( 类型 变量名 : 数组名 ) 语句 //多条语句需要加⼤括号 示例&#…

C语言 递归编程练习

1.将参数字符串中的字符反向排列&#xff0c;不是逆序打印。 要求&#xff1a;不能使用C函数库中的字符串操作函数。 比如&#xff1a; char arr[] "abcdef"; 逆序之后数组的内容变成&#xff1a;fedcba 1.非函数实现&#xff08;循环&#xff09; 2.用递归方法…

Spring Boot - 日志功能深度解析与实践指南

文章目录 概述1. Spring Boot 日志功能概述2. 默认日志框架&#xff1a;LogbackLogback 的核心组件Logback 的配置文件 3. 日志级别及其配置配置日志级别3.1 配置文件3.2 环境变量3.3 命令行参数 4. 日志格式自定义自定义日志格式 5. 日志文件输出6. 日志归档与清理7. 自定义日…

USB子系统学习(一)USB电气信号

文章目录 1、声明2、USB协议概述3、USB电气信号3.1、USB基础概念3.1.1、低速/全速信号电平3.1.2、高速信号电平 3.2、学习目标3.3、设备断开与连接3.3.1、连接3.3.2、断开 3.4、复位3.5、设备速率识别3.5.1、低速/全速3.5.2、高速 3.6、数据信号3.6.1、低速/全速的SOP和EOP3.6.…

Android GameActivity(NativeActivity)读写文件

最近研究native android相关内容&#xff0c;其中最棘手的就是文件读写问题&#xff0c;最主要的是相关的文档很少。这里写下我所知道的方法。 由于本人使用的是Android14[arm64-v8a]版本的设备,能访问的路径相当有限&#xff0c;如果想要访问更多的路径&#xff0c;就不得不申…

安卓入门十一 常用网络协议四

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09; MQTT是一种轻量级的、发布/订阅模式的消息传输协议。它被设计用于在低带宽或不稳定网络环境下&#xff0c;实现物联网设备之间的可靠通信。 4.1 MQTT详细介绍 发布/订阅模式&#xff1a;MQTT 使用发布/订…

气膜球幕:引领元宇宙时代的科技与艺术光影盛宴—轻空间

在科技与艺术交织的时代&#xff0c;未来的观影体验将不再受限于传统屏幕的束缚。随着气膜球幕的崭新亮相&#xff0c;突破性的光影效果和沉浸式体验让我们走进了一个全新的视听世界。这不仅仅是一个简单的球形影院&#xff0c;它是连接现实与虚拟、科技与艺术、光与影的桥梁&a…

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…

kernel32.dll动态链接库报错要怎解决?详细解析kernel32.dll文件缺失解决方案

Kernel32.dll动态链接库报错详解与解决方案 在电脑的日常使用中&#xff0c;我们时常会遇到各种系统报错&#xff0c;其中kernel32.dll文件的报错尤为让人头疼。作为一名在软件开发领域摸爬滚打多年的从业者&#xff0c;我将为大家深入解析kernel32.dll文件的重要性&#xff0…

win10 npm login 登陆失败

npm login 命令总是登陆失败 提示我们设置带proxy。我们本地找到这个 找到代理地址 进行关键信息的设置 npm config set proxy http://xxxx:xxxx npm config set https-proxy http://xxx:xxx 设置完之后在执行npm login即可