作者 | 塞远
从远古时期开始,人类就已经学会了用简单的涂鸦去描绘自己看到的世界,而到了今天,涂鸦或者更准确的说是简笔画,可能是唯一的全人类通用的绘画技能。如果给你一张纸和一支笔,请你画出一双大眼睛,美术生画出来的可能是左边这样的,漫画家画出来的可能是右边这样的:
而我们的灵魂画手画出来的可能是下面这样的......虽然看起来简单,但是一笔一划中都透露着一股神韵......
1.“猜画夺宝”项目背景
淘宝用户参与“猜画夺宝”的方式有两种。一种是日常分享的玩法,用户根据画板上的提示绘画一些特定种类的物体,然后AI会识别出相应的类别并提示用户分享识别到的内容,具体效果如下图所示。小编绘画的抽象派猪年生肖就被AI正确的识别到了。
另一种玩法是在淘宝直播的官方直播间,主持人口头播报12道猜画夺宝题目,用户可以单人也可以组队参与这12道题的作答,每道题都是AI识别用户绘画的物体,如果识别到的内容和题目要求绘画的一致,则作答正确,每答对一题都会有机会抽取现金红包,最后的终极大奖会根据全队的总得分进行抽取。
整个项目中我们见证了许多用户的“灵魂画作”,让我们一睹为快。
2.“猜画夺宝”项目面临的挑战
可能有的读者也试玩过谷歌的“猜画小歌”这一款微信小程序,可以说“猜画小歌”是手机端AI猜画互动游戏的鼻祖,并且谷歌也开源了Quick, Draw!简笔画识别数据集。相较于“猜画小歌”,我们的AI简笔画识别面临更多的挑战:
-
如果采用类似谷歌的服务器端算法,超过10万人同时参与相同题目的AI猜画有一定风险,因为上传图片,大模型预测,再加预测结果返回,整套流程过于冗长,手机端的互动流畅性难以保证。
- 如果采用基于手机端的小模型识别算法,虽然速度上能够保证,但是识别准确度方面难免会打一些折扣。
那么我们最终选择了手机端的简笔画识别方案。基于淘宝自研的AliNN深度学习Inference框架,我们的模型可以获得流畅的用户体验,而对于小模型精度方面的损失,我们也研发了一套自己的解决方案,会在下一部分进行详述。
3.“猜画夺宝”项目采用的识别方案
简笔画识别的目标是对任意一幅简笔画物体进行分类,而相较于普通图片中的物体分类,简笔画物体分类的难度更大,因为简笔画物体往往缺少丰富的纹理信息,也存在大量的形状类似的简笔画物体。
在机器学习领域,学术界一直以来都在尝试对简笔画物体进行分类,比较传统的做法是先对简笔画物体进行特征提取(比如用一些传统的SIFT特征或者HOG特征),然后针对这些提取出来的特征,用SVM分类器进行多类物体的分类,当然相较于现在流行的深度神经网络的分类方案,这样的传统算法的准确度比较低。
近些年,随着深度学习的发展,简笔画分类算法有了很大程度的进步,CNN方案和RNN方案是两种比较常用的简笔画分类算法,我下面简单介绍一下这两者的原理。
CNN方案
CNN方案简单地把所有的简笔画图像看成是一幅黑白图,在我们把数据集中所有简笔画的笔画粗细,物体大小归一化到同一个尺度上以后,我们就可以选择适合的CNN网络对这些黑白图进行分类训练了。下图展示了近几年在ImageNet物体分类比赛上取得成功的多个CNN网络,我们可以根据实际的场景,选择相应的CNN网络来做简笔画分类。比如当我们追求准确度的时候,我们可以选择像NASNet这样重量级的网络,而当我们追求性能和精度平衡的时候,我们可以选择像MobileNet这样的可以在移动端运行的CNN网络。
ImageNet上比较成功的CNN网络对比图,准确度vs计算量[1]
RNN方案
这里我们介绍的RNN方案[2] 来自于Tensorflow官网,是一份很好的简笔画识别+Tensorflow应用的教程。那么在这个方案中,简笔画图像不再是简单的黑白笔画信息了,它引入了时序信息,而我们知道RNN是非常适合解决拥有时序信息的问题的。在这个方案中,所有的简笔画物体的笔画由三个信息决定,即笔画经过的点的位置(x,y)坐标和经过这个点的时刻t(从当前笔画开始计算)。如下图中所示,一幅“猫”的简笔画被量化成了一个位置加时间的序列,当然在这幅图中时间信息被进一步简化,如果是笔画开始的点就为1,如果不是笔画开始的点时间信息就为0。
在RNN的预测过程中,这样一幅简笔画序列将经过一系列一维卷积,再经过LSTM层,并将所有 LSTM 步的输出之和馈送到 softmax 层,以便根据我们已知的简笔画类别来决定简笔画的分类。
RNN方案举例[2]
我们的方案
CNN网络简笔画识别流程示例
RNN网络简笔画识别流程示例
综合CNN和RNN的方案,我们在实验中发现,RNN网络要比CNN网络整体的准确度更高,这也显而易见,因为RNN网络的输入信息更丰富,把时序信息也引入了其中,而CNN网络相较于RNN网络平均的预测速度更快,也更容易在手机端进行部署,那么如何能够取长补短,形成我们自己的简笔画识别方案呢?
我们参考了kaggle简笔画识别比赛[3]的前几名方案,把RNN利用的时序信息和CNN的黑白输入图像结合到了一起,不再使用黑白简笔画图像作为输入,而是使用RGB图像进行输入。如下图所示,我们用不同的颜色给不同顺序的笔画进行着色,比如每幅简笔画的第一笔我们用红色进行着色,更进一步,如果我们拥有的时间更精确(比如时间信息是从当前笔画开始的毫秒时间),我们甚至可以把第一笔红色笔画变成从浅红到深红的渐变笔画。用这样的方法,我们就把抽象的时序信息融入到了CNN的输入图像中去,用新的RGB图像作为网络输入。
时序信息融入RGB图像示例[3]
这样,我们新的方案的示意图如下图所示,CNN网络输入是拥有笔画时序信息的RGB简笔画图像,先经过一系列2D卷积层和Max pooling层,再用一系列全连接层把图像抽象成更高维的信息,最后用softmax层把最终的分类结果得到。
我们的时序CNN网络简笔画识别流程示例
4.“猜画夺宝”项目采用的数据集
Google’sQuick, Draw!数据集 [4]
TU-Berlin数据集 [5]
简笔画识别领域的公开数据集并不多,比较著名的有Quick, Draw!数据集[4](上图)和TU-Berlin数据集[5](上图)。之所以简笔画识别数据集比较难构建,是因为一个好的简笔画数据集必须具备以下几个特点[6]:
- Exhaustive:数据集中的物体种类必须涵盖大部分我们在日常生活中遇到的物体种类。
- Recognizable:每个物体种类必须从形状就能被识别,而不需要纹理信息。
- Specific:每个物体种类必须足够明确,不存在太多的视觉上的差异,比如“乐器”就不是一个很好的物体种类,因为存在太多种不同种类的乐器了。
而Quick, Draw!数据集和TU-Berlin数据集就是两个很好的具有上述特点的简笔画识别数据集。
谷歌的Quick, Draw!数据集是现在公开的最大的简笔画数据集,包含345个物体种类,总共约5千万幅简笔画图像,每个类别平均约有15万幅简笔画,而且它们来自于世界各地,由世界各地的用户在20秒内完成单幅简笔画的绘画。所以Quick, Draw!数据集的更倾向于抽象的简笔画流派。
TU-Berlin数据集包含250类物体,每类物体提供了80幅简笔画,而每幅简笔画都是由志愿者花了将近30分钟绘画完成的,所以TU-Berlin数据集更倾向于比较现实流派的简笔画数据集。
综合我们实际的淘宝直播答题场景,我们选择了谷歌的Quick, Draw!数据集作为训练数据集,我们从每一类物体的数据中随机选择了一部分简笔画作为测试图像,其余的数据作为训练图像,训练我们的时序CNN模型。
最终我们的时序CNN模型在保证运行速度达到实时的前提下,在测试集上获得了TOP3准确度超过90%的表现,相比于不加时序信息的CNN模型获得了接近5%的精度提升。
5. “猜画夺宝”项目未来的发展和相关的应用
本次的“猜画夺宝”活动,吸引了超过1亿人次参与互动,说明广大的淘宝消费者对于有趣的手机端智能玩法有很高的认同度。只要互动玩法设计的有趣,参与时的智能科技感强,就很能够获得大众的青睐。
沿着这样的思路,未来我们一方面会尝试对“AI猜画”的算法能力进行不断的升级和优化,让AI能够准确地识别更多种类的物体;另一方面,依托我们自研的移动端智能SDK——PixelAI(见下图),在其他有趣的智能场景,我们也会推出更多的互动玩法。
PixelAISDK能力和功能示意图
PixelAISDK涵盖了人脸、表情、姿态、手势、分割、追踪、SLAM等端上智能算法以及互动渲染能力,还包括了AliBeauty美肤、滤镜、美型美体、上妆四大功能,以及基础图像处理,视频编解码技术,是我们移动端智能互动玩法的基础SDK。目前为止我们根据PixelAI的算法能力推出过本次春节的“猜画夺宝”活动,2018年双11猫晚的“笑脸红包”,以及去年世界杯期间“这就是世界波”栏目的AR头球互动等(参考下图)。
PixelAISDK移动端智能玩法举例:“猜画夺宝”,“笑脸红包”,“AR头球”
未来我们会以PixelAI为基础推出更多有趣的互动玩法,让用户拥有更多的智能体验。
关于作者:塞远(陈志文),淘宝技术部算法小二,个人兴趣是计算机视觉和深度学习,目前主要从事淘宝多媒体算法的开发工作,服务端和移动端算法都有涉猎。
参考资料:
[1] BenchmarkAnalysis of Representative Deep Neural Network Architectures (Simone Bianco,Remi Cadene, Luigi Celona, Paolo Napoletano), In IEEE Access, volume 6, 2018.
[2]https://www.tensorflow.org/tutorials/sequences/recurrent_quickdraw#download_the_data
[3] https://www.kaggle.com/c/quickdraw-doodle-recognition
[4] https://quickdraw.withgoogle.com/data
[5] http://cybertron.cg.tu-berlin.de/eitz/projects/classifysketch/
[6] M. Eitz, J. Hays, and M. Alexa. How dohumans sketch objects? ACM TOG, 31(4):44:1–44:10, July 2012.