TensorFlow在GTA中的全自动驾驶

2020-05-12 23:37:22

首先给大家介绍一下OpenPilot,OpenPilot是comma.ai开发的开源自动驾驶汽车软件。OpenPilot现在支持世界上40款最受欢迎的汽车,包括丰田、本田、阿库拉斯等。OpenPilot是GitHub上的一个开放源码项目,人们可以为它做贡献,它也有几个奖金,作为一个开发人员,你可以申请这些奖励,以便从你的工作中获得一点奖励。它的目标是成为自动驾驶汽车的Android,如上所述,它已经支持了世界上许多最受欢迎的汽车。

OpenPilot模型是由逗号ai内部开发的,但最终的模型文件是开源的,在GitHub上,使用TensorFlow很容易读取。两个月前,我尝试用纯Python实现模型的最小实现,从预测模型做什么到解析输出再到向用户显示输出,代码可以在这里找到。

最基本的输入是,2个图像在yuv420p,都是6个通道,然后有一个热输入与形状(1,8)的愿望,如果你想做一个变道,你会给这里的模型一个不同的组合,它会做一个向右或向左的变道,这当然也在模型训练中使用,这里的美丽之处是,这是所有从人们驾驶的学习。还有一个名为交通约定的输入,它的输入形状为(0,2),这当然是有意义的,因为它是一个热点向量,所以有两种可能性,即左右交通和(1,512)状态向量,它告诉模型有关汽车状态的信息。

2019年11月,我发表了第一篇关于行为克隆的博客文章,当时特斯拉公司Pytorch Devcon的安德烈·卡帕西(Andrej Karpath)也做了一次演讲,他解释了驾驶模型,并表示一切都基于ResNet50,OpenPilot使用ResNet18有很长一段时间了,但现在他们改用Efficientnet-B2作为OpenPilot 0.7.5型号。输出是左车道和右车道,这是在OpenPilot代码中的Controsd中实现的路径预测,使用的是汽车的转向角度。然后是纵向输出,用于控制刹车和油门。该模型被命名为SuperComo,因为它还包括一个姿势网络,用于预测领先的汽车,也用于仅从图像估计速度。期望的输入和状态输入从输出传递回模型输入。

__Layer(类型)输出形状参数#连接到==input_imgs(输入层)[(无,12,128,2560__permute(置换)(无,128,256,12)0 INPUT_IMGS[0][0]__efficientnet-b2(型号)(无,4,8,6442016置换[0][0]__conv2d(Conv2D)(无,4,8,32)45088效率net-b2[1][0]__batch_normalization(BatchNorma(NONE,4,8,32)128v2d[0][0]__elu(Elu)(NONE,4,8,32)0 Batch_Normalization[0][0]__desire(输入层)[(无,8)]0__traffic_convention(输入层)[(无,2)]0__vision_features(展平)(无,0ELU[0][0]__snpe_desire_pleaser(密集)(无,8)72 Desire[0][0]__snpe_traffic_pleaser(密集)(无,2)6业务约定[0][0]__proc_features(串联)(无,0VISION_FEATURES[0][0]SNPE_DEWECT_HEYLER[0][0]SNPE_TRAFFORM_HEYLER[0][0]__。_PRE_GRU_DENSE(密集)(无,1059840)1059840 PROC_FEATURES[0][0]__re_lu(REU)(无,0PRE_GRU_DENSE[0][0]__rnn_state(输入层)[(无,512)]0_