StyleGAN2玩出新高度!从华盛顿到特朗普,无缝切换生成历届美国总统
【导读】近日,在Reddit上一位外国小哥发表了一篇文章,介绍自己使用StyleGAN2和Face Aligner在人脸之间无缝切换的项目,他使用了美国历届总统的图片作为演示,同时也在Github上开放了源码。
从华盛顿到特朗普,无缝切换一镜到底
作者完成的这个项目使用了 StyleGAN2 & face aligner来生成美国历任的总统图片。StyleGAN2将生成一个细致的看起来真实的方形人脸图像,并使用优化算法探索潜在的空间,以便找到一个给定类型的现实生活中的例子的准确表示。
艾森豪威尔到肯尼迪的切换也是非常流畅和逼真,「发际线的变化也十分的感人」。
约翰亚当斯(1797-1801)当年的老画像到杰斐逊(1801-1809)的切换还原度也很高。
在这个项目中,作者还使用了一个面部对齐的 python 脚本,它有三点作用:
1)识别图像中的面部
2)将其剪切出来并居中
3)确保像眼睛这样的关键特征位于正确的 x & y 值上
作者使用了从华盛顿到川普的所有美国总统来进行演示,在每个相邻总统之间都线性插值了100次。
作者还表示这个项目是在Google Colab中直接运行的,避免了很多Windows10中不易解决的兼容性问题。
为了StyleGAN2更容易在Colab中使用,作者还做了一些如下改进:
1)支持非正方形图像,如:768x512或640x384等。
2)支持垂直镜像增强。
3)支持自动从最新的 pkl 中继续训练。
4)只创建最大的 tfrecord;,使用原始 JPEG 代替解码 numpy 数组,大大减少 tfrecord 创建时间和数据集大小。
这个项目主要的计算工作是在通过对总统图像的映射以获得隐状态。这会消耗大约10分钟/图,这个时间可以通过降低图像质量来压缩,但作者没有这么做。
在隐状态和生成图像之间进行插值并不需要太长的时间,生成4500张图像并将它们放在一个视频文件中总共需要花费20分钟。
StyleGan2--StyleGAN的升级版,解决了伪影问题
StyleGAN是目前最先进的高分辨率图像合成方法,已被证明可以在各种数据集上可靠地工作。除了逼真的人像,StyleGAN还可以用于生成其他动物,汽车甚至房间。
然而,StyleGAN并不完美,最明显的缺陷是生成的图像有时包含斑点似的伪影(artifacts),而这一缺陷在StyleGAN 2上也被完美解决了。
去年底,NVIDIA的研究人员发布了StyleGAN的升级版——StyleGAN2,重点修复artifacts问题,并进一步提高了生成图像的质量。
图:StyleGAN2生成的人脸图像
图:StyleGAN2生成的猫咪图像
主要改进包括:
生成的图像质量明显更好(FID分数更高、artifacts减少)
提出替代progressive growing的新方法,牙齿、眼睛等细节更完美
改善了Style-mixing
更平滑的插值(额外的正则化)
训练速度更快
(a)是原始的StyleGAN结构图,其中A表示从W学习的仿射变换,产生了一个style,(b)展示了原始StyleGAN架构的细节。
在这里,将AdaIN分解为先显式归一化再调制的模式,对每个特征图的均值和标准差进行操作。我们还注释了学习的权重(w)、偏差(b)和常量输入(c),并重新绘制了灰色框,使每个框都激活一个style。激活函数(leaky ReLU)总是在添加偏置后立即应用。
(c)对原始架构做了几处改动,包括在开始时删除了一些冗余操作,将b和B的添加移动到style的活动区域之外,并只调整每个feature map的标准差。
(d)是修改后的架构,使我们能够用「demodulation」操作代替 instance normalization,我们将demodulation操作应用于与每个卷积层相关的权重。
重新设计后的StyleGAN2消除了伪影,同时保留了完全的可控性。
同时,StyleGAN2还使用了新方法替代Progressive growing,细节更完美。StyleGAN2使用了一个skip generator和一个残差鉴别器,切换到这种设置显著地改进了FID和PPL。
Face Alignment
face alignment就是通过一定量的训练集(人脸图像和每个图像上相对应的多个landmarks)来得到一个模型,使得该模型再输入了一张任意姿态下的人脸照片后,能够对该照片中的关键点进行标记。
左侧是标注好的训练集,右侧是使用模型来对新的图片进行标注的结果。
演示的最后是从奥巴马到特朗普的转变:
有位外国网友对此的评论也很有意思:
作者的这个创意项目向我们展示了StyleGAN2的强大能力和face alignment无穷的潜力,styleGAN2是目前已知的最先进的高分辨率图像合成方法,可以在各种数据集上可靠的工作,除了人像以外,还可以生成房间物品,汽车,动物等各种逼真图像,未来还具有很大的应用空间和商业价值可供开发。
不知大家是否想体验下这个项目呢,快打开下面的链接尝试一下吧!
项目链接:https://github.com/justinpinkney/stylegan2
- 腾讯刘炽平:海外用户破7000万 微信带开发者“出海”
- 研究称性别不均衡或导致人工智能持有性别偏见
- ASP.NET 2.0加密Web.config 配置文件
- .Net 跨平台可移植类库正在进行
- 掌握机器学习数学基础之概率统计(三)
- IBatisNet 之 自动生成主关键字
- IBatisNet之获取和操作SQL语句
- 大数据研究学者谈城市运行安全:要将应急处置转化为风险管理
- Castle.MVC框架介绍
- 在 .Net 设定 proxy 的方法
- MVC结构简介
- 优酷、爱奇艺、摩拜……多家网络平台被曝注册容易注销难!面临个人隐私泄露风险
- WordPress中借助.htaccess屏蔽某个IP或某个IP段(防垃圾评论)
- ASP.NET 调味品:AJAX
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- YII框架行为behaviors用法示例
- 浅谈Python里面None True False之间的区别
- python如何导入依赖包
- 深入理解Python 多线程
- Yii2框架自定义验证规则操作示例
- 浅析PHP 中move_uploaded_file 上传中文文件名失败
- 结束运行python的方法
- 解析Tensorflow之MNIST的使用
- 面向新手解析python Beautiful Soup基本用法
- 基于keras中的回调函数用法说明
- PHP实现读取文件夹及批量重命名文件操作示例
- Python多线程threading创建及使用方法解析
- django rest framework 过滤时间操作
- 浅谈TensorFlow之稀疏张量表示
- 解决Keras 中加入lambda层无法正常载入模型问题