NTIRE2023-RTSR-Track2 冠军方案详解

编辑 | Happy
首发 | AIWalker
链接 | https://mp.weixin.qq.com/s/JQ5g9yn_OdjR8hi_tWc4jA

alt

arXiv:2305.02126 , cvpr2023 , code , video

本文了一个实时&轻量图像超分方案Bicubic++,它通过下采样模块降低图像分辨率以减少计算量,在网络尾部采用X6上采样进行图像重建,同时还构建了一个三阶段训练方案。在测试集上, 所提方案比Bicubic指标高~1dB,同时推理速度~1.17ms@RTX3090、2.9ms@RTX3070 (注:fp16精度,720p输入,4K输出)。此外,Bicubic++取得了NTRIE2023-RTSR-Track2 X3超分竞赛冠军,也是所有方案中最快的,所提方案与其他轻量化方案的性能对比可参考下图。值得称道的就是,Bicubic++具有与Bicubic相当快的处理速度,故很有机会成为新的工业标准。

alt

评价标准

由于Bicubic++是面向NTIRE2023-RTSR竞赛而设计,在正式介绍方案之前,我们先介绍了一下该竞赛的评价标准。

其中, 分别表示模型与Bicubic上采样的PSNR指标,t表示模型推理耗时(720p->4K)。此外,由于实时性要求,t必须小于30ms。计算公式就比较简单了,详细信息可参考calc_scoring.

def score(psnr, runtime, psnr_interp=31.697655):
    diff = max(psnr - psnr_interp)
    if diff == 0:
        return 0
    else:
        cte = 0.1
        return ((2 ** diff) * 2) / (cte * (runtime ** 0.5))

本文方案

alt

上图给出了本文方案整体架构示意图,基于此,作者进行参数微调并尝试了不同的训练策略对最大化上述指标。

架构设计

在架构设计过程中,我们发现: 网络的速度并不直接依赖于参数量,而是与Activation相关。因此,更低分辨率的特征可以极大的降低Activation。此外,已有研究表明: 当与上采样操作协同学习时,下采样操作具有正向影响。因此,作者选择先采用stride卷积下采样,然后采用X6上采样以加速网络推理。在某种意义上讲,更低分辨率的特征提取可以认为是一种在空间上数据压缩方式,由于它与上采样协同训练,故该压缩是可逆的。

alt

除了上面作者提到的stride卷积进行下采样外,作者还尝试了上图所提到的降采样方案,如Depth2Space、DWT。经综合考量后,最终选型stride卷积。

alt

在网络结构方面,我们期望采用了最优的通道数以最大化模型推理速度。我们观测到:通道数与推理延迟并非严格的线性关系,见上图。由于可变通道数导致的延迟提升超过了其性能提升,我们决定网络通道数设置为相同通道数。结合上图同时保持算法实时性,作者将模型通道数设置为32。需要注意的是:为了得到最终的模型,作者以非最优通道数(34)模型开始,然后采用全局剪枝得到通道数为32的模型。

除此之外,作者注意到:卷积的bias项被忽视了,它会占据一定比例的整体延迟。因移除bias而导致的延迟减少要超越其导致的PSNR微弱降低。因此,作者在最终的模型中移除了bias参数

上述发现可以概括为如下几点:

  • 处理的数据量与推理延迟强相关,而非参数量;
  • 模块间的通道数变动会降低延迟性能;
  • 对于硬件来说,通道数与延迟之间存在一些 sweet spots,合理的利用可以一定程度提升模型性能;
  • bias会占据一定比例的延迟耗时。

Three-stage Training Pipeline

作者构建了一个三阶段训练范式:

  • Stage1 Slim: 采用更大的通道数进行训练。此时,ch=34, m=2, R=1, DS表示stride卷积。此时所有卷积均带有bias参数。
alt
  • Stage2 Slimer: 全局结构化剪枝。基于上一步所得checkpoint参考上图执行全局结构化剪枝。需要注意的是: 此时剪枝准则并非参数大小或拟合程度,而是验证集上的PSNR指标
  • Stage3 Slimmest: 移除卷积的bias参数项。在经过步骤二后,模型通道数从34减少到了32,加载上一步的checkpoint同时移除bias参数后对整个网络进行再次微调。

训练加速技巧

为尽可能充分利用硬件性能训练如此小的模型,所有的训练流程都需要进行适当调整。这是因为:模型前向与反向过程几乎不怎么耗时,验证集的访存反而会成为实际瓶颈。为加速验证,作者采用48张图进行验证,设置bs为8。考虑到访存瓶颈,作者在训练阶段将训练数据与验证数据均加载到RAM中已减少数据IO。

通过上述调整,1000epoch训练仅需1小时(单个Tesla V100)。此外,由于模型比较小,选择相当小的训练数据(如DIV2K)是可行的,也不会影响验证精度。

本文实验

alt

