CycleGAN原理与例子-Pytorch实现

  • A+
所属分类:深度学习
摘要这一篇主要介绍CycleGAN的相关知识. 包括该网络的原理和结构, 以及使用Pytorch来实现CycleGAN的例子.

简介

这一篇会介绍关于CycleGAN的相关内容. 主要分为两个部分.

  • 我们首先会介绍CycleGAN的原理和结构
  • 接着会使用Pytorch来实现CycleGAN, 主要实现三个例子, 分别是summer2winter, monet2photo和horse2zebra.

 

参考资料

下面是一些参考的资料(github上的一些链接).

 

CycleGAN原理介绍

CycleGAN要解决的问题和结构

CycleGAN要解决的问题是这样的, 现在我们有两堆数据, 分别是Domain X和Domain Y(这两个数据之间不需要有一一对应的关系), 我们希望有一个生成器(转换器), 可以将Domain X的数据转换到Domian Y上面(或者是Domian Y转换到Domain X上面)

例如我们有下面的两堆数据, Domain X表示的是照片, Domian表示的是梵高的画作.

CycleGAN原理与例子-Pytorch实现

我们希望有一个生成器, 它可以将照片转换为梵高的画作(也就是将Domain X中的数据转换为Domain Y中的数据). 就如同下面的图中所表示的意思.

CycleGAN原理与例子-Pytorch实现

那么我们如何来训练这个生成器G呢, 于是最简单的, 我们想到了下面的方式来进行训练.

CycleGAN原理与例子-Pytorch实现

我们加上一个分类器D, 用来判断G生成的图像是否是Domian Y中的. 但是这么做会出现一个问题, 就是可能会出现不管输出什么到G, G的输出都是一张图片(一张Domain Y中的图片), 比如会出现下面这种情况, 生成的与输出的X完全不像.

CycleGAN原理与例子-Pytorch实现

但是我们希望输入和输出之间是有关系的, 于是我们有了CycleGAN的结构. 我们有生成器Gx->y, 将Domain X的数据转换为Domain Y的数据; 接着我们有生成器Gy->x, 将Domain Y的数据转换为Domain X的数据.

我们希望x与Gy->x(Gx-y(x))数据之间是相近的, 同时我们希望Gx-y(x)生成的数据可以被Dy分类器识别为属于Domian y的.

CycleGAN原理与例子-Pytorch实现

 

CycleGAN的局限性

CycleGAN是直接进行转换(direct transformation)的方法, 也就是图片不会进行encode之后再进行转换. 这样做会导致其实生成器生成前后的内容不会差太多.

所以我们一般会使用CycleGAN来进行风格转换之类的, 而不会直接进行图像的生成, 如头像的生成之类的工作.

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: