CycleGan脱衣服
上天看到deepnude给美女脱衣服的项目最近比较火,考虑到他们是用pixpix2模型搭建,必须得有严格的配对数据集,那么我将利用和他基本相当的cycleGAN实现对男人脱上衣的实例。当然生成的图像肯定是虚假的,仅作为参考使用。
下面简单讲一下cycleGAN的工作原理:首先其称之为循环生成对抗式神经网络,了解过神经网络的朋友应该知道其中神经网络最基本的就是输入层和输出层的定义,一般将输入层称之为X,输出层称之Y,就像函数的映射关系一般。而cycle的意为不仅是X是输入,而且需要Y也为输入,进行循环交替,以保持他既具有X的特征,又具有Y的特征。在这个实例中不妨将X定义为穿了衣服的男人,Y定义为脱了衣服的男人,则我们生成的图像不仅要像Y一样使之脱了衣服,还要使得像X一样的容貌动作等等。下面将对一些关键的代码函数进行讲解,完整代码见文末,当然欢迎大家关注我的公众号,小小见解如有错误恳请纠正。
首先数据集的准备,将穿衣服的数据集放到文件夹TrainB中,如图所示:
因为我制作演示使用,所以准备数据集较少,能稍微看到点效果就像,如果想要更好效果要大量数据集。
TrainA放入没穿衣服的照片:
作为训练的数据集。下面介绍关键代码:
网络结构定义**函数:
定义归一化数据,目的在于减少运算,防治数据噪声过大等等。
定义网络卷积层:
定义反向传播卷积层:
定义池化层使用函数:
以上为网络层需要使用的函数定义,下面是函数内具体参数设定,可以自己调整。
定义resnet网络层,类似于vgg网络层可直接变参数:
然后是生成器的定义:
判别器的定义:
模型训练部分主要比测试部分多一些模型保存,训练参数代码,下面只简单讲下训练部分代码,这样比较清晰网络层:
主要思路是设占位符待读入数据,然后设置网络层对读入的数据训练,需要生成器和判别器的对抗,接着读取模型,初始化,读入需要测试的图片路径,保存模型生成图片,其中inputA就是为读入的dataA数据,通过字典匹配而已。
然后训练结果声明:
首先我的电脑配置很低,所以参数设置很小,数据集也很少,就5张图片,如果需要好的结果需要多数据,改参数,好电脑等等。另外有些参数是根据数据集个数需要改的,比如数据集少,但是参数一次训练的图片数大于训练集数那就报错啦,自己看看改改。
最终演示结果如下:
,本来是穿衣服在车旁的,数据集少,参数小,效果较差,只做演示。
欢迎大家关注我的公众号"人工智能实战及常见代码分享”:
,后天回复“脱衣服CycleGan”,获取完整代码。