【论文阅读笔记】Revisiting RCAN: Improved Training for Image Super-Resolution

news2024/11/15 9:34:36

论文地址:https://arxiv.org/abs/2201.11279
代码地址:https://github.com/zudi-lin/rcan-it

论文小结

  本文的工作,就是重新审视之前的RCAN,然后做实验来规范化SR任务的训练流程。

  此外,作者得出一个结论:尽管RCAN是一个非常大的SR架构,拥有超过400个卷积层,但作者认为限制模型能力的主要问题仍然是欠拟合而不是过拟合。

  增加训练迭代次数,能明显提高模型性能。而应用正则化技术通常会降低预测结果。作者将自己的模型表示为RCAN-it。(Residual Channel Attention Network,-it stands for imporved training)

  总得来说,收获点就一句话:模型性能受限于欠拟合而不是过拟合。所以使用更大的训练步幅(因为原始训练没陷入长时间的收敛平原,仍在缓慢上升),减少使用正则化技术。

论文简介

  通过更先进的训练策略,本文使用RCAN,在Manga109数据集的 × 2 \times2 ×2任务上得到了 0.44 d B 0.44 dB 0.44dB的PSNR值提升,达到了 39.88 d B 39.88dB 39.88dB。这个指标已经足够优秀,可以媲美或者超过SOTA算法,比如CRAN和SwinIR。
  结合自集成推断(self-ensemble inference),PSNR可以进一步提升到 40.04 d B 40.04dB 40.04dB,优于现有的所有方法,不管带不带自集成推断结构。

  在广泛使用的DF2K数据集上,作者发现模型性能受限于欠拟合而不是过拟合。所以,作者基于这个观察,可以得出几个结论:
  首先,简单地增加训练迭代次数可以明显提高分数,而正则化技术通常会降低SR模型的性能
  其次,使用最先进的优化器和学习率调度策略的大批量训练方案(large-batch training scheme),该模型可以在减少4倍的训练时间情况下,匹配原始的训练结果。
  第三,将ReLU更改为SiLU,这样简单的架构修改,可以实现延长两倍训练时间的类似训练结果。
  第四,使用 × 2 \times2 ×2模型作为 × 3 \times3 ×3模型和 × 4 \times4 ×4模型的初始化,可以减少训练时间和成本,同时仍然获得有竞争力的性能。

  有一些工作为了保证训练的稳定性,使用warm-up技术来避免学习率突然上升。
  像LAMB这样的优化器,通过分层自适应机制对Adam优化器进行了改进。

  与超分任务不同,图像识别的主要挑战是过度拟合。所以权重衰减、更强的数据增强,Mixup和随机深度等正则化技术通常会提高深度分类模型的准确性。本文证明了深度超分模型的性能受到欠拟合的限制

方法介绍

网络结构

  RCAN是当时较为流行的一种SR架构,其是对EDSR等工作进行了三点主要改进。
  (1)它在每个残差块的第二个 3 × 3 3\times3 3×3卷积层之后使用SE Blocks(squeeze-excitation)或者channel-attention block来对不同通道进行重新加权。
  (2)它有新颖的残差设计,其带有长跳跃连接,以绕过低频信息并有利于更好地学习高频细节。
  (3)RCAN是一个非常深的架构,具有很大的模型容量,因为它有 200 200 200个残差块和 400 400 400多个卷积层。

  本文的工作基本保持RCAN架构不变。在架构角度上,唯一的修改就是使用SiLU(Sigmoid Linear Unit,也成为了Swish)激活函数代替了原始的ReLU激活函数。Swish激活函数的表示如下:其中 σ ( x ) \sigma(x) σ(x)是sigmoid函数。 f ( x ) = x ∗ σ ( x ) (1) f(x)=x*\sigma(x)\tag{1} f(x)=xσ(x)(1)

训练策略

大batchSize优化器

  原始的RCAN训练策略是使用Adam优化器,小的batchSize( B S = 16 BS=16 BS=16),小的学习率( η = 1 0 − 4 \eta=10^{-4} η=104)。这个训练组合收敛缓慢,大概需要在单个GPU上收敛 7 7 7天。所以作者先使用多GPU训练,以支持大的batchSize。由于梯度更新下降的总数减少,所以应用了一个线性缩放规则:mini-batchSize放大了 k k k倍,那么学习率也乘以 k k k倍。
  为了训练稳定性,作者使用 L a m b Lamb Lamb优化器,这是一种专为大批量(large-batch)训练而设计的分层自适应优化器。同时还使用余弦退火代替了原始的多步学习率调度器,其唯一超参数就是迭代(或epochs)的总数。通过采用这些技术,作者有效地将batchSize大小增大了 16 16 16倍,并通过并行性大大节省了训练时间。

