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

Simple Baselines for Image Restoration

Abstract.

尽管近年来在图像恢复领域取得了长足的进步,但SOTA方法的系统复杂性也在不断增加,这可能会阻碍对方法的分析和比较。在本文中,我们提出了一个简单的基线,超过了SOTA方法,是计算效率。为了进一步简化基线,我们揭示了非线性激活函数,如Sigmoid、ReLU、GELU、Softmax等是不必要的:它们可以用乘法替换或删除。因此,我们从基线推导出一个非线性激活自由网络,即NAFNet。SOTA结果在各种具有挑战性的基准上实现,例如在GoPro(用于图像去模糊)上达到33.69 dB PSNR,超过了以前的SOTA 0.38 dB,仅消耗了8.4%的计算成本;在SIDD(用于图像去噪)上,PSNR为40.30 dB,超过了以前的SOTA 0.28 dB,而计算成本不到原来的一半。代码和经过训练的模型可以在github.com/megvii-research/NAFNet上发布。

1 Introduction

随着深度学习技术的发展,图像恢复方法的性能有了明显的提高。基于深度学习的方法[5,37,39,36,6,7,32,8,25]取得了巨大的成功。例如,[39]和[8]在SIDD[1]/GoPro[26]上的PSNR分别达到40.02/33.31 dB,用于图像去噪/去模糊。

尽管这些方法具有良好的性能,但它们存在较高的系统复杂性。为了便于讨论,我们将系统复杂度分解为两个部分:块间复杂度和块内复杂度。首先是块间复杂度,如图2所示。[7,25]引入不同大小的特征图之间的联系;[5,37]是多阶段网络,后期对前一阶段的结果进行细化。二是块内复杂性,即块内的各种设计选择。例如[39]中的Multi-Dconv Head Transposed Attention Module和Gated Dconv前馈网络(如图3a所示),[22]中的Swin Transformer Block,[5]中的HINBlock,等等。逐一评估设计选择是不现实的。

基于上述事实,一个自然的问题出现了:低块间复杂度和低块内复杂度的网络是否可能实现SOTA性能?为了实现第一个条件(块间复杂度低),本文采用单级UNet作为体系结构(遵循了一些SOTA方法[39,36]),重点关注第二个条件。为此,我们从一个简单的块开始,其中包含最常见的组件,即卷积、ReLU和快捷方式[14]。从普通块开始,我们添加/替换SOTA方法的组件,并验证这些组件能带来多少性能增益。通过广泛的消融研究,我们提出了一个简单的基线,如图3c所示,它超过了SOTA方法,并且计算效率很高。它有可能激发新的想法,并使它们的验证更容易。由GELU[15]和通道注意模块[16](CA)组成的基线可以进一步简化:我们发现基线中的GELU可以被视为门控线性单元[10](GLU)的一个特例,并由此经验地证明它可以被一个简单的门取代,即特征映射的元素级积。此外,我们还揭示了CA与GLU在形式上的相似性,并且可以去除CA中的非线性激活函数。总之,简单的基线可以进一步简化为非线性无激活网络,即NAFNet。我们主要对SIDD[1]进行图像去噪,对GoPro[26]进行图像去模糊实验,如下[5,39,37]。主要结果如图1所示,我们提出的基线和NAFNet在实现SOTA结果的同时具有计算效率:在GoPro上33.40/33.69 dB,分别超过了之前的SOTA[8] 0.09/0.38 dB,计算成本为8.4%;超过[39].;28 dB,计算成本不到其一半。我们进行了大量的数量和质量实验,以说明我们提出的基线的有效性。

本文的主要贡献如下:

  1. 通过对SOTA方法进行分解并提取其基本组件,我们形成了一个系统复杂度较低的基线(见图3c),它可以超过之前的SOTA方法,并且具有较低的计算成本,如图1所示。它可以帮助研究人员激发新的想法,并方便地评估它们。

  1. 通过揭示GELU、Channel Attention to Gated Linear Unit之间的联系,我们通过删除或替换非线性激活函数(如Sigmoid、ReLU和GELU),进一步简化了基线,并提出了一个非线性激活自由网络,即NAFNet。虽然简化了,但它可以匹配或超过基线。据我们所知,这是首次证明非线性激活函数在SOTA计算机视觉方法中可能不需要。这项工作可能有潜力扩展SOTA计算机视觉方法的设计空间。

2 Related Works

2.1 Image Restoration

