“猜画小歌”的一些细节和思考

Quickdraw的CNN-RNN模型

"猜画小歌"用到的quickdraw模型本质上是一个分类模型,输入是笔画的点的坐标信息和每笔起始的标识信息,应用几个级联的一维卷积,再使用 BiLSTM 层并对结果进行求和,最后使用Softmax层进行分类。

整个网络结构如图:

模型结构

开源数据和代码详见后面参考文档。整个网络比较简单,而且用其默认的参数最终的模型准确率在75%,如下图,不算是一个要求较高的场景,效果已经足够好。

这里分享笔者注意到的有几个有意思的小细节(高手轻拍)。

小细节

数据预处理

对于stroke-3(x,y,n),Google默认使用的TFRecord数据对坐标做了归一化与差值处理。

  # 1. Size normalization.
  lower = np.min(np_ink[:, 0:2], axis=0)
  upper = np.max(np_ink[:, 0:2], axis=0)
  scale = upper - lower
  scale[scale == 0] = 1
  np_ink[:, 0:2] = (np_ink[:, 0:2] - lower) / scale
  # 2. Compute deltas.
  np_ink[1:, 0:2] -= np_ink[0:-1, 0:2]
  np_ink = np_ink[1:, :]

为什么归一化?

  • 类似于输入层BN的作用,将数据的分布由原来激活函数的收敛区调整到梯度较大的区域
  • 只关心画的笔画走势,而不关心画的大小,也就是说画一个大圆和画一个小圆在输入数据层面没有太大区别

为什么差值处理?

  • 忽略起始坐标位置的影响,也就是说在画布的中间和四个角落开始作画同一个形状,在输入数据层面没有太大区别

卷积层

使用多个一维卷积(conv1d)级联,并使用线性激活函数,没有使用pooling层。

  • 线性激活改为relu,准确率降了点,为73%
  • 线性激活改为relu+加上pooling层(size=4,strides=4),准确率又降了点,为70%

为什么线性激活和去掉pooling层效果提升2-3个点?

pooling层有哪些作用:

  1. 降低参数量,事实上增加了pooling层使得训练时间缩短了一大半;
  2. 保持特征局部不变性,貌似我们的输入不是复杂的图片像素信息,而是笔画信息,而且做了差值处理,也不太需要局部不变性;
  3. 减少冗余,去除噪声,对于简笔画来说,可能作用也不是特别明显。

笔者(单纯的)理解简笔画已经是人类对于物体的高度抽象了,因此没有必要在用复杂的CNN网络去抽象特征,并且全局的特征有后面的RNN层获取。

小思考

Google 16年11月就推出了QuickDraw网页版,最近只是借助小程序又火了一把,之前已经获取过大量真实的用户数据,并用于这次小程序效果的优化。

模型还能用来做啥?

最近看到了一片研究这份简笔画数据中不同国家的人的绘画顺序与其国家文字的关系的文章,而且时序分类模型在异常分析、手写体识别、语音识别、文本分类等领域有大量的研究和进展。

画圆的不同

笔者研究生阶段曾经研究过电脑使用者的异常分析,根据用户的鼠标轨迹和键盘操作等特征建立分类模型识别是不是本人在操作。现在想来,直接拿这个模型来跑之前的任务,应该还不错。

产品层面,我们还能有些什么创新?

  • AutoDraw:能将你的涂鸦自动升华为美丽的艺术图像(Google已推出)
  • 绘画故事:画4格漫画,系统自动生成一个故事(这个配合上层的NLG技术应该问题不大)
  • 绘画打分:为你的绘画的创新性、技术性、完整性等自动评分

这些绘画数据还有什么可以挖掘的价值?

绘画是人在用自己的方式描述自己理解的世界,如果从这些简单的简笔画入手,能够从中学习出人理解物体和世界的方法,简单来说可以迁移到目前图像识别算法的高层抽象阶段,提升某些任务的效果;复杂一点甚至可以用作提升机器的推理能力,学习人类对物体和世界抽象建模的能力(脑洞)。

参考文档

https://tensorflow.juejin.im/tutorials/recurrent_quickdraw.html

https://github.com/tensorflow/models/blob/master/tutorials/rnn/quickdraw/

https://www.jiqizhixin.com/articles/2017-09-12-5

https://juejin.im/post/5b559b76e51d45616f4596dd

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习实践二三事

Machine Learning基础入门

断断续续接触机器学习也差不多有1年多的时间了,论文看了一些,教程也看了一些,也动手写过一些东西,自认略微优点心得吧(大牛莫笑) 之前写的也很零散,所以这次就...

21690
来自专栏机器之心

学界 | 微软提出深度学习新架构:使用问答系统来得到语法上可解释的表征

选自arXiv.org 机器之心编译 参与:黄玉胜 近日,微软公布的一篇新论文提出了一种新架构,它的内部表征(在执行文本问答任务时通过端到端的优化来学习的表征...

32040
来自专栏PPV课数据科学社区

干货 | 人工智能、机器学习和认知计算入门指南

? 本文将探索 AI 的一些重要方面和它的子领域。我们首先会分析 AI 的时间线,然后深入介绍每种要素。 几千年来,人们就已经有了思考如何构建智能机器的想法。...

32350
来自专栏AI科技评论

干货 | 如何测量 NLP 模型的性别偏见到底有多大?

AI 科技评论按:本文由 Ben Packer, Yoni Halpern, Mario Guajardo-Céspedes & Margaret Mitche...

14310
来自专栏目标检测和深度学习

如何从零开始构建深度学习项目?这里有一份详细的教程

选自Medium 作者:Jonathan Hui 机器之心编译 在学习了有关深度学习的理论课程之后,很多人都会有兴趣尝试构建一个属于自己的项目。本文将会从第一步...

37780
来自专栏腾讯技术工程官方号的专栏

腾讯 AI Lab 正式开源PocketFlow自动化深度学习模型压缩与加速框架

11月1日,腾讯AI Lab在南京举办的腾讯全球合作伙伴论坛上宣布正式开源“PocketFlow”项目, 该项目是一个自动化深度学习模型压缩与加速框架,整合多种...

36240
来自专栏PPV课数据科学社区

深度学习带你抠像表演

前情 回顾这些年机器学习的进展,我也一直想弄点真正的机器学习产品。 几个月前,我参加了超棒的Fast.ai深度学习课程之后,我好像就开窍了,我也有了机会:得益于...

33560
来自专栏新智元

【神经网络本质是多项式回归】Jeff Dean等论文发现逻辑回归和深度学习一样好

【新智元导读】谷歌用深度学习分析电子病例的重磅论文给出了一个意外的实验结果,DNN与逻辑回归效果一样,引发了热烈讨论。不仅如此,最近Twitter讨论最多的论文...

14700
来自专栏CreateAMind

最强UNREAL(UNsupervised REinforcement and Auxiliary Learning)简介及代码

UNREAL(UNsupervised REinforcement and Auxiliary Learning)算法

9410
来自专栏腾讯开源的专栏

【开源公告】腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!

11月1日,腾讯AI Lab在南京举办的腾讯全球合作伙伴论坛上宣布正式开源“PocketFlow”项目, 该项目是一个自动化深度学习模型压缩与加速框架,整合多种...

14820

扫码关注云+社区

领取腾讯云代金券