PyTorch計算機視覺實戰(zhàn):目標檢測、圖像處理與深度學習
定 價:149 元
叢書名:智能系統(tǒng)與技術叢書
- 作者:[印]V·基肖爾·阿耶德瓦拉 [印]耶什萬斯·雷迪
- 出版時間:2023/9/1
- ISBN:9787111733393
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP181
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書基于真實數(shù)據(jù)集,全面系統(tǒng)地闡述現(xiàn)代計算機視覺實用技術、方法和實踐,涵蓋50多個計算機視覺問題。全書分為四部分:di一部分(第1~3章)介紹神經(jīng)網(wǎng)絡和PyTorch的基礎知識,以及如何使用PyTorch構建并訓練神經(jīng)網(wǎng)絡,包括輸入數(shù)據(jù)縮放、批歸一化、超參數(shù)調(diào)整等;第二部分(第4~10章)介紹如何使用卷積神經(jīng)網(wǎng)絡、遷移學習等技術解決更復雜的視覺相關問題,包括圖像分類、目標檢測和圖像分割等;第三部分(第11~13章)介紹各種圖像處理技術,包括自編碼器模型和各種類型的GAN模型;第四部分(第14~18章)探討將計算機視覺技術與NLP、強化學習和OpenCV等技術相結合來解決傳統(tǒng)問題的新方法。本書內(nèi)容豐富新穎,語言文字表述清晰,應用實例講解詳細,圖例直觀形象,適合PyTorch初中級讀者及計算機視覺相關技術人員閱讀。
深度學習是近年來計算機視覺應用在多個方面取得進步的驅動力。本書以實踐為驅動,結合具體應用場景,基于真實數(shù)據(jù)集全面系統(tǒng)地介紹如何使用PyTorch解決50多個計算機視覺問題。 首先,你將學習使用NumPy和PyTorch從頭開始構建神經(jīng)網(wǎng)絡(NN),并了解調(diào)整神經(jīng)網(wǎng)絡超參數(shù)的最佳實踐。然后,你將學習如何使用卷積神經(jīng)網(wǎng)絡(CNN)和遷移學習完成圖像分類任務,并且理解其中的工作原理。隨后,你將學習二維和三維多目標檢測、圖像分割、人體姿態(tài)估計等多個實際任務,并使用R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO、U-Net、Mask R-CNN、Detectron2等框架實現(xiàn)這些任務。在自編碼器和GAN部分,本書將指導你學習面部表情替換、面部圖像生成和面部表情處理技術。之后,你將學習如何將計算機視覺與NLP技術(LSTM、transformer等)和強化學習技術(深度Q學習等)相結合,實現(xiàn)OCR、圖像標題生成、目標檢測和汽車自動駕駛智能體等應用。最后,你將學習如何將神經(jīng)網(wǎng)絡模型部署到AWS云等實際應用場景。
Preface
前 言
人工智能(AI)已經(jīng)成為一股強大的力量,正在推動一些日常使用的現(xiàn)代應用程序的發(fā)展,正在以一種曾經(jīng)只存在于我們幻想中的方式重塑這個世界。人工智能曾經(jīng)僅存在于少數(shù)實驗室,隸屬于計算機科學學科。然而,由于優(yōu)秀理論的爆炸式發(fā)展、計算能力的提高和數(shù)據(jù)的可用性,該領域自2000年以來開始呈指數(shù)級增長,而且沒有任何放緩的跡象。
人工智能已經(jīng)一次又一次地證明,只要擁有正確的算法和足夠的數(shù)據(jù),它就可以在有限的人工干預下自學任務,并產(chǎn)生與人類判斷相匹敵甚至有時超過人類判斷的結果。無論你是新手還是運營大型組織的老手,都有充分的理由去了解人工智能的工作原理。神經(jīng)網(wǎng)絡是人工智能算法中最靈活的一類,已被廣泛應用于各個領域,包括結構化數(shù)據(jù)、文本和視覺領域。
本書從神經(jīng)網(wǎng)絡的基礎開始講解,涵蓋了50多個計算機視覺方面的應用。首先,你將使用NumPy和PyTorch從頭開始構建神經(jīng)網(wǎng)絡(NN),然后學習調(diào)整神經(jīng)網(wǎng)絡超參數(shù)的最佳實踐。隨著學習的深入,你將學習CNN以及主要用于圖像分類的遷移學習技術,還將了解在構建NN模型時需要注意的實際問題。
接下來,你將學習多目標檢測、圖像分割,并使用R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO、U-Net和Mask R-CNN架構等技術實現(xiàn)這些任務,還將學習使用Detectron2框架來簡化構建神經(jīng)網(wǎng)絡的具體過程,這些神經(jīng)網(wǎng)絡主要用于目標檢測和人體姿態(tài)估算。之后,你將實現(xiàn)三維目標檢測。
隨后,你將學習自編碼器和GAN,重點是圖像處理和生成。這里將使用VAE、DCGAN、cGAN、Pix2Pix、CycleGAN、StyleGAN2、SRGAN和風格遷移來實現(xiàn)用于各種任務的圖像處理。
最后,學習將計算機視覺與其他技術相結合來解決傳統(tǒng)問題,包括將NLP和計算機視覺進行結合,執(zhí)行OCR、圖像標題生成、用transformer進行目標檢測;通過結合強化學習和計算機視覺技術來實現(xiàn)汽車自動駕駛智能體;如何使用OpenCV庫將一個NN模型投入具體的生產(chǎn)過程,以及傳統(tǒng)的計算機視覺技術。
目標讀者
本書是為PyTorch初中級讀者準備的,目標是使讀者熟練掌握基于深度學習和PyTorch的計算機視覺技術。對于剛開始學習神經(jīng)網(wǎng)絡的讀者而言,本書也很有用。閱讀本書需要具備Python編程語言和機器學習的基礎知識。
主要內(nèi)容
第1章介紹神經(jīng)網(wǎng)絡的工作原理。首先,你將學習與神經(jīng)網(wǎng)絡相關的關鍵術語。然后,你將了解構建模塊的工作細節(jié),并在一個小數(shù)據(jù)集上從頭開始構建神經(jīng)網(wǎng)絡。
第2章介紹如何使用PyTorch。在學習使用PyTorch構建神經(jīng)網(wǎng)絡模型的不同方法之前,你將了解創(chuàng)建和操作張量對象的方法。這里仍將使用一個小數(shù)據(jù)集,以便你了解使用PyTorch的細節(jié)。
第3章結合前面兩章涉及的所有內(nèi)容,幫助你理解各種神經(jīng)網(wǎng)絡超參數(shù)對模型準確度的影響。在學完本章后,你將掌握如何在實際數(shù)據(jù)集上使用神經(jīng)網(wǎng)絡。
第4章詳細介紹使用普通神經(jīng)網(wǎng)絡面臨的挑戰(zhàn),你將了解為何卷積神經(jīng)網(wǎng)絡能克服傳統(tǒng)神經(jīng)網(wǎng)絡的各種限制。你將深入了解CNN的工作細節(jié),并了解其中的各種組件。然后,你將學習處理圖像的最佳實踐。本章將使用真實世界的圖像,并學習使用CNN實現(xiàn)復雜圖像分類的工作原理。
第5章介紹如何解決現(xiàn)實世界中的圖像分類問題。你將了解多種遷移學習架構,并了解它們是如何顯著提高圖像分類準確度的。然后,使用遷移學習實現(xiàn)人臉關鍵點檢測和對年齡、性別進行估計。
第6章提供在實際構建和部署圖像分類模型時需要注意的要點。實際上,你將看到在真實數(shù)據(jù)上進行數(shù)據(jù)增強和批歸一化的優(yōu)點。此外,還將了解類激活映射為何有助于對CNN模型的預測結果進行解釋。學完本章后,你就可以解決大多數(shù)圖像分類問題,并利用前面討論的模型來處理定制的數(shù)據(jù)集。
第7章奠定目標檢測的基礎,你將學習用于構建目標檢測模型的各種技術。然后,通過一個案例了解基于區(qū)域建議的目標檢測技術,在這個案例中,你將實現(xiàn)一個用于定位圖像中卡車和公交車的模型。
第8章首先展示區(qū)域建議架構的局限性,介紹解決區(qū)域建議架構問題的更多高級架構的工作細節(jié)。我們將在相同的數(shù)據(jù)集(卡車與公交車的目標檢測)上實現(xiàn)所有的架構,這樣就可以對比每個架構的工作原理。
第9章建立在前幾章的基礎上,幫助你構建模型,以確定各種類別目標和目標實例在圖像中的位置和輪廓。我們將針對道路圖像和普通家庭圖像實現(xiàn)具體的應用。學完本章后,你將能夠通過使用PyTorch構建模型的方式解決關于圖像分類、目標檢測/分割的問題。
第10章總結前幾章的學習內(nèi)容,用幾行代碼實現(xiàn)對目標的檢測和分割,通過構建模型來實現(xiàn)人群計數(shù)和圖像著色應用。最后,你還將了解如何在真實數(shù)據(jù)集上進行三維目標
檢測。
第11章為圖像修改奠定基礎。首先學習用于壓縮圖像和生成新圖像的自編碼器。然后學習欺騙模型的對抗性攻擊。之后實現(xiàn)圖像風格遷移。最后實現(xiàn)一個自編碼器來生成深度虛擬圖像。
第12章首先介紹GAN的工作原理,然后學習虛擬人臉圖像的生成技術以及如何使用GAN生成一些有趣的圖像。
第13章將圖像處理升級到一個新的水平。我們將實現(xiàn)一個GAN模型,用于將目標從一個類別轉換到另外一個類別,由草圖生成圖像,并操作定制圖像,以便生成特定風格的圖像。學完本章后,你就可以組合應用自編碼器和GAN進行圖像處理了。
第14章為你學習結合使用計算機視覺技術與其他技術奠定基礎。你將學習如何使用小樣本和零訓練樣本完成圖像分類。
第15章介紹各種自然語言處理技術的工作細節(jié),如詞嵌入、LSTM和transformer,你將使用transformer實現(xiàn)一些應用程序,如圖像標題生成、OCR等。
第16章首先介紹強化學習術語和狀態(tài)價值。在學習深度Q學習的過程中,你將了解強化學習和神經(jīng)網(wǎng)絡的結合使用方式。通過學習,你將實現(xiàn)一個玩Pong游戲的智能體和一個用于汽車自動駕駛的智能體。
第17章介紹將模型部署到生產(chǎn)環(huán)境的最佳實踐。在將模型遷移到AWS公有云之前,你將了解如何在本地服務器上部署模型。
第18章詳細介紹如何使用OpenCV實用程序創(chuàng)建5個有趣的應用程序。學完本章后,你將了解輔助深度學習的實用程序,以及在內(nèi)存或推理速度有相當大限制的場景中可以替代深度學習的實用程序。
學習本書的軟硬件要求
本書覆蓋的軟硬件操作系統(tǒng)要求
存儲空間最低128GB
內(nèi)存最低8GB
Intel i5 或更高的處理器
NVIDIA 8 GB以上顯卡——GTX1070或更好的顯卡
網(wǎng)速最低50Mbit/sWindows、Linux和macOS
Python 3.6及更高版本W(wǎng)indows、Linux和macOS
PyTorch 1.7Windows、Linux和macOS
Google Colab(可在任何瀏覽器上運行)Windows、Linux和macOS
請注意,本書中幾乎所有的代碼都可以使用Google Colab運行,通過單擊GitHub 各章notebook中的Open in Colab按鈕即可實現(xiàn)。
下載示例代碼
可以從GitHub上下載本書的示例代碼文件,地址是https://github.com/PacktPublishing/Modern-Computer-Vision-with-PyTorch。代碼的更新將會提交到GitHub。
下載彩色圖像
我們還提供了一個PDF文件,其中有本書中使用的屏幕截圖或圖表的彩色圖像,你可以從https://static.packt-cdn.com/downloads/9781839213472_ColorImages.pdf下載。
CONTENTS
目 錄
譯者序
前言
第一部分 面向計算機視覺的
深度學習基礎知識
第1章 人工神經(jīng)網(wǎng)絡基礎 2
1.1 比較人工智能與傳統(tǒng)機器學習 3
1.2 人工神經(jīng)網(wǎng)絡的構建模塊 4
1.3 實現(xiàn)前向傳播 6
1.3.1 計算隱藏層的值 6
1.3.2 應用激活函數(shù) 7
1.3.3 計算輸出層的值 9
1.3.4 計算損失值 9
1.3.5 前向傳播的代碼 11
1.4 實現(xiàn)反向傳播 14
1.4.1 梯度下降的代碼 15
1.4.2 使用鏈式法則實現(xiàn)
反向傳播 17
1.5 整合前向傳播與反向傳播 20
1.6 理解學習率的影響 22
1.7 總結神經(jīng)網(wǎng)絡的訓練過程 28
1.8 小結 29
1.9 課后習題 29
第2章 PyTorch基礎 30
2.1 安裝PyTorch 30
2.2 PyTorch張量 32
2.2.1 初始化張量 33
2.2.2 張量運算 34
2.2.3 張量對象的自動梯度 37
2.2.4 PyTorch的張量較
NumPy的ndarrays
的優(yōu)勢 38
2.3 使用PyTorch構建神經(jīng)網(wǎng)絡 39
2.3.1 數(shù)據(jù)集、數(shù)據(jù)加載器和
批大小 45
2.3.2 預測新的數(shù)據(jù)點 48
2.3.3 實現(xiàn)自定義損失函數(shù) 49
2.3.4 獲取中間層的值 50
2.4 使用序貫方法構建神經(jīng)網(wǎng)絡 51
2.5 保存并加載PyTorch模型 54
2.5.1 state dict 54
2.5.2 保存 55
2.5.3 加載 55
2.6 小結 55
2.7 課后習題 56
第3章 使用PyTorch構建深度
神經(jīng)網(wǎng)絡 57
3.1 表示圖像 57
3.2 為什么要使用神經(jīng)網(wǎng)絡進行
圖像分析 62
3.3 為圖像分類準備數(shù)據(jù) 64
3.4 訓練神經(jīng)網(wǎng)絡 66
3.5 縮放數(shù)據(jù)集以提升模型準確度 71
3.6 理解不同批大小的影響 74
3.6.1 批大小為32 75
3.6.2 批大小為10 000 79
3.7 理解不同損失優(yōu)化器的影響 80
3.8 理解不同學習率的影響 83
3.8.1 學習率對縮放數(shù)據(jù)集
的影響 83
3.8.2 不同學習率對非縮放
數(shù)據(jù)集的影響 88
3.9 理解不同學習率衰減的影響 90
3.10 構建更深的神經(jīng)網(wǎng)絡 93
3.11 理解不同批歸一化的影響 94
3.11.1 沒有批歸一化的非常小
的輸入值 96
3.11.2 經(jīng)過批歸一化的非常小
的輸入值 98
3.12 過擬合的概念 100
3.12.1 添加dropout的影響 100
3.12.2 正則化的影響 102
3.13 小結 106
3.14 課后習題 106
第二部分 物體分類與目標檢測
第4章 卷積神經(jīng)網(wǎng)絡 108
4.1 傳統(tǒng)深度神經(jīng)網(wǎng)絡的問題 108
4.2 CNN的構建模塊 111
4.2.1 卷積 112
4.2.2 濾波器 113
4.2.3 步長和填充 114
4.2.4 池化 115
4.2.5 整合各個構建模塊 116
4.2.6 卷積和池化的圖像平移
不變性原理 117
4.3 實現(xiàn)CNN 117
4.3.1 使用PyTorch構建基于
CNN的架構 118
4.3.2 基于Python的前向傳播 121
4.4 使用深度CNN分類圖像 123
4.5 實現(xiàn)數(shù)據(jù)增強 127
4.5.1 圖像增強 127
4.5.2 對一批圖像執(zhí)行數(shù)據(jù)增強
及collate_fn的必要性 137
4.5.3 用于圖像平移的數(shù)據(jù)
增強 140
4.6 特征學習結果的可視化 143
4.7 構建對真實圖像進行分類
的CNN 153
4.8 小結 161
4.9 課后習題 162
第5章 面向圖像分類的遷移學習 163
5.1 遷移學習簡介 163
5.2 理解VGG16架構 164
5.3 理解ResNet架構 174
5.4 實現(xiàn)人臉關鍵點檢測 178
5.5 多任務學習—實現(xiàn)年齡估計
和性別分類 186
5.6 torch_snippets庫簡介 195
5.7 小結 200
5.8 課后習題 200
第6章 圖像分類的實戰(zhàn)技術 201
6.1 生成CAM 201
6.2 數(shù)據(jù)增強和批歸一化 207
6.3 模型實現(xiàn)的實踐要點 212
6.3.1 處理不平衡數(shù)據(jù) 212
6.3.2 分類圖像中目標的大小 213
6.3.3 訓練數(shù)據(jù)和驗證數(shù)據(jù)
之間的差異 213
6.3.4 扁平層中的節(jié)點數(shù) 214
6.3.5 圖像的大小 214
6.3.6 使用OpenCV實用程序 214
6.4 小結 215
6.5 課后習題 215
第7章 目標檢測基礎 216
7.1 目標檢測簡介 216
7.2 為訓練圖像樣本創(chuàng)建真值 217
7.3 理解區(qū)域建議 220
7.3.1 使用SelectiveSearch
生成區(qū)域建議 221
7.3.2 實現(xiàn)用于生成區(qū)域建議
的SelectiveSearch 222
7.4 理解IoU 224
7.5 非極大抑制 226
7.6 mAP 226
7.7 訓練基于R-CNN的定制目標
檢測器 227
7.7.1 R-CNN的工作細節(jié) 227
7.7.2 基于定制數(shù)據(jù)集實現(xiàn)
R-CNN目標檢測模型 228
7.8 訓練基于Fast R-CNN的定制
目標檢測器 241
7.8.1 Fast R-CNN的工作細節(jié) 242
7.8.2 基于定制數(shù)據(jù)集實現(xiàn)Fast R-CNN目標檢測模型 242
7.9 小結 249
7.10 課后習題 249
第8章 目標檢測進階 250
8.1 現(xiàn)代目標檢測算法的組成 250
8.1.1 錨盒 250
8.1.2 區(qū)域建議網(wǎng)絡 252
8.2 基于定制數(shù)據(jù)集訓練Faster
R-CNN 254
8.3 YOLO的工作細節(jié) 260
8.4 基于定制數(shù)據(jù)集訓練YOLO 265
8.4.1 安裝Darknet 265
8.4.2 設置數(shù)據(jù)集格式 267
8.4.3 配置架構 268
8.4.4 訓練和測試模型 269
8.5 SSD模型的工作細節(jié) 270
8.6 基于定制數(shù)據(jù)集訓練SSD
模型 274
8.7 小結 278
8.8 課后習題 278
第9章 圖像分割 279
9.1 探索U-Net架構 279
9.2 使用U-Net實現(xiàn)語義分割 283
9.3 探索Mask R-CNN架構 288
9.3.1 RoI對齊 290
9.3.2 掩碼頭部 291
9.4 使用Mask R-CNN實現(xiàn)實例
分割 292
9.5 小結 305
9.6 課后習題 306
第10章 目標檢測與分割的應用 307
10.1 多目標實例分割 307
10.1.1 獲取和準備數(shù)據(jù) 308
10.1.2 訓練用于實例分割的
模型 312
10.1.3 對新圖像進行推斷 313
10.2 人體姿態(tài)檢測 315
10.3 人群計數(shù) 316
10.4 圖像著色 325
10.5 面向點云的三維目標檢測 330
10.5.1 理論 330
10.5.2 訓練YOLO模型實現(xiàn)
三維目標檢測 334
10.6 小結 337
第三部分 圖像處理
第11章 自編碼器與圖像處理 340
11.1 理解自編碼器 340
11.2 理解卷積自編碼器 346
11.3 理解變分自編碼器 351
11.3.1 VAE的工作機制 352
11.3.2 KL散度 353
11.3.3 構建VAE模型 353
11.4 圖像對抗性攻擊 357
11.5 圖像風格遷移 360
11.6 生成深度虛擬圖像 366
11.7 小結 375
11.8 課后習題 375
第12章 基于GAN的圖像生成 376
12.1 GAN模型簡介 376
12.2 使用GAN生成手寫數(shù)字 378
12.3 使用DCGAN生成人臉圖像 383
12.4 實現(xiàn)條件GAN模型 391
12.5 小結 399
12.6 課后習題 400
第13章 高級GAN圖像處理 401
13.1 使用Pix2Pix GAN模型 401
13.2 使用CycleGAN模型 410
13.3 在定制圖像上使用StyleGAN
模型 418
13.4 超分辨率GAN 426
13.4.1 架構 427
13.4.2 編碼SRGAN 428
13.5 小結 429
13.6 課后習題 430
第四部分 計算機視覺與其他技術
第14章 使用小樣本進行模型訓練 432
14.1 實現(xiàn)零樣本學習 432
14.2 實現(xiàn)小樣本學習 437
14.2.1 構建Siamese網(wǎng)絡 438
14.2.2 原型網(wǎng)絡的工作細節(jié) 444
14.2.3 關系網(wǎng)絡的工作細節(jié) 445
14.3 小結 446
14.4 課后習題 446
第15章 計算機視覺與NLP 447
15.1 RNN模型簡介 447
15.1.1 RNN架構的應用場景 448
15.1.2 探索RNN的結構 449
15.1.3 為什么需要存儲記憶 449
15.2 LSTM架構簡介 450
15.2.1 LSTM的工作細節(jié) 451
15.2.2 使用PyTorch實現(xiàn)
LSTM 453
15.3 生成圖像標題 453
15.4 轉錄手寫圖像 465
15.4.1 CTC損失的工作細節(jié) 466
15.4.2 計算CTC損失值 467
15.4.3 手寫轉錄的代碼實現(xiàn) 468
15.5 使用DETR進行目標檢測 476
15.5.1 transformer的工作細節(jié) 476
15.5.2 DETR的工作細節(jié) 479
15.5.3 目標檢測的代碼實現(xiàn) 482
15.6 小結 485
15.7 課后習題 485
第16章 計算機視覺與強化學習 486
16.1 強化學習基礎知識 486
16.1.1 計算狀態(tài)價值 487
16.1.2 計算狀態(tài)–行為價值 488
16.2 實現(xiàn)Q學習 489
16.2.1 Q值 489
16.2.2 了解Gym環(huán)境 490
16.2.3 構建Q表 491
16.2.4 探索–利用機制 493
16.3 實現(xiàn)深度Q學習 495
16.4 目標固定的深度Q學習 501
16.5 實現(xiàn)自動駕駛智能體 508
16.5.1 安裝CARLA環(huán)境 508
16.5.2 訓練自動駕駛智能體 511
16.6 小結 518
16.7 課后習題 519
第17章 模型的實際應用部署 520
17.1 API基礎知識 520
17.2 在本地服務器上創(chuàng)建API并
進行預測 521
17.2.1 安裝API模塊和依賴項 522
17.2.2 圖像分類器的支持組件 522
17.3 將API部署到云端 525
17.3.1 Docker鏡像與Docker
容器 526
17.3.2 創(chuàng)建Docker容器 526
17.3.3 在云端發(fā)布并運行
Docker容器 530
17.4 小結 535
第18章 使用OpenCV實用程序
進行圖像分析 536
18.1 圖像中的單詞檢測 536
18.2 圖像中的車道線檢測 542
18.3 基于顏色的目標檢測 544
18.4 構建全景圖像 546
18.5 圖像中的車牌檢測 550
18.6 小結 552
附錄 課后習題答案 554