自動駕駛汽車視覺和行為實踐用 Python3 和 OpenCV4 探索視覺感知、車道檢測和物體分類 Hands-On Vision and Behavior for Self-Driving Cars: Explore visual perception, lane detection, and object classification with Python 3 and OpenCV 4

Luca Venturi,Krishtof Korda 譯者 劉帥//蔣朝陽

買這商品的人也買了...

商品描述

本書將使用OpenCV完成各種任務,包括行人檢測和車道檢測。
本書將講述深度學習並介紹如何利用它進行圖像分類、對象檢測和語義分割,使用它來識別行人、汽車、道路、
人行道和交通信號燈,同時幫助讀者了解一些有影響力的神經網絡算法。
本書中還將使用Carla模擬器通過行為克隆和PID控制器來控制汽車;
了解網絡協議、傳感器、攝像頭以及使用激光雷達來繪製周圍的世界並找到相應位置。
本書適合具備任何一種編程語言基礎的程序員,以及車輛工程和自動駕駛相關專業的研究生閱讀使用。

目錄大綱

目錄
前言
第一部分
OpenCV和傳感器及信號
第1 章OpenCV 基礎知識和攝像頭標定/ 002
1.1 技術需求/ 003
1.2 OpenCV 和NumPy 簡介/ 003
1.2.1 OpenCV 和NumPy / 003
1.2.2 圖像大小/ 003
1.2.3 灰度圖/ 004
1.2.4 RGB 圖/ 005
1.3 處理圖像文件/ 006
1.4 處理視頻文件/ 007
1.5 圖像處理/ 008
1.5.1 圖像翻轉/ 009
1.5.2 圖像模糊化/ 009
1.5.3 改變對比度、亮度和灰度係數/ 011
1.5.4 繪製矩形和文本/ 012
1.6 使用HOG 進行行人檢測/ 013
1.6.1 滑動窗口/ 013
1.6.2 使用OpenCV 中的HOG / 013
1.6.3 攝像頭簡介/ 014
1.6.4 攝像頭術語/ 015
1.6.5 攝像頭組件/ 019
1.6.6 選擇攝像頭的注意事項/ 019
1.6.7 攝像頭的優點和缺點/ 020
1.7 使用OpenCV 進行攝像頭標定/ 021
1.7.1 畸變檢測/ 022
1.7.2 校準/ 022
1.8 總結/ 023
1.9 問題/ 024
第2 章理解和使用信號/ 025
2.1 技術需求/ 026
2.2 理解信號的類型/ 026
2.3 模擬信號與數字信號/ 026
2.4 串行和並行/ 028
2.4.1 通用異步接收和發送(UART) / 029
2.4.2 差分與單端/ 032
2.4.3 I2 C / 034
2.4.4 SPI / 036
2.5 基於幀的串行協議/ 039
2.5.1 理解CAN / 039
2.5.2 以太網和因特網協議/ 042
2.5.3 理解UDP / 044
2.5.4 理解TCP / 045
2.6 總結/ 048
2.7 問題/ 048
2.8 擴展閱讀/ 049
第3 章車道檢測/ 050
3.1 技術需求/ 051
3.2 閾值處理/ 051
3.2.1 閾值在不同顏色空間中如何工作/ 051
3.2.2 RGB/BGR / 052
3.2.3 HLS / 053
3.2.4 HSV / 054
3.2.5 LAB / 054
3.2.6 YCbCr / 055
3.2.7 選擇通道/ 055
3.3 透視校正/ 055
3.4 邊緣檢測/ 057
3.4.1 插值閾值/ 059
3.4.2 組合閾值/ 060
3.5 利用直方圖確定車道線/ 061
3.6 滑動窗口算法/ 062
3.6.1 初始化/ 063
3.6.2 滑動窗口坐標/ 063
3.6.3 多項式擬合/ 064
3.7 增強視頻/ 065
3.8 滾動平均/ 066
3.9 總結/ 066
3.10 問題/ 067
第二部分
利用深度學習和神經網絡改進自動
駕駛汽車的工作方式
第4 章基於神經網絡的深度學習/ 070
4.1 技術需求/ 071
4.2 理解機器學習和神經網絡/ 071
4.2.1 神經網絡/ 072
4.2.2 神經元/ 072
4.2.3 參數/ 074
4.2.4 深度學習的成功/ 074
4.3 了解卷積神經網絡/ 075
4.3.1 卷積/ 075
4.3.2 為什麼卷積這麼棒/ 076
4.4 Keras 和TensorFlow 入門/ 077
4.5 檢測MNIST 手寫數字/ 078
4.5.1 剛剛加載了什麼/ 078
4.5.2 訓練樣本和標籤/ 079
4.5.3 獨熱編碼/ 080
4.5.4 訓練數據集和測試數據集/ 081
4.6 確定神經網絡模型/ 081
4.6.1 LeNet / 081
4.6.2 代碼/ 082
4.6.3 框架/ 083
4.6.4 訓練神經網絡/ 084
4.6.5 CIFAR?10 數據集/ 087
4.7 總結/ 092
4.8 問題/ 092
4.9 擴展閱讀/ 092
第5 章深度學習工作流/ 093
5.1 技術需求/ 094
5.2 獲取數據集/ 094
5.2.1 Keras 模塊中的數據集/ 094
5.2.2 現有數據集/ 095
5.2.3 合成數據集/ 096
5.2.4 自定義數據集/ 096
5.3 理解三種數據集/ 096
5.4 理解分類器/ 098
5.4.1 生成真實數據集/ 099
5.4.2 數據增強/ 099
5.5 模型/ 101
5.5.1 調整捲積層/ 102
5.5.2 調整大池化層/ 105
5.5.3 調整全連接層/ 106
5.5.4 如何訓練神經網絡/ 107
5.5.5 隨機初始化/ 108
5.5.6 過擬合與欠擬合/ 109
5.6 可視化激活/ 110
5.7 推理/ 112
5.8 重訓練/ 113
5.9 總結/ 113
5??10 問題/ 114
第6 章改進神經網絡/ 115
6.1 技術需求/ 116
6.2 更大的模型/ 116
6.2.1 出發點/ 116
6.2.2 提高速度/ 117
6.2.3 增加深度/ 119
6.3 更高效的神經網絡/ 121
6.4 通過批歸一化構建更智能的
神經網絡/ 124
6.5 早停法/ 128
6.6 通過數據增強改進數據集/ 128
6.7 使用隨機失活提高驗證準確率/ 131
6.7.1 將模型應用於MNIST 數據集/ 135
6.7.2 現在輪到你了/ 136
6.8 總結/ 137
6.9 問題/ 137
第7 章檢測行人和交通信號燈/ 138
7.1 技術需求/ 139
7.2 使用SSD 檢測行人、車輛和交通信號燈/ 139
7.2.1 使用Carla 模擬器收集圖像/ 139
7.2.2 解讀SSD / 143
7.2.3 探索TensorFlow 檢測模型庫/ 143
7.2.4 下載和加載SSD / 145
7.2.5 運行SSD / 145
7.2.6 圖像註釋/ 147
7.3 檢測交通信號燈的顏色/ 148
7.3.1 創建交通信號燈數據集/ 148
7.3.2 解讀遷移學習/ 150
7.3.3 了解ImageNet / 151
7.3.4 關於AlexNet 的探究/ 152
7.3.5 用Inception 來進行圖像分類/ 154
7.3.6 利用Inception 進行遷移學習/ 155
7.3.7 將數據集輸入Inception / 157
7.3.8 遷移學習的性能表現/ 158
7.3.9 改善遷移學習/ 159
7.4 識別交通信號燈及其顏色/ 161
7.5 總結/ 162
7.6 問題/ 163
7.7 擴展閱讀/ 163
第8 章行為克隆/ 164
8.1 技術需求/ 165
8.2 教神經網絡如何使用行為
克隆駕駛/ 165
8.3 DAVE?2 簡介/ 166
8.3.1 初識manual_control.py / 167
8.3.2 錄製一段視頻/ 169
8.3.3 神經網絡建模/ 176
8.3.4 訓練回歸神經網絡/ 177
8.3.5 可視化顯著圖/ 179
8.4 神經網絡與Carla 的集成/ 184
8.5 自動駕駛/ 188
8.5.1 使用生成器在更大的數據集上
訓練/ 189
8.5.2 一種複雜的數據增強方法/ 190
8.6 總結/ 191
8.7 問題/ 191
8.8 擴展閱讀/ 191
第9 章語義分割/ 192
9.1 技術需求/ 193
9.2 引入語義分割/ 193
9.2.1 確定目標/ 194
9.2.2 收集數據集/ 194
9.2.3 修改synchronous_mode??py / 196
9.3 理解用於分類的DenseNet / 197
9.3.1 總覽DenseNet 的架構/ 197
9.3.2 理解密集塊/ 198
9.4 使用CNN 分割圖像/ 201
9.5 調整DenseNet 進行語義分割/ 201
9.6 編寫FC?DenseNet 模塊/ 202
9.6.1 組合構件/ 204
9.6.2 為神經網絡提供輸入/ 205
9.6.3 運行神經網絡/ 208
9.7 改善效果較差的語義分割/ 211
9.8 總結/ 212
9.9 問題/ 212
9??10 擴展閱讀/ 212
第三部分
建圖和控制
第10 章轉向、加速和製動控制/ 214
10.1 技術需求/ 215
10.2 為什麼需要控制/ 215
10.3 控制器類型/ 216
10.3.1 PID 控制器/ 216
10.3.2 MPC / 220
10.4 在Carla 中實現PID 控制器控制/ 224
10.4.1 安裝Carla / 224
10.4.2 複製Packt?Town04 ?PID.py 腳本/ 225
10.4.3 瀏覽Packt?Town04 ?PID.py 腳本/ 225
10.4.4 PID 縱向控制器/ 228
10.4.5 PID 橫向控制器/ 230
10.4.6 運行腳本/ 232
10.5 C++ 中的MPC 實例/ 233
10.6 總結/ 237
10.7 問題/ 237
10.8 擴展閱讀/ 237
第11 章環境建圖/ 238
11.1 技術需求/ 239
11.2 為什麼需要地圖和定位/ 239
11.2.1 地圖/ 239
11.2.2 定位/ 240
11.3 建圖和定位的類型/ 240
11.4 開源建圖工具/ 244
11.5 基於Ouster 激光雷達和Google Cartographer 的SLAM / 245
11.5.1 Ouster 傳感器/ 245
11.5.2 代碼倉/ 245
11.5.3 從cartographer_ros 開始/ 245
11.5.4 Docker 鏡像/ 251
11.6 總結/ 256
11.7 問題/ 257
11.8 擴展閱讀/ 257
答案/ 258
第1 章/ 258
第2 章/ 258
第3 章/ 259
第4 章/ 259
第5 章/ 259
第6 章/ 259
第7 章/ 260
第8 章/ 260
第9 章/ 260
第10 章/ 261
第11 章/ 261