EMT(light sr):Efficient Mixed Transformer for Single Image Super-Resolution

EMT

论文地址:Efficient Mixed Transformer for Single Image Super-Resolution

代码地址:Fried-Rice-Lab/EMT: Efficient Mixed Transformer for Single Image Super-Resolution (github.com)

摘要

​ 最近,基于 Transformer 的方法在单图像超分辨率 (SISR) 中取得了令人印象深刻的结果。然而,局部性机表现不好和较高的模型复杂性限制了它们在超分辨率(SR)领域的应用。为了解决这些问题,提出了一种新的方法——高效混合Transformer(EMT)。具体来说,提出了由多个连续Transformer层组成的混合Transformer块(MTB),其中一些像素混合器(PM)被用来取代自注意机制(SA)。PM可以通过像素移位操作增强局部信息聚合。此外, 使用条带窗口,通过利用图像各向异性来获得有效的全局依赖建模。

现阶段问题

基于 Transformer 的 lightweight SR方法研究重点:如何在降低复杂度的同时能增强必要的局部性机制还能获得高效的全局依赖建模

贡献

  1. 对于局部性机制改进:开发了一个Pixel Mixer(PM),通过融合来自不同通道的相邻像素知识来改进局部性机制来扩展局部感受野.
  2. 使用类似EDT的窗口计算attention(利用图像各向异性来获得有效的全局依赖建模),并简化了模型的计算复杂度

网络架构

2023-11-30_18-14-26

Mixed Transformer Block for SR

​ 提出了混合Tranformer块(MTB),它由两种类型的Transformer层组成,即使用PixelMixer的局部Transformer(LTL)和使用window attention的全局Transformer层(GTL)。

Striped Window

该striped windows主要是在计算attn的时候,通过使用 Q T Q^T QT代替了 K K K,同时,在shift了window之后,没有进行mask操作,直接进行的attn的计算。通过这种方式,降低了计算复杂度。

2023-12-12_15-59-52

2023-12-12_16-15-12

