Python让你成为AI 绘画大师简直太惊艳了!(附代码).docx
《Python让你成为AI 绘画大师简直太惊艳了!(附代码).docx》由会员分享,可在线阅读,更多相关《Python让你成为AI 绘画大师简直太惊艳了!(附代码).docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Python让你成为AI绘画大师,简直太惊艳了!(附代码)|李秋键责编|李雪敬头图|CSDN下载自视觉中国引言基于前段时间我在CSDN上创作的文章“CylcleGAN人脸转卡通图的缺乏今天给大众共享一个更加完美的绘制卡通的工程“LearningtoCartoonizeUsingWhite-boxCartoonRepresentations。首先阐述下这个工程相对之前共享的卡通化的优势1、普遍适用性相对于原来人脸转卡通而言这个工程可以针对任意的图片进展卡通化转换不再局限于必须是人脸图片或者一定尺寸2、卡通化效果更好。详细效果如下列图可见其主要原理仍然是基于GAN网络但主要三个白盒分别对图像的构造
2、、外表以及纹理进展处理最后得到了优于其他方法的图像转化方法CartoonGAN。而今天我们就将借助论文所共享的源代码构建模型创立自己需要的人物运动。详细流程如下。实验前的准备首先我们使用的python版本是3.6.5所用到的模块如下argparse模块用来定义命令行输入参数指令。Utils是将其中常用功能封装成为接口。numpy模块用来处理矩阵运算。Tensorflow模块创立模型网络训练测试等。tqdm是显示循环的进度条的库。网络模型的定义以及训练因为不同的卡通风格需要特定任务的假设或者先验知识来开发对应的算法去分别处理。例如一些卡通工作更关注全局色彩线条轮廓是次要问题。或者是稀疏干净的颜色
3、块在艺术表达中占据主导地位。但是针对不同的需求常见模型无法有效的实现卡通化效果。故在文章中主要通过分别处理外表、构造以及纹理表示来解决这个问题1首先是网络层的定义1.1定义resblock保证在resblock的输入前后通道数发生变化时,可以保证shortcut以及普通的output的channel一致,这样就能直接相加了。defresblock(inputs,out_channel32,nameresblock):withtf.variable_scope(name):xslim.convolution2d(inputs,out_channel,3,3,activation_fnNone,s
4、copeconv1)xtf.nn.leaky_relu(x)xslim.convolution2d(x,out_channel,3,3,activation_fnNone,scopeconv2)returnxinputs1.2定义生成器函数defgenerator(inputs,channel32,num_blocks4,namegenerator,reuseFalse):withtf.variable_scope(name,reusereuse):xslim.convolution2d(inputs,channel,7,7,activation_fnNone)xtf.nn.leaky_rel
5、u(x)xslim.convolution2d(x,channel*2,3,3,stride2,activation_fnNone)xslim.convolution2d(x,channel*2,3,3,activation_fnNone)xtf.nn.leaky_relu(x)xslim.convolution2d(x,channel*4,3,3,stride2,activation_fnNone)xslim.convolution2d(x,channel*4,3,3,activation_fnNone)xtf.nn.leaky_relu(x)foridxinrange(num_blocks
6、):xresblock(x,out_channelchannel*4,nameblock_.format(idx)xslim.conv2d_transpose(x,channel*2,3,3,stride2,activation_fnNone)xslim.convolution2d(x,channel*2,3,3,activation_fnNone)xtf.nn.leaky_relu(x)xslim.conv2d_transpose(x,channel,3,3,stride2,activation_fnNone)xslim.convolution2d(x,channel,3,3,activat
7、ion_fnNone)xtf.nn.leaky_relu(x)xslim.convolution2d(x,3,7,7,activation_fnNone)#xtf.clip_by_value(x,-0.999999,0.999999)returnxdefunet_generator(inputs,channel32,num_blocks4,namegenerator,reuseFalse):withtf.variable_scope(name,reusereuse):x0slim.convolution2d(inputs,channel,7,7,activation_fnNone)x0tf.n
8、n.leaky_relu(x0)x1slim.convolution2d(x0,channel,3,3,stride2,activation_fnNone)x1tf.nn.leaky_relu(x1)x1slim.convolution2d(x1,channel*2,3,3,activation_fnNone)x1tf.nn.leaky_relu(x1)x2slim.convolution2d(x1,channel*2,3,3,stride2,activation_fnNone)x2tf.nn.leaky_relu(x2)x2slim.convolution2d(x2,channel*4,3,
9、3,activation_fnNone)x2tf.nn.leaky_relu(x2)foridxinrange(num_blocks):x2resblock(x2,out_channelchannel*4,nameblock_.format(idx)x2slim.convolution2d(x2,channel*2,3,3,activation_fnNone)x2tf.nn.leaky_relu(x2)h1,w1tf.shape(x2)1,tf.shape(x2)2x3tf.image.resize_bilinear(x2,(h1*2,w1*2)x3slim.convolution2d(x3x
10、1,channel*2,3,3,activation_fnNone)x3tf.nn.leaky_relu(x3)x3slim.convolution2d(x3,channel,3,3,activation_fnNone)x3tf.nn.leaky_relu(x3)h2,w2tf.shape(x3)1,tf.shape(x3)2x4tf.image.resize_bilinear(x3,(h2*2,w2*2)x4slim.convolution2d(x4x0,channel,3,3,activation_fnNone)x4tf.nn.leaky_relu(x4)x4slim.convolutio
11、n2d(x4,3,7,7,activation_fnNone)#x4tf.clip_by_value(x4,-1,1)returnx41.3外表构造等定义defdisc_bn(x,scale1,channel32,is_trainingTrue,namediscriminator,patchTrue,reuseFalse):withtf.variable_scope(name,reusereuse):foridxinrange(3):xslim.convolution2d(x,channel*2*idx,3,3,stride2,activation_fnNone)xslim.batch_nor
12、m(x,is_trainingis_training,centerTrue,scaleTrue)xtf.nn.leaky_relu(x)xslim.convolution2d(x,channel*2*idx,3,3,activation_fnNone)xslim.batch_norm(x,is_trainingis_training,centerTrue,scaleTrue)xtf.nn.leaky_relu(x)ifpatchTrue:xslim.convolution2d(x,1,1,1,activation_fnNone)else:xtf.reduce_mean(x,axis1,2)xs
13、lim.fully_connected(x,1,activation_fnNone)returnxdefdisc_sn(x,scale1,channel32,patchTrue,namediscriminator,reuseFalse):withtf.variable_scope(name,reusereuse):foridxinrange(3):xlayers.conv_spectral_norm(x,channel*2*idx,3,3,stride2,nameconv_1.format(idx)xtf.nn.leaky_relu(x)xlayers.conv_spectral_norm(x
14、,channel*2*idx,3,3,nameconv_2.format(idx)xtf.nn.leaky_relu(x)ifpatchTrue:xlayers.conv_spectral_norm(x,1,1,1,nameconv_out.format(idx)else:xtf.reduce_mean(x,axis1,2)xslim.fully_connected(x,1,activation_fnNone)returnxdefdisc_ln(x,channel32,is_trainingTrue,namediscriminator,patchTrue,reuseFalse):withtf.
15、variable_scope(name,reusereuse):foridxinrange(3):xslim.convolution2d(x,channel*2*idx,3,3,stride2,activation_fnNone)xtf.contrib.layers.layer_norm(x)xtf.nn.leaky_relu(x)xslim.convolution2d(x,channel*2*idx,3,3,activation_fnNone)xtf.contrib.layers.layer_norm(x)xtf.nn.leaky_relu(x)ifpatchTrue:xslim.convo
16、lution2d(x,1,1,1,activation_fnNone)else:xtf.reduce_mean(x,axis1,2)xslim.fully_connected(x,1,activation_fnNone)returnx2模型的训练使用clip_by_value应用自适应着色在最后一层的网络中因为它不是很稳定。为了稳定再现我们的结果请使用power1.0然后首先在network.py中注释clip_by_value函数。deftrain(args):input_phototf.placeholder(tf.float32,args.batch_size,args.patch_si
17、ze,args.patch_size,3)input_superpixeltf.placeholder(tf.float32,args.batch_size,args.patch_size,args.patch_size,3)input_cartoontf.placeholder(tf.float32,args.batch_size,args.patch_size,args.patch_size,3)outputnetwork.unet_generator(input_photo)outputguided_filter(input_photo,output,r1)blur_fakeguided
18、_filter(output,output,r5,eps2e-1)blur_cartoonguided_filter(input_cartoon,input_cartoon,r5,eps2e-1)gray_fake,gray_cartoonutils.color_shift(output,input_cartoon)d_loss_gray,g_loss_grayloss.lsgan_loss(network.disc_sn,gray_cartoon,gray_fake,scale1,patchTrue,namedisc_gray)d_loss_blur,g_loss_blurloss.lsga
19、n_loss(network.disc_sn,blur_cartoon,blur_fake,scale1,patchTrue,namedisc_blur)vgg_modelloss.Vgg19(vgg19_no_fc.npy)vgg_photovgg_model.build_conv4_4(input_photo)vgg_outputvgg_model.build_conv4_4(output)vgg_superpixelvgg_model.build_conv4_4(input_superpixel)h,w,cvgg_photo.get_shape().as_list()1:photo_lo
20、sstf.reduce_mean(tf.losses.absolute_difference(vgg_photo,vgg_output)/(h*w*c)superpixel_losstf.reduce_mean(tf.losses.absolute_difference(vgg_superpixel,vgg_output)/(h*w*c)recon_lossphoto_losssuperpixel_losstv_lossloss.total_variation_loss(output)g_loss_total1e4*tv_loss1e-1*g_loss_blurg_loss_gray2e2*r
21、econ_lossd_loss_totald_loss_blurd_loss_grayall_varstf.trainable_variables()gene_varsvarforvarinall_varsifgeneinvar.namedisc_varsvarforvarinall_varsifdiscinvar.nametf.summary.scalar(tv_loss,tv_loss)tf.summary.scalar(photo_loss,photo_loss)tf.summary.scalar(superpixel_loss,superpixel_loss)tf.summary.sc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python让你成为AI 绘画大师,简直太惊艳了!附代码 Python 成为 AI 绘画 大师 简直 惊艳 代码
限制150内