基於 GPU 加速的計算機視覺編程:使用 OpenCV 和 CUDA 實時處理複雜圖像數據

Bhaumik Vaidya 著 顧海燕 譯

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

商品描述

本書提供了OpenCV與CUDA集成以實現實際應用的詳細概述。
首先介紹使用CUDA進行GPU編程的基礎知識。
然後,通過一些實際的例子講解如何利用GPU和CUDA實現OpenCV加速。
一旦掌握了核心概念,讀者將熟悉如何在NVIDIA Jetson TX1上部署OpenCV應用程序,
該應用程序在計算機視覺和深度學習應用程序中非常流行。
本書的*後幾章解釋了PyCUDA,這是一個Python庫,
它利用CUDA和GPU的強大功能來加速。
在本書的*後,讀者將通過本書的實踐方法增強計算機視覺應用程序。

作者簡介

Bhaumik Vaidya

是一位經驗豐富的計算機視覺工程師和導師。
他在OpenCV庫,尤其是解決覺計算機視覺問題方面做了大量工作。
他是大學碩士項目的金牌得主,目前正在攻讀計算機視覺算法加速方面的博士學位。
他指導了許多計算機視覺和超大規模集成(VLSI)方面的項目。
他曾在VLSI領域做過ASIC驗證工程師,對硬件架構也有很好的了解。
他在聲譽良好的期刊上發表了許多研究論文。
他和他的博士導師還獲得了英偉達Jetson TX1嵌入式開發平台的研究資助。

目錄大綱

作者簡介
審稿人簡介
第1章 CUDA介紹及入門 1
1.1 技術要求 1
1.2 CUDA介紹 1
1.2.1 並行處理 2
1.2.2 GPU架構和CUDA介紹 2
1.2.3 CUDA架構 3
1.3 CUDA應用程序 4
1.4 CUDA開發環境 5
1.4.1 支持CUDA的GPU 5
1.4.2 CUDA開發工具包 6
1.5 在所有操作系統上安裝CUDA工具包 6
1.5.1 Windows 6
1.5.2 Linux 7
1.5.3 Mac 8
1.6 一個基本的CUDA C程序 9
1.6.1 在Windows上創建CUDA C程序的步驟 10
1.6.2 在Ubuntu上創建CUDA C程序的步驟 10
1.7 總結 11
1.8 測驗題 11

第2章 使用CUDA C進行並行編程 12
2.1 技術要求 12
2.2 CUDA程序結構 13
2.2.1 CUDA C中的雙變量加法程序 13
2.2.2 內核調用 14
2.2.3 配置內核參數 15
2.2.4 CUDA API函數 16
2.2.5 將參數傳遞給CUDA函數 17
2.3 在設備上執行線程 19
2.4 在CUDA程序中獲取GPU設備屬性 20
2.4.1 通用設備信息 21
2.4.2 內存相關屬性 22
2.4.3 線程相關屬性 22
2.5 CUDA中的向量運算 24
2.5.1 兩個向量加法程序 24
2.5.2 對比CPU代碼和GPU代碼的延遲 27
2.5.3 對向量的每個元素進行平方 28
2.6 並行通信模式 29
2.6.1 映射 29
2.6.2 收集 29
2.6.3 分散式 30
2.6.4 蒙板 30
2.6.5 轉置 30
2.7 總結 30
2.8 測驗題 31

第3章 線程、同步和存儲器 32
3.1 技術要求 32
3.2 線程 33
3.3 存儲器架構 36
3.3.1 全局內存 37
3.3.2 本地內存和寄存器堆 38
3.3.3 高速緩衝存儲器 39
3.4 線程同步 39
3.4.1 共享內存 39
3.4.2 原子操作 42
3.5 常量內存 46
3.6 紋理內存 48
3.7 向量點乘和矩陣乘法實例 50
3.7.1 向量點乘 50
3.7.2 矩陣乘法 54
3.8 總結 58
3.9 測驗題 58

第4章 CUDA中的高級概念 60
4.1 技術要求 60
4.2 測量CUDA程序的性能 61
4.2.1 CUDA事件 61
4.2.2 NVIDIA Visual Profiler 63
4.3 CUDA中的錯誤處理 64
4.3.1 從代碼中進行錯誤處理 65
4.3.2 調試工具 66
4.4 CUDA程序性能的提升 66
4.4.1 使用適當的塊數量和線程數量 66
4.4.2 最大化數學運算效率 67
4.4.3 使用合併的或跨步式的訪存 67
4.4.4 避免warp內分支 67
4.4.5 使用鎖定頁面的內存 68
4.5 CUDA流 69
4.6 使用CUDA加速排序算法 73
4.7 利用CUDA進行圖像處理 75
4.8 總結 80
4.9 測驗題 81

第5章 支持CUDA的OpenCV入門 82
5.1 技術要求 82
5.2 圖像處理和計算機視覺簡介 83
5.3 OpenCV簡介 83
5.4 安裝支持CUDA的OpenCV 84
5.4.1 在Windows上安裝OpenCV 84
5.4.2 在Linux上安裝OpenCV 89
5.5 使用OpenCV處理圖像 92
5.5.1 OpenCV中的圖像表示 92
5.5.2 圖像的讀取和顯示 93
5.5.3 使用OpenCV創建圖像 96
5.5.4 將圖像保存到文件 99
5.6 使用OpenCV處理視頻 99
5.6.1 處理存儲在計算機上的視頻 100
5.6.2 處理從網絡攝像機讀取的視頻 101
5.6.3 將視頻保存到磁盤 102
5.7 使用OpenCV CUDA模塊的基本計算機視覺應用程序 104
5.7.1 OpenCV CUDA模塊簡介 104
5.7.2 對圖像的算術和邏輯運算 104
5.7.3 更改圖像的顏色空間 108
5.7.4 圖像閾值處理 109
5.8 OpenCV應用程序使用和不使用CUDA支持的性能比較 110
5.9 總結 113
5.10 測驗題 114

