NAFNet: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上的40.30 dB PSNR(用于图像去噪),超过了之前的SOTA 0.28 dB,而计算成本不到其一半。
在这里插入图片描述

Introduction

  • 包含GELU[15]和通道注意模块[16](CA)的基线可以进一步简化:我们揭示基线中的GELU可以被视为门控线性单元[10](GLU)的特例,并且由此我们经验性地证明它可以被简单的门(即,特征映射的元素式乘积)代替。
  • 此外,我们还揭示了CA与GLU在形式上的相似性,并且可以去除CA中的非线性激活函数。

Related Works

  1. 大多数方法可以被视为经典解决方案UNet的变体,这些变体带来了性能增益以及系统复杂度,并且我们将复杂度大致分类为块间复杂度和块内复杂度
  2. 与[30]不同的是,我们在GLU中去除了非线性激活函数,而不会降低性能。此外,基于非线性无激活GLU本身包含非线性的事实(因为两个线性变换的乘积提高了非线性),我们的基线可以通过用两个特征图的乘积代替非线性激活函数
  3. 据我们所知,它是第一个在没有非线性激活函数的情况下实现SOTA性能的计算机视觉模型。
    在这里插入图片描述
    (a)多级架构[5,37]串联堆叠UNet架构。(b)多尺度融合架构[25,7]融合了不同尺度的特征。(c)UNet架构,一些SOTA方法采用该架构[39,36]。

Baseline

一个普通的块开始图(b)即卷积操作称为PlainNet

在这里插入图片描述
为什么使用CNN而不是Transformer

  1. 首先,虽然变压器在计算机视觉中表现出良好的性能,但一些作品[13,23]声称它们可能不是实现SOTA结果所必需的。
  2. 第二,深度卷积比自我注意机制更简单[34]。
  3. 第三,本文不打算讨论transformers和卷积神经网络的优缺点,而只是提供一个简单的基线。

Normalization

虽然[26]放弃了批量规格化[18],因为小批量可能会带来不稳定的统计数据[38],[5]重新引入实例规格化[33]并避免了小批量问题。随后,在Transformer发展下,层归一化[3]被越来越多的方法使用,包括SOTA方法[32,39,36,23,22]。基于这些事实,我们推测层规范化可能对SOTA恢复器至关重要,因此我们将层规范化添加到上述普通块中。总而言之,我们将层规范化添加到普通块中,因为它可以稳定训练过程。

Activation

在普通块中用GELU代替ReLU,因为它保持了图像去噪的性能,同时为图像去模糊带来了非平凡的增益。

Attention

  • vanilla自注意机制[34]是由[12,4]采用的,通过所有特征的线性组合来生成目标特征,这些特征通过它们之间的相似性来加权。因此,每个特征都包含全局信息,但其计算复杂度与特征图的大小成二次关系。一些图像恢复任务以高分辨率处理数据,这使得该自注意不实际。
  • [22,21,36]仅在固定大小的局部窗口中应用自注意,以减轻增加的计算的问题。而它缺乏全局信息。我们不采用基于窗口的注意力,因为在平面块中通过深度卷积[13,23]可以很好地捕获局部信息。
  • [39]将空间注意力修改为通道注意力,避免了计算问题,同时保持了每个特征中的全局信息。另外,通道注意的有效性已经在图像恢复任务[37,8]中得到验证,因此我们将通道注意添加到了平坦块中。

到目前为止,我们从头开始构建了一个简单的基线,如表1所示。它可以超越SIDD和GoPro数据集上的SOTA结果,而计算成本只有一小部分。
在这里插入图片描述

Nonlinear Activation Free Network

上面描述的基线是简单和有竞争力的,但是在确保简单性的同时,是否有可能进一步提高性能?它能更简单而不损失性能吗?我们试图通过从一些SOTA方法中寻找共性来回答这些问题[32,39,20,17]。我们发现,在这些方法中,采用了门控线性单元[10](GLU)。这意味着GLU可能是有前途的。我们接下来会讨论它。

Gated Linear Units

在这里插入图片描述
其中,X表示特征图,f和g是线性变换器,σ是非线性激活函数,例如Sigmoid,并且σ表示逐元素乘法。如上所述,将GLU添加到我们的基线可以提高性能,但块内复杂度也在增加。这不是我们所期望的。为了解决这个问题,我们重新审视了基线中的激活函数,即GELU[15]:
在这里插入图片描述
其中Φ表示标准正态分布的累积分布函数。根据[15],GELU可以近似并实现为:
在这里插入图片描述
由方程1和方程2,可以注意到GELU是GLU的一个特例,即f,g是单位函数,取σ为Φ。通过这种相似性,我们从另一个角度推测,GLU可以看作是激活函数的推广,有可能取代非线性激活函数。此外,我们注意到GLU本身包含非线性,并且不依赖于σ:即使σ被移除,Gate(X)= f(X)⊙ g(X)也包含非线性。

