允中 发自 凹非寺
量子位编辑 | 公众号 QbitAI

前几天发布的一篇文章中我们曾提到国外的AI捏脸应用FaceApp引发大量关注。它能让人一键变成老人,一键返老还童,一键由男变女,一键破涕为笑,一键失去头发……

福布斯报道说,它在Google Play的下载量已经超过了1亿。

苹果用户也同样热情,App Annie数据显示,目前在121个国家的iOS商店排名第一。

看起来,这是一种神奇的黑科技,但是实际上,揭开神秘的面纱,技术本身并非遥不可及。从GAN的角度来探索解决这类问题,能做到什么样呢?

现在,飞桨核心框架Paddle Fluid v1.5宣布开源了PaddleGAN图像生成库,为用户提供易上手的、一键式可运行的GAN模型。

飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。生成式对抗网络(GAN)近年来被广泛应用于无监督学习任务以及生成任务中,通过让两个神经网络相互博弈的方法进行学习,常用于生成以假乱真的图片、影片、三维物体模型等。欢迎大家来体验~

下面送上真·干货(附代码)!

1.效果实测

以下效果均采用百度与哈工大联合开发的STGAN模型在飞桨开源的实现

看到标签是“Bald”的变脸照片,是不是很多读者感受到了一种来自骨髓的凉意,大家多保重!

2. PaddleGAN支持的模型与任务

PaddleGAN图像生成模型库覆盖当前主流的GAN算法,可简单上手各类GAN任务,也方便扩展自己的研究。

Pix2Pix和CycleGAN采用cityscapes数据集进行风格转换,StarGAN,AttGAN和STGAN采用celeba数据集对图片进行局部或者整体的属性修改。

STGAN是由百度和哈工大联合研发的模型,提出STGAN方法用于图片/视频的端到端属性转换。对传统方法提出了两点改进,在celebA数据集上转换效果好于已有的方法:

  1. 在自编码网络结构中引入选择性属性编辑单元强化了属性编辑的效果。

  2. 提出了将基于属性标签替换为基于属性更改的训练机制。

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)  --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)  --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)  --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)  --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

最后给大家推荐一个GPU福利 - Tesla V100免费算力!配合PaddleHub能让模型原地起飞~ 扫描下方二维码申请~

加入社群 | 与优秀的人交流

小程序 | 全类别AI学习教程

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「好看」吧 !

不用再找换脸教程了,飞桨PaddleGAN给你一键式体验相关推荐

  1. 不用再找了,支付宝自动收取能量、自动偷能量、超级简单的系统教程在这里,华为荣耀V20亲测可用

    关键信息 作者:狐仙小妲己 视频教程地址:https://m.lizhiweike.com/lecture2/18061021 源码地址:https://github.com/Xiao-DaJi/al ...

  2. 不用再找了,这就是全网最全的异常检测方法总结

    大家好,今天正好趁着周末,收集整理全网最常使用的异常检测方法(附资料来源和代码),喜欢记得收藏.点赞.关注. 注:技术交流文末获取 一.基于分布的方法 1. 3sigma 基于正态分布,3sigma准 ...

  3. 不用再找懒人包了 | Windows安装苹果系统(dmg)原版

    1 安装VMware Workstations Pro15.5.0以及unlock解锁插件 VMware Workstations是安装虚拟机的软件,目前最新版是15.5.0(windows 7貌似不 ...

  4. 不用再找了,SQLMap基础命令合集版来了

    公粽号:黒掌 一个专注于分享渗透测试.黑客圈热点.黑客工具技术区博主! 一.SQLMap 1.SQLMap基本介绍 1.1)分析URL 判断可注入的参数 判断目标需要用哪种SQL注入 识别出目标数据库 ...

  5. 【STK】STK11.6下载安装+MATLAB互连+各插件模块(不用再找了,这里能解决)

    找累了吧!

  6. PDF转Word方法大盘点:看了这一篇,就不用再找转换技巧了

    PDF文档成为正式文件之后,传输之间都是使用PDF文件.但是有部分的人仍不习惯编辑PDF文档,而适应Word编辑.这时转换就成了桥梁,将PDF文档转换成Word,即可以使用Word编辑文档,又可以接收 ...

  7. 【飞桨PaddlePaddle】四天搞懂生成对抗网络(一)——通俗理解经典GAN

    ​​​​ 序言 做图像分类.检测任务时,为了提高模型精度,在数据处理方面,我尝试了很多数据增强tricks(包括了简单的裁切.变形.明暗.颜色调整,也包括了MixUp图像融合以及SMOTE这样的解决类 ...

  8. 【AI Studio】飞桨图像分类零基础训练营 - 0456 - 图像分类竞赛全流程实战

    前言:因为两课讲的一个比赛内容(课程里也没分页),所以我把笔记也合在一起.而且也是因为老师讲得很飘,所以我感觉我想记的东西估计不多吧.因为大部分都是新概念,所以我自己也没什么全新的理解,基本都是复制粘 ...

  9. 【飞桨PaddlePaddle】四天搞懂生成对抗网络(二)——风格迁移的“精神始祖”Conditional GAN

    从"自由挥洒"到"有的放矢" 1.给GAN加个"按钮" 上一篇<四天搞懂生成对抗网络(一)--通俗理解经典GAN>中,我们实现了 ...

最新文章

  1. 几款高频环形磁芯的性能对比
  2. linux环境搭建seafile客户端自动上传文件
  3. 我的梦想是十年内成为架构师,该怎么办?
  4. 安卓 通过intent调用系统文件管理器打开指定路径目录
  5. 10周带你手推机器学习算法公式,30+视频为你讲解Sklearn库应用
  6. 执行ssh-add时出现Could not open a connection to your authentication agent
  7. dubbo源码深度解析_scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码解析及应用
  8. 设计模式笔记十三:代理模式
  9. Linux运维第一课----服务器硬件
  10. steam (游戏平台)
  11. 小米真蓝牙耳机说明书_【小米真无线蓝牙耳机Air 2评测使用说明书介绍】快充|降噪|蓝牙5.0|开盖即连|快捷操作_摘要频道_什么值得买...
  12. nestjs+vue+ts打造一个酷炫的星空聊天室
  13. 删除文件unlink
  14. java tire树_谢特——后缀数组+tire 树(示例代码)
  15. WINVNC源码分析(二)——图像
  16. oracle中毒,oracle数据库中毒恢复 oracle数据库解密恢复 服务器中勒索病毒解密恢复.Hermes666...
  17. 如何学会记账,并分别统计每个月收入和支出的金额
  18. java写 狐狸找兔子_狐狸找兔子(java 版)
  19. 蓝桥杯嵌入式 - 第九届决赛试题(电子秤)
  20. 孤岛危机2通关,看到这篇剧情,太精彩忍不住转了--孤岛危机2详细剧情。

热门文章

  1. k8s 关键字以及管理流程。
  2. #研发解决方案#智慧的太空桥管理智慧设备
  3. 链路聚合(Link Aggregation)与权重
  4. 毕业论文中使用的技术—FileReader接口
  5. c的开始,求最大数。
  6. LNMP安装常见问题集锦(一)
  7. EIGRP的AD(管理距离)、AD(宣告距离)、FD(可行距离)
  8. PySide教程:一个简单的点击“.NET研究”按钮示例
  9. echarts 如何使柱状图左右展示_echarts 柱状图展示数据
  10. 正在搜索需要的文件_装机必备!分享4个电脑软件,3分钟搞定文件管理难题!...