自动驾驶汽车视觉和行为实践——用Python3和OpenCV4探索视觉感知、车道检测和物体分类
定 价:¥149
中 教 价:¥98.34 (6.60折)
库 存 数: 1
丛 书 名:自动驾驶汽车关键技术丛书
本书将使用OpenCV完成各种任务,包括行人检测和车道检测。本书将讲述深度学习并介绍如何利用它进行图像分类、对象检测和语义分割,使用它来识别行人、汽车、道路、人行道和交通信号灯,同时帮助读者了解一些有影响力的神经网络算法。本书中还将使用Carla模拟器通过行为克隆和PID控制器来控制汽车;了解网络协议、传感器、摄像头以及使用激光雷达来绘制周围的世界并找到相应位置。本书适合具备任何一种编程语言基础的程序员,以及车辆工程和自动驾驶相关专业的研究生阅读使用。
精装图书,印装精美手把手教您进行操作,完成自动驾驶各种任务贴合工程实际应用,上手快
自动驾驶汽车即将在人们的生活中得到广泛应用。自动驾驶领域的发展和进步令人叹为观止。作者第一次听说自动驾驶汽车是在2010年,当时作者在东京的丰田展厅试乘过一次,乘车费用约为1美元。汽车行驶得很缓慢,这辆车非常明显地依赖嵌入道路的传感器。几年后,激光雷达和计算机视觉和深度学习取得了很大进步,使得之前的技术看起来非常原始,存在对道路不必要的改造,成本高昂。本书将使用OpenCV完成各种任务,包括行人识别和车道识别;读者将会探索深度学习并学习如何将其用于图像分类、目标检测和语义分割,并用它来识别行人、汽车、道路、人行道和交通信号灯,同时学习一些影响最深远的神经网络算法。经过对本书的学习,读者将能熟练使用Carla模拟器,基于该模拟器使用行为克隆和PID控制器来控制汽车;了解网络协议、传感器、摄像头,以及如何使用激光雷达来对周围世界进行建图和定位。但在深入研究这些惊人的技术之前,请花点时间想象一下20年以后的未来。汽车会是什么样子?它们可以实现自动驾驶吗?那时候汽车能飞起来吗?交通信号灯那时还是否会存在?那些汽车多快、多重,又有多贵?人们如何使用汽车以及人们使用汽车的频率如何?自动驾驶公交车和货车又将如何发展?人们无法预知未来,但可以想象,自动驾驶汽车和一切能够自动驾驶的事物将以令人兴奋的新方式塑造人们的城市和日常生活。读者想在定义未来中发挥积极作用吗?如果是,请继续阅读下去。本书会成为这场旅程的开端。本书面向的读者这本书涵盖了建造自动驾驶汽车所需的几个方面,适用于具备任何一种编程语言 (zuihao是Python) 基础知识的程序员。读者不需要具备深度学习的经验,但是,若要wanquan理解zui高阶的章节,学习一些扩展阅读的内容可能会有所帮助。与第11章相关的参考源代码是用C 语言编写的。本书内容第1章,OpenCV基础知识和摄像头标定,介绍了OpenCV和NumPy;讲解如何处理图像和视频,如何使用OpenCV检测行人;此外还解释了摄像头的工作原理以及如何使用OpenCV对其进行校准。第2章,理解和使用信号,介绍了不同类型的信号:串行、并行、数字、模拟、单端和差分信号,并讲解了一些非常重要的协议:CAN、以太网、TCP和UDP。第3章,车道检测,涵盖使用OpenCV检测路上车道所需的一切。本章介绍了阈值处理、透视校正、边缘检测、直方图、滑动窗口算法以及获得zui佳检测所需的滤波。第4章,基于神经网络的深度学习,介绍了一般的神经网络,特别是卷积神经网络。本章还介绍了Keras (一个深度学习模块),并展示了如何用它来检测手写数字和对一些图像进行分类。读者通过本章学习,能够快速掌握编写神经网络的方法。第5章,深度学习工作流,恰当地补充了第4章中基于神经网络的深度学习。本章介绍了神经网络理论和典型工作流的步骤:获取或创建数据集,将其拆分为训练、验证和测试集,进行数据增强,在分类器中使用的主要层以及如何训练、推理和重新训练。本章还介绍了欠拟合和过拟合,并解释了如何将卷积层的激活情况可视化。第6章,改进神经网络,解释了如何优化神经网络、减少其参数,以及如何使用批量归一化、早终止、数据增强和随机失活 (Dropout) 来提高其验证准确性。第7章,检测行人和交通信号灯,介绍自动驾驶汽车模拟器Carla,并用它来创建交通信号灯数据集。本章还使用被称为SSD的预训练神经网络检测行人、汽车和交通信号灯,以及使用名为迁移学习的强大技术来训练神经网络,以便根据交通信号灯的颜色对其进行分类。第8章,行为克隆,讲解如何训练神经网络来驱动Carla,解释了行为克隆是什么,如何使用Carla构建驱动数据集,如何创建适合此任务的网络以及如何对其进行训练。本章还使用显著图来了解网络正在学习什么,并将其与Carla集成以帮助它自驱动。第9章,语义分割,这是关于深度学习的最后一章,也是zui高阶的一章,解释了什么是语义分割。本章详细介绍了一个非常有趣的DenseNet架构,展示了如何使其适用于语义分割。第10章,转向、加速和制动控制,本章内容涉及控制自动驾驶汽车,解释了什么是控制器,重点介绍了PID控制器并涵盖了MPC控制器的基础知识。最后将在Carla中实现一个PID控制器的控制。第11章,环境建图,这是本书最后一章。本章讨论了地图、定位和激光雷达,并介绍了一些开源建图工具。读者将了解到什么是同步定位与地图构建(SLAM),以及如何使用Ouster激光雷达和Google Cartographer实现它。充分利用本书本书假定读者已经具备Python的基础知识,熟悉所用操作系统的命令解析器shell。读者需要安装Python,也可能用到虚拟环境来匹配本书中使用的软件版本。建议使用GPU,因为没有GPU的训练会很艰难。Docker将有助于第11章环境建图。本书使用的软件见下表:本书用到的软件/硬件操作系统要求Python 3.7无TensorFlow 2.2无Keras 2.3无Carla 0.9.9.2无如果读者使用的是本书的电子版,建议自己输入代码或通过github代码仓访问代码。这样做有助于避免与复制粘贴代码
Luca Venturi曾在shijie级公司(包括法拉利和Opera软件)担任程序员,具有丰富的工作经验。他还曾为一些初创公司工作,包括Activetainment(世界上第一辆智能自行车的制造商)、Futurehome(智能家居解决方案供应商)和CompanyBook(其产品将人工智能应用于销售)。他曾在Tapad(Telenor集团)的数据平台团队工作,使公司其他部门能够访问数以亿计的数据,现在是Piano软件公司分析数据库的首席工程师。Krishtof Korda曾在Lyft公司为5级自动驾驶汽车设计传感器集成。现在,他作为Ouster的应用工程师,在机器人、飞行器、无人机和采矿等领域负责整合激光雷达的工作。此外,他喜欢参加Enduro山地自行车比赛。
前 言第一部分OpenCV和传感器及信号第1 章 OpenCV 基础知识和摄像头标定/ 0021.1 技术需求/ 0031.2 OpenCV 和NumPy 简介/ 0031.2.1 OpenCV 和NumPy / 0031.2.2 图像大小/ 0031.2.3 灰度图/ 0041.2.4 RGB 图/ 0051.3 处理图像文件/ 0061.4 处理视频文件/ 0071.5 图像处理/ 0081.5.1 图像翻转/ 0091.5.2 图像模糊化/ 0091.5.3 改变对比度、亮度和灰度系数/ 0111.5.4 绘制矩形和文本/ 0121.6 使用HOG 进行行人检测/ 0131.6.1 滑动窗口/ 0131.6.2 使用OpenCV 中的HOG / 0131.6.3 摄像头简介/ 0141.6.4 摄像头术语/ 0151.6.5 摄像头组件/ 0191.6.6 选择摄像头的注意事项/ 0191.6.7 摄像头的优点和缺点/ 0201.7 使用OpenCV 进行摄像头标定/ 0211.7.1 畸变检测/ 0221.7.2 校准/ 0221.8 总结/ 0231.9 问题/ 024第2 章 理解和使用信号/ 0252.1 技术需求/ 0262.2 理解信号的类型/ 0262.3 模拟信号与数字信号/ 0262.4 串行和并行/ 0282.4.1 通用异步接收和发送(UART) / 0292.4.2 差分与单端/ 0322.4.3 I2 C / 0342.4.4 SPI / 0362.5 基于帧的串行协议/ 0392.5.1 理解CAN / 0392.5.2 以太网和因特网协议/ 0422.5.3 理解UDP / 0442.5.4 理解TCP / 0452.6 总结/ 0482.7 问题/ 0482.8 扩展阅读/ 049第3 章 车道检测/ 0503.1 技术需求/ 0513.2 阈值处理/ 0513.2.1 阈值在不同颜色空间中如何工作/ 0513.2.2 RGB/BGR / 0523.2.3 HLS / 0533.2.4 HSV / 0543.2.5 LAB / 0543.2.6 YCbCr / 0553.2.7 选择通道/ 0553.3 透视校正/ 0553.4 边缘检测/ 0573.4.1 插值阈值/ 0593.4.2 组合阈值/ 0603.5 利用直方图确定车道线/ 0613.6 滑动窗口算法/ 0623.6.1 初始化/ 0633.6.2 滑动窗口坐标/ 0633.6.3 多项式拟合/ 0643.7 增强视频/ 0653.8 滚动平均/ 0663.9 总结/ 0663.10 问题/ 067第二部分利用深度学习和神经网络改进自动驾驶汽车的工作方式第4 章 基于神经网络的深度学习/ 0704.1 技术需求/ 0714.2 理解机器学习和神经网络/ 0714.2.1 神经网络/ 0724.2.2 神经元/ 0724.2.3 参数/ 0744.2.4 深度学习的成功/ 0744.3 了解卷积神经网络/ 0754.3.1 卷积/ 0754.3.2 为什么卷积这么棒/ 0764.4 Keras 和TensorFlow 入门/ 0774.5 检测MNIST 手写数字/ 0784.5.1 刚刚加载了什么/ 0784.5.2 训练样本和标签/ 0794.5.3 独热编码/ 0804.5.4 训练数据集和测试数据集/ 0814.6 确定神经网络模型/ 0814.6.1 LeNet / 0814.6.2 代码/ 0824.6.3 框架/ 0834.6.4 训练神经网络/ 0844.6.5 CIFAR?10 数据集/ 0874.7 总结/ 0924.8 问题/ 0924.9 扩展阅读/ 092第5 章 深度学习工作流/ 0935.1 技术需求/ 0945.2 获取数据集/ 0945.2.1 Keras 模块中的数据集/ 0945.2.2 现有数据集/ 0955.2.3 合成数据集/ 0965.2.4 自定义数据集/ 0965.3 理解三种数据集/ 0965.4 理解分类器/ 0985.4.1 生成真实数据集/ 0995.4.2 数据增强/ 0995.5 模型/ 1015.5.1 调整卷积层/ 1025.5.2 调整最大池化层/ 1055.5.3 调整全连接层/ 1065.5.4 如何训练神经网络/ 1075.5.5 随机初始化/ 1085.5.6 过拟合与欠拟合/ 1095.6 可视化激活/ 1105.7 推理/ 1125.8 重训练/ 1135.9 总结/ 1135??10 问题/ 114第6 章 改进神经网络/ 1156.1 技术需求/ 1166.2 更大的模型/ 1166.2.1 出发点/ 1166.2.2 提高速度/ 1176.2.3 增加深度/ 1196.3 更高效的神经网络/ 1216.4 通过批归一化构建更智能的神经网络/ 1246.5 早停法/ 1286.6 通过数据增强改进数据集/ 1286.7 使用随机失活提高验证准确率/ 1316.7.1 将模型应用于MNIST 数据集/ 1356.7.2 现在轮到你了/ 1366.8 总结/ 1376.9 问题/ 137第7 章 检测行人和交通信号灯/ 1387.1 技术需求/ 1397.2 使用SSD 检测行人、车辆和交通信号灯/ 1397.2.1 使用Carla 模拟器收集图像/ 1397.2.2 解读SSD / 1437.2.3 探索TensorFlow 检测模型库/ 1437.2.4 下载和加载SSD / 1457.2.5 运行