如何使用GAN拯救你的低分辨率老照片

技术如何使用GAN拯救你的低分辨率老照片如何使用GAN拯救你的低分辨率老照片,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1 项目背景了解GAN的

如何用GAN保存你的低分辨率老照片,针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的小伙伴找到更简单更容易的方法。

1 项目背景

了解GAN的人都知道,GAN擅长捕捉概率分布,因此非常适合图像生成任务。在拍摄和传输图片和视频的过程中,我们经常会对图像进行压缩,导致图像的分辨率较低。此外,设备早些年拍摄的照片也存在分辨率低的问题,比如十年前的分辨率为320*240。为了解决这个问题,有必要使用图像超分辨率技术

我们用GAN来完成图像超分辨率的任务,需要做的准备工作包括:

(1) Linux系统还是windows系统,使用Linux更有效率。

(2)安装的Pytorch需要进行GPU训练。

2 原理简介

图像超分辨率任务的输入是低分辨率图像,输出是分辨率提高的图片。以下是常见的框架图[1]:

如何使用GAN拯救你的低分辨率老照片

该框架首先通过插值方法对输入图进行上采样,然后利用卷积层学习输入。这种框架的缺点是计算成本相对较高,因为整个网络运行在高分辨率的图上。

随后,研究人员提出在网络后端放大分辨率,扩大通道数量,然后重新分配以获得高分辨率图像。这个操作叫做(PixShuffle)[2],这样整个网络的大部分计算都是在低分辨率图像上进行的,如下图所示:

如何使用GAN拯救你的低分辨率老照片

以上构成了图像超分辨率的基本思想。之后,研究者将GAN纳入超分辨率框架[3],实际上增加了对抗损失,同时用我们常说的感知损失代替了重建的MSE损失。

至于各种超分辨率框架的具体原理,可以搬到有三个AI知识的星球,也可以自己学习。由于这是一个实用的专栏,我们将不完整地介绍原理。

3 模型训练

超分辨率重建任务的大部分数据集是通过从高分辨率图像下采样获得的。论文中经常选择ImageNet数据集。因为我们打算在这里还原人脸的清晰度,所以我们选择了一个常用的高清人脸数据集CelebA-HQ,它发布于2019年,包含了3万张不同属性的高清人脸图像,其中图像大小都是10241024。预览如下。

如何使用GAN拯救你的低分辨率老照片

接下来,我们解释代码:

3.1 数据预处理

图像超分辨率数据集往往是从高分辨率图像中采样得到低分辨率图像,然后形成图像对进行训练。以下是训练和验证集中数据处理的核心代码:

# #训练集高分辨率地图预处理功能。

def train_hr_transform(裁剪大小):

返回撰写([

随机作物(作物_

size),

        ToTensor(),

])

## 训练集低分辨率图预处理函数

def train_lr_transform(crop_size, upscale_factor):

    return Compose([

        ToPILImage(),

        Resize(crop_size // upscale_factor, interpolation=Image.BICUBIC),

        ToTensor()

    ])

## 训练数据集类

class TrainDatasetFromFolder(Dataset):

    def __init__(self, dataset_dir, crop_size, upscale_factor):

        super(TrainDatasetFromFolder, self).__init__()

        self.image_filenames = [join(dataset_dir, x) for x in listdir(dataset_dir) if is_image_file(x)] ##获得所有图像

crop_size = calculate_valid_crop_size(crop_size, upscale_factor)##获得裁剪尺寸

        self.hr_transform = train_hr_transform(crop_size) ##高分辨率图预处理函数

        self.lr_transform = train_lr_transform(crop_size, upscale_factor) ##低分辨率图预处理函数

##数据集迭代指针

    def __getitem__(self, index):

        hr_image = self.hr_transform(Image.open(self.image_filenames[index])) ##随机裁剪获得高分辨率图

        lr_image = self.lr_transform(hr_image) ##获得低分辨率图

        return lr_image, hr_image

    def __len__(self):

        return len(self.image_filenames)

## 验证数据集类

class ValDatasetFromFolder(Dataset):

    def __init__(self, dataset_dir, upscale_factor):

        super(ValDatasetFromFolder, self).__init__()

        self.upscale_factor = upscale_factor

        self.image_filenames = [join(dataset_dir, x) for x in listdir(dataset_dir) if is_image_file(x)]

关于如何使用GAN拯救你的低分辨率老照片问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/52412.html

(0)

相关推荐

  • java怎么设置每天定时任务的框架(java定时任务存在什么问题)

    技术java中常用的定时任务框架单体是怎样的本篇文章为大家展示了java中常用的定时任务框架单体是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、Timer+TimerT

    攻略 2021年12月21日
  • python怎么绘制中国地图

    技术python怎么绘制中国地图这篇文章主要讲解了“python怎么绘制中国地图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么绘制中国地图”吧!前言气象、

    攻略 2021年11月26日
  • python中如何计算个数(python怎么求球的体积)

    技术Python怎么计算球的个数这篇文章主要讲解了“Python怎么计算球的个数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么计算球的个数”吧!代码如下:

    攻略 2021年12月17日
  • 常用两种mysql数据存储引擎(mysql的存储引擎与数据类型)

    技术MySQL数据库的存储引擎以及常用命令有哪些这篇文章主要介绍了MySQL数据库的存储引擎以及常用命令有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下

    攻略 2021年12月16日
  • ssh-keygen参数(公钥默认写入ssh目录下的什么文件)

    技术ssh-keygen的公钥格式是什么样的这篇文章给大家介绍ssh-keygen的公钥格式是什么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ssh-keygen 公钥格式公钥:公钥有2种格式

    攻略 2021年12月24日
  • 怎样深入学习JVM堆与JVM栈

    技术怎样深入学习JVM堆与JVM栈今天就跟大家聊聊有关怎样深入学习JVM堆与JVM栈,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JVM栈解决程序的运行问题,即程

    攻略 2021年10月23日