GAN与CycleGAN的结构解析

当下神经网络三大主流子领域:CNN、RNN和GAN。

今天咱们主要分享一下生成对抗网络——GAN的一些核心思想,并以CycleGAN为例进行阐述。

借自:https://github.com/eriklindernoren/Keras-GAN

·GAN

首先,常规的GAN网络长什么样,我们以https://github.com/eriklindernoren/Keras-GAN/tree/master/gan这份样本代码为例。

通俗的理解,GAN网络大致如下:

GAN与CycleGAN的结构解析_第1张图片

首先我们有正样本,就是我们的真实图片,经过D(discriminator),然后拟合到1;接着我们会给一些指定大小的随机数,经过G(generator)生成负样本,经过D,拟合为0。这样可以训练出一个非常强悍的鉴别器D,对正负样本能做出非常高精度的判断。在D的基础上,我们对G进行训练,让G能够比D更加强悍,强悍到什么地步,到G生成的负样本非常逼近正样本(其实也就是图中的橙色箭头路径),直到D都识别不出来是G“生成”出来的。

所以,我么训练的就是:橙色那一条线所涉及的神经网络。或者它也长这样,这样看着相对明晰一些:

GAN与CycleGAN的结构解析_第2张图片

 

这个小型网络,对mnist的训练还是挺到位的,大家可以移步github自行玩耍- -

 

·CycleGAN

 

这次我们主要聊聊强悍的CycleGAN(后面我们称之为CG)网络,这个网络把GAN系带到了一个新高度。

https://blog.csdn.net/qq_21190081/article/details/78807931这篇文章对CG的介绍还是蛮透彻的,但是,鄙人建议,要想理解它的真实结构,最好跟着源码画一遍结构图,因为CG真的真的真的不是你看到的样子。。。
我们先看看它的剖面图。。。

GAN与CycleGAN的结构解析_第3张图片

注意,这不是一个分开的、并行的网络,只是因为。。。画在一起实在是太难画了,也看不清。上面的G_AB和下面的G_AB是一个G_AB,G_BA也是一样。于是呢,在这个网络的基础上,我们需要训练的网络如下:

GAN与CycleGAN的结构解析_第4张图片

 

红色的路线,也就是灰色透明袋的路线(一共四条),就是需要训练的网络结构。简洁的说就是需要训练A到A,A到B到A,B到B,B到A到B的四条线。其中A到B到A和B到A到B两条线能训练处风格迁移的双向过程,即往哪个方向迁都能够做到。A到A和B到B在我看来,应该算是泛化迁移能力的过程,防止训练的迁移只能对B迁移到A或者A迁移到B效果比较好,而其他风格难以迁移。

CG比较有意思的一点就是,他能对风格做双向迁移,而pix2pix只能对特定形状的简单图形做单向风格迁移,在这点上,CG的优势就比较明显了。

纵观CNN的历史,从深度优先的VGG模型到宽度优先的Inception模型,再到resnet,CNN的结构已经比较成熟,目测在瓶颈地带盘旋了,虽然后期还有些扩展板的sine卷积、swish激活函数的引入,但是优化结构的趋势已经不明显了。

而GAN网络不一样,还有非常大的发展空间。就如CG结构,能通过追加风格样本,实现多种类风格迁移。在网络结构上,GAN系列有很多没有发掘的网络结构,预计在2019年,应该会有不小的发展空间。

你可能感兴趣的:(GAN与CycleGAN的结构解析)