自動駕駛汽車視覺和行為實踐——用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 運行