SRGAN:使用生成对抗网络对图像进行超分辨率重构
- 前言
- 相关介绍
- SRGAN 的工作原理
- 核心思想
- 主要组件
- 训练目标
- 优点
- 缺点
- 总结
- 实验环境
- 项目地址
- Linux
- Windows
- 项目结构
- 具体用法
- 准备数据集
- 进行训练
- 进行测试
- 测试基准数据集
- 测试单张图像
- 测试单个视频
- 参考文献
前言
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
相关介绍
- [1] SRGAN 源代码地址:https://github.com/leftthomas/SRGAN.git
- [2] SRGAN 论文地址:https://arxiv.org/abs/1609.04802
SRGAN(Super-Resolution Generative Adversarial Networks)是一种用于图像超分辨率(Super-Resolution, SR)的生成对抗网络(Generative Adversarial Network, GAN)架构。SRGAN 能够将低分辨率图像放大到高分辨率图像,同时保持细节清晰且逼真。下面是关于 SRGAN 的详细介绍及其优缺点。
SRGAN 的工作原理
核心思想
SRGAN 是由 Christian Ledig 等人在 2016 年提出的,其主要目标是提高图像的分辨率,同时增强图像的视觉质量。SRGAN 通过使用生成对抗网络(GAN)的框架来实现这一目标。
主要组件
- 生成器:负责将低分辨率图像放大至高分辨率图像。
- 判别器:用来评估生成的高分辨率图像的质量,区分它们是否看起来真实。
训练目标
- 对抗损失:确保生成的高分辨率图像能够欺骗判别器,让判别器误认为是真实的高分辨率图像。
- 内容损失:通常使用 VGG 网络的特征图来衡量生成图像与真实高分辨率图像之间的相似性。
- 感知损失:结合对抗损失和内容损失,旨在提高生成图像的视觉质量。
优点
- 视觉质量提升:SRGAN 通过对抗训练提高了生成图像的视觉质量,使其看起来更真实、细节更丰富。
- 细节保留:相比传统的超分辨率方法,SRGAN 更好地保留了图像的细节。
- 适应性强:可以应用于多种类型的图像,包括自然图像、医学图像等。
- 端到端训练:整个系统可以通过端到端的方式进行训练,简化了模型设计和训练流程。
- 灵活性:可以根据具体应用需求调整模型的参数和训练策略。
缺点
- 训练时间和资源:SRGAN 的训练过程可能需要大量的计算资源和较长的时间。
- 过度拟合风险:如果没有足够的数据或者正则化不足,模型可能会出现过度拟合的现象。
- 噪声敏感性:对输入图像中的噪声非常敏感,噪声可能会被放大到生成的高分辨率图像中。
- 质量不稳定性:生成的图像质量可能会因训练过程中的不稳定因素而有所波动。
- 计算复杂度:相比于传统的超分辨率方法,如双三次插值,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
项目地址
- SRGAN 源代码地址:https://github.com/leftthomas/SRGAN.git
Linux
git clone https://github.com/leftthomas/SRGAN.git
cd SRGAN-master
Windows
请到
https://github.com/leftthomas/SRGAN.git
网站下载源代码zip压缩包。
cd SRGAN-master
项目结构
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__
具体用法
准备数据集
- SRGAN 源代码地址提供了训练、测试所需使用的数据集。
进行训练
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]
- 输出结果位于 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]
- 输出的超分辨率图像位于 benchmark_results 目录中。
测试单张图像
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]
- 输出的超分辨率图像位于同一目录中。
测试单个视频
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]
- 文章输出视频GIF压缩了。
- 输出的超分辨率视频和对比视频在同一目录下。
参考文献
[1] SRGAN 源代码地址:https://github.com/leftthomas/SRGAN.git
[2] SRGAN 论文地址:https://arxiv.org/abs/1609.04802
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv10训练自己的数据集(交通标志检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目