上表从不同维度对所提方案进行了消融分析,简单汇总如下:

  • 对比Q-T,可以看到:stride卷积具有更优指标;
  • 对比T&A,可以看到:相比ReLU,LeakyReLU可以带来明显PSNR提升且耗时几乎不变;
  • 对比A&E,可以看到:移除bias可以取得更高得分;
  • 对比1-4&E,可以看到:m=2,R=1可以取得最佳得分;
  • 对比PRB,可以看到:基于ch=34进行剪枝可以取得最高得分.

此外,为验证所提训练方案的有效性,作者还对比了A->G, E->H, A->F->I, A->E->H->J等不同优化路线。

alt
alt

上表&图给出了所提方案同其他典型轻量化方案(如FSRCNN、ESPCN、ABPN、XLSR、SXCAT等)的客观与主观效果对比。

alt
alt

上表&图给出了所提方案在NTIRE2023-RTSR竞赛数据集上的客观指标与主观指标。很明显,Bicubic++以显著优势超过了第二名方案。

推荐阅读

  1. ChatGPT聊图像超分,总结确实挺到位,哈哈
  2. 大核分解与注意力机制的巧妙结合,图像超分多尺度注意网络MAN
  3. CVPR2023 | 非局部注意力、局部自注意力、样条注意力协同助力图像复原达成新 SOTA!
  4. NAFNet :无需非线性激活,真“反直觉”!但复原性能也是真强!
  5. CVPR 2022 Oral | MLP进军底层视觉!谷歌提出MAXIM模型刷榜多个图像处理任务
  6. ELAN | 比SwinIR快4倍,图像超分中更高效Transformer应用探索
  7. CNN与Transformer相互促进,助力ACT进一步提升超分性能
  8. CVPR2022 | Restormer: 刷新多个low-level任务指标
  9. Transformer在图像复原领域的降维打击!ETH提出SwinIR:各项任务全面领先

本文由 mdnice 多平台发布

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

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

相关文章

三分钟使用ngrok实现内网穿透

1.官网注册 官网地址:https://ngrok.com/ tips:若使用邮箱注册自行认证 2.下载对应部署电脑 压缩包(此处笔者使用自己电脑因此以Windows11作为案例) 解压下载的ngrok压缩包,在对应目录进入命令提示符装口(也可直接…

免费api接口:物流api,企业工商查询api,游戏api。。。

免费api接口,物流api,企业工商查询api,游戏api。。。都有。 Facebook Games Services - Facebook Games Services 为游戏开发者提供了各种服务, 包括(但不限于) 成就 API, 分数 API, 应用通知, 请求, 游戏养成和 Facebook SDK for Unity.Google Play Games Service…

Git diff 使用 vimdiff 对比差异

在Ubuntu中使用Git时,可使用命令行的git diff命令来对比两次提交的差异,但是这种对比查看方式无法直观地查看修改的差异,在对比和查看时不太方便。 可以使用vimdiff作为Git diff的对比工具,这样就方便了许多,Git的配置…

TensorFlow 03(Keras)

一、tf.keras tf.keras是TensorFlow 2.0的高阶API接口,为TensorFlow的代码提供了新的风格和设计模式,大大提升了TF代码的简洁性和复用性,官方也推荐使用tf.keras来进行模型设计和开发。 1.1 tf.keras中常用模块 如下表所示: 1.2 常用方法 …

TCP/IP网络江湖——数据链路层的协议与传承(数据链路层中篇:数据链路层的协议与帧)

0、引言 网络江湖,宛如千年武林,承载着代代传承的文化和传统。在这个广袤的江湖之中,数据链路层犹如武林门派,代代传承着网络通信的精华。这一部分将带领我们深入探讨数据链路层的协议与传承,揭示其在网络江湖中的精彩故事。 就如同江湖中的武者需要基本功夫作为修行的基础…

mysql如何实现根据经纬度判断某一个坐标是否在一个多边形区域范围内

要根据经纬度判断一个坐标是否在一个多边形区域内,MySQL提供了几种函数来处理地理空间数据,其中包括用于处理多边形区域的函数。 1.创建一个包含多边形区域的表: 首先,创建一个表来存储多边形区域。可以使用ST_GeomFromText函数将…

kuiper 规则sql写法

创建规则对接收到的报文数据进行业务过滤,报文有各种结构的,下面对各种结构报文sql过滤使用进行说明 下面sql规则统一对temperature大于20的数据进行过滤 1:单层结构报文 {"temperature": 35,"humidity": 66 } sql写…

【Leetcode Sheet】Weekly Practice 6

Leetcode Test 2605 从两个数字数组里生成最小数字(9.5) 给你两个只包含 1 到 9 之间数字的数组 nums1 和 nums2 &#xff0c;每个数组中的元素 互不相同 &#xff0c;请你返回 最小 的数字&#xff0c;两个数组都 至少 包含这个数字的某个数位。 提示&#xff1a; 1 < …

