论文阅读:Residual-Guide Network for Single Image Deraining

又是一篇基于残差学习的论文,出自厦大丁兴浩老师团队。也是较早之前看的,回过头再看一遍。

2018 ACMMM: ResGuideNet

本文主要提出了一种残差指导特征融合网络ResGuideNet,利用较浅模块生成的残差来指导更深的模块,最终对不同模块的输出进行特征融合,完成单幅图像的去雨。
在这里插入图片描述

具体地讲,ResGuideNet主要是提出了一种级联网络,使用较浅模块生成的残差来指导较深模块,据此可以随着模块深度的增加能够得到负残差的由粗到细的一个估计。同时不同模块的输出融合到最终的重建模块。采用了递归卷积来构建每个模块,并对所有中间结果进行监督。这样在减少了参数的同时也实现了良好的性能。

主要思想阐述:

现有方法存在问题:

1、现有方法的雨纹去除模型大多数在单一模型中学习负残差,这些模型需要使用大量的参数进行精心设计来捕捉雨纹的不同模式。
2、大多数使用欧氏距离进行优化的方法会产生模糊的预测,因为每像素的损失不像人类视觉感知那样接近输出图像和GT图像之间的感知差异。
3、资源匮乏的模型无法满足去雨任务的各种需求,复杂雨图无法通过简单的模型完成处理。

本文主要思想:

1、每个模块都包含了一个全局捷径(global shortcut)来预测残差。
2、将预测的残差从较浅的块连接到较深的块,较浅的残差可以指导更深的预测,以生成更细化估计。
3、对所有中间输出都进行了监督,使得随着模块的加深,能够得到一个由粗到细的残差。
4、基本的去雨模块基于带有完备捷径策略的递归计算,减少网络参数的同时保持了良好的性能。

主要创新之处:

1、建立了

### 残差网络(ResNet)架构及其实现 #### 背景与概念 残差网络(Residual Networks,简称 ResNets)是一种用于解决深层神经网络训练困难问题的创新架构。随着卷积神经网络(CNNs)层数增加,梯度消失或爆炸等问题会显著影响模型性能。然而,ResNets 的核心设计——残差块(residual block),通过引入短路连接(skip connections),允许信息直接传递到后续层[^1]。 这种机制使得误差信号在反向传播过程中更加稳定,从而能够成功训练数百甚至上千层的深度网络。实验表明,在许多计算机视觉任务中,更深的 ResNets 架构通常能带来更好的表现[^1]。 --- #### 结构组成 ResNet 的基本单元是 **残差块**,其主要特点是利用跳跃连接(shortcuts 或 skip connections)。具体来说: - 输入 \( x \) 经过一系列变换操作(如卷积、批量归一化和激活函数)后得到输出 \( F(x) \),然后将其加回到原始输入 \( x \)[^1]。 \[ y = F(x) + x \] 其中,\( F(x) \) 表示经过若干层处理后的特征图,而 \( x \) 是未经修改的输入张量。这一简单的线性叠加方式被称为“恒等映射”,有助于缓解梯度消失/爆炸现象并促进优化过程。 当维度不匹配时(例如通道数不同),可以通过调整 shortcut 连接中的权重矩阵来完成适配[^2]。 --- #### 实现方法 以下是基于 Python 和 TensorFlow/Keras 的简单 ResNet 块实现代码: ```python import tensorflow as tf from tensorflow.keras.layers import Conv2D, BatchNormalization, ReLU, Add def residual_block(input_tensor, filters, strides=1): """ 定义一个标准的残差块 参数: input_tensor: 输入张量 filters: 卷积核数量 strides: 步幅,默认为 1 返回: 输出张量 """ # 主路径部分 x = Conv2D(filters=filters, kernel_size=(3, 3), strides=strides, padding='same')(input_tensor) x = BatchNormalization()(x) x = ReLU()(x) x = Conv2D(filters=filters, kernel_size=(3, 3), strides=1, padding='same')(x) x = BatchNormalization()(x) # Shortcut 部分 if strides != 1 or input_tensor.shape[-1] != filters: shortcut = Conv2D(filters=filters, kernel_size=(1, 1), strides=strides)(input_tensor) shortcut = BatchNormalization()(shortcut) else: shortcut = input_tensor # 合并主路径与 shortcut output = Add()([x, shortcut]) output = ReLU()(output) return output ``` 此代码片段定义了一个基础版本的残差块,适用于构建更复杂的 ResNet 模型。 --- #### 应用场景 ResNet 已成为图像分类、目标检测等多个领域的重要工具之一。例如,在 ImageNet 数据集上的竞赛中,ResNet 屡次刷新记录,并被广泛应用于实际生产环境之中[^1]。 此外,得益于其实现简便性和高效性,研究者们还开发出了各种变体形式,比如 Pre-activation ResNet 及 Wide ResNet 等改进版结构[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值