SRGAN

本文介绍了SRGAN(超级分辨率生成对抗网络)的工作原理及其在图像超分辨率任务中的应用。SRGAN由生成网络G和判别网络D组成,通过生成对抗过程实现图像的高质量放大。文章提出使用感知损失函数替代传统的PSNR指标,以更好地匹配人类视觉感受。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SRGAN

以下内容将介绍Christian Ledig等人在2017年发表的文章[Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network]。该文讨论了生成对抗网络在超分中的应用方法。

em这片文章让我读下去的理由
在这片文章中,作者论证PSNR(峰值信噪比)不适合作为SR评判标准这一观点,因为高的PSNR并不能保证人对图片有好的视觉感受。为了使超分效果更接近人的视觉感受,作者采用了新的损失函数perceptual loss,是的,很独特。

虽然其实主要原因是小组汇报我必须要汇报这一篇……


目录


SRGAN的工作内容

Generative adversarial network (GAN) 由 G (generative) 网和D (Discriminator)网组成,附上原文传送门[>.<]。GAN所要完成的工作,原文举了个栗子:

G网是印假钞的人,D网是检测假钞的人。G的工作是让自己印出来的假钞尽量能骗过D,D则要尽可能的分辨自己拿到的钞票是银行中的真票票还是G印出来的假票票。

开始的时候呢,G技术不过关,D能指出这个假钞哪里很假。G每次失败之后都认真总结经验,努力提升自己,每次都进步。直到最后,D无法判断钞票的真假……

SRGAN的工作就是:
G网通过低分辨率的图像生成高分辨率图像,由D网判断拿到的图像是由G网生成的,还是数据库中的原图像。当G网能成功骗过D网的时候,那我们就可以通过这个GAN完成超分了。


方法

我们想要通过低分辨率的图像 ILR 生成一个高分辨率,超分辨图像 ISR

ILR 是高分辨率图像 IHR 的低分辨率副本。高分辨率图像全部来自于数据库。 ILR 是对 IHR 进行高斯滤波然后进行下采样得到的。其中下采样的系数是r(就是说,如果 ILR 大小是W×H×C,那么 IHR 大小就是rW×rH×CWH是宽和高,C是通道数)。

在GAN中,G网与D网之间是一场maxmin的博弈游戏,即如下公式:

这里写图片描述

SRGAN中,也同样是这样的博弈游戏。判别网络(D网)希望最大化判别出图片来自训练集还是生成网络(G网)生成的概率。生成网络则希望能尽可能蒙蔽判别网络。因此能得到如下公式:
这里写图片描述

emmmmmmm……写不下去的崩溃。

好了,我又来了。文章中说道,将生成网络训练为前馈CNN GθG ,其中的参数 θG 通过优化一个特殊的损失函数 lSR 得到的,即:
这里写图片描述
损失函数后面再讲,先从生成网络开始。


生成网络(G网)

这里写图片描述
emmmmm把网络图放上来我就真的不知道该讲什么了,很想讲,自行看图……
在生成网络中,作者应用了分布相同的B残差块,每个残差块都有两个卷积层,卷积层后面加上batch-normalization,并用PReLU作为激活函数。卷积层的卷积核都是3×3,并有64个特征图。在这个网络里面,作者通过训练两个子像素卷积层来提高分辨率(就是图里倒数第二和倒数第三个大块块),这种方法来自[><]

判别网络(D网)

这里写图片描述
网络放在这里了,请自行感受吧。


Perceptual loss function

这篇文章里,提出了perceptual loss这样一个损失函数,是为了弥补MSE(均方误差)造成细节缺失,在MSE基础上建模的。
作者将perceptual loss 函数 lSR 定义为内容损失(content loss)和对抗损失(adversarial loss)的和,即:
这里写图片描述
lSRX 是内容损失函数, lSRGen 是对抗损失。

内容损失

基于像素的MSE损失被定义为:
这里写图片描述
这是当前很流行的一种应用于超分的损失函数,因为这种方法能使结果得到良好的PSNR。然而作者通过请26位评判者打分的方式,证明高PSNR并不能带来良好的感官效果。因此作者基于多篇文章提出了视觉相似性的损失函数。
作者所选择的是基于VGG的内容损失。先基于预训练的19层VGG网络的ReLU激活层来定义损失函数。
这里写图片描述
图片来源于大佬[><],不行就删。
我们可以看到,作者是将内容损失表示为重构图像 GθG(ILR) 和参考图像 IHR 特征表示的欧氏距离。

对抗损失

作者基于训练样本在判别器上的概率定义了对抗损失:
这里写图片描述


实验中的一丢丢

在Goodfellow提出的原始GAN中,我们是训练 k 次D网,然后训练一次G网。在这里,我们仍然用这种结构,并将k取1。

好了我写完了,撒花完结……

### 部署 SRGAN 模型的方法 #### 一、模型加载与初始化 在实际应用中,部署 SRGAN 模型的第一步是实例化 `SRGanModel` 类并加载预训练好的模型权重文件。这通常通过以下代码实现: ```java srGanModel = new SRGanModel(activity); srGanModel.loadModel(SRGAN_MODEL_FILE); // 加载模型权重文件 [^1] ``` 上述代码片段展示了如何在一个 Android 应用程序环境中完成模型的加载操作。 --- #### 二、推理阶段 当模型成功加载后,可以通过调用其推理函数来处理输入图片,并生成高辨率的结果图像。具体实例如下所示: ```java Bitmap resultImage = srGanModel.inference(inputLowResolutionImage); // 调用推理函数 // 显示结果图像至界面组件 ImageView imageView = findViewById(R.id.result_image_view); imageView.setImageBitmap(resultImage); ``` 此部实现了从低辨率图像到高辨率图像的转换,并将结果显示给用户。 --- #### 三、训练与测试流程概述 如果需要重新训练或微调 SRGAN 模型,则可按照以下方式执行命令行脚本进行训练和验证: ```bash python main.py --LR_path /path/to/low_resolution_images --GT_path /path/to/ground_truth_images ``` 该指令指定了低辨率图像路径 (`--LR_path`) 和对应的地面真值图像路径 (`--GT_path`) 来启动训练过程[^2]。 训练完成后,模型会自动生成权重文件存储于指定目录下(如 `results\SRGAN_x4-SRGAN_ImageNet`),以便后续部署使用[^3]。 --- #### 四、前后端集成方案 对于更复杂的场景,比如基于微信小程序的应用开发,可能还需要考虑前端页面设计以及后端服务接口搭建等问题。这类项目的完整教学资源可以在特定平台上获取,例如小鹅通中的相关课程提供了详细的指导说明[^4]。 --- ### 注意事项 - 确保运行环境已安装必要的依赖库。 - 如果是在移动端设备上部署,需注意性能优化问题,避免因计算量过大而导致卡顿现象发生。 - 对于云端服务器部署情况,建议采用轻量化版本的框架以减少资源消耗。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值