更长的训练

  作者发现(如下图左所示),RCAN在baseline训练管道要结束的时候,RCAN的验证集PSNR指标仍在提高,这表明仍存在欠拟合问题。所以增加训练迭代次数,可以有效地减轻欠拟合问题。

大patchSize进行finetune

  在Swinir有验证,使用更大patchSize的patch能提高性能

  但增大输入的长宽尺寸会带来GPU内存的急剧上升,导致训练耗时增加,甚至在硬件预算上不可行。
  所以,作者将训练管道分为了两个阶段,(1)正常的patchSize尺寸( 48 × 48 48\times48 48×48);(2)更大的patchSize尺寸( 64 × 64 64\times64 64×64)用于finetune,同时使用更少的迭代次数。在更大的patchSize尺寸时,为了满足GPU内存,会缩小batchSize。

正则化技术

  测试了一些数据增强技术,mixup,随机深度,随机翻转和通道打乱(channel shuffle)。mixup使用Beta( 0.15 , 0.15 0.15,0.15 0.15,0.15)来生成随机插值权重。对于随机深度,作者使用 0.5 0.5 0.5的概率随机跳过一个残差块。

  尽管增加正则化可以有效地提高图像识别大模型的性能,但作者发现RCAN并不能从正则化中收益。因为它会出现欠拟合,而不是过拟合

热启动

  RCAN对于 × 2 , × 3 , × 4 \times2,\times3,\times4 ×2×3×4模型的主体结构是一样的,除了最后的预测模块(一个卷积和pixel shuffle)。所以可以使用 × 2 \times2 ×2的权重为 × 3 \times3 ×3模型和 × 4 \times4 ×4模型进行初始化。

  训练的时候,由于尾部的预测模块不同。所以可以先将主体结构进行冻结,只finetune尾部的预测模块(速度快,只需要不到 1 1 1小时),然后再一起finetune整个模型。

论文实验

原论文实验管道和超参数更变

  使用DF2K数据集用于训练,DF2K由DIV2K和Flickr2K组成,总共3550张图像。验证集为Set5、Set14、B100、Urban100、Manga109。指标评价选择PSNR和SSIM。指标评估的颜色空间为YCbCr空间的Y通道。损失函数都采用 L 1 L1 L1函数。使用随机水平和垂直翻转

  模型选择的是RCAN,有 10 10 10个残差组(residual groups, RG),每个残差组有20个残差模块和一个卷积层。所有卷积层的通道数为 64 64 64,除了输入和上采样层。

  原始训练策略是batchSize为 16 16 16,学习率为 η = 1 0 − 4 \eta=10^{-4} η=104,优化器为Adam( β 1 = 0.9 , β 2 = 0.999 \beta_1=0.9,\beta_2=0.999 β1=0.9,β2=0.999),训练 1725 K 1725K 1725K次迭代,每经过 20 % 20\% 20%次迭代衰减一半的学习率。
  本文的训练策略更改为batchSize为 64 64 64,学习率 η \eta η使用线性所发规则。为了训练的稳定性,将Adam优化器更改为Lamb优化器。原始训练策略使用1张V100的GPU,作者使用4张。经过了 80 K 80K 80K次迭代,训练了1.6天。

  由下表的对比可以看出,如果学习率 η \eta η是严格遵守线性缩放规则( 0.0016 = 256 16 ∗ 1 0 − 4 0.0016=\frac{256}{16}*10^{-4} 0.0016=16256104),那么对比原有的管道,会有指标上的性能差异。但如果使用 2 ∗ 1 0 − 4 2*10^{-4} 2104作为起始点,即 0.0032 = 256 16 ∗ 2 ∗ 1 0 − 4 0.0032=\frac{256}{16}*2*10^{-4} 0.0032=162562104,那么就有和原始管道相近的性能,但只使用 23 % 23\% 23%的时间。所以,本文的baseline超参数为 B S = 16 , η = 0.0032 BS=16,\eta=0.0032 BS=16η=0.0032。需要注意的是,这个RCAN指标是比原论文高的。因为其使用了更大的数据集(DF2K),原文只使用了DIV2K数据集。黑盒测试数值,无实际参考意义。

  另外,作者注意到 ,使用更大的学习率会造成训练的不稳定。比如当 η = 0.0064 \eta=0.0064 η=0.0064时,在大约 2 K 2K 2K次迭代之后,会陷入无法收敛阶段(NaN)。当 η = 0.0048 \eta=0.0048 η=0.0048时,在大约 16 K 16K 16K次迭代后会陷入无法收敛阶段(NaN)。

