nba2k20投篮编辑器怎么开(手把手教你训练一个秒杀科比的投篮AI,不服来练|附开源代码)
更新时间:2022-10-09 03:59:24原作:Abe Haskins
安妮 编译整理
量子位 出品 | 公众号 QbitAI
在这篇教程中,谷歌工程师Abe Haskins用简洁易懂的语言,教你用Unity3D和TensorFlow生产一只会投篮的AI。
不少人表示,文章中的这些gif图能看一天!教你用AI秒杀NBA球员的校车马上就要发车了,还不快准备上车?
准备阶段
在开始正式训练前,先检查下自己是不是准备好了下面这些工具:
- 模拟篮球和物理环境Unity
- 用于训练模型的Node.js和TensorFlow.js
- 通过ML-agent asset包将模型嵌入Unity的TensorFlowSharp
- 将TensorFlow.js转换成Unity中可用图的tsjs-converter
- 将线性回归简单可视化的Google Sheets
所需工具就是这些了,接下来我将手把手教你解释清楚这些工具是怎样应用的。我建议大家先去将开源代码下载下来,方便后续的学习和理解。
代码地址:
https://github/abehaskins
明确目标
把目标想得简单些更有利于完成目标,我们可以把这个任务想象成:如果投球手距离篮筐的距离为x,用y程度的力度投球则会进球的简单问题。
这样一想是不是觉得模型都简单了好几度?如果你对如何在Unity中制作更复杂的AI感兴趣,你可以从Unity中查看完整的ML-Agents项目。
ML-Agents项目地址:
https://github/Unity-Technologies/ml-agents
篮筐和球
在这个游戏中,我们只需要投篮就好了。首先需要用到的就是Unity,你平时打游戏时看到的那个立方体的logo就是Unity的标志。它是一个游戏引擎,可以为所有平台构建2D和3D游戏。
Unity内置物理世界系统,还包括基础3D建模和脚本运行时(Mono),支持用C#编程。
把球场的大环境拼接起来并不复杂:
没错,图中的红色块就代表玩家。模拟篮筐上设置有隐形触发器,帮助检测小球通过篮筐的具体时间。
触发器使用教程:
https://unity3d/cn/learn/tutorials/topics/physics/colliders-triggers
如上图所示,在Unity编辑器中,肉眼可见绿色的隐形触发器。可观察到触发器分为上下两个,这样就能计算出球从篮筐顶部到底部落下消耗的时间。这两个触发器可在/Assets/BallController.cs中的OnTriggerEnter中查看。
上下都有触发器的另一个好处就是,可以据此判断小球的材料,帮助掌握distance和force.y两个核心变量。
投篮
打开
/Assets/BallSpawnerController.cs,这是一个负责生产篮球并试图投中篮筐的脚本。你也可以在Shoot()结尾处查看这段代码。
不知道你有没有注意到,Instantiates代码处表示了一个全新的实例,可以在此处设置投篮的力度和距离篮板的距离。
如果你是在/Assets/BallController.cs处打开的,可以查看Start()方法,之后在加入新篮球时会在此用到这段代码。
换句话说,我们创建一个新球,然后给它一定大小的力,设置30秒后球将被自动销毁,来确保我们能处理源源不断新出现的球。
设置好一切后,我们看看自己的这个全明星投篮手是如何投篮的。你可以点击Unity编辑器中的播放按钮,我们会看到……
百发百不中!
为什么会出现这样的情况?答案就在于Assets/BallController.cs代码中float force = 0.2f这一行。这条线让所有球的行动轨迹保持一致,所以出现了一发都没进的惨烈结局。
当然~这不是我们想要的,所以我进行了下一步的与探索。
随机投篮,收集数据
我们可以通过简单将力量变为随机的方式,引入一些随机噪音。
这样就能推测出,能够投中的力度是什么样的。当然这需要一些时间~
如图所示,红色代表没有投中的球,绿色代表已经入篮的球。此时,任何力度的投篮都是我们可以使用的数据点,下面也会谈到这些。
同时,我们需要考虑到,我们希望红色的小球能从任何位置成功投篮,因此我们需要的不仅仅是只从一个地方投篮。在
Assets/BallSpawnController.cs位置中,查找这些行并去掉MoveToRandomDistance()即可解决这个问题。
这样,如果我们再次运行,就可以看到红球在每次投篮后都能在球场上热情地跳跃。
随机运动和随机力量的结合创造了一种非常奇妙的东西:数据。如果此时查看Unity中的控制台,你能看到每次投篮时记录的数据。
每次成功投进都会被记录,并且到目前为击球的数量,距离篮筐的距离以及击球所需的力量都可查看。这些数据提升的速度比较慢,我们可以将MoveToRandomDistance()中的参数0.3f(每次投篮的延迟为300毫秒)改成0.05f(延迟50毫秒)。
现在,看看我们参数调试后的结果:
有没有发现,这其实是个不错的训练方式,系统显示成功率为6.4%了。下一步,我们准备将这些数据从Unity中提取出来,并构建一个模型预测所需要的力量。
预测、模型和回归
在用到TensorFlow之前,我们先让Unity环境中的红球完成大约50次命中。
此时如果查看Unity项目的根目录,则应该能够看到一个名为successful_shots.csv的新文件。这是来自Unity的原始转储,我们把这份数据导出来,以便在excel中分析它。
这个.csv文件只有三行,index,distance和force。我在谷歌表格中导入这个文件,创建了带趋势线的散点图,这样就能了解数据的分布情况了。
这些点组合起来可以发现一些规律。y轴为力度、x轴为距离。可以看到,所需的里与投篮距离之间有明显相关性,也有一些例外情况。
是时候让TensorFlow登场了,帮助我们用类似的代码创建更复杂的模型。比如,在一个完整的游戏中,我们可以涵盖进一些新功能。
现在需要创建我们的TensorFlow.js模型了。
在你喜欢的编辑器中打开tsjs/index.js文件,这是一个基于数据训练模型的脚本successful_shots.csv。训练和保存模型的方法如下:
我们从.csv文件中加载数据创建一些列x和y坐标点,让模型学会服从这些数据,之后,保存!
遗憾的是,TensorFlowSharp并不接受Tensorflow.js可以保存成的模型格式,需要我们做些翻译工作才能将模型引入Unity。
一般来说可以将TensorFlow.js Format转化为Keras Format,创建一个检查点;我们也可以将它们与Protobuf Graph Definition合并,创建检查点。
现在,我们看看在Unity里
Assets/BallSpawnController.cs下的GetForceFromTensorFlow()中的模型是什么样子的。
比赛日
利用上面已经完成的系统,我们在模型上创建了一写变体,在训练500次时,模拟篮球的运行轨迹是这样的:
正确率提升了10倍!
这还只是训练500次的结果,剩下的交给你了~别忘了回头看看我最后生成的结果,这是多么可爱的游戏啊~
传送门
客原文地址:
https://medium/tensorflow/tf-jam-shooting-hoops-with-machine-learning-7a96e1236c32?linkId=54634097
开源代码在此:
https://github/abehaskins
祝你好运~
— 完 —
实习生招聘
量子位正在招募活动运营实习生,策划执行AI明星公司CEO、高管等参与的线上/线下活动,有机会与AI行业大牛直接交流。工作地点在北京中关村。简历欢迎投递到quxin@qbitai
具体细节,请在量子位公众号(QbitAI)对话界面,回复“实习生”三个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
相关推荐
-
nba2k20手游在哪个平台(《NBA 2K20》试玩版报告:更加平衡的篮球体验)
查看详情
-
nba2k18有哪些队(2K18下赛季必玩的16支球队,每一支都是经典中的经典)
查看详情
-
nba2k系列有哪些(游戏圈小科普:除了NBA系列,2K还背着我们做出了多少经典?)
查看详情
-
什么ppnba(NBA2022-2023赛季展望:大西洋赛区——布鲁克林篮网)
查看详情
-
nba2k为什么格林那么便宜(2K值全队第五,逼近格林维金斯克莱!普尔的年薪才全队第11啊)
查看详情
-
nba2k19预设球队有哪些(NBA2K20 主机版DEMO试玩报告:我自己就是1000个哈姆雷特)
查看详情
-
nba2k19在哪些交易(千亿景林最新调仓:买回新东方,大举加仓拼多多,坚守贝壳)
查看详情
-
2k21辉煌生涯代言多久一次(口碑大跌!每年都来一款的NBA2k,NBA还是摇钱树吗?)
查看详情
- 最新资讯
-
- 2023-05-15 test
- 2022-11-15 2夺欧洲杯4获世界杯(俱乐部的成就引领国家队的辉煌——世界杯巡礼之西班牙篇)
- 2022-11-15 谁能介绍韩国国国家足球队(韩国足球,在欧洲是什么水平?)
- 2022-11-15 篮球世界杯中国最多几强(支持杜峰下课,但是中国男篮从世界第八沦为亚洲第八这个锅不该背)
- 2022-11-15 奥运会分为田径和什么(数说奥运:少年强则国强)
- 2022-11-15 中国男足VS沙特男足动漫图片(这部足球动画让日本队踢进了世界杯)
- 2022-11-15 世界杯进球最多的赛事(历届世界杯决赛里面11大进球最多的比赛)
- 2022-11-15 nba2k20手游在哪个平台(《NBA 2K20》试玩版报告:更加平衡的篮球体验)
- 2022-11-15 萨拉赫升至第三位(萨拉赫离封王就差一个冠军了,创下4大里程碑纪录 梅罗之后第三人)
- 2022-11-15 世界杯阿根廷队服(世界杯开赛前9天,阿根廷做出重要决定!恭喜梅西,封神希望大增)
- 推荐攻略
-
-
乌克兰总统身亡(乌总统泽连斯基解除乌总检察长及国家安全局局长职务)
-
足球比赛每个半场多少分钟(足球比赛每半场几分钟)
-
2021中超今天哪里转播(今晚!中超2场对决,CCTV5 直播申花PK武汉,腾讯体育亚泰vs天津)
-
2022梅西坠机身亡事件结果(足坛变天!巴萨无缘榜首的2年:梅西告别,老马去世,2-8惨案)
-
2021全运会篮球直播赛程辽宁(4月22日央视直播:CBA总决赛;赵心童vs马奎尔,塞尔比vs颜丙涛)
-
中国最强导弹(世界洲际导弹前10排名,中国东风导弹领先美国,第一名堪称导弹王)
-
2021篮球比赛在哪里看(CCTV5直播NBA 辽篮争夺CBA总决赛冠军点 颜丙涛出战斯诺克世锦赛)
-
东航结果不敢公布了(民航局再次回应东航MU5735事故调查!查明原因有多难,多久公布?)
-