当前位置: 首页 > news >正文

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.lryc.cn/news/261929.html

相关文章:

  • STM32超声波——HC_SR04
  • [Excel] vlookup函数
  • Python入门第5篇(爬虫相关)
  • 单元测试二(实验)-云计算2023.12-云南农业大学
  • Axure动态面板的使用以及示例分享
  • 容斥原理的并
  • JavaSE第7篇:封装
  • mysql数据库相关知识【MYSQL】
  • android studio 创建按钮项目
  • gitee提交代码步骤介绍(含git环境搭建)
  • 【MyBatis-Plus】常用的插件介绍(乐观锁、逻辑删除、分页)
  • DApp测试网络Ganache本地部署并实现远程连接
  • 好用的硬盘分区工具,傲梅分区助手 V10.2
  • 【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇
  • Qt图像处理-Qt中配置OpenCV打开本地图片
  • HTML中RGB颜色表示法和RGBA颜色表示法
  • Openwrt源码下载出现“The remote end hung up unexpected”
  • Spring定时任务动态更改(增、删、改)Cron表达式方案实例详解
  • 常用登录加密之Shiro与Spring Security的使用对比
  • 获取文件路径里的文件名(不包含扩展名)
  • HiveSql语法优化二 :join算法
  • Leetcode—459.重复的子字符串【简单】
  • Mac安装Typora实现markdown自由
  • 前后端传参格式
  • 【后端学前端】第三天 css动画 动态搜索框(定位、动态设置宽度)
  • 51.0/表单(详细版)
  • 动态规划(Dynamic Programming)
  • linux使用文件描述符0、1和2来处理输入和输出
  • how to write and run .ps1
  • 如何在PHP中处理跨域请求?