前几天在Github上看到一个用SN-GAN技术生成punk的项目,项目地址:https://github.com/teddykoker/cryptopunks-gan,跑了一遍感觉很有趣,所以就研究了一下生成对抗网络(GAN)的相关内容,详见下文:

一、GAN原理介绍

想要了解GAN,推荐首先阅读IanGoodfellow写的paper:“Generative Adversarial Networks”(PDF:https://arxiv.org/pdf/1406.2661.pdf),这篇paper算是这个领域的开山之作。

接下来以图片(NFT常见的表现形式)为例,解释一下GAN的基本原理。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:

G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记作G(z)。

D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。

在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。

最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。

这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。

以上只是大致说了一下GAN的核心原理,如何用数学语言描述呢?这里直接摘录论文里的公式:

简单分析一下这个公式:

整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。

D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。

G的目的:上面提到过,D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。

D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)。

那么如何用随机梯度下降法训练D和G?论文中也给出了算法:

可以看到绿色框中是两步计算的具体算法,红色框内是两步的不同之处。第一步我们训练D,D是希望V(G, D)越大越好,所以是加上梯度(ascending)。第二步训练G时,V(G, D)越小越好,所以是减去梯度(descending)。整个训练过程交替进行。

二、 GAN的改进DCGAN原理介绍

深度学习中对图像处理应用最好的模型是CNN,那么将GAN和CNN结合最好的尝试就是DCGAN。

DCGAN的原理和GAN是一样的,这里就不在赘述。它只是把上述的G和D换成了两个卷积神经网络(CNN)。但不是直接换就可以了,DCGAN对卷积神经网络的结构做了一些改变,以提高样本的质量和收敛的速度,这些改变有:

取消所有pooling层。G网络中使用转置卷积(transposed convolutional layer)进行上采样,D网络中用加入stride的卷积代替pooling。

在D和G中均使用batchnormalization

去掉FC层,使网络变为全卷积网络

G网络中使用ReLU作为激活函数,最后一层使用tanh

D网络中使用LeakyReLU作为激活函数

DCGAN中的G网络示意:

三、 DCGAN实践

这一节咱们就用DCGAN做一个自动生成动漫人物头像的实践:

首先要获取用于数据训练的原始图片,之前punk的例子用的1817个punk的图片并存储于cryptopunks-gan/data/,这里咱们再用另一个例子:https://github.com/carpedm20/DCGAN-tensorflow。直接使用它的源码,在data文件夹中再新建一个anime文件夹,把图片直接放到这个文件夹里,运行时指定–datasetanime即可。这里的原数据使用从https://konachan.net/ 上爬取的动漫图片,截取头像后如下图所示:

之后运行程序进行训练:

以下分别是跑完第1、10、200个epoch的结果:



四、 conditional GAN

上面的程序可以生成无数随机组合的图片,但那只是完全的随机生成,你无法控制生成出的人物的属性。而使用conditional GAN,我们可以指定生成人物的属性,如发色、眼睛的颜色、发型,甚至是服装、装饰物,从而生成具有指定属性的图像。基本原理可以详见论文:https://arxiv.org/abs/1605.05396。

我们的目标实际上是通过“文字”生成“图像”。为此我们需要解决以下两个问题:

如何把文字描述表示成合适的向量。

如何利用这个描述向量生成合适的图片。

为达成以上目的,论文作者分别对D和G做了改进,即GAN-CLS和GAN-INT,这里就不展开将技术细节了,可以在论文里看详细的推导过程。

对于深度学习,样本数量越多,效果就会越好,所以这里的GAN-INT是对效果的提升有帮助的,实验中验证了这一点。

作者把上面的两种改进合在一起,就成了GAN-INT-CLS,也是这篇文章的最终方法。

放一张论文作者实验的图,他是做了花的生成,最上面一行是Ground Truth,下面依次是GAN,GAN-CLS,GAN-INT,GAN-INT-CLS:

五、 conditional GAN 实践

大家可以试一下这个使用了CGAN的网站:https://hiroshiba.github.io/girl_friend_factory/index.html

点击上方的“無限ガチャ”,开始生成,选择属性,先生成金发+碧眼(左),再生成黑发+碧眼(右),多次点击生成按钮可以生成多个:


