ACM-MM2023 DITN详解:一个部署友好的超分Transformer

目录

  • 1. Introduction
  • 2. Method
    • 2.1. Overview
    • 2.2. UFONE
    • 2.3 真实场景下的部署优化
  • 3. 结果

Paper: Unfolding Once is Enough: A Deployment-Friendly Transformer
Unit for Super-Resolution

Code: https://github.com/yongliuy/DITN

1. Introduction

  • CNN做超分的缺点
    由于卷积权重在推理时是固定的, 而且在整个图像上共享,无法动态提取不同输入以及不同局部区域的特征;

  • Vision transformer做超分的演化

    SwinIR将swin transformer应用到超分任务中 --> ELAN提出了一些效率优化改进方案,并提出了一个更有效的感知长距离依赖的方法

    但是由于cyclic-shift的存在,这些方法仍然需要对feature map反复进行fold和unfold操作,尽管这些reshape算子不会被计算在FLOPs和parameter中, 但是在推理阶段会计算负担和显存占用,尤其是在做dynamic inputs的部署时。

本文提出Deployment-friendly Inner-patch Transformer Network (DITN) 减少reshape算子的使用,DITN的主要思路是:

  1. unfold和fold操作只在网络的开始和结束阶段进行一次,因为去除了cyclic-shift, 提出Inner-patch Transformer Layer(ITL), self-attention只在window内部进行;
  2. 提出Spatial-Aware Layer (SAL),通过空间注意力,来感知长距离依赖,来弥补ITL忽略掉的长距离信息;
  3. 在TensorRT部署加速阶段,替换掉了LN层,提出了一种融合优化策略,进一步减少了显存占用和计算负担;

2. Method

2.1. Overview

作者的设计动机是图像分类和目标检测这些high level的任务,通常需要从全局特征中获取大部分的语义信息,而超分这种low-level的任务同样需要去探索局部特征去生成精细的细节和纹理。

算法的整体结构如下图所示,延续了SwinIR的“浅层特征提取+深层特征提取+图像重建”的结构,区别就是在深层特征提取模块,使用了新提出的A Deployment-Friendly Transformer Unit(UFONE)替代RSTB。
在这里插入图片描述

2.2. UFONE

UFONE由两个基本的层组成,一个是Inner-patch Transformer Layer (ITL),另一个是Spatial-Aware Layer (SAL)。ITL和SAL是串联的;

ITL完成的是window内部的特征提取,其实就是w-msa,SAL完成的是长距离信息的感知,因为ITL忽略了这部分信息。下面我们来看一下他们分别是怎么实现的。

  • Inner-patch Transformer Layer (ITL)
    在这里插入图片描述
    其实就是一个w-msa,唯一的不同就是完成了self-attention之后将mlp换成了一个卷积

  • Spatial-Aware Layer (SAL)

在这里插入图片描述
首先输入整幅图X,在经过一个卷积层后在通道维度分成X1和X2,随后X1在经过空洞卷积后与X2相乘,完成了空间上的注意力,从而实现了长距离信息的感知。

2.3 真实场景下的部署优化

  • Layer norm用tanh和1x1卷积替代,layer norm和tanh都能把输入的值映射到[-1, 1]之间,1x1卷积可以完成线性变换
    这一改动会轻微降低模型效果,提速8%~10%;

  • self-attention层的算子优化

    (1)算子融合;
    在这里插入图片描述

    (2)FlashAttention

    cuda实现后通过tensorrt的plugin机制使用;

3. 结果

在这里插入图片描述

在这里插入图片描述
DITN: 3个UFONE
DITN-Tiny:1个UFONE
DITN-Real:DITN-Tiny的基础上替换掉layer norm
可以看出比ELAN稍快。此外swinir和elan不支持动态尺寸输入,所以在动态输入上没有进行比较,文中是这么说的:

Noting that the unique operators in ELAN-Tiny and SwinIR-Tiny make them
unavailable in the dynamic input configurations, we compare only DITN-Tiny and DITN-Real. Specifically,

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

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

相关文章

Leetcode—709.转换成小写字母【简单】

2023每日刷题&#xff08;五十八&#xff09; Leetcode—709.转换成小写字母 实现代码 char* toLowerCase(char* s) {int len strlen(s);for(int i 0; i < len; i) {if(s[i] > A && s[i] < Z) {s[i] tolower(s[i]);}}return s; }运行结果 之后我会持续更…

第20节: Vue3 计算属性

在UniApp中使用Vue3框架时&#xff0c;你可以使用计算属性来处理一些依赖其他属性的计算逻辑。计算属性会根据依赖属性的变化自动重新计算&#xff0c;并且只会在相关依赖发生改变时触发重新渲染。 下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用计算属性&a…

java全栈体系结构-架构师之路(持续更新中)

Java 全栈体系结构 数据结构与算法实战&#xff08;已更&#xff09;微服务解决方案数据结构模型(openresty/tengine)实战高并发JVM虚拟机实战性能调优并发编程实战微服务框架源码解读集合框架源码解读分布式架构解决方案分布式消息中间件原理设计模式JavaWebJavaSE新零售电商项…

(04730)半导体器件之晶体三极管

晶体三极管的结构和分类 晶体三极管具有三个区、两个PN结&#xff0c;从三个区分别引出三个电极而构成&#xff0c;其结构和符号如图2.1.13所示。 晶体三极管内部的三个区&#xff0c;分别称为发射区、基区和集电区&#xff0c;其中基区十分薄&#xff0c;一般为1um至几十um,掺…

