SRGAN:使用生成对抗网络对图像进行超分辨率重构
  • 前言
  • 相关介绍
  • SRGAN 的工作原理
  • 核心思想
  • 主要组件
  • 训练目标
  • 优点
  • 缺点
  • 总结
  • 实验环境
  • 项目地址
  • Linux
  • Windows
  • 项目结构
  • 具体用法
  • 准备数据集
  • 进行训练
  • 进行测试
  • 测试基准数据集
  • 测试单张图像
  • 测试单个视频
  • 参考文献


SRGAN:使用生成对抗网络对图像进行超分辨率重构_人工智能

SRGAN:使用生成对抗网络对图像进行超分辨率重构_人工智能_02

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。

相关介绍

SRGAN:使用生成对抗网络对图像进行超分辨率重构_深度学习_03


SRGAN(Super-Resolution Generative Adversarial Networks)是一种用于图像超分辨率(Super-Resolution, SR)的生成对抗网络(Generative Adversarial Network, GAN)架构。SRGAN 能够将低分辨率图像放大到高分辨率图像,同时保持细节清晰且逼真。下面是关于 SRGAN 的详细介绍及其优缺点。

SRGAN 的工作原理
核心思想

SRGAN 是由 Christian Ledig 等人在 2016 年提出的,其主要目标是提高图像的分辨率,同时增强图像的视觉质量。SRGAN 通过使用生成对抗网络(GAN)的框架来实现这一目标。

主要组件
  • 生成器:负责将低分辨率图像放大至高分辨率图像。
  • 判别器:用来评估生成的高分辨率图像的质量,区分它们是否看起来真实。
训练目标
  • 对抗损失:确保生成的高分辨率图像能够欺骗判别器,让判别器误认为是真实的高分辨率图像。
  • 内容损失:通常使用 VGG 网络的特征图来衡量生成图像与真实高分辨率图像之间的相似性。
  • 感知损失:结合对抗损失和内容损失,旨在提高生成图像的视觉质量。
优点
  1. 视觉质量提升:SRGAN 通过对抗训练提高了生成图像的视觉质量,使其看起来更真实、细节更丰富。
  2. 细节保留:相比传统的超分辨率方法,SRGAN 更好地保留了图像的细节。
  3. 适应性强:可以应用于多种类型的图像,包括自然图像、医学图像等。
  4. 端到端训练:整个系统可以通过端到端的方式进行训练,简化了模型设计和训练流程。
  5. 灵活性:可以根据具体应用需求调整模型的参数和训练策略。
缺点
  1. 训练时间和资源:SRGAN 的训练过程可能需要大量的计算资源和较长的时间。
  2. 过度拟合风险:如果没有足够的数据或者正则化不足,模型可能会出现过度拟合的现象。
  3. 噪声敏感性:对输入图像中的噪声非常敏感,噪声可能会被放大到生成的高分辨率图像中。
  4. 质量不稳定性:生成的图像质量可能会因训练过程中的不稳定因素而有所波动。
  5. 计算复杂度:相比于传统的超分辨率方法,如双三次插值,SRGAN 的计算成本更高。
总结

SRGAN 作为一种基于 GAN 的超分辨率技术,能够在保持图像细节的同时显著提高图像的分辨率。它通过对抗学习和内容损失相结合的方法,实现了高质量的图像放大效果。然而,SRGAN 的训练和应用也存在一些挑战,比如较高的计算成本和对噪声的敏感性。尽管如此,SRGAN 仍然是当前图像超分辨率领域的重要里程碑之一。

实验环境

python=3.8.19
torch=1.9.0
torchaudio=0.9.0
torchvision=0.10.0
opencv-python==4.1.2.30 
scikit-image==0.16.2
pillow==7.0.0 
scipy==1.2.1 
tqdm==4.43.0
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

项目地址

Linux

git clone https://github.com/leftthomas/SRGAN.git
cd SRGAN-master
  • 1.
  • 2.

