查看: 86|回复: 0

仿真阶段1-1:Nvidia-Net的结果记录

[复制链接]

4

主题

10

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-6-26 16:50:13 | 显示全部楼层 |阅读模式
今天完成了仿真阶段的第一步工作:
训练了一个还行的NvidiaNet,在Udacity仿真环境中的track-1赛道中跑的还可以。这部分的工作其实是基于论文Nvidia research,End to End Learning for Self-Driving Cars做的一个端到端的模仿学习。
1.数据集介绍
参考链接中,原始作者使用的数据集archive.zip是track-1和track-2共同录制的,数据集规模超过9万张,但是其在track-1中的测试表现不好。我怀疑过Net的结构问题,但是经过验证,在倒数第二个linear layer加入elu激活层,整体效果提升非常有限。所以我又重新拿掉了这一层,保持作者使用的模型初始结构。也即原论文中的NvidiaNet模型结构。
我重新录制了针对track-1的单独数据集。模拟驾驶时长达12min,分为4部分,每部分共计3min左右。前3段分别沿着路中间、右侧、左侧驾驶;最后一部分做随机纠错驾驶。数据集命名“driver-history-2”。其中数据总量为30855张。
2.训练&验证过程分析
训练过程指定batch_size=32,epochs=100.训练过程每100个batch记录一次平均MSE loss;验证过程同样每100个batch记录一次MSE loss;验证过程每5个epoch保存一次权重。在tensorboard中观察训练及验证结果



验证过程loss下降曲线



训练过程loss下降曲线

我们这里重点记录验证过程的loss曲线:可以看到,eval loss整体下降,说明模型对数据是有拟合能力的;最终达到的整体loss平均水平接近0.14;最佳结果可使得eval loss下降至0.09左右。训练过程整体loss下降平滑,无需多说。
3.整体仿真结果
由于Udacity的仿真器的track-1开启自动驾驶模式后,是让ego vehicle自动从第一个弯道开始,所以我训练的模型有一般的概率会直接在第一个弯道处冲出赛道:



在第一个弯道冲出赛道.jpg

当然,有另一半的概率会正常行驶,但是不知道为啥,我训练的这个模型会让车大多数时间都靠着赛道左侧行驶,weird?明明4部分是均衡的,特殊注意到了数据的平衡。



训练过的模型靠左侧行驶.jpg

当然,训练过后的模型几乎100%都会在过桥重新进入赛道的时候冲出赛道,weird



过桥之后进入赛道会偏离赛道冲出.jpg

总结:到这里就是第一个仿真任务的全部总结内容。总体来说,采集的驾驶记录时间越长,包含的驾驶场景情形越多、越全面,则训练效果越好。估计想让NvidiaNet完成全赛道自动驾驶,累计驾驶记录需要到20min左右(因为我目前录制的12min有一般概率冲出第一个弯道,所以预估数据规模得20min左右)。总体数据规模可能得到6-7万左右。这就可以想象,为啥目前自动驾驶的车厂的效果要整体好于互联网公司的(百度除外),原因很简单,因为他们有大量的驾驶记录数据。
但是从这也能初步感受到模仿学习在自动驾驶的不足,人类驾驶员是不可能别扭的为了照顾采集数据而故意犯错的。所以,路径规划、地图这些东西都得有,模仿学习只是无人驾驶的一个开始。后面的内容会愈发层次化,复杂化。
扯远了,回到模仿学习本身。即使是模仿学习本身,我们也可以提升它的学习效果,这就是“条件模仿学习”,也就是可以通过引入视觉任务,来引导模型,减少回归任务的参数搜索空间,使其更快的达到更优解。
我的第二个仿真任务就是要做这件事,我首先考虑引入的视觉任务是分割。为了对比,我需要重新建立自己的数据集,然后训练模型。期待加上视觉任务引导后的模仿学习能够用更少的数据来完成更好的仿真效果吧。
下一阶段任务:
1.构建条件模仿学习的数据集(主要工作量)
2.训练新的条件模仿学习模型(代码已经写好了)
3.仿真(这里得关注一下Udacity仿真器的交互方式,之前一直玩Carla,不知道区别大不大)
4.观察仿真效果,记录loss指标
以上。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表