第6章 使用OpenCV和CUDA進行基本的計算機視覺操作 115
6.1 技術要求 115
6.2 訪問圖像的各個像素強度 116
6.3 OpenCV中直方圖的計算和均衡 117
6.4 圖像的幾何變換 120
6.4.1 圖像大小調整 120
6.4.2 圖像平移與旋轉 121
6.5 對圖像進行濾波操作 122
6.5.1 對圖像的捲積運算 122
6.5.2 對圖像進行低通濾波操作 123
6.5.3 對圖像進行高通濾波操作 128
6.6 圖像的形態學操作 131
6.7 總結 134
6.8 測驗題 134

第7章 使用OpenCV和CUDA進行對象檢測和跟踪 135
7.1 技術要求 135
7.2 對象檢測和跟踪簡介 136
7.2.1 對象檢測和跟踪的應用 136
7.2.2 對象檢測中的挑戰 136
7.3 基於顏色的對象檢測和跟踪 136
7.4 基於形狀的對象檢測和跟踪 139
7.4.1 Canny邊緣檢測 139
7.4.2 使用Hough變換進行直線檢測 140
7.4.3 對圓形進行檢測 143
7.5 關鍵點檢測器和描述符 144
7.5.1 加速段測試特徵功能檢測器 144
7.5.2 面向FAST和旋轉BRIEF的特徵檢測 145
7.5.3 加速強特徵檢測和匹配 147
7.6 使用Haar級聯的對象檢測 150
7.6.1 使用Haar級聯進行人臉檢測 151
7.6.2 使用Haar級聯進行眼睛檢測 153
7.7 使用背景減法進行對象跟踪 155
7.7.1 高斯混合法 155
7.7.2 GMG背景減法 157
7.8 總結 159
7.9 測驗題 160

第8章 Jetson TX1開發套件 161
8.1 技術要求 161
8.2 Jetson TX1簡介 161
8.2.1 Jetson TX1的重要特性 163
8.2.2 Jetson TX1的應用 163
8.3 在Jetson TX1上安裝JetPack 163
8.3.1 安裝的基本要求 164
8.3.2 安裝的步驟 164
8.4 總結 171
8.5 測驗題 171

第9章 在Jetson TX1上部署計算機視覺應用程序 172
9.1 技術要求 172
9.2 Jetson TX1 GPU的設備屬性 173
9.3 Jetson TX1上的基本CUDA程序 174
9.4 Jetson TX1上的圖像處理 176
9.4.1 編譯支持CUDA的OpenCV 176
9.4.2 讀取和顯示圖像 178
9.4.3 圖像合成 178
9.4.4 圖像閾值處理 180
9.4.5 Jetson TX1上的圖像濾波 182
9.5 Jetson TX1的攝像機接口 184
9.6 Jetson TX1上的高級應用程序 185
9.6.1 使用Haar級聯進行人臉檢測 185
9.6.2 使用Haar級聯進行眼睛檢測 187
9.6.3 高斯混合背景減法 188
9.7 在Jetson TX1上使用Python和OpenCV實現計算機視覺 191
9.8 總結 192
9.9 測驗題 193

第10章 PyCUDA入門 194
10.1 技術要求 194
10.2 Python編程語言簡介 194
10.3 PyCUDA模塊簡介 195
10.4 在Windows上安裝PyCUDA 196
10.5 在Ubuntu上安裝PyCUDA 199
10.6 總結 201
10.7 測驗題 201

第11章 使用PyCUDA 202
11.1 技術要求 202
11.2 編寫第一個PyCUDA程序 203
11.3 從PyCUDA程序訪問GPU設備屬性 204
11.4 在PyCUDA中執行線程和塊 206
11.5 PyCUDA中的基本編程概念 206
11.5.1 在PyCUDA中兩個數字相加 207
11.5.2 使用driver類簡化加法程序 208
11.6 使用CUDA事件測量PyCUDA程序的性能 209
11.6.1 CUDA事件 209
11.6.2 使用大型數組加法測量PyCUDA的性能 210
11.7 PyCUDA中的複雜程序 212
11.7.1 對PyCUDA中的矩陣元素進行平方運算 212
11.7.2 GPU數組點乘 215
11.7.3 矩陣乘法 217
11.8 PyCUDA的高級內核函數 219
11.8.1 PyCUDA的元素級內核函數 219
11.8.2 歸約內核函數 220
11.8.3 scan內核函數 221
11.9 總結 222
11.10 測驗題 223

第12章 使用PyCUDA的基本計算機視覺應用程序 224
12.1 技術要求 224
12.2 PyCUDA中的直方圖計算 224
12.2.1 使用原子操作 225
12.2.2 使用共享內存 227
12.3 使用PyCUDA進行基本的計算機視覺操作 229
12.3.1 PyCUDA中的顏色空間轉換 230
12.3.2 在PyCUDA執行圖像合成 233
12.3.3 在PyCUDA中使用gpuarray進行圖像反轉 234
12.4 總結 235
12.5 測驗題 235
測驗題答案 236