首页 > 其他分享 >【百战GAN】如何使用GAN拯救你的低分辨率老照片

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

时间:2022-10-12 17:08:50浏览次数:48  
标签:__ 低分辨率 老照片 self crop GAN ## image size


大家好,欢迎来到专栏《百战GAN》,在这个专栏里,我们会进行算法的核心思想讲解,代码的详解,模型的训练和测试等内容。

作者&编辑 | 言有三

【百战GAN】如何使用GAN拯救你的低分辨率老照片_预处理

本文资源与生成结果展示

【百战GAN】如何使用GAN拯救你的低分辨率老照片_数据集_02

本文篇幅:5200字

背景要求:会使用Python和Pytorch

附带资料:项目推荐,版本包括Pytorch+Tensorflow

同步平台:有三AI知识星球(一周内)

1 项目背景

了解GAN的同学都知道,GAN擅长于捕捉概率分布,因此非常适合图像生成类任务。我们在图片视频拍摄以及传输过程中,经常会进行图像的压缩,导致图像分辨率过低,另外早些年的设备拍摄出来的照片也存在分辨率过低的问题,比如10年前的320*240分辨率。要解决此问题,需要使用到图像超分辩技术。

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

(1) Linux系统或者windows系统,使用Linux效率更高。

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

2 原理简介

图像超分辩任务输入是一张低分辨率的图像,输出是一张对它进行分辨率增大的图片,下面是一个常用的框架示意图[1]:

【百战GAN】如何使用GAN拯救你的低分辨率老照片_数据预处理_03

该框架首先对输入图使用插值方法进行上采样,然后使用卷积层对输入进行学习,这种框架的劣势是计算代价比较大,因为整个网络是对高分辨率图操作。

随后研究者提出在网络的后端进行分辨率放大,通过扩充通道数,然后将其重新分布来获得高分辨率图,这套操作被称为(PixShuffle)[2],这样整个网络大部分计算量是对低分辨率图操作,如下图:

【百战GAN】如何使用GAN拯救你的低分辨率老照片_数据集_04

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

关于各类超分辨率框架的具体原理,大家可以移步有三AI知识星球,或者自行学习。由于我们这是实战专栏,不对原理做完整的介绍。

3 模型训练

大多数超分重建任务的数据集都是通过从高分辨率图像进行下采样获得,论文中往往选择ImageNet数据集,由于我们这里打算专门对人脸进行清晰度恢复,因此选择了一个常用的高清人脸数据集,CelebA-HQ,它发布于 2019 年,包含30000张不同属性的高清人脸图,其中图像大小均为1024×1024,预览如下。

【百战GAN】如何使用GAN拯救你的低分辨率老照片_预处理_05

接下来我们对代码进行解读:

3.1 数据预处理

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

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

def train_hr_transform(crop_size):

    return Compose([

        RandomCrop(crop_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)]

标签:__,低分辨率,老照片,self,crop,GAN,##,image,size
From: https://blog.51cto.com/u_14122493/5751146

相关文章

  • 【GAN优化】最早被用于评价GAN模型的定量指标Inception Score是什么
    最近一部分的内容将会比较容易,将和大家一起讨论GAN的评价指标,也没有太难以理解的东西,希望大家踊跃讨论,欢迎留言。作者&编辑|小米粥编辑|言有三在判别模型中,训练完成的模......
  • 【GAN优化】长文综述解读如何定量评价生成对抗网络(GAN)
    欢迎大家来到《GAN优化》专栏,这里将讨论GAN优化相关的内容,本次将和大家一起讨论GAN的评价指标。作者&编辑|小米粥编辑|言有三在判别模型中,训练完成的模型要在测试集上进......
  • 【GAN优化外篇】详解生成模型VAE的数学原理
    最近在学习生成模型的相关知识,这篇文章将介绍一下变分自编码器(VariationalAuto-encoder),本文只介绍一些粗浅内容,不会涉及比较深刻的问题。作者&编辑|小米粥1. 自编码器......
  • 【GAN优化】解决模式崩溃的两条思路:改进优化和网络架构
    今天讲述的内容仍然是GAN中的模式崩溃问题,首先将说明模式崩溃问题的本质,并介绍两种解决模式崩溃问题的思路,然后将介绍一种简单而有效的解决方案MAD-GAN,最后一部分将给出MAD-......
  • 【GAN优化】详解GAN中的一致优化问题
    GAN的训练是一个很难解决的问题,上期其实只介绍了一些基本的动力学概念以及与GAN的结合,并没有进行过多的深入。动力学是一门比较成熟的学科,有很多非常有用的结论,我们将尝试将......
  • 【GAN优化】从动力学视角看GAN是一种什么感觉?
    今天讲述的内容是GAN与动力学,这是一个非常好玩、非常新鲜的视角。考虑到很多人微积分和线性代数等知识的涉猎不多,我将会对涉及的内容都做出基本说明,也并不会涉及过深入的东......
  • 【GAN优化】如何选好正则项让你的GAN收敛
    今天讲述的内容还是GAN的训练,也是最后一期,做几个简单的小实验,告诉大家怎么给GAN加正则项,使得你的GAN尽可能收敛。其实今天的内容本来还是与动力学结合很紧密,但是考虑到复杂......
  • 【GAN优化】GAN优化专栏栏主小米粥自述,脚踏实地,莫问前程
    作者|小米粥编辑|言有三随走随行其实我一直非常佩服那些有规划又努力的人,因为我是一个对自己没太多规划的人。本科选择了物理专业,上学期间也算得上比较努力吧,但是物理是......
  • 【GAN优化】详解对偶与WGAN
    越学习越发现自己知之甚少,道阻且长,还是认真看下这篇文章,好好琢磨琢磨GAN吧。今天将和大家一起学习在GAN界占有重要位置的WGAN,它提出了一种新的距离度量,较之前的f散度,它的数......
  • 【GAN优化】一览IPM框架下的各种GAN
    今天的这篇小文将是GAN模型理论介绍的最后一篇。有一些内容,所用数学技巧和方法非常高大上,理论结果也非常漂亮,但是完全搞明白其中的门门道道需要相当大精力和知识铺垫,况且实......