训练管道修改

消融学习

  下表展示了架构修改、训练策略修改、正则化变化的消融学习。
  对PSNR指标的增长有用的训练策略调整为:激活函数从ReLU改为SiLU,更长的训练周期(训练RCAN共 160 K 160K 160K,是baseline的两倍),使用更大patchSize输入进行finetune。这三个更改,对五个验证集都有指标的提升,且是相互独立的。三个更改平均能带来 0.042 d B 0.042dB 0.042dB的提升。

  同时,从上表可以看出,一些数据增强,都是会降低验证集的PSNR指标的

集成效果

  三个训练策略的组合带来的指标效果如下表所示:组合起来也带来提升。最后一行 Oracle结果,是在每个测试集上分别finetune的结果,也就是过拟合的结果,用以查看RCAN的上限值的。本文最好的RCAN效果和Oracle对比,仍有 0.388 0.388 0.388的PSNR指标差距。这表明,即使使用相对“过时”的RCAN架构,仍有很大的改进空间。

  另外,已知Set5数据集有JPEG伪影,Manga数据集由漫画图像组成(合并本封面,是彩色的)。

相关训练结果

  warm start的训练,以及扩大训练迭代次数的结果如下表。

  RCAN、RCAN-it与当时其他的SOTA超分算法进行定量对比。

  在公开数据集上的可视化对比。

  具体来说,RCAN-it 重建了具有更高对比度的条带图案,而其他方法往往会产生不切实际的伪影(图 3,第 4 行)。 此外,在以前的模型中可以消除背景对比度较低的结构,而本文的 RCAN-it 可以保留它们(图 3,第一行)。 请注意,除了激活函数的小修改之外,RCAN-it 与现有方法相比,只需更好的训练即可重建高频细节,而不是引入专门用于学习高频分量的新模块或结构。

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

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

相关文章

Vue单文件学习项目综合案例Demo,黑马vue教程

文章目录 前言一、小黑记事本二、购物车三、小黑记账清单 前言 bilibili视频地址 一、小黑记事本 效果图 主代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible&…

linux增加物理磁盘并挂载到文件系统

centos7增加物理磁盘并挂载到文件系统 1、查看所有磁盘情况 fdisk -l2、创建挂载路径 mkdir /data3、格式化磁盘 #磁盘filesystem(上图标红处) mkfs.xfs -f /dev/sda建议 与其它磁盘文件系统保持一致&#xff0c;我这里是xfs 可通过 cat /dev/sda查看 4、挂载 mount /dev/…

5个精美的wordpress中文企业主题模板

元宇宙WordPress主题模板 简洁大气的元宇宙 Metaverse WordPress主题模板&#xff0c;适合元宇宙行业的企业官网使用。 https://www.jianzhanpress.com/?p3292 职业技术培训WordPress主题模板 简洁大气的职业技术培训WordPress主题&#xff0c;适合用于搭建教育培训公司官方…

3个wordpress中文企业主题模板

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 老年公寓wordpress主题 浅绿色简洁实用的老年公寓wordpress主题&#xff0c;适合做养老业务的老年公…

37.仿简道云公式函数实战-数学函数-SIN

1. SIN函数 SIN 函数可用于计算角度的正弦值&#xff0c;返回 -1 到 1 之间的数值。 2. 函数用法 SIN(弧度) 使用该函数时&#xff0c;需要将角度转化为弧度参与计算&#xff0c;可通过 RADIANS 函数 将角度转化为弧度。 3. 函数示例 如计算 SIN(30) 的值&#xff0c;可设…

【linux进程间通信(二)】共享内存详解以及进程互斥概念

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程间通信 1. 前言2. 共享内…

【stm32】hal库学习笔记-UART/USART串口通信(超详细!)

