EDSR论文阅读

问题

  1. 现有的遥感算法大多将不同尺度因子的超分辨视为独立问题,没有考虑和利用超分辨中不同尺度间的相互关系。这些算法需要许多特定于尺度的网络,这些网络需要被独立训练来处理不同的尺度。

改进的地方

  1. 优化删除了传统剩余网络中不必要的模块。
  2. 产生新的多尺度结构。

好处

  1. 在稳定训练过程的同时,通过扩展模型的大小进一步提高了性能。
  2. 本文还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,可以在单一模型中重建不同尺度的高分辨率图像。
  3. 简化的模型训练起来比较容易

模型:
在这里插入图片描述
这样消耗的内存比较少

思想:
提高网络模型性能的最简单方法是增加参数的数量。在卷积神经网络中,可以通过多层叠加或增加滤波器的数量来提高模型的性能。具有深度(层数)B和宽度(特征通道数)F的一般CNN架构大约占用O(BF)内存,参数为O(BF的平方)。因此,在计算资源有限的情况下,增加F而不是B可以使模型容量最大化。
但是,我们发现增加超过一定水平的feature map的数量会使训练过程在数值上不稳定。Szegedy等[24]报道了类似的现象。我们采用因子为0.1的残差尺度[24]来解决这个问题。在每个剩余块中,在最后一个卷积层之后放置常数尺度层。当使用大量的滤波器时,这些模块极大地稳定了训练过程。
在测试阶段,为了提高计算效率,可以将这一层集成到之前的卷积层中。
在这里插入图片描述
用2倍的放大模型去看看3倍的放大进行初始化
在这里插入图片描述
16个resblock
首先,预处理模块位于网络的前端,减少不同尺度输入图像的方差。每个预处理模块由两个5×5核的残块组成。采用较大的核作为预处理模块,可以在网络早期覆盖较大的接受域的同时,保持特定尺度的部分较浅。在多尺度模型的最后,将特定尺度的上采样模块并行放置,进行多尺度重构。上采样模块的架构类似于前一节中描述的单尺度模型。我们构建了最终的多尺度模型(MDSR)
B = 80 F = 64。3种不同尺度的单尺度基线模型各有大约150万个参数,总计450万个,而我们的多尺度基线模型只有320万个参数。然而,多尺度模型表现出与单尺度模型相当的性能。

### EDSR 模型实现与复现 #### PyTorch 实现的 EDSR 项目 EDSR 的官方 PyTorch 版本可以通过以下 GitHub 镜像仓库获取[^1]。此项目的代码提供了完整的训练和测试流程,适合用于研究和生产环境下的超分辨率重建任务。 该项目的主要特点如下: - 提供了单尺度(Single-Scale)和多尺度(Multi-Scale)版本的 EDSR 模型。 - 移除了 SRResNet 中的批量标准化 (Batch Normalization) 层,从而提升了模型性能[^2][^4]。 - 使用残差模块作为基础构建单元,并未在残差模块外部添加 ReLU 激活函数。 以下是基于上述描述的一个简化版 EDSR 模型定义: ```python import torch.nn as nn class ResidualBlock(nn.Module): def __init__(self, channels, res_scale=0.1): super(ResidualBlock, self).__init__() self.res_scale = res_scale self.conv1 = nn.Conv2d(channels, channels, kernel_size=3, stride=1, padding=1, bias=False) self.relu = nn.ReLU(inplace=True) self.conv2 = nn.Conv2d(channels, channels, kernel_size=3, stride=1, padding=1, bias=False) def forward(self, x): residual = self.conv1(x) residual = self.relu(residual) residual = self.conv2(residual).mul(self.res_scale) return x + residual class EDSR(nn.Module): def __init__(self, scale_factor, num_features=64, num_blocks=32, res_scale=0.1): super(EDSR, self).__init__() self.head_conv = nn.Conv2d(3, num_features, kernel_size=3, stride=1, padding=1, bias=False) body = [] for _ in range(num_blocks): body.append(ResidualBlock(num_features, res_scale)) self.body = nn.Sequential(*body) self.tail_conv = nn.Conv2d(num_features, 3 * (scale_factor ** 2), kernel_size=3, stride=1, padding=1, bias=False) self.pixel_shuffle = nn.PixelShuffle(scale_factor) def forward(self, x): head = self.head_conv(x) out = self.body(head) out += head # Skip connection across the entire network tail = self.tail_conv(out) output = self.pixel_shuffle(tail) return output ``` #### 复现实验注意事项 尽管官方实现了高质量的 EDSR 模型,但在实际复现过程中可能会遇到一些挑战。例如,在某些实验中可能无法达到论文中的效果[^3]。此时可以考虑以下几个方面来优化结果: - 数据预处理:确保输入数据经过充分清洗并符合标准格式。 - 超参数调整:尝试不同的学习率、批次大小以及正则化策略。 - 初始化方式:采用 Xavier 或 Kaiming 初始化方法以加速收敛过程。 如果仍然存在较大差异,则建议参考其他开源项目中的改进版本,比如 RCAN 中提供的 EDSR 相关代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值