网站还有很多功能,大家可以自己探索。

六、 进一步升级的实践

前面咱们举的例子输出的图片都不是特别真实,这里的要讲的实践做的更加完善,直接上

网站:https://make.girls.moe/#/
Github:https://github.com/makegirlsmoe

论文:https://makegirlsmoe.github.io/assets/pdf/technical_report.pdf

下图左侧为通过属性blonde hair, twin tails, blush, smile, ribbon, red eyes生成的人物,右侧是通过属性silver hair, long hair,blush, smile, open mouth, blue eyes生成的人物,都表现得非常自然,完全看不出是机器自动生成的:

进入网站:

点击生成:

这里会随机生成一个图片,我们选择属性,比如粉色长发,蓝眼睛:

其他属性也可以自行实践,这里就不多演示,最后你所有生成的图片会在历史中保存:

这里再谈一下支撑以上网站的论文中对GAN的改进之处:

改进一:更高质量的图像库之前使用的训练数据集大多数是使用爬虫从Danbooru或Safebooru这类网站爬下来的,这类网站的图片大多由用户自行上传,因此质量、画风参差不齐,同时还有不同的背景。这篇文章的数据来源于getchu,这本身是一个游戏网站,但是在网站上有大量的人物立绘,图像质量高,基本出于专业画师之手,同时背景统一。

除了图像外,为了训练cGAN,还需要图像的属性,如头发颜色、眼睛的颜色等。作者使用Illustration2Vec,一个预训练的CNN模型来产生这些标签。

