使用深度学习在Unity环境中训练Donkey Car —— 驾
前言:
通过前面两篇博客的介绍,大家现在已经能部署好Unity环境制造数据并且训练自己的模型。
两篇博客的地址:
使用深度学习在Unity环境中训练Donkey Car —— 环境搭建和数据制造 - 简书
使用深度学习在Unity环境中训练Donkey Car —— 训练模型 - 简书
今天这篇博客则是最后一步,验证自己训练的模型在Unity中驾驶Donkey Car的效果怎么样!(文中有最终效果演示视频链接)
开启服务:
在使用模型之前需要知道Unity是如何与python通信的!
由于我们是在python中编写的代码,因此我们必须首先找到一种方法来使Python与Unity环境进行通信。通信是通过Websocket协议完成的。与HTTP不同,Websocket协议允许服务器和客户端之间的双向双向通信。在这里,我们的python“服务器”可以直接将消息推送到Unity(例如转向和节速度),我们的Unity“客户端”也可以将信息(拍摄图片)推送回python服务器。在python“服务器”与Unity传递信息时会涉及解码和编码的工作,如将图片编码成数据流的形式传入“服务器”,“服务器”收到收到数据流会进行一个解码,再将解码得到的信息传入网络,网络输出的数值也会再次转换为数据流传给“服务器”,最终服务器再传给Unity。(具体代码在tcp_server.py文件中)
我们之前训练好的模型在outputs文件夹下,现在就要使用训练好的模型开启服务:
1、首先在“sdsandbox-master”文件夹内打开Power Shall(如图)
打开power shall2、输入“python src/predict_server.py --model=outputs/mymodel.h5”指令开启服务 (mymodel.h5是我当时保存的模型,每个人自己保存的模型名字可能不一样)
运行python“服务器”驾驶Donkey Car:
打开服务器之后再进入Unity环境中,点击开始按钮,再单击右上方的“Use NN Steering”按钮(第三个空白按钮,至于为什么是空白的,我已经在第一篇博客做了解释)。
运行环境,连接服务器此时Unity会连接上python“服务器”(如图)
建立连接这样Donkey Car就通过我们自己训练的模型在道路上行驶。
我在bilibili上传了一段视频(这段视频演示了 “有模型驾驶Donkey Car” 和 “无模型驾驶Donkey Car” 之间的区别,通过对比可以明显看出有多有趣!!!)。视频链接:“有模型驾驶Donkey Car” 和 “无模型驾驶Donkey Car” 之间的区别
总结:
首先需要说明的是训练Donkey Car的数据不要过大,过大容易使模型过拟合,会出现开着开着就跑出去了,制造数据的操作重复5次即可。建议大家搭建好GPU环境,因为GPU训练速度快太多了。大家如果想提升速度可以通过对训练数据名修改,将里面的速度值提高到2或3,同时在启动服务器之前需要将predict_server.py 中的默认速度调成与训练速度值一致(如训练数据为2,默认速度也改为2).
在Unity中训练Donkey Car到此就结束了,整个过程不难,十分有趣,大家可以在业余时间娱乐娱乐,有闲钱的小伙伴也可以买个真的Donkey Car在现实环境中玩玩!!