在comma.ai的自驾车软件中,他们使用了客户端/服务器架构。两个进程是分别启动的,分别是server.py
和train_steering_model.py
。
server.py
通过http和套接字将数据发送到train_steering_model.py
。
他们为什么使用这种技术?这不是一种复杂的数据传输方式吗?难道不更容易让train_steering_model.py
自己加载数据集吗?
回答:
仓库中的文档DriveSim.md链接到了一篇标题为学习驾驶模拟器的论文。在论文中,他们提到:
由于问题复杂性,我们决定使用可分离网络来学习视频预测。
他们还提到他们使用的帧率是5 Hz。
虽然这句话是唯一直接回答您问题的,但它并不完全清晰,让我们来分解一下所讨论的任务:
- 从摄像头获取图像
- 对图像像素进行预处理/降采样/归一化
- 将图像通过自编码器提取代表性特征向量
- 将自编码器的输出传递给RNN,以预测适当的转向角度
“问题复杂性”指的是他们处理的是一长串大图像,这些图像(正如他们在论文中所说)“高度不相关”。有许多不同的任务在进行中,因此网络方法更加模块化——除了允许他们并行工作外,它还允许在不被单个硬件达到其计算能力阈值的情况下扩展组件。(而且请想想:这只是转向方面。Logs.md文件列出了车辆的其他组件需要关注的,这些组件不包括在这个神经网络中——油门、刹车、转向灯、加速度等)。
现在让我们快进到自驾车中的实际实现。车辆上肯定会有不止一个神经网络在运行,每个都需要限制大小——微型计算机或嵌入式硬件,计算能力有限。因此,一个组件能做的工作有一个自然的上限。
将这一切联系起来的事实是,汽车已经使用网络架构运行——CAN总线实际上是车辆内部的计算机网络。因此,这项工作只是计划将一个极其复杂的任务的各个部分分配给多个分布式组件(这些组件的能力有限),使用已经到位的网络。