欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由徐钒文 发表于云+社区专栏

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 - lowerscale[scale == 0] = 1np_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

问答

如何实现CNN卷积层的计算?

相关阅读

Linux调度原理介绍和应用(前篇)

如何备份你的MySQL数据库

MySQL 8.0 版本功能变更介绍

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1171905?fromSource=waitui

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区!

转载于:https://www.cnblogs.com/qcloud1001/p/9400190.html

“猜画小歌”的一些细节和思考相关推荐

  1. 从「猜画小歌」,谈企业的「数据困惑」该何去何从?

    「猜画小歌」坐拥5000万组大数据,你怎么看? Google很会玩. 当所有做云计算.大数据.手机的厂商在广而告之其先进的技术能力时,通常采用直白宣讲式的说教,落地的东西却很少,听多了也就是过眼烟云. ...

  2. Google猜画小歌升级:现在可以跟好友对战了

    问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 今天,Google开发者大会在上海举行. Google中国的一些运营和开发者负责人,上台简要介绍了目前Google的相关进展.(不少老外讲中 ...

  3. 《猜画小歌》背后趣事

    前言 这个博客是补上周的,这次就聊一聊轻松的话题.要问这几天哪个游戏最火爆,非<猜画小歌>莫属,作为一个资深游戏爱好者,自然不能放过,连着完了N多盘,发现真的是爱不释手.下面就来说说< ...

  4. 猜画小歌技术解密!推出一天 中国网民“疯”了

    看点:退出中国8年后,谷歌靠一款小程序再度挑动全中国网民. 谷歌最近狠秀了一把存在感,前一刻还因安卓系统垄断事件被欧盟处以数十亿欧元的天价罚单,后一刻就凭借首款AI微信小程序"猜画小歌&qu ...

  5. 从“猜画小歌”背后的AI原理,教大家如何得高分

    原文转载于:https://blog.csdn.net/L70AShC3Q50/article/details/81187226 作者:邵宇,清华大学计算机专业博士 近期谷歌的"猜画小歌&q ...

  6. 谷歌“猜画小歌”被吐槽:这AI怕是个傻子吧

    相信大家的朋友圈最近一定被"涂鸦"刷屏了. 西雅图IT圈:seattleit [今日作者]宇直 宇宙第一直男 最近,谷歌推出了旗下首款微信小程序"猜画小歌".和 ...

  7. AI版「按图索骥」,比猜画小歌更复杂的的AI交互游戏

    郑集杨 发自 凹非寺  量子位 报道 | 公众号 QbitAI 你能在时间结束前根据Emoji找到你身边的物品吗?大概,像这样: 跟我玩?不不不,是你自己跟这个AI玩,找出东西然后让AI辨认它. 这并 ...

  8. 【猜画小歌】辅助插件FunnyDraw江湖召集令

    先来一张效果图: 源码地址: https://github.com/MegatronKing/FunnyDraw 项目提供了绘图框架,但只实现了少部分图案,仍需广大人民群众一起拿起键盘来画画 再来几张 ...

  9. 一夜刷屏的「猜画小歌」遭到反编译,内部还暗藏哪些玄机?

    Mobile First To AI First!Google 携第一款微信小程序开始在中国 AI 领域试水. 昨天,Google AI 在国内发布了一款微信游戏小程序「猜画小歌」,瞬间刷爆了朋友圈, ...

最新文章

  1. keepalived打造mysql主主高可用
  2. Centos7.6 下部署Cobbler
  3. UDP实现全双工聊天(聊天工具进阶)pyhton
  4. 蓝桥杯 试题 入门训练 Fibonacci数列——9行代码AC
  5. java map removeall_Java删除Map中元素
  6. STM32F0xx_ADC采集电压配置详细过程
  7. Sky公司的爱丁堡数据中心的能源效率纳入欧盟能效标准
  8. commons-fileupload 的详细介绍与使用
  9. Linux中,Tomcat安装
  10. THUWC2019游记
  11. 给Emacs安装一个脚踏板: 用Windows/Menu键作为key modifier
  12. python 万年历代码
  13. java电影购票系统_java swing实现电影购票系统
  14. TVP5150视频解码芯片 调试总结
  15. 百度网盘下载加速(pc端)
  16. jsp遍历List map
  17. 纯技术上来说,《看门狗》里的各种骇客技术有可能实现吗?
  18. 【新手入门】自己动手搭建云服务器
  19. Centos7恢复xfs删除文件
  20. Mac之button的使用Show+NSMenu+next+to+NSButton+in+Swift+OSX

热门文章

  1. oh-my-robot
  2. Codeforces 337D Book of Evil:树的直径【结论】
  3. 基于java 的websocket的聊天功能,一开始初始化websocket,执行打开连接之后就直接关闭连接了。...
  4. require js define 函数
  5. block 实现原理详解(一)
  6. SQL Prompt 5.1使用
  7. toolkit,phonetextbox中实现用户按回车键会换行
  8. sudo出现sudo:must be setuid root问题的解决方法
  9. ArcGIS Engine中的8种数据访问【转】
  10. asp.net 子页面调用外部 js