Windows

请到https://github.com/leftthomas/SRGAN.git网站下载源代码zip压缩包。

cd SRGAN-master
  • 1.

项目结构

SRGAN-master
├─benchmark_results
│  └─SRF_4
├─data
│  ├─DIV2K_train_HR
│  ├─DIV2K_valid_HR
│  ├─test
│  │  ├─SRF_2
│  │  │  ├─data
│  │  │  └─target
│  │  ├─SRF_3
│  │  │  ├─data
│  │  │  └─target
│  │  ├─SRF_4
│  │  │  ├─data
│  │  │  └─target
│  │  └─SRF_8
│  │      ├─data
│  │      └─target
│  └─test_videos
├─epochs
├─images
├─out_srf_4_data
│  └─test
│      └─SRF_8
│          └─data
├─pytorch_ssim
│  └─__pycache__
├─statistics
├─training_results
│  └─SRF_4
└─__pycache__
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

具体用法

准备数据集

进行训练

python train.py

optional arguments:
--crop_size                   training images crop size [default value is 88]
--upscale_factor              super resolution upscale factor [default value is 4](choices:[2, 4, 8])
--num_epochs                  train epoch number [default value is 100]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

SRGAN:使用生成对抗网络对图像进行超分辨率重构_深度学习_04


SRGAN:使用生成对抗网络对图像进行超分辨率重构_人工智能_05


SRGAN:使用生成对抗网络对图像进行超分辨率重构_人工智能_06


SRGAN:使用生成对抗网络对图像进行超分辨率重构_重构_07


SRGAN:使用生成对抗网络对图像进行超分辨率重构_重构_08

  • 输出结果位于 training_results 目录中。

进行测试

测试基准数据集
python test_benchmark.py

optional arguments:
--upscale_factor              super resolution upscale factor [default value is 4]
--model_name                  generator model epoch name [default value is netG_epoch_4_100.pth]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

SRGAN:使用生成对抗网络对图像进行超分辨率重构_深度学习_09


SRGAN:使用生成对抗网络对图像进行超分辨率重构_神经网络_10


SRGAN:使用生成对抗网络对图像进行超分辨率重构_人工智能_11

SRGAN:使用生成对抗网络对图像进行超分辨率重构_人工智能_12

  • 输出的超分辨率图像位于 benchmark_results 目录中。
测试单张图像

SRGAN:使用生成对抗网络对图像进行超分辨率重构_生成对抗网络_13

python test_image.py --image_name test.jpg

optional arguments:
--upscale_factor              super resolution upscale factor [default value is 4]
--test_mode                   using GPU or CPU [default value is 'GPU'](choices:['GPU', 'CPU'])
--image_name                  test low resolution image name
--model_name                  generator model epoch name [default value is netG_epoch_4_100.pth]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

SRGAN:使用生成对抗网络对图像进行超分辨率重构_生成对抗网络_14

SRGAN:使用生成对抗网络对图像进行超分辨率重构_深度学习_15

  • 输出的超分辨率图像位于同一目录中。
测试单个视频

SRGAN:使用生成对抗网络对图像进行超分辨率重构_生成对抗网络_16

python test_video.py --video_name test.mp4

optional arguments:
--upscale_factor              super resolution upscale factor [default value is 4]
--video_name                  test low resolution video name
--model_name                  generator model epoch name [default value is netG_epoch_4_100.pth]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

SRGAN:使用生成对抗网络对图像进行超分辨率重构_神经网络_17

SRGAN:使用生成对抗网络对图像进行超分辨率重构_重构_18

SRGAN:使用生成对抗网络对图像进行超分辨率重构_神经网络_19

  • 文章输出视频GIF压缩了。
  • 输出的超分辨率视频和对比视频在同一目录下。

参考文献

[1]  SRGAN 源代码地址:https://github.com/leftthomas/SRGAN.git
[2]  SRGAN 论文地址:https://arxiv.org/abs/1609.04802