WDSR:Wide Activation for Efficient and Accurate Image Super-Resolution

本文介绍了WDSR方法,该方法通过在激活函数前增加特征宽度来提升图像超分辨率的效率和准确性。WDSR-A和WDSR-B是提出的新模型,其中WDSR-A通过先收缩后扩张的卷积层设计来保持复杂度,而WDSR-B使用线性低秩卷积解决通道数问题。此外,论文还提出Weight Normalization(WN)替代BN,以解决超分辨率任务中BN的局限性。实验结果显示,WDSR方法在性能和计算效率方面表现出优势。

Wide Activation for Efficient and Accurate Image Super-Resolution

Jiahui Yu,Yuchen Fan,Jianchao Yang,Ning Xu,Zhaowen Wang,Xinchao Wang,Thomas Huang

本文是NTRIE2018年超分辨率比赛的冠军。

主要贡献

  1. 论文提出在激活函数前with expand feature可以使更多信息通过,提升网络性能,基于此提出WDSR-A。
  2. 论文使用linear low-rank convolution作为基本的模块,提出WDSR-B。
  3. 论文发现weight normalization对SR问题有改进。

WDSR-A

论文发现如果直接增加激活函数前的通道数,在不引入更多参数的情况下,对网络性能的提升没有任何作用。于是论文为了保证复杂度不上升,同时还加宽激活函数前的通道数,提出了一种先使通道数变窄再加宽的方法,提出了WDSR-A。

 WDSR-A的残差块结构如中间的图,和左边的图RB比较,可以看出它把第一个卷积层变窄,而把激活函数前面的卷积层变宽了。假设第一个卷积层的宽度为w_{1},激活函数前的卷积层宽度为w_{2},在RB中

### NeXtSRGAN 超分辨率 GAN 的实现 NeXtSRGAN 是一种基于 Super-Resolution GAN 的改进模型,其核心在于利用 ConvNeXt 构建判别器网络以提升图像细节的表现力和生成质量。以下是有关其实现的关键部分: #### 判别器设计 ConvNeXt 结构被引入到判别器的设计中,通过分层特征提取来增强对高分辨率图像真实性的判断能力。ConvNeXt 使用深度可分离卷积以及残差连接机制,在保持计算效率的同时提升了性能[^1]。 ```python import tensorflow as tf from tensorflow.keras import layers def convnext_block(input_tensor, filters, kernel_size=7): x = layers.DepthwiseConv2D(kernel_size=kernel_size, padding='same')(input_tensor) x = layers.LayerNormalization(epsilon=1e-6)(x) x = layers.Dense(filters * 4)(x) x = layers.Activation('gelu')(x) x = layers.Dense(filters)(x) return layers.Add()([input_tensor, x]) def build_discriminator(img_shape=(128, 128, 3), num_blocks=3): input_img = layers.Input(shape=img_shape) x = layers.Conv2D(64, kernel_size=3, strides=2, padding="same")(input_img) x = layers.LeakyReLU(alpha=0.2)(x) current_filters = 64 for _ in range(num_blocks): x = convnext_block(x, current_filters) current_filters *= 2 if current_filters > img_shape[-1]: break x = layers.Conv2D(current_filters, kernel_size=3, strides=2, padding="same")(x) x = layers.LeakyReLU(alpha=0.2)(x) x = layers.Flatten()(x) output = layers.Dense(1, activation='sigmoid')(x) model = tf.keras.Model(inputs=input_img, outputs=output, name="convnext_discriminator") return model ``` 上述代码展示了如何构建一个基于 ConvNeXt 的判别器架构。它采用逐步下采样的方式减少空间维度并增加通道数,从而捕获更深层次的语义信息[^2]。 #### 生成器设计 对于生成器而言,可以借鉴已有的超分辨率技术如 EDSR 或 RCAN 来搭建基础框架,并调整参数适配具体应用场景需求[^3]。 ```python def res_block(input_tensor, filters): shortcut = input_tensor x = layers.Conv2D(filters, kernel_size=3, padding='same', use_bias=False)(input_tensor) x = layers.ReLU()(x) x = layers.Conv2D(filters, kernel_size=3, padding='same', use_bias=False)(x) return layers.Add()([shortcut, x]) def upscale_ps(input_tensor, factor=2): return layers.UpSampling2D(size=factor, interpolation='bilinear')(input_tensor) def build_generator(lr_shape=(32, 32, 3)): inputs = layers.Input(shape=lr_shape) x = layers.Conv2D(64, kernel_size=9, padding='same')(inputs) x = layers.ReLU()(x) residual = x for _ in range(16): x = res_block(x, 64) x = layers.Conv2D(64, kernel_size=3, padding='same')(x) x = layers.BatchNormalization()(x) x = layers.Add()([residual, x]) x = upscale_ps(x, factor=4) out = layers.Conv2D(3, kernel_size=9, padding='same', activation='tanh')(x) generator_model = tf.keras.models.Model(inputs=[inputs], outputs=out, name="generator") return generator_model ``` 此段脚本定义了一个典型的残差块堆叠型生成器结构,适用于大多数 SISR(Single Image Super Resolution)任务中的低频重建阶段。 #### 训练过程概述 训练过程中需注意平衡生成器与判别器之间的对抗关系,通常会设置不同的损失函数组合来优化整体表现效果。例如 LSGAN 提倡使用的最小二乘误差替代传统交叉熵作为目标函数之一;而针对特定数据集特性还可能加入感知损失(perceptual loss),风格迁移项(style transfer term)等辅助约束条件进一步改善视觉体验品质。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值