在此基础上,我们提出了一个简单的GLU变体:在通道维度上直接将特征图分为两部分,然后将它们相乘,如图4c所示,标记为SimpleGate。与等式3中的GELU的复杂实现相比,我们的SimpleGate可以通过元素乘法来实现,仅此而已:
在这里插入图片描述
X、Y是相同大小的特征图

结果表明,SimpleGate可以替代GELU,替代后网络中只剩下通道注意力中存在激活函数。作者同样进行了优化和替代。

Simplified Channel Attention

在这里插入图片描述
我们将通道注意力[16]引入到我们的块中,因为它捕获全局信息并且计算效率高。如图4a所示:它首先将空间信息压缩到通道中,然后将多层感知应用于它以计算通道注意力,这将用于对特征图进行加权。它可以表示为:
在这里插入图片描述
其中X表示特征图,pool表示将空间信息聚合到通道中的全局平均池化操作。σ是一个非线性激活函数Sigmoid,W1,W2是全连接层,两个全连接层之间采用ReLU。如果我们将通道注意力计算视为一个函数,5可以改写为:
在这里插入图片描述
可以注意到,Eqn.6与Eqn.1非常相似。这启发我们将通道注意力视为GLU的一种特殊情况,它可以像前一小节中的GLU一样简化。通过保留渠道注意力的两个最重要的角色,即聚合全局信息和渠道信息交互,我们提出了简化的渠道注意力:

在这里插入图片描述
简化的通道注意力(方程式7)比原来的简单Eqn.5),如图4a和图4b所示。虽然它更简单,但性能没有损失:SIDD为+0.03 dB(39.93 dB至39.96 dB),GoPro为+0.09 dB(32.76 dB至32.85 dB)。

Experiments

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

python语言总结(持续更新)

本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…

基于springboot和spring-boot-starter-data-jpa快速操作mysql数据库

1、创建springboot项目 2、pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:…

【Spring】基础/体系结构/核心模块

概述&#xff1a; Spring 是另一个主流的 Java Web 开发框架&#xff0c;该框架是一个轻量级的应用框架。 Spring 是分层的 Java SE/EE full-stack 轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse of Control&#xff0c;控制反转&#xff09;和 AOP&#xff08;Aspect…

VMware安装Windows server 2016

1、新建虚拟机&#xff0c;选择自定义模式 2、选择兼容性 4、命名虚拟机 5、固件类型 EFI 虚拟磁盘类型&#xff0c;不同电脑推荐的类型不同&#xff0c;用默认的就行 删除声卡和打印机 检查网络配置 选择本地的Windows server 2016的系统镜像&#xff0c;系统镜像可以去Window…

【MySQL】增删改查进阶

目录 一、数据库约束 约束类型 NULL约束&#xff1a;非空约束 UNIQUE&#xff1a;唯一约束 DEFAULT&#xff1a;默认值约束 PRIMARY KEY&#xff1a;主键约束 FOREIGN KEY&#xff1a;外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…

使用Process Explorer、Dependency Walker和PE信息查看工具快速排查dll动态库因库与库版本不一致导致的加载失败问题

目录 1、问题说明 2、使用Process Explorer查看目标dll动态库有没有动态加载起来 3、使用Dependency Walker查看xxpadll.dll库的库依赖关系&#xff0c;找到xxpadll.dll加载失败的原因 4、使用PE信息查看工具查看目标dll库的时间戳 5、关于xxsipstack2.dll中调用xxdatanet…

NCCL如何打印XML拓扑文件,操作说明和源码展示

NCCL源码解读的视频在这&#xff1a;NCCL集合通信源码解读、案例、任务调度、拓扑_哔哩哔哩_bilibili 一、环境变量设置 1.1 命令行环境变量设置 为了打印XML拓扑文件&#xff0c;需要设置NCCL的环境变量NCCL_TOPO_DUMP_FILE。这个环境变量指定了XML拓扑文件的输出路径和文件…

时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍

化工行业在数字化转型过程中面临数据接入复杂、实时性要求高、系统集成难度大等诸多挑战。福州力川数码科技有限公司科技依托深厚的行业积累&#xff0c;精准聚焦行业痛点&#xff0c;并携手 TDengine 提供高效解决方案。通过应用 TDengine&#xff0c;力川科技助力化工企业实现…

