东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3707|回复: 1

[课堂笔记] 【项目】01、概述_自动驾驶之方向盘转动角度预测

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14418
QQ
发表于 2019-10-19 10:20:35 | 显示全部楼层 |阅读模式
【项目】01、概述_自动驾驶之方向盘转动角度预测


根据车载摄像头的画面,自动判断如何打方向盘?使用端到端(end-to-end)的深度神经网络CNN


参考论文:在帖子附件,可提供下载(阅读原文)

给定车载摄像头捕捉的画面,判断如何转动方向,预测方向盘的方向和角度(方向用正负表达,角度为弧度制)
所用到的技术:
1、用卷积神经网络解决回归问题(n个卷积+几个Dense全连接最后映射到1个神经元)输出的角度是(-pi/2, pi/2)激活函数linear
2、损失函数用mse,度量指标用自定义的r2_score
3、数据预处理:为了数据均衡查看分布,删掉大部分角度为0的训练数据
4、按一定概率进行数据增强:随机从左、中、右图像中选择并相应调整转动的角度 水平翻转图像 随机调整亮度
5、图像预处理:裁剪感兴趣区域、resize到神经网络输入的尺寸、归一化到[-0.5, 0.5]
6、通过batch_generator分批次喂养数据训练模型
7、模型的测试:通过socket通信控制汽车模拟器自动驾驶,看其是否能跑完全程
技术改进:
1、为了模型轻量化,改用Effnet,采用深度可分离卷积和卷积分解技术


数据集的产生,使用模拟器:
利用模拟器产生训练数据(每隔固定时间就会生成图片与对应的角度)
利用模拟器测试训练好的模型(auto模式  通过网络的socket api接口)
模拟的车子上装了3个摄像头 left center right   
方向盘转动的弧度  不是角度  有对应公式 弧度制与角度制的换算公式
1度=π/180≈0.01745弧度,1弧度=180/π≈57.3度


有一个担忧:深度学习网络比较依赖于训练数据样本,网络中并没有给出约束条件说每一层一定要提取什么类型的特征,
所以将来一旦出现了一个没有出现过的场景,是否会出现一个大的错误呢?
想法是很正确的,深度学习是根据历史预测未来,如果出现一个跟历史差距非常大的一个场景
举例:自动驾驶的车子开到了一个玻璃栈道(高架桥)之前的历史训练数据并没有这种情况,通过车载摄像头看不到路面(玻璃)
而是看到玻璃下的场景,这样肯定出问题,所以到现在为止都还没有出现一个真正商用的无人驾驶,就怕出现特殊情况
解决思路:将深度学习与传统的机器学习结合起来 优势互补   在大多数情况下 深度学习比传统方法要好 但是在极端情况下 比传统方法要差很多
在实际项目中是结合的结果 传统方法要提取道路边缘、中间线的特征 传统的CV技术


数据增强:
Python库:https://imbalanced-learn.org/en/stable/user_guide.html
图像增强的技术, 用于提高网络的性能.
需要自己确定是否存在训练数据不平衡( Unbalanced data)的情况
提示:
1、可以画一个方向盘角度分布的直方图( histogram),看看是否有些转动角度对应的图像的量远远大于其他?
     随机去除角度为0的图像数据
2、如果存在数据不平衡,如果不做任何处理,训练处理的效果如何
数据增强的方式有许多种:
1. Under sampling(欠采样)
2. Over sampling(过采样)
3.使用定制的损失函数,给予相对数量少的样本更大的权重
4.收集更多的训练数据,使得数据平衡
5.根据已有的训练数据人工合成新的数据 SMOTE: Synthetic Minority Over-samplingTechnique
https:/liairorg/index.php/iair/article/view/10302


图像的预处理:
1、是否需要调整亮度
2、是否需要归一化(normalization)
     X = X/255 - 0.5 范围从[0, 255]变为[-0.5, 0.5]
3、是否需要整个图像的内容,裁剪其中的一部分可以吗?
4、是否需要其他的图像处理?


为什么要进行图片数据的归一化:
1、避免不同特征量纲的影响(图片的像素特征都在同一量纲 0-255)
2、方便模型训练,减轻网络负担(图片数据本身的均值为127.5 而预测的结果均值为0)
我们预先将图片数据归一化到均值为0,网络只需要集中力量去学习差异 而不用学习从均值127.5到均值为0的转换
3、加了BN层 加速网络训练 防止过拟合


Data Generator:无需预先生成所有图像增强后的图像,会占用太多的硬盘空间,增加读取硬盘文件所需的时间


设计网络结构(Keras代码):
设计一个CNN卷积神经网络根据输入的图像预测方向盘的度数
掌握CNN卷积神经网络的原理和 Keras编程构建网络模型
使用训陈数据集训练上一步构建的网络,设定合适的优化器和学习率
根据训练数据集和validation数据集上面的bias和varlance来判断网络是否过拟合/欠拟合,然后调整网络结构
  1. def get_model(shape):
  2.     """
  3.     预测方向盘角度,以图像为输入,预测方向盘的转动角度
  4.     :param shape: 图像尺寸 (128, 128, 3)  NHC
  5.     :return:
  6.     """
  7.     model = Sequential()
  8.     # 第一层需要指定input_shape 后面不需要
  9.     model.add(Conv2D(filters=24, kernel_size=(5, 5), strides=(2, 2),
  10.                      padding='valid', data_format='channels_last', activation='relu', input_shape=shape))
  11.     model.add(Conv2D(filters=36, kernel_size=(5, 5), strides=(2, 2),
  12.                      padding='valid', data_format='channels_last', activation='relu'))
  13.     model.add(Conv2D(filters=48, kernel_size=(5, 5), strides=(2, 2),
  14.                      padding='valid', data_format='channels_last', activation='relu'))

  15.     model.add(Conv2D(filters=64, kernel_size=(3, 3), strides=(1, 1),
  16.                      padding='valid', data_format='channels_last', activation='relu'))
  17.     model.add(Conv2D(filters=64, kernel_size=(3, 3), strides=(1, 1),
  18.                      padding='valid', data_format='channels_last', activation='relu'))

  19.     model.add(Flatten(data_format='channels_last'))
  20.     model.add(Dense(units=1164, activation='relu'))
  21.     model.add(Dense(units=100, activation='relu'))
  22.     model.add(Dense(units=50, activation='relu'))
  23.     model.add(Dense(units=10, activation='relu'))
  24.     # 由于输出的角度是 (-pi/2, pi/2) 要选择好的激活函数
  25.     model.add(Dense(units=1, activation='linear'))
  26.     # compile: 1、指定优化器  2、损失函数
  27.     model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error')

  28.     return model
复制代码



如何测试训练好的神经网络模型?
1、模拟器测试
2、通过损失函数判断 loss的变化图 Tensorboard


东方老师AI官网:http://www.ai111.vip
有任何问题可联系东方老师微信:dfy_88888
【微信二维码图片】



01.png
02.png
03.png
04.png
05.png
06.png
07.png
08.png
09.png
10.png
11.png
12.png
13.png
14.png
15.png
00.png

end-to-end-dl-using-px.pdf

1.19 MB, 下载次数: 419

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

117

帖子

258

积分

中级会员

Rank: 3Rank: 3

积分
258
QQ
发表于 2020-2-3 15:40:32 | 显示全部楼层
谢谢老师提供的资料。
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-3-29 20:55 , Processed in 0.193893 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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