改进二:GAN结构此外,作者采取了和原始的GAN不同的结构和训练方法。总的训练框架来自于DRAGAN(arxiv:https://arxiv.org/pdf/1705.07215.pdf),经过实验发现这种训练方法收敛更快并且能产生更稳定的结果。生成器G的结构类似于SRResNet(arxiv:https://arxiv.org/pdf/1609.04802.pdf):

判别器也要做一点改动,因为人物的属性相当于是一种多分类问题,所以要把最后的Softmax改成多个Sigmoid:

七、 总结

这里总结一下主要的资源:

生成punk Github:https://github.com/teddykoker/cryptopunks-gan

《深度学习框架PyTorch:入门与实践》没来得及整理这部分,很好的学习资源,讲解跟明确:Github:https://github.com/chenyuntc/pytorch-book

DCGAN测试源码:https://github.com/carpedm20/DCGAN-tensorflow

makegirls网站:https://make.girls.moe/#/

Girlfriend网站:https://hiroshiba.github.io/girl_friend_factory/index.html

这类技术可以在一定程度上代替插画师类的职业了,或者NFT的创作也可以用此来做某项目的plus(原理上只要有训练图库,就可以自动生成新的NFT)。更多使用方案还需要继续探索。

机器学习 + NFT,跨界联合可以擦出什么火花?相关推荐

  1. 雀友腾讯跨界联合 北京打造全球顶级麻将锦标赛

    北京2018年7月30日电 /美通社/ -- 7月28-29日,雀友.腾讯强强联手举办的2018TMT腾讯麻将锦标赛国标夏季赛在首都北京举行,麻将锦标赛是由腾讯游戏与腾讯棋牌主办,腾讯欢乐麻将.麻将机 ...

  2. 重庆华侨城跨界联合潮牌T.M.D PCP发财潮流文化艺术聚会国庆开档

    随着95后"Z世代"的逐渐崛起,潮流文化艺术逐渐火热,开始为当代年轻人的生活状态和品质代言,成为年轻人彰显独特个性与品位的一种生活方式.由此,不少知名品牌和企业纷纷玩起了联合跨界, ...

  3. 【品牌跨界联合营销方案合集】房地产、快消品、电商平台、短视频跨界品牌联合营销活动方案(20份)

    品牌之间如何联合营销,营销策划活动方案该怎么做? 我是 左木杨,我的营销知识库已经收集了10000+品牌营销方案,欢迎全国对营销感兴趣的朋友一起加入进来. 今天为大家精选了20份品牌跨界联合营销策划方 ...

  4. c语言修仙受控可看吗,强推三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花...

    大家好,我是小龙.今天我给大家推荐三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花! 一<c语言修仙>[一十四洲] [简介]: 林浔是一个程序员,通宵编代码后发现自己身体内多了一 ...

  5. 华为鸿蒙热水器,美的华为跨界联合!搭载鸿蒙OS的美的产品双11上市

    [宅秘新闻]在前段时间的华为开发者大会上,华为正式发布了鸿蒙OS 2.0.华为消费者业务软件部总裁王成录当时表示,美的等家电品牌很快就会推出基于鸿蒙OS 2.0的家电产品.11月11日,美的集团官方宣 ...

  6. 光明日报:当教育遇上区块链,会擦出什么火花

    说起现在最火的新兴技术,区块链必是处在风口上的答案之一.日前,京津冀大数据教育区块链试验区成立,为"区块链+教育"的融合发展之路,提供了一个新的窗口. 当传统的教育行业与区块链相遇 ...

  7. 鸿蒙系统联合,跨界联合 华为鸿蒙系统赋能厨电业

    2020 年华为开发者大会近日召开,华为鸿蒙系统正式升级至 2.0 版本. (图片来源:IT之家,侵删) 会上华为消费者业务软件部总裁王成录表示,鸿蒙 2.0 已经与国内包括美的,九阳,老板等头部厂商 ...

  8. 5G,上天了!卫星和基站擦出了火花?

    大家好,我是无线深海,我们好久不见. 本期我们来聊聊卫星通信,以及卫星通信和地面通信的融合:非地面网络的故事. 对于5G来说,这可能只是后半场的锦上添花:但对仍处于畅想中的6G来说,空天地海一体化通信 ...

  9. Golang 和 lua 相遇会擦出什么火花?

    在 GitHub 玩耍时,偶然发现了 gopher-lua ,这是一个纯 Golang 实现的 Lua 虚拟机.我们知道 Golang 是静态语言,而 Lua 是动态语言,Golang 的性能和效率各 ...

最新文章

  1. Java 事件适配器 Adapter
  2. [bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子
  3. Go加密解密之DES
  4. c语言 字符转int型,C语言—类型之间的转换
  5. vue-router vue路由
  6. sql删除主键_产品经理的第一节SQL课——ID到底是干什么的?!
  7. shell的单引号与双引号
  8. axure9数据统计插件_数据分析太棘手?常用8大统计软件解决难题!
  9. 宁波市中学生计算机程序设计,宁波市第26届中小学生计算机程序设计竞赛初赛试题(小学组)...
  10. 如何在 Windows 下像 Mac 一样优雅开发
  11. 高速列车运行调度控制仿真软件SimTrain
  12. 信鸽推送接收通知点击打开相应Activity
  13. 什么表示计算机的存储容量,计算机的存储容量是指它具有的什么
  14. Command CompileAssetCatalog emitted errors but did not return a nonzero exit code to indicate failur
  15. 深度学习图像标注软件LabelMe使用方法
  16. 这就是你日日夜夜想要的docker!!!---------三分钟带你玩转docker命令
  17. 易语言零基础入门视频教程 易语言自学全套教程
  18. 数字生活场景升级,智能音箱进入“存量战”
  19. 教你使用ppt制作图文并茂的课件
  20. PCB信号完整性分析--干货!(电子工程专辑微信公众号)

热门文章

  1. Java爬取京东商品数据
  2. 北大信管系师生到访百分点科技 共同交流数字经济人才培养建设
  3. html往WPS粘贴格式乱,WPS文档怎么清除格式解决复制粘贴格式错乱的问题
  4. 华为S7900产品概述
  5. 【数据结构】折半查找及其二叉判定树画法
  6. HTML5期末大作业:个人空间网站设计——个人主页介绍(6页) HTML+CSS+JavaScript web课程设计网页规划与设计 web学生网页设计作业源码 学生DW网页设计作业成品
  7. 记录第一天工作--Java时间类型转换:Date转换为时间戳
  8. Vue 版sticker 贴纸实现
  9. 猜出这些程序猿专属灯谜,2019全年无BUG!
  10. 消失的封建怪现象 中国古代之六大奇异