夏乙 问耕 假装发自 凹非寺

量子位 出品 | 公众号 QbitAI

单手凌空打俄罗斯方块,这样的神技如何炼成?插图

假期模式已经开启了~

学生党已经赋闲在家,工业党不少也已带着橘子返乡。

阖家欢乐,面对亲朋的时候要来了。

那么,如何才能在乡亲们面前,显得特立独行、与众不同?

你看这样如何。

喧嚣的人群之中,只见你端坐其间,面单不易察觉的微笑。

突然,你出手了!

单手凌空打俄罗斯方块,这样的神技如何炼成?插图1

手型扑朔变换,位置迷离转移。

新版喝酒划拳?不,他们很快发现,你神秘的手势,竟然的控制着一个一个落下的彩色几何图形,完美的错落叠加!对!你是神秘的俄罗斯方块大师!

这么传统的游戏,也能耍酷?当然,越是看似平淡,越能剑走偏锋。

在那些打农药、晒青蛙的军团面前,你是如此的出众。

套用某机构的话,那是:

一样的打游戏,不一样的酷

单手凌空打俄罗斯方块,这样的神技如何炼成?插图2

后,深吸一口气,告诉乡亲们:这是传说中的——人工智能。

(众人皆惊)

摄像头is all you need

这套俄罗斯方块AI心法,传授于你。

心法源自一位名叫Marianne Linhares的Medium用户。基于去年Google发布的Teachable Machine,她构建了一个Demo,只需一个摄像头,能玩转俄罗斯方块。

先来介绍一下Teachable Machine。

单手凌空打俄罗斯方块,这样的神技如何炼成?插图3

Teachable Machine本身是一个基于浏览器的工具,任何人(科学上网之后)都可以借助这个工具,使用电脑上的摄像头,亲手体验如何训练一个神经网络。

无需代码,只需电脑浏览器+摄像头!

去年10月,量子位的李根同学在大理,亲测表明:从一无所知到训练完成,不超过3分钟,而且还挺有意思。

方法很简单,以科学的方式,打开这个页面:

https://teachablemachine.withgoogle.com/

单手凌空打俄罗斯方块,这样的神技如何炼成?插图4

Teachable Machine的神经网络,能够通过摄像头,学会三个你发出的指令。整个训练过程是机器学习的三大步骤:输入-学习-输出。

1)输入

在摄像头前做某个动作,数量不低于30次,多些角度和场景,然后在准确值接近100时开始下一个动作输入,总共三个。

2)学习

在你超过30次的动作捕捉中,机器通过这个数据集的学习,掌握了你这个动作代表的意思。

3)输出

三个动作均按要求输入完成后,一一对应的输出也会在这个过程中学习完毕。你可以在屏幕前做出任一动作,机器会通过相机输入后给出对应的意义。

当然,这个意义完全可以自定义,形式也多种多样,比如GIF动图、声音,甚至某段回答。

get凌空打游戏神技

然后,说一下如何改造出一个用手势凌空控制的俄罗斯方块。

这项神技的基础,是让计算机能通过摄像头认出你的手势,然后翻译成游戏中对应的按钮,比如说上下左右。

这是一个图像分类任务啊同学们!我们刚才讲的Teachable Machine,刚好适合活学活用到这儿。

Google Creative Lab还在GitHub上公开了它的一个样板文件。别客气,这些代码拿去改!

https://github.com/googlecreativelab/teachable-machine-boilerplate

单手凌空打俄罗斯方块,这样的神技如何炼成?插图5

关注人数并不多,可惜啊可惜,只能用俄罗斯方块来拯救它了。我们可以在Teachable Machined基础上构建一个模型,来识别各种手势。

单手凌空打俄罗斯方块,这样的神技如何炼成?插图6

要让机器能认识摄像头拍到的手势,我们的模型得能适应这些限制条件:

从用户的摄像头获取输入,意味着我们事先不知道要将图像分成哪些类。

由于我们事先不知道有哪些类别,需要在浏览器里直接训练。