【stm32】hal库学习笔记-UART/USART串口通信 hal库驱动函数 CubeMX图形化配置 导入LCD.ioc RTC设置 时钟树配置 设置LSE为RTC时钟源 USART设置 中断设置 程序编写 编写主函数 /* USER CODE BEGIN 2 */lcd_init();lcd_show_str(10, 10, 16, "Demo12_1:USART1-CH340&q…

MLflow【部署 01】MLflow官网Quick Start实操安装、模型训练、数据预测(一篇学会部署使用MLflow)

一篇学会部署使用MLflow 1.版本及环境2.官方步骤Step 1 - Get MLflowStep 2 - Start a Tracking ServerStep 3 - Train a model and prepare metadata for loggingStep 4 - Log the model and its metadata to MLflowStep 5 - Load the model as a Python Function (pyfunc) an…

yolov5导出onnx转engine推理

yolov5导出注意事项 配置 需要提供配置文件和权重文件&#xff0c;不然导出模型不能正常推理。 默认提供检测头。 ModuleNotFoundError: No module named ‘tensorrt’安装TensorRT-python发现报错 由于ModuleNotFoundError: No module named ‘tensorrt’安装TensorRT-pyt…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题&#xff0c;双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决&#xff1a; 合并两个有序链表&#xff1a; 使用两个指针分别指向两个链表的头部&#xff0c;逐一比较节点的值&#xff0c;将较小的节点链接到结果链表…

【学习iOS高质量开发】——协议与分类

文章目录 一、通过委托与数据源协议进行对象间通信1.委托模式2.要点 二、将类的实现代码分散到便于管理的数个分类之中1.如何实现2.要点 三、总是为第三方类的分类名称加前缀1.为什么总是为第三方类的分类名称加前缀2.要点 三、勿在分类中声明属性1.勿在分类中声明属性的原因2.…

OpenAI文生视频大模型Sora概述

Sora&#xff0c;美国人工智能研究公司OpenAI发布的人工智能文生视频大模型&#xff08;但OpenAI并未单纯将其视为视频模型&#xff0c;而是作为“世界模拟器” &#xff09;&#xff0c;于2024年2月15日&#xff08;美国当地时间&#xff09;正式对外发布。 Sora可以根据用户…

三维测量技术及应用

接触式测量&#xff08;Contact Measurement&#xff09;&#xff1a; 坐标测量机&#xff08;CMM, Coordinate Measuring Machine&#xff09;&#xff1a;通过探针直接接触物体表面获取三维坐标数据。优点是精度高&#xff0c;但速度慢&#xff0c;对软质材料测量效果不佳&am…

qt 软件发布(Windows)

1. 开发环境 QtCreator MSVC编译器 2. 源码编译 生成release或者debug版本的exe可执行文件(x64或x86) 3. windeployqt 打包 ①左下角开始菜单栏找到QT的命令交互对话框&#xff0c;如下图MSVC 2017 64-bit(根据第二步编译的类型选择64位或者32位)。 ②cd 切换到第二步可…

igolang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct

杂题——1097: 蛇行矩阵

题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 输入格式 本题有多组数据&#xff0c;每组数据由一个正整数N组成。&#xff08;N不大于100&#xff09; 输出格式 对于每一组数据&#xff0c;输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。矩阵三角…

【算法与数据结构】841、LeetCode钥匙和房间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; 复杂度分析&#xff1a; 时间复杂度&#xff1a; O ( ) O() O()。空间复杂…

VR系统的开发流程

虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;系统是一种通过计算机技术模拟出的具有三维视角和交互性的虚拟环境&#xff0c;使用户能够沉浸在其中并与虚拟环境进行交互。这种技术通常利用头戴式显示器和手柄等设备&#xff0c;使用户能够感觉到仿佛身临其境…

(全注解开发)学习Spring-MVC的第三天

全注解开发 第一部分 : 1.1 消除spring-mvc.xml 这些是原来spring-mvc.xml配置文件的内容 <!--1、组件扫描, 使Controller可以被扫描到--><context:component-scan base-package"com.itheima.controller"/><!--2、非自定义的Bean, 文件上传解析器--&…

mysql优化指南之优化篇

二、优化 现在的理解数据库优化有四个维度&#xff0c;分别是&#xff1a; 硬件升级、系统配置、表结构设计、SQL语句及索引。 那优化的成本和效果分别如下&#xff1a; 优化成本&#xff1a;硬件升级>系统配置>表结构设计>SQL语句及索引。 优化效果&#xff1a;…