单日30PB量级!火山引擎ByteHouse云原生的数据导入这么做

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近期&#xff0c;火山引擎ByteHouse技术专家受邀参加DataFunCon2023&#xff08;深圳站&#xff09;活动&#xff0c;并以“火山引擎ByteHouse基于云原生架构的实时…

【面试】在Python中如何实现单例模式

点评&#xff1a;单例模式是指让一个类只能创建出唯一的实例&#xff0c;这个题目在面试中出现的频率极高&#xff0c;因为它考察的不仅仅是单例模式&#xff0c;更是对Python语言到底掌握到何种程度&#xff0c;建议大家用装饰器和元类这两种方式来实现单例模式&#xff0c;因…

C++输入输出流

C输出流&#xff0c;输入输出是数据的传递过程&#xff0c;数据如流水一般从一处流向另一处&#xff0c;C形象的将此过程称为流。 输入操作&#xff1a;是控制序列中的字节内容从一个设备流入内存 输出操作&#xff1a;是控制序列中的字节内容从内存流向某个设备 目录 1 C输入…

学习笔记 -- TVS管选型参考

一、TVS管基本工作原理 当TVS管(瞬态电压抑制器)两极受到反向瞬态高能量冲击时&#xff0c;能以纳秒(ns)量级的速度&#xff0c;将两极间的高阻抗变为低阻抗&#xff0c;使两极间的电压箝位于一个预定的值&#xff0c;有效地保护电子线路中的元器件。 在浪涌电压作用下&#xf…

ETLCloud详解,如何实现最佳实践及问题排查

ETLCloud介绍 ETLCloud是新一代全域数据集成平台&#xff0c;领先于市场同类产品的数据集成平台(DataOps)&#xff0c;只需单击几下即可完成数据清洗转换、传输入仓等操作&#xff0c;具备高效、智能、一站式的全域数据集成优势&#xff0c;如&#xff1a; 毫秒级实时数据同步 …

【华为数据之道学习笔记】4-4传统信息架构向业务数字化扩展:对象、过程、 规则

传统信息架构的缺陷 随着数字化转型的深入&#xff0c;发现既有信息架构已经无法满足自身业务需要&#xff0c;主要体现在以下 几个方面。 1&#xff09;大量业务和作业所产生的数据并没有完整地被管理 很多情况下&#xff0c;并不是所有业务和作业所产生的数据都在系统中承载…

编程之旅:从电脑故障到创造虚拟世界

创作方向&#xff1a;回顾自己学习编程的过程&#xff0c;分享经历和成长感悟。 当初选择学习计算机&#xff0c;我满怀梦想地说出了成为一名神奇的码农的愿望。我想象着能够像编织魔法一样&#xff0c;通过编写程序创造出炫酷的虚拟世界。然而&#xff0c;我很快就意识到&…

UE虚幻引擎中程序无需运行也可调试

首先先新建一个蓝图类&#xff0c;在蓝图类中创建一个Custom event 事件&#xff0c;然后在右侧细节面板中搜索call in editor&#xff0c;编译保存之后&#xff0c;将该蓝图类拖拽到关卡场景中&#xff0c;在细节面板中即可看到该事件的按钮。

函数指针与指针函数

函数指针&#xff1a; 定义 函数指针是指向函数的指针&#xff0c;其本质是一个指针变量&#xff0c;该指针指向这个函数。即指针存储的地址是一个函数的地址&#xff0c;函数指针就是指向函数的指针。 用途 函数指针可以作为参数传递给其他函数&#xff0c;用于回调函数&am…

跨界电商的科技护航:Socks5代理与代理IP的无限可能

随着全球市场的无缝连接&#xff0c;出海跨界电商成为企业迈向国际舞台的关键一步。然而&#xff0c;面对不同国家和地区的网络环境和限制&#xff0c;科技手段成为企业成功出海的必备利器。本文将深入研究Socks5代理与代理IP在跨界电商中的技术性应用&#xff0c;揭示它们是如…

车载导航系统UI界面,可视化大屏设计(PS源文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享车载导航系统科技风蓝黑简约UI界面、车载系统UI主界面、车载系统科技风UI界面、首页车载系统科技感界面界面的大屏Photoshop源文件&#xff0c;开箱即用&#xff01; 若需 更多行业 相关…

1116 多二了一点

若一个正整数有 2n 个数位&#xff0c;后 n 个数位组成的数恰好比前 n 个数位组成的数多 2&#xff0c;则称这个数字“多二了一点”。如 24、6668、233235 等都是多二了一点的数字。 给定任一正整数&#xff0c;请你判断它有没有多二了那么一点。 输入格式&#xff1a; 输入在…

vxe-table循环生成表格,表格里的某些数值设置颜色

业务需求&#xff1a;表格的列名是循环出来的&#xff0c;后台返回每行的表格数据结构如下&#xff0c;需要表格里只有“当期”的行里数值超限waterGuildLine后显示红色。需要在vxe-table里写个插槽&#xff0c;再写个方法。 <vxe-table border ref"dayTableRef" …

hadoop安装包解压之后的操作

Hadoop解压完成之后配置流程 修改hadoop-env.sh和yarn-env.sh 进入hadoop-3.2.4/etc/hadoop/ 修改这两个文件增加 &#xff1a; JAVA_HOME{java的路径}修改配置文件core-site.xml 和 hdfs-site.xml 进入hadoop-3.2.4/etc/hadoop/ 修改这两个文件增加 &#xff1a; // 这是c…

【MySQL】——数据类型及字符集

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

js 原型 和 原型链

function Person(name,age){ this.name name this.age age } var p new Person(张三,11) //创建构造函数的时候&#xff0c;解析器会自动为构造函数创建prototype属性&#xff0c;prototype属性对应的对象就是原型对象 // prototype 翻译为 原…