大家好,我是 Jack。
最近,一位 Reddit 网友自己搭了个 CNN 模型,在 2005 年出的经典游戏「极品飞车9:最高通缉」里,让 AI 玩起了自动驾驶
一经发出,文章点赞1700,可谓是机器学习子版块里一直以来的热度最高的帖子之一。
转自:新智元 | 编辑:Jack Cui
今天给大家介绍一下这个,非常适合练手的小项目

DeepForSpeed

在宽阔的大路上,AI开得还算平稳,但时不时就会去「画蛇」。
好在速度控制得还行,不会轻易引起「警察」的注意。
虽然是游戏机制的一部分,但想要甩掉这些穷追不舍的警车,玩家手动操作时几乎每次都把人整得心力憔悴、手指酸痛。
尤其是随着追捕等级的提升,对付的将不再是那些老旧的巡逻车了,而是重型SUV甚至是直升机,逃脱难度直线上升。
大概是训练数据的缘故,当 AI 在路上遇到障碍物时,表现得简直就和人类玩家一模一样:
「躲」这个词,在 AI 的字典里是不存在的。
轻打方向,微调路线,瞄准了直接撞上去才是王道!
从路牌到三角锥,一个都不能放过。

项目简介

「Deep For Speed」基于Python 3.9和Pytorch 1.10,只需要安装Numpy、Matplotlib库即可。
作者表示,这个项目的创意来自于英伟达项目的启发。
论文中英伟达只用单个卷积神经网络、而非大堆炫目算法就做出了自动驾驶汽车。
作者表示,自己项目的工作流程非常简单。
程序首先会将游戏中的速度仪表盘、小地图和视野中直观路面录屏并存储为numpy数组,之后再去调用np.load()函数进行处理就可以了!
模型中的play.py和play_util.py函数,实质上是键盘输入模拟器,将AI的自动驾驶结果模拟成物理键盘输入,操控游戏。
不过可能是作为参考的项目比较古老,这里只能把游戏调成分辨率为800x600的窗口放在屏幕左上角运行。
创建和处理数据
使用模型
项目作者称,做出可以运行的模型雏形用了两周,把模型修改到其他用户也能用,又花了两周。总共在项目上投入的时间大概1个月。
其中,训练数据集的搜集可以说是最难的部分了。
作者表示,自己耍游戏20小时中搜集的数据,因为模型改动的频度和幅度,最后只有两小时的数据能用。
项目的开源部分也是因为扩充训练数据集的需求:想要扩大数据包,但自己搞不定了。
不过,如果能让大家一起来玩的话,说不定有同好会做出更大的训练数据集、训练自己的模型,然后再共享给他
由此,作者也模仿原来游戏的名字「Most Wanted」给项目起了一个别称——「DeepForSpeed: Data Wanted」。
作为最终目标,项目作者还想将自己的CNN项目做成一个可以实验多种架构的通用平台/界面。
让玩家同好们在体验模拟器娱乐的同时,也能实验自己做的其他神经网络。
项目地址:
https://github.com/edilgin/DeepForSpeed

原理说明

《极品飞车:最高通缉》(Need For Speed: Most Wanted),是游戏业界著名厂商艺电(EA)推出的《极品飞车系列》赛车游戏中的第九作,于2005年11月15日开始在美国发售。
当年,开局一上来就不得不按照剧情需要把自己心爱的「宝驹」BMW M3 GTR输掉,着实让小编难受了好久。
尤其是之后要从最基础的车开始,堪称教科书式的「摩托变单车」……
游戏结合了沙盒开放世界、警匪跑跑追追模式、子弹时间视觉效果、以及玩家改装车辆等特色。
这些特色功能在当时几乎所有大游戏厂商都还在搞参与式电影类游戏项目的风气中,堪称走在时代的前沿。
不过托这款游戏现在画面质量一般、但游戏操作系统仍然犀利的特色,正好符合机器学习模型的个人开发者的要求:
因为画面质量一般,对硬件的要求就低,个人买得起;因为游戏仍然好玩,训练AI模型来玩仍然有价值。
此外,作为idea来源的英伟达论文,年代也十分久远,不过效果依然拔群。
https://arxiv.org/abs/1604.07316
论文中,作者训练了一个卷积神经网络(CNN),将单个前置摄像头的原始像素直接映射为转向指令。
只需用到很少的人类数据,AI就能学会驾驶汽车,即便是在没有标记或者视觉引导不明确的地方。
作者并没有训练AI去检测道路的边界,而是用人类的转向角度作为训练信号来检测有用的道路特征,从而让AI学到内部的表征。
与诸如车道标记检测、路径规划和控制这种对问题的明确分解相比,英伟达提出的端到端系统同时优化了所有处理步骤。
作者认为,这种方法可以得到更好的性能和更小的系统。其中,内部的自我优化,可以最大化整体系统的性能,而不是优化人类选择的中间标准,例如车道检测。
在训练过程中,图像最先会被输入到一个CNN网络之中,然后计算出一个转向的指令。
之后,将这个指令与图像的期望指令进行比较,调整CNN的权重,使CNN的输出更接近期望的输出。其中,权重调整是通过反向传播完成的。
一旦完成训练,神经网络就可以从视频图像中生成正确的转向命令。

絮叨

正在学习深度学习的小伙伴,可以试一试。
实战出真知,家人们,一起开车啦!
·················END·················

推荐阅读

继续阅读
阅读原文