量子位编辑 | "大众号 QbitAI
前几天发布的一篇文章中我们曾提到国外的AI捏脸运用FaceApp引发大量关注。它能让人一键变成老人,一键返老还童,一键由男变女,一键转悲为喜,一键失落去头发……
福布斯宣布说,它在Google Play的下载量已经超过了1亿。
苹果用户也同样激情亲切,App Annie数据显示,目前在121个国家的iOS商店排名第一。
看起来,这是一种神奇的黑科技,但是实际上,揭开神秘的面纱,技能本身并非遥不可及。从GAN的角度来探索办理这类问题,能做到什么样呢?
现在,飞桨核心框架Paddle Fluid v1.5宣告开源了PaddleGAN图像天生库,为用户供应易上手的、一键式可运行的GAN模型。
飞桨(PaddlePaddle)致力于让深度学习技能的创新与运用更大略。天生式对抗网络(GAN)近年来被广泛运用于无监督学习任务以及天生任务中,通过让两个神经网络相互博弈的方法进行学习,常用于天生以假乱真的图片、影片、三维物体模型等。欢迎大家来体验~
下面送上真·干货(附代码)!
以下效果均采取百度与哈工大联合开拓的STGAN模型在飞桨开源的实现
看到标签是“Bald”的变脸照片,是不是很多读者感想熏染到了一种来自骨髓的凉意,大家多保重!
PaddleGAN图像天生模型库覆盖当前主流的GAN算法,可大略上手各种GAN任务,也方便扩展自己的研究。
Pix2Pix和CycleGAN采取cityscapes数据集进行风格转换,StarGAN,AttGAN和STGAN采取celeba数据集对图片进行局部或者整体的属性修正。
STGAN是由百度和哈工大联合研发的模型,提出STGAN方法用于图片/视频的端到端属性转换。对传统方法提出了两点改进,在celebA数据集上转换效果好于已有的方法:
在自编码网络构造中引入选择性属性编辑单元强化了属性编辑的效果。 提出了将基于属性标签更换为基于属性变动的演习机制。3. 预演习模型本次PaddleGAN统共开源5个预演习模型。安装好飞桨环境后,可以下载预演习模型快速验证推理效果。
每个GAN都给出了一份测试示例,放在scripts文件夹内,用户可以直接运行测试脚本得到测试结果。
实行以下命令得到CyleGAN的预测结果:
python infer.py \ --model_net=CycleGAN \ --init_model=$(path_to_init_model) \ --image_size=256 \ --dataset_dir=$(path_to_data) \ --input_style=$(A_or_B) \ --net_G=$(generator_network) \ --g_base_dims=$(base_dim_of_generator)
实行以下命令得到Pix2Pix的预测结果:
python infer.py \ --model_net=Pix2pix \ --init_model=$(path_to_init_model) \ --image_size=256 \ --dataset_dir=$(path_to_data) \ --net_G=$(generator_network)
实行以下命令得到StarGAN,AttGAN或者STGAN的预测结果:
python infer.py \ --model_net=$(StarGAN_or_AttGAN_or_STGAN) \ --init_model=$(path_to_init_model)\ --dataset_dir=$(path_to_data)
4. 一键式的演习和测试天生网络数据准备
模型库中供应了download.py数据下载脚本,该脚本支持下载MNIST数据集(CGAN和DCGAN所须要的数据集)以及CycleGAN和Pix2Pix所须要的数据集,利用以下命令下载数据:python download.py —dataset=mnist 通过指定dataset参数来下载相应的数据集。
StarGAN, AttGAN和STGAN所须要的Celeba数据集须要用户自行下载。
自定义数据集:用户可以利用自定义的数据集,只要设置成所对应的天生模型所须要的数据格式即可。
把稳: pix2pix模型数据集准备中的list文件须要通过scripts文件夹里的make_pair_data.py来天生,可以利用以下命令来天生:python scripts/make_pair_data.py
—direction=A2B,用户可以通过设置—direction参数天生list文件,从而确保图像风格转变的方向。
一键式启动
python train.py \ --model_net=$(name_of_model) \ --dataset=$(name_of_dataset) \ --data_dir=$(path_to_data) \ --train_list=$(path_to_train_data_list) \ --test_list=$(path_to_test_data_list) \ --batch_size=$(batch_size)
可选参数见python train.py —help
—model_net参数来选择想要演习的模型
—dataset参数来选择演习所须要的数据集
每个GAN都给出了一份运行示例,放在scripts文件夹内,用户可以直接运行演习脚本快速开始演习。
在快读实现之余,对付目前主流的GAN的开源模型,我们也须要一起理解一下。
5. 主流开源模型简介STGAN
由百度和哈工大联合研发,在原有的ATTGAN根本上,引入GRU构造,更好的选择变革的属性,可用于人脸特定属性转换。
STGAN中天生网络在编码器和解码器之间加入Selective Transfer Units(STU),有选择的转换编码网络,从而更好的适配解码网络。
天生网络中的编码网络紧张由convolution-instance norm-ReLU组成,解码网络紧张由transpose convolution-norm-leaky_ReLU组成,判别网络紧张由convolution-leaky_ReLU组成,详细网络构造可以查看network/STGAN_network.py文件。
天生网络的丢失函数是由WGAN的丢失函数,重构丢失和分类丢失组成,判别网络的丢失函数由预测丢失,分类丢失和梯度惩罚丢失组成。飞桨核心框架Paddle Fluid v1.5中,新增了梯度惩罚的OP,进而支持了WGAN-GP的算法。在本次对外开放的模型中,WGAN均是利用了WGAN-GP算法。
△ 图:STGAN的网络构造
CGAN
条件天生对抗网络,一种带条件约束的GAN,利用额外信息对模型增加条件,可以辅导数据天生过程。
△ 图:CGAN的网络构造
DCGAN
深度卷积天生对抗网络,将GAN和卷积网络结合起来,利用卷积神经网络作为网络构造进行图像天生,可以得到更加丰富的层次表达。为了提高天生样本的质量和网络的收敛速率,在网络构造上进行了一些改进:取消 pooling 层、加入 batch normalization、利用全卷积网络、在天生器(G)中,末了一层利用Tanh函数,别的层采取 ReLu 函数 ; 判别器(D)中都采取LeakyReLu。
△ 图:DCGAN中的天生器
Pix2Pix
利用成对的图片进行图像翻译,即输入为同一张图片的两种不同风格,可用于进行风格迁移。
Pix2Pix由一个天生网络和一个判别网络组成。天生网络中编码部分的网络构造都是采取convolution-batch norm-ReLU作为根本构造,解码部分的网络构造由transpose convolution-batch norm-ReLU组成,判别网络基本是由convolution-norm-leaky_ReLU作为根本构造,详细的网络构造可以查看network/Pix2pix_network.py文件。
天生网络供应两种可选的网络构造:Unet网络构造和普通的encoder-decoder网络构造。网络利用丢失函数学习从输入图像到输出图像的映射,天生网络丢失函数由GAN的丢失函数和L1丢失函数组成,判别网络丢失函数由GAN的丢失函数组成。天生器的网络构造如下图所示。
△ 图:Pix2Pix天生网络流程图
CycleGAN
可以利用非成对的图片进行图像翻译,即输入为两种不同风格的不同图片,自动进行风格转换。
CycleGAN由两个天生网络和两个判别网络组成,天生网络A是输入A类风格的图片输出B类风格的图片,天生网络B是输入B类风格的图片输出A类风格的图片。
天生网络中编码部分的网络构造都是采取convolution-norm-ReLU作为根本构造,解码部分的网络构造由transpose convolution-norm-ReLU组成,判别网络基本是由convolution-norm-leaky_ReLU作为根本构造,详细的网络构造可以查看network/CycleGAN_network.py文件。
天生网络供应两种可选的网络构造:Unet网络构造和普通的encoder-decoder网络构造。天生网络丢失函数由LSGAN的丢失函数,重构丢失和自身丢失组成,判别网络的丢失函数由LSGAN的丢失函数组成。
△ 图:CycleGAN天生网络流程图
StarGAN
多领域属性迁移,引入赞助分类帮助单个判别器判断多个属性,可用于人脸属性转换。
StarGAN中天生网络的编码部分紧张由convolution-instance norm-ReLU组成,解码部分紧张由transpose convolution-norm-ReLU组成,判别网络紧张由convolution-leaky_ReLU组成,详细网络构造可以查看network/StarGAN_network.py文件。
天生网络的丢失函数是由WGAN的丢失函数,重构丢失和分类丢失组成,判别网络的丢失函数由预测丢失,分类丢失和梯度惩罚丢失组成。
△ 图:starGAN流程图
△ 图:StarGAN的天生网络构造[左]和判别网络构造[右]
AttGAN
利用分类丢失和重构丢失来担保改变特定的属性,可用于人脸特定属性转换。
AttGAN中天生网络的编码部分紧张由convolution-instance norm-ReLU组成,解码部分由transpose convolution-norm-ReLU组成,判别网络紧张由convolution-leaky_ReLU组成,详细网络构造可以查看network/AttGAN_network.py文件。
天生网络的丢失函数是由WGAN的丢失函数,重构丢失和分类丢失组成,判别网络的丢失函数由预测丢失,分类丢失和梯度惩罚丢失组成。
△ 图:AttGAN网络流程图
△ 图:AttGAN的网络构造
如果您想详细理解更多飞桨的干系内容,请参阅以下文档,或点击阅读原文
官网地址:
https://www.paddlepaddle.org.cn?fr=lzw4
项目地址:
https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleCV/PaddleGAN?fr=lzw4
想与更多的深度学习开拓者互换,请加入飞桨官方QQ群:432676488
— 完 —
诚挚招聘
量子位正在招募编辑/,事情地点在北京中关村落。期待有才华、有激情亲切的同学加入我们!
干系细节,请在量子位"大众号(QbitAI)对话界面,回答“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技能和产品新动态