图像恢复任务的目的是将退化的图像(如噪声,模糊)恢复为一个干净的图像。最近,基于深度学习的方法[5,37,39,36,6,7,32,8,25]在这些任务上实现了SOTA结果,大多数方法可以被视为经典解UNet[29]的变体。它堆叠块到一个u形结构与跳跃连接。这些变体带来了性能的提高,以及系统的复杂性,我们将复杂性大致分为块间复杂度和块内复杂度。

块间复杂度[37,5]为多级网络,即后期对前一阶段的结果进行细化,每一阶段为u形结构。本设计基于将困难的图像恢复任务分解为多个子任务有助于提高性能的假设。不同的是,[7,25]采用了单阶段设计并获得了竞争性的结果,但它们引入了各种大小的特征图之间的复杂连接。有些方法同时采用了上述策略,如[32]。其他的SOTA方法,如[39,36]保持了单级UNet的简单结构,但它们引入了块内复杂性,我们将在下面讨论。

块内复杂性有很多不同的块内设计方案,我们在这里举几个例子。[39]通过通道注意图而不是空间注意图降低了自我注意[34]的记忆复杂度和时间复杂度。前馈网络采用门控线性单元[10]和深度卷积。[36]引入了基于windows的多头自我注意,类似于[22]。此外,在其块中引入局部增强前馈网络,在前馈网络中加入深度卷积,增强局部信息捕获能力。不同的是,我们揭示了增加系统复杂性并不是提高性能的唯一方法:SOTA性能可以通过一个简单的基线实现。

2.2 Gated Linear Units

门控线性单元[10](GLU)可以通过两个线性变换层的逐元生成来解释,其中一个线性变换层被非线性激活。GLU或其变体已经在NLP中验证了其有效性[30,10,9],并且在计算机视觉中有很好的发展趋势[32,39,17,20]。在本文中,我们揭示了GLU带来的非平凡的改进。与[30]不同的是,我们在不降低GLU性能的情况下,去掉了GLU中的非线性激活函数。此外,基于非线性激活自由GLU本身包含非线性(由于两次线性变换的乘积会产生非线性)的事实,我们的基线可以通过用两个特征映射的乘法替换非线性激活函数来简化。据我们所知,这是第一个在没有非线性激活函数的情况下实现SOTA性能的计算机视觉模型。

相关文章:

Simple Baselines for Image Restoration

Abstract.尽管近年来在图像恢复领域取得了长足的进步,但SOTA方法的系统复杂性也在不断增加,这可能会阻碍对方法的分析和比较。在本文中,我们提出了一个简单的基线,超过了SOTA方法,是计算效率。为了进一步简化基线&…...

Python数据可视化:局部整体图表可视化(基础篇—6)

目录 1、饼图 2、圆环图 3、马赛克图 4、华夫饼图 5、块状/点状柱形图 在学习本篇博文之前请先看一看之前发过的关联知识:...

CSDN新星计划新玩法、年度勋章挑战赛开启

文章目录🌟 写在前面🌟 逐步亮相的活动🌟 勋章挑战赛🌟 新星计划🌟 有付费课程才可参与?🌟 成就铭牌🌟 博客跟社区的关系🌟 写在最后🌟 写在前面 哈喽&#…...

Docker之部署Mysql

通过docker对Mysql进行部署。 如果没有部署过docker,看我之前写的目录拉取镜像运行容器开放端口拉取镜像 前往dockerHub官网地址,搜索mysql。 找到要拉取的镜像版本,在tag下找到版本。 拉取mysql镜像,不指定版本数&#xff0c…...

基于C/C++获取电脑网卡的IP地址信息

目录 前言 一、网卡是什么? 二、实现访问网卡信息 1.引入库及相关的头文件 2.操作网卡数据 3. 完整代码实现 4.结果验证 总结 前言 简单示例如何在windows下使用c/c代码实现 ipconfig/all 指令 提示:以下是本篇文章正文内容,下面案例可供参考…...

28相似矩阵和若尔当标准型

一、关于正定矩阵的一些补充 在此之前,先讲一下对称矩阵中那些特征值为正数的矩阵,这样特殊的矩阵称为正定矩阵。其更加学术的定义是: SSS 是一个正定矩阵,如果对于每一个非零向量xxx,xTSx>0x^TSx>0xTSx>0 正…...

springboot操作MongoDB

启动类及配置import com.mongodb.client.MongoClient;import com.mongodb.client.MongoClients;import com.mongodb.client.internal.MongoClientImpl;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplicatio…...

1月奶粉电商销售数据榜单:销售额约20亿,高端化趋势明显

