实战端到端深度学习模拟无人驾驶

本文介绍了使用深度学习模拟无人驾驶的过程,包括理论知识、模拟环境搭建、数据预处理、神经网络模型构建、训练以及模拟自动驾驶的实现。通过NVIDIA的论文为指导,利用Udacity的自动驾驶汽车模拟器收集和增强数据,训练卷积神经网络生成转向命令,并最终实现自动驾驶功能。
摘要由CSDN通过智能技术生成

一、理论知识

参考NVIDIA的论文 https://arxiv.org/pdf/1604.07316.pdf

这个实验的目的是使用卷积神经网络(CNN)将从前向摄像机得到的原始图像映射成自动驾驶汽车的驾驶命令。

这个过程需要先采集数据,原理是这样的:


一共有左、中、右3个摄像头,负责采集视频数据。在训练后我们只需要中间的摄像头采集的数据用于驾驶决策,那为什么需要3个采集训练数据呢,因为左右两个采集特定偏离中心的变化图像,这样只有来自人类驾驶员的数据是不足以用来训练的;网络还必须学习如何从任何错误中恢复,否则该汽车就将慢慢偏移道路。因此训练数据还扩充了额外的图像,这些图像显示了远离车道中心的偏离程度以及不同道路方向上的转动。左右两个摄像头采集负责特定偏离中心的变化图像,用这个方法来扩充额外图像数据

下面是训练系统框图。训练用图像被送入一个卷积神经网络,然后计算一个被预测出的转向命令。这个被转向命令会与该图像的期望命令相比较,卷积神经网络的权重就会被调整以使其实际输出更接近期望输出。


一旦训练完成,网络就能够从中摄像机的视频图像中生成转向命令


图像数据需要从RGB转成YUV格式,传入一个9 层网络架构的神经网络,其中包括一个归一化层、5 个卷积层和 3 个完全连接的层。



二、无人驾驶模拟环境搭建

这里我们使用Udacity的自动驾驶汽车模拟器,下载地址是 https://github.com/udacity/self-driving-car-sim


下载后运行程序选择Training Mode,就可以开始模拟驾驶了,玩得差不多了,就可以录制训练数据了

决定录制的时候在训练模式下点Record进行录制,第一次需要选择用于存放3个摄像头的图片与driving_log.csv数据

这是中间摄像头的图像


找两张分别是左、右摄像头的图像


好吧,看得出来我开得不好,其实我是让他帮我开的


三、训练程序

数据预处理

csv文件的各个字段含义是:center,left,right,steering,throttle,reverse,speed,我们需要的训练数据(center,left,right)和标签数据(steering)都在里面

#加载训练数据并将其分解为训练和验证集
    def load_data(self):
        #从csv读取数据
        data_df = pd.read_csv(os.path.join(os.getcwd(), self.data_path, 'driving_log.csv')
                              ,names=['center', 'left', 'right', 'steering', 'throttle', 'reverse', 'speed'])
        X = data_df[['center', 'left', 'right']].values
        y = data_df['steering'].values
        #随机划分训练集和测试集
        X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=self.test_size, random_state=0)
        return X_train, X_valid, y_train, y_valid

图片的处理

首先需要取一部分图片进行增强处理(这里是60%的概率)

进行增强处理流程是:先平均概率随机取一个摄像头的图片,如果取得的不是中间的摄像头,对于的steering angle也进行相应的调整

    #从中心、左或右随机选择一个图像,并进行调整
    def choose_image(self, center, left, right, steering_angle):
        choice = np.random.choice(3)
        if choice == 0:
            return self.load_image(left), steering_angle + 0.2
        elif choice == 1:
            return self.load_image(right), steering_an
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值