EDT:On Efficient Transformer-Based Image Pre-training for Low-Level Vision

EDT:On Efficient Transformer-Based Image Pre-training for Low-Level Vision

论文地址:On Efficient Transformer-Based Image Pre-training for Low-Level Vision

代码地址:fenglinglwb/EDT: On Efficient Transformer-Based Image Pre-training for Low-Level Vision

现阶段问题

​ 预训练在high-level计算机视觉中产生了许多最先进的技术,但很少有人尝试研究预训练如何在low-level任务中。

主要贡献

  1. 提出了一个用于低级视觉的高效且通用的Transformer框架:改进window attention,分别从高、宽进行切块计算注意力。

  2. 是第一个对低级视觉的图像预训练进行深入研究的人,揭示了预训练如何影响模型的内部表示以及如何进行有效的预训练的见解

网络框架

2023-11-29_20-15-27

Shifted Crossed Local Attention

CSWin Transformer: A General Vision Transformer Backbone with Cross-Shaped Windows基础上进行改进。
X = [ X 1 , X 2 ] , w h e r e X 1 , X 2 ∈ R ( H × W ) × C / 2 , X 1 ′ = H − M S A ( X 1 ) , X 2 ′ = V − M S A ( X 2 ) , ( S ) C L − M S A ( X ) = P r o j ( [ X 1 ′ , X 2 ′ ] ) , \begin{aligned} &\mathbf{X}=[\mathbf{X}_{1},\mathbf{X}_{2}],\mathrm{~where~}\mathbf{X}_{1},\mathbf{X}_{2}\in\mathbb{R}^{(H\times W)\times^{C/2}}, \\ &\mathbf{X}_{1}^{'}=\mathrm{H-MSA}(\mathbf{X}_{1}), \\ &\mathbf{X}_{2}^{^{\prime}}=\mathrm{V-MSA}(\mathbf{X}_{2}), \\ &(\mathrm{S})\mathrm{CL-MSA}(\mathbf{X})=\mathrm{Proj}([\mathbf{X}_{1}^{'},\mathbf{X}_{2}^{'}]), \end{aligned} X=[X1,X2], where X1,X2R(H×W)×C/2,X1=HMSA(X1),X2=VMSA(X2),(S)CLMSA(X)=Proj([X1,X2]),
2023-11-29_20-18-37

    def calculate_mask(self, x_size, index):# calculate attention mask for SW-MSAif self.shift_size is None:return NoneH, W = x_sizeimg_mask = torch.zeros((1, H, W, 1))  # 1 H W 1h_window_size, w_window_size = self.window_size[0], self.window_size[1]h_shift_size, w_shift_size = self.shift_size[0], self.shift_size[1]if index == 1:h_window_size, w_window_size = self.window_size[1], self.window_size[0]h_shift_size, w_shift_size = self.shift_size[1], self.shift_size[0]h_slices = (slice(0, -h_window_size),slice(-h_window_size, -h_shift_size),slice(-h_shift_size, None))w_slices = (slice(0, -w_window_size),slice(-w_window_size, -w_shift_size),slice(-w_shift_size, None))cnt = 0for h in h_slices:for w in w_slices:img_mask[:, h, w, :] = cntcnt += 1mask_windows = window_partition(img_mask, self.window_size, index)  # nW, h_window_size, w_window_size, 1mask_windows = mask_windows.view(-1, h_window_size * w_window_size)attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0))return attn_maskx = self.qkv(x) #B H W 3Cx = x.view(B, H, W, 3, C).permute(3,0,1,2,4).contiguous()#3 B H W Cx_h = x[...,:C//2]x_v = x[...,C//2:]if self.shift_size:x_h = torch.roll(x_h, shifts=(-self.shift_size[0],-self.shift_size[1]), dims=(2,3))x_v = torch.roll(x_v, shifts=(-self.shift_size[1],-self.shift_size[0]), dims=(2,3))if self.input_resolution == x_size:attn_windows_h = self.attns[0](x_h, mask=self.attn_mask_h)attn_windows_v = self.attns[1](x_v, mask=self.attn_mask_v)else:mask_h = self.calculate_mask(x_size, index=0).to(x_h.device) if self.shift_size else Nonemask_v = self.calculate_mask(x_size, index=1).to(x_v.device) if self.shift_size else Noneattn_windows_h = self.attns[0](x_h, mask=mask_h)attn_windows_v = self.attns[1](x_v, mask=mask_v)if self.shift_size:attn_windows_h = torch.roll(attn_windows_h, shifts=(self.shift_size[0],self.shift_size[1]), dims=(1,2))attn_windows_v = torch.roll(attn_windows_v, shifts=(self.shift_size[1],self.shift_size[0]), dims=(1,2))attn_windows = torch.cat([attn_windows_h, attn_windows_v], dim=-1)attn_windows = self.proj(attn_windows) #B H W C

Anti-Blocking FFN

​ 分组卷积是指将输入和输出通道分为若干组,在每组内部进行卷积操作,这可以加速计算并在一定程度上提高模型的表征能力

self.dwconv = nn.Conv2d(hidden_features, hidden_features, 5, 1, 5//2, groups=hidden_features)

Convolution Block

2023-11-30_11-13-55

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

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

相关文章

Web UI 自动化 元素定位利器

序 元素定位,对于 Web UI 自动化而言,绝对是大家成长道路上的一道绊脚石。 很多初学者,都“死”在了元素定位上,从而失去了学习的兴趣。导致职业规划不得不半途而废~ 那么,今天,我们就使用 Katalon Stu…

datav-实现轮播表,使用updateRows方法-无缝衔接加载数据

前言 最近在做大屏需求的时候,遇到一个轮播数据的需求,查看datav文档发现确实有这个组件 但这个组件只提供了一次加载轮播的例子,虽然提供了轮播加载数据updateRows方法 但是文档并没有触发事件,比如轮播完数据触发事件&#xf…

设计模式02创建者模式

创建者模式 参考网课:黑马程序员Java设计模式详解 博客笔记 创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。 创建型模式分为&#…

【分治】循环赛日程表Python实现

文章目录 [toc]问题描述分治算法示例Python实现 无运动员数量约束循环赛日程表算法示例Python实现 问题描述 设有 n 2 k n 2^{k} n2k个运动员要进行网球循环赛,设计一个满足以下要求的比赛日程表 每个选手必须与其他 n − 1 n - 1 n−1个选手各赛一次每个选手一天…

域渗透之影子凭证 滥用密钥信任账户映射进行账户接管

关注公众号回复20231110获取最新网络安全以及内网渗透等资料。 什么是 PKINIT? 在 Kerberos 身份验证中,客户端必须在 KDC为其提供票证授予票证 (TGT) 之前执行“预验证”,该票证随后可用于获取服务票证。预认证的原因是,没有它&…

Linux上进行Nacos安装

Nacos安装指南 仅供参考,若有错误,欢迎批评指正! 后期会继续上传docker安装nacos的过程! 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面,提供有下载链接,可以下载编译好…

PP和PVC可以相互粘接吗?

PP(聚丙烯)和PVC(聚氯乙烯)是两种不同类型的塑料,它们的化学性质和表面特性不同,因此直接的粘接会比较困难。这是因为它们的分子结构和化学成分不太相容,不易产生牢固的粘接。通常情况&#xff…

电路中各种接地的用途和含义

在电路设计中,地这个概念是十分重要的,它是整个电路中的参考地点,同时也是信号回流的路径。 我们经常见到有各种地,比如什么数字地、模拟地、信号地,它们在电路中都有什么含义?都是用在哪里?下面…

SpringBoot热部署

SpringBoot热部署 借鉴链接&#x1f517;&#xff1a;SpringBoot中的热部署 添加devtools依赖和pom插件 <!-- devtools 依赖 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId&…

【算法题】数字字符串组合倒序 (js)

解法&#xff1a; const str "I am an 20-years out--standing * -stu- dent";function solution(str) {const arr str.split(" ");const newArr arr.map((str) > {if (/[a-zA-Z0-9-]/.test(str)) {if (/-{2}/g.test(str)) {return str.replace(/-…

iOS 定位问题解决方法整理

文章目录 一、Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:] 一、Assertion failure in -[CLLocationManager setAllowsBackgroundLocationUpdates:] 后台定位权限没有开启 错误描述&#xff1a; 错误原因&#xff1a; 定位管理中设置了后…

SQL 优化

SQL 优化经历&#xff1a;从 30248.271s 到 0.001s 场景 用的数据库是mysql5.6&#xff0c;下面简单的介绍下场景。 课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 数据100条。 学生表 create table Student( id int PRIMARY KEY, name varchar(…