您好同志们!
上周末,在X5,FLESS和自动驾驶爱好者社区的协助下,举行了hackasborkaton竞赛-基于donkeycar套件的自动驾驶汽车模型竞赛。 任务如下:首先需要用零配件组装汽车,然后对其进行培训以使其通过轨道。获胜者是最快的3圈。对于击球-失格。 尽管这样的机器学习任务并不新鲜,但是困难仍然存在:从无法使wifi正常工作到训练后的模型不愿意沿轨道操纵硬件。所有这一切都在紧迫的时间内完成!
当我们参加比赛时,很明显这将非常有趣且非常困难,因为我们只有5个小时的时间,包括午休时间,可以组装打字机,记录数据集和训练模型。
驴机
Donkeycar包括一个外壳,上面装有带广角镜头(170度)的摄像机,Raspberry Pi3 +,伺服控制板,软件以及基本上所有的东西。但后来发现,即使是在有限的时间内组装这样一个简单的设备,以及随机的设备故障也可能花费很长时间,而且您将没有时间。
部件
竞争始于以下事实:首先必须拆卸机器,然后重新组装。我们必须向组织者表示敬意,我们没有被要求从头开始收集一堆令人费解的零件,但是有机会使用现成的示例来了解设备。通过拍摄所有连接的照片,我们节省了很多时间,然后在10分钟内将机器放回原处。
连接机器并检查工作
组装好汽车后,出现了停顿,因为我们必须将汽车连接到Wi-Fi并开始校准底盘。事实证明,与Raspberry一起使用时,将来使用Wi-Fi将是最大的问题之一,显然您必须带天线才能使用Wi-Fi。
我们决定不感到厌烦并通过以太网电缆进行连接,该电缆与其余的垃圾始终位于我的背包中。由于某种原因,打字机要么没有DHCP服务器,要么不工作,或者根本不应该在那里,而且我们意识到,当电缆连接到Raspberry时,wireshark可以很容易地通过广播获取源ip。事情就这样发生了,但是在登录机器后,我们花了很多时间试图使wifi正常工作。最后,所有参与者都退出了配置文件所在的特殊文件。
校准机箱并连接操纵杆
我们花了大约35分钟的时间来连接操纵杆,同时我们阅读了基座并扫描了蓝牙,试图将打字机和操纵杆配对。事实证明,问题在于房间中的操纵杆太多,它们随机地与同级赛车配对-发现您正在控制随机车的底盘很有趣=)
下一步是校准转向和油门,即PWM转和气。
这是最重要的参数之一,需要使该值与汽车的速度相关,并且模型要与控制相对应。
根据直觉,我们试图加速并转弯,以使汽车足够快地行驶,但同时可以对其进行控制。
考虑到车队的表现,到比赛结束仅剩2个小时,因此有必要紧急加速。我们跑来写下数据的想法是,有必要创造出机器可以停留的最多样化的条件。我们假设比赛开始时,灯光很可能会重新排列,异物将出现在赛道附近,等等。
我们记录了约一万八千张图片以及油门和转弯数值,试图吸引很多人进入车架,我们在赛道上跑来跑去,跳过去,放椅子,搭桥,随机放置灯光,朝相反的方向走。
我们还添加了蛋白增白作为增强,并尝试添加尽可能多的蛋白增白!
在这个叉子我用pil的信封恶意地编码了繁重的扩充,反之亦然-它还需要为打字机重建环境,这会影响时间。
到第一个模型接受训练时,我们已经有了第二个模型的代码,这些家伙从相邻轨道引入了新数据,然后跑去检查第一个模型的运行方式。
第一辆车失误驾驶了3圈,然后起飞了4圈。此后,我们又损失了20分钟,因为我们忘记了将SD卡插入机器。
最终的模型通过定制增强和数据清理在19000张图像上进行了训练。
网络本身就是这样:
可以看到有一个反转的领域,您至少可以削减一个batchnorm作为开始,但是我们决定至少要进行修改,以免发生混乱。
此外,第一和第二个模型的图表分别具有最佳的MSE损失0.093和0.086。
第二张图看起来更好!
从视频中可以明显看出,我们对转向的校准不佳,对数据集的清洁不佳,但这对我们来说已经足够。
来自GoPro的视频,我们在主要发布后录制了该视频:
决赛
我们是第一个开始比赛并进入赛道的人,但是我们陷入了失败,Wi-Fi不断下降,我们几乎被淘汰了。现在,当几乎要开始启动时,机器突然开始回退了。显然,我在校准油门时有些困惑。
但是,什么也没让整个观众大笑,她继续前进,在赛道上保持着庄严的8或9圈,大力扭转,但仍然为我们带来了当之无愧的胜利!
我尽量不要看着框架。
致谢
感谢ods.ai社区,没有它就不可能发展!非常感谢我的队友:Valea Biryukova,Egor Urvanov(Urvanov),Roma Derbanosov(Yandex)。我们期待着Viktor Rogulenko(FLESS)的视频评论。
PS:特别感谢Valya Biryukova,他很遗憾在比赛前一天的温度为38.5,但在链接方面起到了很大作用。
Aurorai,llc