鲸参谋电商数据监测的2023年1月份京东平台“奶粉”品类销售数据榜单出炉! 根据鲸参谋数据显示,1月份京东平台上奶粉的销量约675万件,销售额约20亿元,环比均下降19%左右。与去年相比,整体也下滑了近34%。可以看出&#…...

跨境数据传输是日常业务中经常且至关重要的组成部分

跨境数据传输是日常业务中经常且至关重要的组成部分。在过去的20年中,由于全球通信网络和业务流程的发展,全球数据流的模式已迅速发展。随着数据从数据中心移到数据中心和/或跨边界移动,安全漏洞已成为切实的风险。有可能违反国家和国际数据传…...

错误: tensorflow.python.framework.errors_impl.OutOfRangeError的解决方案

近日,在使用CascadeRCNN完成目标检测任务时,我在使用这个模型训练自己的数据集时出现了如下错误: tensorflow.python.framework.errors_impl.OutOfRangeError: PaddingFIFOQueue _1_get_batch/batch/padding_fifo_queue is closed and has in…...

springboot项目初始化执行sql

Sprint Boot应用可以在启动的时候自动执行项目根路径下的SQL脚本文件。我们需要先将sql脚本写好,并将这些静态资源都放置在src/main/resources文件夹下。 再配置application.yml: spring.datasource.initialization-mode 必须配置初始化模式initializa…...

Kubernetes之存储管理(中)

NFS网络存储 emptyDir和hostPath存储,都仅仅是把数据存储在pod所在的节点上,并没有同步到其他节点,如果pod出现问题,通过deployment会产生一个新的pod,如果新的pod不在之前的节点,则会出现问题&#xff0c…...

MySQL workbench的基本操作

1. 创建新的连接 hostname主机名输入“local host”和“127.0.0.1”效果是一样的,指的是本地的服务器。 需要注意的是,此处的密码在安装软件的时候已经设定。 点击【Test Connection】,测试连接是否成功。 创建完的连接可以通过&#xff0c…...

【Flink】FlinkSQL中Table和DataStream互转

在我们实际使用Flink的时候会面临很多复杂的需求,很可能需要FlinkSQL和DataStream互相转换的情况,这就需要我们熟练掌握Table和DataStream互转,本篇博客给出详细代码以及执行结果,可直接使用,通过例子可学会Table和DataStream互转,具体步骤如下: maven如下<?xml ver…...

网络总结知识点(网络工程师必备)一

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放,树高千尺,落叶归根人生不易,人间真情 目录 1.TCP UDP协议的区别 2.ARP是第几层协议,其作用...

离线安装samba与配置(.tar方式安装)

一、samba离线安装【安装并设置成功后&#xff0c;相关文件及其位置&#xff1a;①smbd&#xff1a;/usr/local/samba/sbin/smbd②nmdb&#xff1a;/usr/local/samba/sbin/nmbd③配置文件 smb.conf&#xff1a;/usr/local/samba/lib/smb.conf④添加用户的 smbpasswd 文件&#…...

[Java基础]—JDBC

前言 其实学Mybatis前就该学了&#xff0c;但是寻思目前主流框架都是用mybatis和mybatis-plus就没再去看&#xff0c;结果在代码审计中遇到了很多cms是使用jdbc的因此还是再学一下吧。 第一个JDBC程序 sql文件 INSERT INTO users(id, NAME, PASSWORD, email, birthday) VAL…...

基本面向对象编程-计算机基本功能实现_

《C/S项目实训》实验报告 实验名称&#xff1a; 基本面向对象编程-计算机基本功能实现_ 一、实验目的 通过综合实践项目&#xff0c;理解Java 程序设计是如何体现面向对象编程基本思想&#xff0c;掌握OOP方法&#xff0c;掌握事件触发、消息响应机制。进一步巩固面向对…...

C++面向对象之多态性

文章目录C面向对象之多态性1.静态多态2.动态多态3.多态的好处3.1使用方法4.纯虚函数5.虚析构与纯虚析构5.1问题5.2解决6.其他知识点7.代码8.测试结果8.1父类中无虚函数&#xff0c;父类的指针指向子类对象&#xff0c;将调用父类中的函数&#xff0c;无法调用子类中的重写函数&…...

Android性能优化系列篇:弱网优化

弱网优化1、Serializable原理通常我们使用Java的序列化与反序列化时&#xff0c;只需要将类实现Serializable接口即可&#xff0c;剩下的事情就交给了jdk。今天我们就来探究一下&#xff0c;Java序列化是怎么实现的&#xff0c;然后探讨一下几个常见的集合类&#xff0c;他们是…...

