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

作者&编辑 | 言有三

本文资源与生成结果展示

本文篇幅:5200字

背景要求:会使用Python和Pytorch

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

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

1 项目背景

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

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

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

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

2 原理简介

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

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

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

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

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

3 模型训练

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

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

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)]

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

  1. 想怎么GAN就怎么GAN,一键拯救发际线

    郭一璞 劈图栗 乾明 发自 亚龙湾  量子位 报道 | 公众号 QbitAI GAN可GAN,非常GAN. 生成对抗网络(GAN)除了生成各种各样的人脸,现在还能对人脸进行各种各样的精确"整 ...

  2. 【GAN优化】GAN训练的几个问题

    从今天开始,我们将关注训练GAN时产生的问题,作为第一篇文章,首先从几个方面来分析一下实际训练的GAN和理论模型上的GAN不同之处以及实践中出现的问题.第一个部分将介绍最优判别器引发的梯度消失问题,第 ...

  3. 【GAN优化】GAN优化专栏栏主小米粥自述,脚踏实地,莫问前程

    今天是加入有三AI的第三期,给大家来个自我介绍,也聊一聊我的一些想法和体会. 作者 | 小米粥 编辑 | 言有三 随走随行 其实我一直非常佩服那些有规划又努力的人,因为我是一个对自己没太多规划的人. ...

  4. 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础

    大家好,今天小米粥在有三AI开设新专栏<GAN的优化>.在这个专栏中,我们会讲述GAN的相关背景.基本原理.优化等相关理论,尤其是侧重于GAN目标函数的优化.小米粥和有三将带领大家从零学起 ...

  5. Tensorflow 对抗生成网络GAN 不服就GAN

    这一节的回顾也意味着深度学习基础课程学习进入了尾声了,GAN作为性能远超我们上一节提到的VAE的一个存在还是有很多出彩的地方的: 首先引用理查德费曼的一句话-'What I cannot create ...

  6. 如何训练GAN?训练GAN的技巧和方法

    https://github.com/soumith/ganhacks 1.输入归一化 把信号归一化到-1 到1 generator的最后一层输出用Tanh 2.使用修饰过后的损失函数 在GAN的文章 ...

  7. CMU 提出全新 GAN 结构,GAN 自此迈入预训练大军!

    文|林锐 众所周知,现在 GAN 的应用是越来越宽泛了,尤其是在 CV 领域.不仅可以调个接口生成新头像图一乐,也可以用 GAN 做数据增强让模型更加健壮. ▲嘉然你带我走吧嘉然! 在CV领域,不像分 ...

  8. 能量视角下的GAN模型:GAN=“挖坑”+“跳坑”

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在这个系列中,我们尝试从能量的视角理解 GAN.我们会发现这个视角如此美妙和直观,甚至让人拍案叫绝 ...

  9. LSGANs : Least Squares GAN(最小二乘GAN)--解决标准GAN生成的图片质量不高以及训练过程不稳定问题

    LSGANs基本思想 LSGANs的英文全称是Least Squares GANs.这篇文章针对的是标准GAN生成的图片质量不高以及训练过程不稳定这两个缺陷进行改进.改进方法就是将GAN的目标函数由交 ...

最新文章

  1. 详解|清华大学100页PPT:工业机器人技术详解
  2. net start zabbix agent 服务没有相应控制功能_zabbix-基础系列(十七)--实战之监控 php-fpm...
  3. 如何画出漂亮的气象(实时流量)图
  4. 分布式版本控制系统Git的安装与使用(作业2)
  5. Spring集成–第2节–更多世界
  6. AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序
  7. keras 微调整模型_如何围绕微服务调整团队
  8. JavaScript-DOM(2)
  9. Android 开发 学习网站
  10. Javascript培训PPT
  11. 视频监控安防平台-GB35114和GB28181的注册信令
  12. RS232与TTL的区别
  13. centos服务器无法上网
  14. 服务器数据恢复成功案例(磁盘阵列恢复)
  15. fresco android 6.0 不支持 gif,Fresco Gif加载优化
  16. 关于刷微信投票的js代码
  17. CSS : 文字彩色抖动效果
  18. 闲逸游戏态度决定胜负,安全决定未来!
  19. CSS3——制作带动画效果的小图片
  20. 用python画滑稽笑脸_2021-01-08 Python day7-day8

热门文章

  1. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL
  2. 本人真实经历:面试了20家大厂之后,发现这样介绍项目经验,显得项目很牛逼!...
  3. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xx' is defined
  4. 常见的排序算法(1)
  5. 笔记 - Ali Cloud 块存储简介
  6. Java 里的 abstract 和 final 关键字
  7. android怎样将bar的label居中_从iPhone换成Android手机之后,将是一种怎样的不同体验...
  8. 霍夫曼树(最优二叉树)的实现
  9. grafana 画拓扑图 能不能_Grafana之ImageIt实现动态可感知网络拓扑(第十七篇)
  10. android教育游戏设计方案,基于Android平台的儿童教育游戏的设计与开发