如果每个有电脑的人都能运行这个demo好了,也是说,它对计算力的要求不能太高。

要快。如果玩游戏的时候该按左键还是右键都得花5分钟来决定,那不好玩了。

对于前三条限制,迁移学习是个好方法,拿一个在现实世界数千类图像上训练过,已经学会分辨形状和边缘的模型,再针对特定的数据稍加训练。

Google Creative Lab是这么做的,他们用了SqueezeNet,这个模型的精度和AlexNet不相上下,大小却不到0.5MB。

不过,怎么用连我们自己都不知道什么样的数据,在浏览器里重新训练模型呢?

可以在SqueezeNet的其中一层插入一个KNN(k-nearest neighbors)。KNN是基于实例的模型,因此,它不会执行明确的泛化,而是会将新的问题实例和训练中见过的实例进行比较,也没有明确的训练阶段。

维基百科上是这样描述KNN的:

k-NN是一类基于实例的学习,或者叫懒学习,它的函数只是局部近似,所有计算都会推迟到分类时。k-NN算法是所有机器学习算法中简单的之一。

对于我们的任务来说,简直再合适不过了。

训练

要训练这样一个模型来识别你的各种手势,还有一些注意事项:

要用容易分辨的图像;不幸的是,小细节不足以用来区分图像。

各类图像尽量用同样的背景;如果你改了图像背景,KNN学会去分辨的可能是背景,忽略了目标本身。

目标要居中,而且要确保训练模型辨认不同位置的目标,每个类别大约20-50个样例够了。

Tips讲完,训练正式开始。

我们训练的目标,是让模型将特定手势与游戏中的按钮对应起来。

单手凌空打俄罗斯方块,这样的神技如何炼成?插图7

比如说握拳伸到画面右端,是向右;握拳放在画面左侧,是向左;伸出大拇指,是向上;手掌平放在桌面上,是向下。

↑↓←→四个按钮,都有了。来测试一下:

单手凌空打俄罗斯方块,这样的神技如何炼成?插图8

作者提示:本文为向上选择的手势不太好,有时手势从向左改到向右的时候,模型会误认为看到了向上的手势。用源代码请小心。

后,完成好的源代码在这里:

https://github.com/mari-linhares/teachable-machine-games

玩起来是这样的,有时也会犯个小错误什么的:

更多选择,更多欢乐

Tetrishttps://github.com/ttencate/tis

上面,是本文所玩的俄罗斯方块。实际上,同样的心法,不止于俄罗斯方块。

GitHub上这两个游戏也适合这种方法:

Snakehttps://github.com/maryrosecook/retro-games

Asteroidshttps://github.com/maryrosecook/retro-games

如果你觉得手势还是不够酷,还可以用更无厘头的东西来训练这个模型:

单手凌空打俄罗斯方块,这样的神技如何炼成?插图9

还有更炫酷的。

在deeplearnjs.org网站上,专门有一个Cam Arcade。这个页面收集了不少使用摄像头+神经网络可以训练控制的经典游戏。

包括《毁灭战士》、《超级马里奥》、《俄罗斯方块》、《毁灭公爵3D》。同样的用法,也是使用摄像头训练,而且可调参数更多。

单手凌空打俄罗斯方块,这样的神技如何炼成?插图10

单手凌空打俄罗斯方块,这样的神技如何炼成?插图11

地址在此:

https://deeplearnjs.org/demos/teachable_gaming/

希望你训练的开心。

提示:尽量用手势,不要轻易尝试上下左右晃头,亲测会晕。

后,附送一个老游戏的大集合。

单手凌空打俄罗斯方块,这样的神技如何炼成?插图12

不用翻墙,直接在浏览器玩。

不用翻墙、不用翻墙、不用翻墙……纯玩。

地址:

https://js-dos.com/games/

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复招聘两个字。

量子位 QbitAI · 头条号签约作者

վᴗ ի 追踪AI技术和产品新动态

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: