旷视科技等开源:基于强化学习,实现会画画的AI

2019 年 4 月 10 日 CVer

点击上方“CVer”,选择加"星标"或“置顶”

重磅干货,第一时间送达

作者:hzwer

https://zhuanlan.zhihu.com/p/61761901

本文已由原作者授权,不得擅自二次转载

画家可以用寥寥数笔创造出迷人的画作,我们试图研究如何让机器掌握这样的能力。通过结合神经网络笔画渲染器和基于模型的深度强化学习,我们的 AI 可以用笔画描绘纹理丰富的自然图像。 AI 用数百个笔画就可以实现视觉效果很好的图画,对于每个笔画,直接确定笔画的位置和颜色等。 AI 的训练过程不需要人类绘画的经验或者笔画轨迹数据。

以人脸 (CelebA) 为例,需要一张 GPU,10 小时训练笔画渲染器,40 小时训练 AI,其间 AI 画了数百万张图片来学习。

下面是我们的 AI 画不同类型的图片的效果,我们的 AI 最终学会了先画出大致轮廓,再填充细节的策略。

介绍

这幅画是丢勒的速写作品,第一次看到这种风格的画的时候,我感觉非常震撼,因为画面非常干净,线条表现力很强,这种画作是一般绘画爱好者花多少时间也难以模仿的。绘画大师能用非常少的笔画数,非常简单的调子,构建出生动的形象。这需要对笔画的控制和笔画之间的关系有很强的把握。

计算机中,一张图片由 n x n 个像素点组成,每个点由 RGB 三个值确定颜色。从这个意义上来说,让计算机临摹一张画,最简单的方法就是直接逐像素填充一张图片。而人在画画的时候,是用笔画去构建一张图片的。如何让计算机像人一样绘画?这是我在接触深度学习不久后就十分感兴趣的问题。

从强化学习的角度看,我们需要设计一个 AI,给它一个画布和目标图。AI 的每一步在画布上画一个笔画,当它画的笔画使画布和目标图更像时,我们就给它奖励,驱动它学习。我们可以设定一个笔画上限,让 AI 在给定的笔画数后终止。

AI 绘画的流程

任务的困难

  1. 每一个笔画的动作空间很大,AI 要决策一个笔画的位置,形状,颜色,透明度,而每项参数都有非常多选择。如果我们强行将动作离散化,会损失控制的精度,同时还会面临组合爆炸的问题(每项参数选择数乘法原理)。一般的强化学习方法要求 AI 通过大量尝试来对环境进行建模,这是非常困难和耗时的。有兴趣的朋友可以了解一下 Deepmind 的 SPIRAL,使用了大量算力去解这个问题。

  2. 如果我们真的将 AI 接入一个绘画软件,笔画渲染是一个很耗时的操作,数据的获取会比较昂贵。

  3. 想要完成纹理丰富的自然图像绘画,需要的笔画数很多,这需要 AI 有比较强的计划能力。AI 需要考虑如何组合笔画,笔画的覆盖关系等。

算法

我们的基准算法是深度确定策略梯度 (DDPG) 算法,简单来说,DDPG 运用了演员-评论家(Actor - Critic) 框架,是一种是策略梯度算法和值函数方法的混合算法,其中策略网络被称为 Actor,而价值网络被称为 Critic。在画画这个任务中,Actor 每次画一个笔画,而 Critic 来为 Actor 的这个笔画做一个评价,Actor 的目标是得到更好的评价,Critic 的目标是评价得更准确。DDPG 的优点是能够在连续的动作空间上作决策,也就是说,我们可以设计一个 k 维向量 (x1, x2, ... , xk) ,其中每一维在 0 到 1 之间,来控制笔画的不同属性,比如 (x1, x2) 控制笔画起点坐标,(x3, x4)  控制笔画终点坐标等。而且 DDPG 还能离线训练,即 AI 对环境的探索信息可以存储在一个缓冲区中,训练从其中采样,一个信息可以重复使用。

为了解决环境探索建模困难的问题,我们预训练了一个神经网络笔画渲染器,可以快速地根据笔画的参数给出渲染在画布上的笔画,支持在 GPU上并行。

DDPG 和 Model-based DDPG 的不同结构

神经网络笔画渲染器还可以接入到强化学习的框架中来辅助 AI 的训练。我们将 DDPG 改造成了一个基于模型 (Model-based) 的方法,显著提高了 AI 的训练速度和表现(如下图)。

DDPG 和 Model-based DDPG 对比

训练技巧

  1. 动作束 (Action Bundle)。Actor 一次决策多个笔画,一方面,实验证明 Actor 有这样的能力,并且能显式地让 Actor 学习了笔画的组合;另一方面,减少网络的推断次数可以加速,步数减少还能加快 Critic 网络的收敛。实验证明,让 Actor 一次出 5 个笔画比较合适,一次出太多笔画会提高对 Actor 能力的要求。下图是 200 笔画人脸的训练曲线,分别一次出 1, 2, 5, 8 个笔画,纵坐标是 AI 结束绘画时画布和目标图的 L2 距离。


不同动作束设置的训练曲线

2. Wasserstein 生成对抗损失函数 (WGAN Loss)。我们需要度量画布和目标图的相似度以给出奖励函数,我们发现 WGAN Loss 是一种比欧几里得距离更好的度量,使得最后画出来的图细节更丰富。