def forward(self, x: torch.Tensor) -> torch.Tensor or tuple:
    r"""
    Args:
        x: b c h w

    Returns:
        b c h w -> b c h w
    """
    
     # attn_layer=[Conv2d1x1(dim, dim * 2),
      #                       nn.BatchNorm2d(dim * 2)],
       #          proj_layer=[Conv2d1x1(dim, dim)],

    # calculate qkv

    qkv = self.attn(x)
    _, C, _, _ = qkv.size()

    # split channels
    qkv_list = torch.split(qkv, [C // len(self.window_list)] * len(self.window_list), dim=1)

    output_list = list()
    if self.return_attns:
        attn_list = list()

    for attn_slice, window_size, shift_size in zip(qkv_list, self.window_list, self.shift_list):
        _, _, h, w = attn_slice.size()
        attn_slice = self.check_image_size(attn_slice, window_size)

        # roooll!
        if shift_size != (0, 0):
            attn_slice = torch.roll(attn_slice, shifts=shift_size, dims=(2, 3))

        # cal attn
        _, _, H, W = attn_slice.size()
        q, v = rearrange(attn_slice, 'b (qv head c) (nh ws1) (nw ws2) -> qv (b head nh nw) (ws1 ws2) c',
                         qv=2, head=self.num_heads,
                         ws1=window_size[0], ws2=window_size[1])
        attn = (q @ q.transpose(-2, -1))
        attn = f.softmax(attn, dim=-1)
        if self.return_attns:
            attn_list.append(attn.reshape(self.num_heads, -1,
                                          window_size[0] * window_size[1],
                                          window_size[0] * window_size[1]))  # noqa
        output = rearrange(attn @ v, '(b head nh nw) (ws1 ws2) c -> b (head c) (nh ws1) (nw ws2)',
                           head=self.num_heads,
                           nh=H // window_size[0], nw=W // window_size[1],
                           ws1=window_size[0], ws2=window_size[1])

        # roooll back!
        if shift_size != (0, 0):
            output = torch.roll(output, shifts=(-shift_size[0], -shift_size[1]), dims=(2, 3))

        output_list.append(output[:, :, :h, :w])

    # proj output
    output = self.proj(torch.cat(output_list, dim=1))

    if self.return_attns:
        return output, attn_list
    else:
        return output

Pixel Mixer

​ Shift: A Zero FLOP, Zero Parameter Alternative to Spatial Convolutions通过提出移位卷积而不是空间卷积在网络中引入局部性。

神经网络轻量化改进之卷积结构设计_改进cnn_AI追随者的博客-CSDN博客

​ 在此基础上我们通过改进它扩展了这个想法并开发了 PM。具体来说,PM首先将特征通道分成五个相等的组,然后将前四组的特征点按特定顺序(左、右、上、下)移动,并用超出范围的像素填充0。通过在相邻特征之间交换几个通道,将周围的知识混合,并将通道混合模块与感受野扩展,以快速捕获局部空间知识。此外,通过将边缘特征点与自注意机制中的每个输入窗口相关联的边缘特征点可以获得与其他源不同的知识。

2023-12-01_10-55-00

#Algorithm 1: Pixel Mixer for EMT, PyTorch-like Code
import torch 
class PixelMixer(torch.nn.Module): 
	def __init__(self): 
		super().__init__() 
		# list of shift rules 
		self.rule = [[-1, 0], [0, 1], [0, -1], [1, 0], [0, 0]] 
	def forward(self, x): 
	groups = torch.split(x, [x.shape[1]//5] * 5, dim=1) 
	# use different shift rules for each group 
	groups = [torch.roll(group, shifts=rule, dims=(2, 3)) 
		for group, rule in zip(groups, self.rule)] 
	return torch.cat(groups, dim=1)

真实使用的PixelMixer

class PixelMixer(nn.Module):
    def __init__(self, planes: int, mix_margin: int = 1) -> None:
        super(PixelMixer, self).__init__()

        assert planes % 5 == 0

        self.planes = planes
        self.mix_margin = mix_margin  # 像素的偏移量
        self.mask = nn.Parameter(torch.zeros((self.planes, 1, mix_margin * 2 + 1, mix_margin * 2 + 1)),
                                 requires_grad=False)

        # 左移一位
        # [0., 0., 0.],
        # [0., 0., 1.],
        # [0., 0., 0.]
        self.mask[0::5, 0, mix_margin, -1] = 1.
        # 右移一位
        # [0., 0., 0.],
        # [1., 0., 0.],
        # [0., 0., 0.]
        self.mask[1::5, 0, mix_margin, 0] = 1.
        # 上移一位
        # [0., 0., 0.],
        # [0., 0., 0.],
        # [0., 1., 0.]
        self.mask[2::5, 0, -1, mix_margin] = 1.
        # 下移一位
        # [0., 1., 0.],
        # [0., 0., 0.],
        # [0., 0., 0.]
        self.mask[3::5, 0, 0, mix_margin] = 1.
        # 不移动
        # [0., 0., 0.],
        # [0., 1., 0.],
        # [0., 0., 0.]
        self.mask[4::5, 0, mix_margin, mix_margin] = 1.

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        m = self.mix_margin
        x = f.conv2d(input=f.pad(x, pad=(m, m, m, m), mode='circular'),
                     weight=self.mask, bias=None, stride=(1, 1), padding=(0, 0),
                     dilation=(1, 1), groups=self.planes)
        return x

结论

​ 本研究提出了一种用于 SISR 的 Efificint Mixed Transformer (EMT),它由浅层特征提取、深层特征提取和重建三个单元组成。深度特征提取单元使用混合Transformer块(MTB),每个块中全局Transformer层(GTL)和局部Transformer层(LTL)的混合。LTL 主要由像素混合器 (PM,移位卷积操作) 和多层感知器组成。PM通过通道分离和像素移位操作增强了网络的局部性机制,而不需要额外的复杂性。GTL中自注意(SWSA)的条纹窗口利用图像的各向异性来获得更有效的全局依赖建模。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 修改游戏对象的旋转角度Rotation的方法

在Unity中要修改游戏对象中的旋转角度,即下图中的Rotation: 有三个方法: 1、 使用欧拉角(Euler Angles):欧拉角是一组表示旋转的三个角度值(绕X轴的旋转、绕Y轴的旋转和绕Z轴的旋转)。 transf…

word中表格跨页

有时候在word中输入内容后,出现断开情况,如下图 处理的方法是,选中表格,右击选项,在行--允许跨页断行勾选即可

妙手ERP特色功能来袭:上线Lazada包邮营销功能,全方位助力卖家高效引流!

包邮是线上消费者作出购买决策的重要因素,据Lazada平台调研显示:73%的受访者希望商品免费配送,有84%的消费者使用过Lazada包邮优惠券,其中75%的消费者对此感到满意。由此可见,包邮已成为打动东南亚消费者下单的主要原因…

【教程】如何将重要文件进行混淆和加密

怎么保护苹果手机移动应用程序ipa中文件安全? ios应用程序存储一些图片,资源,配置信息,甚至敏感数据如用户信息、证书、私钥等。这些数据怎么保护呢?可以使用iOS提供的Keychain来保护敏感数据,也可以使用加…

智选假日酒店大中华区迎来开业、在建500家里程碑

“90后”先锋品牌,智选假日酒店在华实现骄人突破,成就非凡 2023年12月12日,中国上海 — 洲际酒店集团今日宣布,旗下中高端精选服务品牌智选假日酒店迎来大中华区的开业和在建酒店数量突破500家这一发展里程碑。智选假日酒店凭借其…

深入理解Java关键字volatile

前置知识-了解以下CPU结构 如下图所示,每个CPU都会有自己的一二级缓存,其中一级缓存分为数据缓存和指令缓存,这些缓存的数据都是从内存中读取的,而且每次都会加载一个cache line,关于cache line的大小可以使用命令cat…

Oracle(2-17) RMAN Maintenance

文章目录 一、基础知识1、Retention Policy 保留政策2、Recovery Window - Part 1 恢复窗口-第1部分3、Cross Checking 交叉检查4、The CROSSCHECK Command CROSSCHECK命令5、OBSOLETE VS EXPIRED 过时与过期6、Deleting Backups and Copies 删除备份和副本7、The DELETE Comma…

如何使用内网穿透实现iStoreOS软路由R4S公网远程访问局域网电脑桌面

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址…

【生物信息学】scRNA-seq数据分析(一):质控~细胞筛选~高表达基因筛选

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 质控2. 细胞筛选3. 高表达基因筛选 一、实验介绍 质控~ 细胞筛选 ~高表达基因筛选 二、实验环境 1. 配置虚拟环境 可使用如下指令: conda create -n bio python3.…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面,这时候点击下载依然可以导出文件,但是文件打不开且接口实际上返回的是401,这是因为文件下载的方式通过window创建a标签的形式打开的,并没有判断token失效问题 const res await this.$axios.…

java开发的智能聊天机器人_超级AI_支持自动绘画功能

支持Web、Android、IOS、H5等多终端应用。它使用OpenAI的ChatGPT模型实现智能聊天机器人,并支持绘图自动生成Vincent图。未来还将接入国内大型AI模型,如文心一言、统一千问、MOSS等模型,并不断更新以满足用户需求。 AI大脑软件中的AI绘画功能…

SpringBoot中MyBatis-Flex的集成和使用

一、MyBatis-Flex 是什么​ MyBatis-Flex是一个基于MyBatis的数据访问框架,专门为Flex应用程序而设计的。它提供了一种灵活而高效的方式来处理Flex应用程序中的数据访问,可以轻松地连接到各种数据源,并提供了一些方便的工具和功能&#xff0c…

【NSX-T】3.搭建NSX-T环境 —— 以 Compute Manager 的形式注册 vCenter Server

目录 3. 以 Compute Manager 的形式注册 vCenter Server补充说明 参考资料 3. 以 Compute Manager 的形式注册 vCenter Server (1)在 NSX 用户界面主页上,依次选择 System > Configuration > Fabric > Compute Managers &#xff0…

博客社区资讯APP源码/开源知识付费社区小程序源码/资源社区源码/独有付费阅读+兼容安卓苹果

源码简介: 博客社区资讯APP源码,它是开源知识付费小程序源码,作为资源社区源码,它具有独有付费阅读兼容安卓苹果。它是Typecho后端的。 知识付费社区RuleApp多内容发布,后端基于Typoche博客程序开发带完整安装文档 竟…

蓝桥杯第一场强者挑战赛(C)SOSdp

之前在cf上面接触过SOSdp(子集dp),这里就碰到了。 思路: 异或运算即非进位加法运算,因此如果需要进位的话,那么就无法满足题意,因此条件弱化为不需要进位,也就是不存在同一位上面都是…

为什么要禁止除GET和POST之外的HTTP方法

一, HTTP请求有哪些 GET和POST是最为常见方法,而且大部分主流网站只支持这两种方法,因为它们已经可以满足功能需求。 GET获取服务器资源POST用来像服务器指定的URL的资源提交数据。其余方法一般服务器不会响应,并抛出404或405. …

Spring的IOC容器初始化流程

Spring的IOC容器初始化流程 IOC容器初始化在SpringApplication对象创建完毕执行run方法时执行refreshContext()时开始。 准备BeanFactory,设置其类加载器和environment等 执行BeanFactory后置处理器,扫描要放入容器的Bean信息,得到对应的Bea…

Linux命令——软件包管理

软件包管理 一、yum list二、yum install三、yum remove 总结 博主最近项目上线,操作了linux系统,感觉命令很容易遗忘,因此总结一下,本文记录的是linux中相关的软件包管理命令 如果是新建立的虚拟机,可能需要安装某些软…

Python 自动化之批量处理文件(一)

批量新建目录、文档Pro版本 文章目录 批量新建目录、文档Pro版本前言一、做成什么样子二、基本思路1.引入库2.基本架构 三、用户输入模块四、数据处理模块1.excel表格数据获取2.批量数据的生成 总结 前言 我来写一个不一样的批量新建吧。在工作中,有些同学应该会遇…

算法:有效的括号(入栈出栈)

时间复杂度 O(n) 空间复杂度 O(n∣Σ∣),其中 Σ 表示字符集,本题中字符串只包含 6 种括号 /*** param {string} s* return {boolean}*/ var isValid function(s) {const map {"(":")","{":"}","["…