MySQL8--my.cnf配置文件的设置

原文网址&#xff1a;MySQL8--my.cfg配置文件的设置_IT利刃出鞘的博客-CSDN博客 简介 本文介绍MySQL8的my.cnf的配置。 典型配置 [client] default-character-setutf8mb4[mysql] default-character-setutf8mb4[mysqld] #服务端口号 默认3306 port3306datadir /work/docker…

一个FlutterCocoapods项目打包问题集锦

一个Flutter&Cocoapods项目打包问题集锦 问题1 github加速问题 cocoapods项目需要访问https://github.com/CocoaPods/Specs.git&#xff0c;众所周知&#xff0c;github经常被墙&#xff0c;导致经常需要借助加速来下载和访问&#xff0c;这里可以使用油猴脚本或者Fastgi…

kibana报错内存溢出问题解决

一、背景&#xff1a; kibana内存溢出&#xff0c;进程被kill掉&#xff0c;导致前端页面访问不到。 报错内容 二、报错原因&#xff1a; 发现是前端 js 报的内存 oom 异常&#xff0c;通过网上资料发现node.js 的默认内存大小为1.4G Node 中通过 JavaScript 使用内存时只能…

Promethues(五)查询-PromQL 语言-保证易懂好学

文章目录 一、介绍二、PromQL 数据类型三、常量1 字符串2 浮点 四、时间序列选择器 Time series Selectors1 即时矢量&#xff08;Instant vector&#xff09;选择器2 范围矢量选择器2.1 时间长度2.2 偏移修饰符2.3 修饰符 3 避免慢速查询和过载 五、子查询六、操作符 Operato…

【C++】深拷贝和浅拷贝 ② ( 默认拷贝构造函数是浅拷贝 | 代码示例 - 浅拷贝造成的问题 )

文章目录 一、默认拷贝构造函数是浅拷贝1、默认拷贝构造函数2、默认拷贝构造函数是浅拷贝机制 二、代码示例 - 浅拷贝造成的问题 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 如果 C 类中 没有定义拷贝构造函数 , C 编译器会自动为该类提供一个 " 默认的拷贝构造函…

连接MySQL时报错:Public Key Retrieval is not allowed的解决方法

问题描述&#xff1a; DBeaver 连接 mysql 时报错&#xff1a;Public Key Retrieval is not allowed&#xff08;不允许公钥检索&#xff09; 解决方法&#xff1a; 连接设置 -> 驱动属性 -> allowPublicKeyRetrievalfalse&#xff08;这里的运输公钥检索是默认关闭的&a…

如何在RK3568开发板上实现USBNET?——飞凌嵌入式/USB Gadget/USB-NET/网络

本文将借助飞凌嵌入式OK3568-C开发板为大家介绍实现USBNET模式的方法&#xff0c;在这之前需要先知道什么是USB Gadget——USB Gadget是指所开发的电子设备以USB从设备的模式通过USB连接到主机。举个例子&#xff1a;将手机通过USB线插入PC后&#xff0c;手机就是USB Gadget。同…

pt24django教程

静态文件访问 不能与服务器端做动态交互的文件都是静态文件&#xff0c;如: 图片,css,js,音频,视频,html文件(部分) 静态文件配置 在 settings.py 中配置一下两项内容: STATIC_URL 静态文件的访问路径&#xff0c;通过哪个url地址找静态文件 &#xff0c;STATIC_URL ‘/s…

[Linux入门]---搭建Linux环境

1.Linux环境的搭建方式 使用Linux操作系统的三种途径&#xff1a; 1.直接安装在物理机上&#xff0c;但是由于 Linux 桌面使用起来非常不友好&#xff0c;不推荐。 2.使用虚拟机软件&#xff0c;将 Linux 搭建在虚拟机上&#xff0c;但是由于当前的虚拟机软件(如 VMWare 之类的…

多线程案例(3) - 定时器,线程池

一&#xff0c;定时器 定时器作用&#xff1a;约定一个时间间隔&#xff0c;时间到达后&#xff0c;执行某段代码逻辑。实际上就是一个 "闹钟" 。 1.1使用标准库中的定时器 标准库中提供了一个 Timer 类. Timer 类的核心方法为 schedule .Timer 类中含有一个扫描线…

element-ui文件下载(单个)

1. 单个附件下载 <el-buttontype"text"size"small"click.native.prevent"download(scope.row)" >下载</el-button>export default {data() {return {downloadUrl: http://127.0.0.1:8881/XX/XX, // 下载接口}},methods: {download(…

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

目录 一、使用深度学习中的循环神经网络&#xff08;RNN&#xff09;或长短时记忆网络&#xff08;LSTM&#xff09;生成诗词二、优化&#xff1a;使用双向 LSTM 或 GRU 单元来更好地捕捉上下文信息三、优化&#xff1a;使用生成对抗网络&#xff08;GAN&#xff09;或其他技术…