3. 网络结构设计。Actor 和 Critic 是输入缩小版本的 ResNet-18。Batch Normalization (BN) 可以加快 Actor 训练,而在 Critic 上效果不明显。Critic 使用带 TReLu 激活函数的 Weight Normalization (WN with TReLu)。渲染器用 Sub-pixel 来代替反卷积显著消除棋盘效应。GAN 的判别器网络用了类似 PatchGAN 的结构,加上 WN with TReLu。我们的方法对于超参数也不太敏感,基本都使用了跟别人论文类似的超参数。具体细节见 paper。

效果

我们使用在几个数据集上做了实验,包括手写数字 (MNIST),街景门牌 (SVHN),名人人脸 (CelebA),自然场景图像 (ImageNet) ,限制的笔画数分别是 5, 40, 200, 400。

我们对比了用不同的笔画数量画人脸的结果,从 100 个笔画到 1000 个笔画,笔画数越多,细节的恢复越好。

不同笔画数画人脸的训练曲线

比较有趣的是,我们还可以设计不同形状的笔画来得到十分有趣的结果,比如限制 AI 只能画圆,或者只能画三角形等。

用不同的笔画来画人脸
不同数据集的训练曲线

相关工作

有一个类似的任务叫 stroke-based rendering,大多数解法是每个笔画基于贪心选择,或者使用大量的搜索等,最后效果也很棒,参见 Aaron Hertzmann 的一些文章,图形学方向也有不少工作研究了笔画的设计,动画生成等。

与我们类似的工作有 SPIRAL,这也是我们文中对比的。BMVC 2018 的 Doodle - SDQ 用 DQN 来画简笔画 ,ICLR 2019 的 StrokeNet 提出了类似的笔画渲染器。还有早一些的 Sketch-RNN 系列工作。用神经网络建模绘画的方法有点像 NIPS 2018 的 World Models,David Ha 还发推宣传了我们的 AI。

总结

用深度强化学习的方法做了一个看起来效果还不错的 AI,仅需要修改最大笔画数,就可以适于不同到数据集,以后仗着它街头卖艺,希望大家能够喜欢。我们尽量让这套方法看起来简洁干净,但难免还有许多缺点,欢迎大家提建议。

具体算法细节可以看我们的 paper,其中还有另外一些对比实验,和形式化的定义推导等。


arXiv:https://arxiv.org/abs/1903.04411

Github: https://github.com/hzwer/LearningToPaint


CVer强化学习交流群


扫码添加CVer助手,可申请加入CVer-强化学习群。一定要备注:强化学习+地点+学校/公司+昵称(如强化学习+上海+上交+卡卡)

▲长按加群


这么硬的论文介绍,麻烦给我一个在看


▲长按关注我们

麻烦给我一个在看

登录查看更多
0

相关内容

强化学习(RL)是机器学习的一个领域,与软件代理应如何在环境中采取行动以最大化累积奖励的概念有关。除了监督学习和非监督学习外,强化学习是三种基本的机器学习范式之一。 强化学习与监督学习的不同之处在于,不需要呈现带标签的输入/输出对,也不需要显式纠正次优动作。相反,重点是在探索(未知领域)和利用(当前知识)之间找到平衡。 该环境通常以马尔可夫决策过程(MDP)的形式陈述,因为针对这种情况的许多强化学习算法都使用动态编程技术。经典动态规划方法和强化学习算法之间的主要区别在于,后者不假设MDP的确切数学模型,并且针对无法采用精确方法的大型MDP。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
《强化学习》简介小册,24页pdf
专知会员服务
272+阅读 · 2020年4月19日
【Nature论文】深度网络中的梯度下降复杂度控制
专知会员服务
38+阅读 · 2020年3月9日
《强化学习—使用 Open AI、TensorFlow和Keras实现》174页pdf
专知会员服务
136+阅读 · 2020年3月1日
【综述】自动驾驶领域中的强化学习,附18页论文下载
专知会员服务
172+阅读 · 2020年2月8日
专知会员服务
234+阅读 · 2020年1月23日
2019必读的十大深度强化学习论文
专知会员服务
57+阅读 · 2020年1月16日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
已删除
将门创投
5+阅读 · 2019年5月5日
【强化学习】如何开启强化学习的大门?
产业智能官
13+阅读 · 2017年9月10日
【强化学习】强化学习+深度学习=人工智能
产业智能官
52+阅读 · 2017年8月11日
Music Transformer
Arxiv
5+阅读 · 2018年12月12日
Arxiv
7+阅读 · 2018年9月27日
Multi-task Deep Reinforcement Learning with PopArt
Arxiv
4+阅读 · 2018年9月12日
Arxiv
8+阅读 · 2018年5月1日
Arxiv
11+阅读 · 2018年4月25日
VIP会员
相关VIP内容
《强化学习》简介小册,24页pdf
专知会员服务
272+阅读 · 2020年4月19日
【Nature论文】深度网络中的梯度下降复杂度控制
专知会员服务
38+阅读 · 2020年3月9日
《强化学习—使用 Open AI、TensorFlow和Keras实现》174页pdf
专知会员服务
136+阅读 · 2020年3月1日
【综述】自动驾驶领域中的强化学习,附18页论文下载
专知会员服务
172+阅读 · 2020年2月8日
专知会员服务
234+阅读 · 2020年1月23日
2019必读的十大深度强化学习论文
专知会员服务
57+阅读 · 2020年1月16日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
相关资讯
Top
微信扫码咨询专知VIP会员