5分钟从零到完整:用SongGeneration开启你的AI音乐创作之旅

5分钟从零到完整&#xff1a;用SongGeneration开启你的AI音乐创作之旅 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目&#xff0c;基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术&#xff0c;既能融合人声与伴奏达到和谐统一&#xff0c;也…...

MozJPEG色彩空间扩展终极指南:支持RGBX、BGRX等32位格式的完整教程

MozJPEG色彩空间扩展终极指南&#xff1a;支持RGBX、BGRX等32位格式的完整教程 【免费下载链接】mozjpeg Improved JPEG encoder. 项目地址: https://gitcode.com/gh_mirrors/mo/mozjpeg MozJPEG作为libjpeg-turbo的增强版本&#xff0c;不仅提供了卓越的JPEG压缩性能&a…...

Hasklig 可变字体终极指南:单一文件实现多字重支持的完整教程

Hasklig 可变字体终极指南&#xff1a;单一文件实现多字重支持的完整教程 【免费下载链接】Hasklig Hasklig - a code font with monospaced ligatures 项目地址: https://gitcode.com/gh_mirrors/ha/Hasklig Hasklig 是一款专为程序员设计的开源代码字体&#xff0c;以…...

终极指南:在PC上完美运行PS4游戏的秘密武器

终极指南&#xff1a;在PC上完美运行PS4游戏的秘密武器 【免费下载链接】shadPS4 PS4 emulator for Windows,Linux,MacOS 项目地址: https://gitcode.com/gh_mirrors/shad/shadPS4 你是否曾经梦想过在电脑上畅玩那些只能在PS4上体验的独占大作&#xff1f;今天&#xff…...

Flutter Gradle插件迁移指南:从apply script到声明式plugins的实践

1. 为什么需要迁移到声明式plugins块 最近在维护一个Flutter项目时&#xff0c;我发现每次构建Android端都会弹出一个黄色警告&#xff1a;"You are applying Flutters app_plugin_loader Gradle plugin imperatively using the apply script method..."。这个警告看…...

s2-pro音色定制实战:为品牌IP打造专属语音形象的全流程方案

s2-pro音色定制实战&#xff1a;为品牌IP打造专属语音形象的全流程方案 1. 为什么品牌需要专属语音形象 在当今数字营销时代&#xff0c;品牌IP的语音形象已经成为品牌识别的重要组成部分。一个独特、一致的语音形象能够&#xff1a; 增强品牌辨识度&#xff1a;让用户一听到…...

Stable Yogi Leather-Dress-Collection 一键部署教程:基于Ubuntu的快速环境搭建

Stable Yogi Leather-Dress-Collection 一键部署教程&#xff1a;基于Ubuntu的快速环境搭建 最近在折腾AI图像生成&#xff0c;发现了一个挺有意思的模型叫Stable Yogi Leather-Dress-Collection。听名字就知道&#xff0c;它特别擅长生成皮革、连衣裙这类时尚单品的设计图。对…...

避坑指南:OpenClaw连接Qwen3-32B镜像的5大常见错误

避坑指南&#xff1a;OpenClaw连接Qwen3-32B镜像的5大常见错误 1. 为什么连接Qwen3-32B镜像容易踩坑&#xff1f; 上周我在本地尝试用OpenClaw对接Qwen3-32B镜像时&#xff0c;经历了从满怀期待到怀疑人生的全过程。本以为有了官方镜像就能一键连通&#xff0c;结果从环境配置…...

【花雕学编程】Arduino BLDC 之 AI 迷你小龙虾 MimiClaw 自主闭环控制机器人(带传感器反馈)

从工程视角来看&#xff0c;基于Arduino、使用互补滤波进行姿态控制的BLDC&#xff08;无刷直流电机&#xff09;机器人&#xff0c;是一个典型的嵌入式实时闭环控制系统。它集成了传感器数据融合、控制算法和电机驱动&#xff0c;广泛应用于对姿态稳定性有要求的场景。关于 Mi…...

从一次数据精度丢失的坑说起:详解Pandas fillna的‘静默下转型’与infer_objects的正确用法

从数据精度陷阱到稳健处理&#xff1a;Pandas类型转换的深度防御实践 1. 当.fillna(0)成为数据分析的隐形杀手 凌晨三点的办公室&#xff0c;咖啡杯早已见底。数据分析师李明盯着屏幕上诡异的报表结果——所有百分比计算结果突然变成了整齐的整数。这个看似简单的数据清洗操作…...