Maven的学习以及安装配置 2024/3/1 idea

1. Maven的安装 1.1 首先查看编程工具合适的Maven版本 我使用的是2024/3/1 版本的idea&#xff0c;接下来我会用这个版本的idea进行演示。idea没有汉化的也可以参考我的步骤。 1、打开idea的设置&#xff0c;搜索Maven&#xff0c;进入Maven设置。 我们可以看到&#xff0c;…

kubernetes——part3-5 核心概念 Service

一、 service作用 使用kubernetes集群运行工作负载时&#xff0c;由于Pod经常处于用后即焚状态&#xff0c;Pod经常被重新生成&#xff0c;因此Pod对应的IP地址也会经常变化&#xff0c;导致无法直接访问Pod提供的服务&#xff0c;Kubernetes中使用了Service来解决这一问题&am…

【脚本】Linux一键扩大虚拟内存的大小

Linux增加虚拟内存其实很简单 就那几个命令&#xff0c;free、mkswap、swapon 但是方便起见我写成了脚本 使用方法 进入你的目录&#xff0c; nano ./install_swap.sh 下面的脚本全文复制&#xff0c;粘贴进去之后&#xff0c;按ctrlx后按y保存 然后运行以下命令 sudo bash …

学习 MySQL 需要知道的 28 个小技巧

前言 随着信息技术的不断发展以及互联网行业的高速增长&#xff0c;作为开源数据库的MySQL得到了广泛的应用和发展。目前MySQL已成为关系型数据库领域中非常重要的一员。 无论是运维、开发、测试&#xff0c;还是架构师&#xff0c;数据库技术都是一个 必备加薪神器&#xff…

【Hive】Hive安装

Hive 第一章 Hive的基础知识 第二章 Hive安装 第三章 DDL&#xff08;Data Definition Language&#xff09;数据定义 第四章 DML&#xff08;Data Manipulation Language&#xff09;数据操作 第五章 Hive查询 第六章 Hive的基础知识 第七章 Hive函数 第八章 分区表和分桶表 …

6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用

目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch&#xff0c; 简称 ES&#xff0c;它是个开源分布式搜索引擎&#xff0c;它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自动发现&#xff0c;索引自动分片&#xff0c;索引副本机制&#xff0c;res…

蓝桥每日打卡--合根植物

#蓝桥#JAVA#合根植物 题目描述 w星球的一个种植园&#xff0c;被分成mn个小格子&#xff08;东西方向m行&#xff0c;南北方向n列&#xff09;。每个格子里种了一株合根植物。 这种植物有个特点&#xff0c;它的根可能会沿着南北或东西方向伸展&#xff0c;从而与另一个格子…

线性代数之矩阵特征值与特征向量的数值求解方法

文章目录 前言1. 幂迭代法&#xff08;Power Iteration&#xff09;幂法与反幂法求解矩阵特征值幂法求最大特征值编程实现补充说明 2. 逆幂迭代法&#xff08;Inverse Iteration&#xff09;移位反幂法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩阵理论推导编程…

【Linux实践系列】:用c语言实现一个shell外壳程序

&#x1f525;本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;博主主页&#xff1a;努力努力再努力wz 那么今天我们就要进入Linux的实践环节&#xff0c;那么我们之前学习了进程控制相关的几个知识点&#xff0c;比如进程的终止以及进程的等待和进程的替换&#xff0c;…

使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)

说明&#xff1a; 本案例采用的定时器3&#xff08;TIM3&#xff09;实现&#xff0c;使用其他定时器是一样配置。 如何新建一个工程以及如何配置LED的端口&#xff0c;请查看前面文章&#xff1a;使用STM32CubeMX实现LED灯每秒闪烁一次&#xff08;STM32G070CBT6单片机&…

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程&#xff0c;附详细图文 大家好&#xff0c;今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图&#xff0c;还是制作架构图&#xff0c;甚至是简单的草图&#xff0c;它都能帮你轻松搞定。…

GStreamer —— 2.15、Windows下Qt加载GStreamer库后运行 - “播放教程 1:Playbin 使用“(附:完整源码)

运行效果 介绍 我们已经使用了这个元素&#xff0c;它能够构建一个完整的播放管道&#xff0c;而无需做太多工作。 本教程介绍如何进一步自定义&#xff0c;以防其默认值不适合我们的特定需求。将学习&#xff1a; • 如何确定文件包含多少个流&#xff0c;以及如何切换 其中。…