機器視覺之 TensorFlow 2 入門原理與應用實戰

李金洪

立即出貨

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

相關主題

商品描述

本書主要介紹了TensorFlow 2在機器視覺中的應用。
本書共8章,主要內容包括神經網絡的原理,如何搭建開發環境,如何在網絡側搭建圖片分類器,
如何識別圖片中不同膚色的人數,如何用遷移學習診斷醫療影像,如何使用Anchor-Free模型檢測文字,
如何實現OCR模型,如何優化OCR模型。
本書適合機器視覺、深度學習方面的專業人士閱讀。

作者簡介

李金洪

代碼醫生工作室*級工程師,大蛇智能網站創始人,精通C、C++、彙編、Python、Java、Go等語言,
擅長神經網絡、算法、協議分析、移動互聯網安全架構等技術,先後擔任過CAD算法工程師、手機架構師、
項目經理、&席技術官、部門經理、*深產品總監等職位。
在深度學習領域中參與過某移動互聯網後台的光學字符識別項目、
某娛樂節目機器人的語音識別和聲紋識別項目及金融領域的若干分類項目。
發布過兩套關於CNTK深度學習框架的視頻教程。

目錄大綱

目錄:
第一篇基礎知識
第1章神經網絡的原理/3
1.1神經網絡/4
1.1.1神經元的結構/4
1.1.2生物神經元與計算機中神經元模型結構的相似性/6
1.1. 3生物神經元與計算機神經元模型工作流程的相似性/6
1.1.4神經網絡的形成/6
1.2神經網絡與深度學習的關係/7
1.3全連接神經網絡/7
1.3.1全連接神經網絡的結構/7
1.3.2實例分析:全連接神經網絡中每個神經元的作用/8
1.3.3全連接神經網絡的擬合原理/10
1.3.4全連接神經網絡的設計思想/10
1.4生物界的視覺處理系統/11
1.4.1大腦對視覺信號的處理流程/11
1.4.2大腦對神經信號的分級處理/12
1.5離散微積分/12
1.5.1離散微分與離散積分/12
1.5.2計算機視覺中的離散積分/13
1.6捲積神經網絡/13
1.6.1捲積的過程/14
1.6.2 1D捲積、2D捲積和3D捲積/14
1.6.3實例分析:Sobel算子的原理/15
1.6.4深度神經網絡中的捲積核/17
1.6.5反捲積/18
1.7捲積分/18
1.8捲積神經網絡與全連接神經網絡的關係/19

第2章搭建開發環境/21
2.1準備硬件環境/22
2.2下載及安裝Anaconda/22
2.2.1下載Anaconda開發工具/22
2.2.2安裝Anaconda開發工具/23
2.2.3安裝Anaconda開發工具時的註意事項/23
2.3使用Anaconda安裝TensorFlow/24
2.3 .1查看TensorFlow的版本/24
2.3.2使用Anaconda安裝TensorFlow/24
2.3.3 TensorFlow的安裝指南/25
2.4測試顯卡及開發環境的一些常用命令/25
2.4.1使用nvidia-smi命令查看顯卡信息/ 25
2.4.2 nvidia-smi命令失效的解決辦法/26
2.4.3查看CUDA的版本/27
2.4.4查看cuDNN的版本/27
2.4.5用代碼測試安裝環境/28
2.5使用Python虛環境實現多個TensorFlow版本共存/28
2.5.1查看當前的Python虛環境及Python版本/28
2.5.2創建Python虛環境/29
2.5.3在Python虛環境中安裝TensorFlow 1.x版本/31
2.5.4進行界面配置/31
2.5.5使用PyCharm編輯器切換虛環境/33
2.6安裝Docker/35
2.6.1 Docker簡介/35
2.6.2在Dabian系列的Linux系統中安裝Docker/35
2.6.3在Red Had系列的Linux系統中安裝Docker/36
2.6.4安裝NVIDIA Docker/38
2.7安裝TF_Serving模塊/38
2.7.1在Linux系統中使用apt-get命令安裝TF_Serving模塊/38
2.7.2在Linux系統中使用Docker安裝TF_Serving模塊/39

第3章在網絡側搭建圖片分類器/41
3.1基礎概念/42
3.1.1 ResNet50模型與殘差網絡/42
3.1.2 tf.keras接口/43
3.2代碼環境及模型準備/44
3.2.1獲取預訓練模型/44
3.2 .2在本地進行模型部署/45
3.3代碼實現:用ResNet50模型識別圖片所屬類別/45
3.4使用模型時如何預處理輸入圖片/48
3.4.1 *近鄰法/48
3.4.2調整圖片尺寸的其他方法/48
3.4.3數據預處理在模型應用中的重要性/49
3.4.4 ImgNet中預訓練模型的數據預處理方法/49
3.5代碼實現:將模型導出為支持部署的凍結圖/50
3.5.1 saved_model的用法/50
3.5.2調用saved_model模塊為模型添加簽名並保存/50
3.5.3運行代碼並生成凍結圖/51
3.6在服務器上部署分類器模型/52
3.6.1指定模型的版本號/52
3.6.2啟動服務容器/52
3.6 .3關閉網絡側服務的方法/53
3.7代碼實現:構建URL請求客戶端/54
3.8網絡側的分類應用/55
3.9擴展:使用更多預訓練模型進行部署/56
3.9.1 VGG模型/56
3.9 .2 Inception模型/56
3.9.3 DenseNet模型/57
3.9.4 PNASNet模型/57
3.9.5 EfficientNet模型/58
3.9.6主流捲積模型的通用結構/60

*二篇中級應用
第4章識別圖片中不同膚色的人數/63
4.1安裝實例所依賴的模塊/64
4.1.1安裝opencv-python模塊/64
4.1. 2安裝face_recognition模塊/64
4.1.3安裝imageio模塊/65
4.1.4安裝tqdm模塊/65
4.2編寫爬蟲程序並收集樣本/65
4.2.1設計爬蟲程序/65
4.2.2代碼實現:定義爬蟲類/66
4.2.3代碼實現:用爬蟲爬取圖片/69
4.3加工樣本/70
4.3.1提取人臉信息的具體步驟/70
4.3.2代碼實現:將裁剪圖片加工成訓練樣本/70
4.4將樣本加載數據集/72
4.4.1 tf.data.Dataset接口/72
4.4.2 tf.data.Dataset接口支持的數據集變換操作/72
4.4.3代碼實現:構建數據集/77
4.5 tf.keras接口的使用/79
4.5.1調用函數式API的模式/79
4.5.2構建子類的模式/83
4.5.3其他模式及總結/86
4.6深度捲積神經網絡/86
4.6.1深度捲積神經網絡的組成/87
4.6.2捲積運算/87
4.6.3池化運算/88
4.6.4激活函數ReLU及相關的變體函數/89
4.7構建網絡模型/91
4.7.1設計深度捲積神經網絡模型的結構/92
4.7.2 Dropout層的實現與原理/92
4.7.3 Softmax算法及其原理/93
4.7.4常用的損失算法/94
4.7.5代碼實現:用tf.keras接口搭建捲積神經網絡/95
4.7.6代碼實現:定義網絡模型的訓練接口/97
4.7.7代碼實現:可視化模型結構/98
4.8使用模型/101
4.8. 1代碼實現:使用模型對圖片進行識別/101
4.8.2代碼實現:使用模型對實時視頻流進行識別/102
4.8.3在Linux系統中調用攝像頭並使用模型/104
4.9捲積神經網絡的優化方法/106
4.9.1批量歸一化/106
4.9.2更好的激活函數/106
4.9.3更好的Dropout方法/108
4.9.4更好的網絡結構/110
4.9.5更好的捲積核/111
4.9.6捲積核的分解技巧/114
4.9.7可分離深度捲積/115
4.9.8空洞捲積/115
4.10練習題/116

第5章用遷移學習診斷醫療影像/117
5.1處理樣本/118
5.1.1醫療影像的文件格式/118
5.1.2 ChestX-ray14數據集/119
5.1.3在實例中部署數據集/121
5.1.4數據增強/121
5.1.5用tf.keras接口進行數據增強的方法/123
5.1.6代碼實現:創建用於數據增強的圖像生成器/125
5.1.7應用圖像生成器的方法/126
5.1.8代碼實現:在數據集上應用圖像生成器/129
5.2分類任務與樣本均衡/134
5.2.1二分類任務/134
5.2.2互斥多分類任務與互斥分類任務/134
5.2.3非互斥分類任務/134
5.2.4訓練過程中的樣本均衡問題/134
5.2.5代碼實現:為ChestX-ray14數據集進行樣本均衡/135
5.3遷移訓練CheXNet模型/137
5.3.1遷移訓練/137
5.3.2 CheXNet模型/137
5.3.3下載DenseNet121預訓練模型/139
5.3.4代碼實現:用tf.keras接口搭建預訓練模型/139
5.3.5代碼實現:構建模型/141
5.4編譯模型/141
5.4.1優化器的種類與選取/141
5.4.2 tf.keras接口中的損失函數/143
5.4.3學習率與退化學習率的設置/143
5.4.4評估函數的設置/144
5.4.5代碼實現:為模型添加自定義評估接口/145
5.4.6代碼實現:編譯模型/147
5.5 tf.keras接口中訓練模型的方法/148
5.5.1 fit方法的使用/148
5.5.2 fit_generator方法的使用/149
5.6 tf.keras訓練模型中的Callbacks方法/150
5.6.1輸出訓練過程中的指定數據/151
5.6.2將訓練過程中的指定數據輸出到TensorBoard上/151
5.6.3保存訓練過程中的檢查點文件/151
5.6.4設置訓練模型的早停功能/152
5.6.5設置退化學習率/152
5.6.6自定義Callbacks方法/152
5.7添加回調函數並訓練模型/153
5.7.1代碼實現:添加檢查點回調函數/153
5.7.2代碼實現:添加退化學習率回調函數/153
5.7.3代碼實現:訓練模型並可視化訓練過程/154
5.8使用基於梯度定位的深度網絡可視化方法顯示病竈區域/156
5.8.1 Grad-CAM方法/156
5.8.2代碼實現:計算病竈區域/158
5.9擴展實例:多模型融合/161
5.9.1多模型融合/161
5.9.2使用八度捲積來替換模型中的普通捲積/162
5.9.3使用隨機數據增強方法訓練模型/164
5.9.4使用AdvProp方法訓練模型/164
5.9.5使用自訓練框架Noisy Student訓練模型/166
5.9.6關於更多訓練方法的展望/167
5.10在衣服數據集上處理多標籤非互斥分類任務/167

第三篇*級應用
第6章用Anchor-Free模型檢測文字/173

6.1基於圖片內容的處理任務/ 174
6.1.1目標識別任務/174
6.1.2圖片分割任務/174
6.1.3 Anchor-Free模型/175
6.1.4非極大值抑制算法/176
6.1.5 FCOS模型/176
6.1.6 focal loss算法/177
6.1.7 CornerNet與CornerNet-Lite模型/178
6.1.8 CenterNet模型/179
6.1.9高斯核函數/179
6.1.10 Matrix Net模型/182
6.1 .11目標檢測中的上採樣與下採樣/183
6.1.12捲積運算與補零間的關係/183
6.2處理樣本/184
6.2.1樣本/184
6.2.2代碼實現:用tf.data.Dataset接口開發版本兼容的數據集/185
6.2.3代碼實現:為尺寸調整後的樣本圖片同步標註坐標/192
6.2.4代碼實現:將標籤改為“中心點、高、寬”的形式/195
6.3構建堆疊式沙漏網絡模型/198
6.3.1沙漏網絡模型/198
6.3.2代碼實現:構建沙漏網絡模型的基礎結構/200
6.3.3代碼實現:構建沙漏網絡模型的前置結構/201
6.3.4代碼實現:構建沙漏網絡模型的主體結構/203
6.3.5代碼實現:搭建堆疊式沙漏網絡模型/206
6.3.6代碼實現:對沙漏網絡模型進行單元測試/207
6.4構建CenterNet模型類/208
6.4.1代碼實現:定義CenterNet模型類並實現初始化方法/208
6.4.2代碼實現:定義模型的輸入節點/209
6.4.3代碼實現:構建模型的網絡結構/211
6.4 .4代碼實現:計算模型的損失值/215
6.4.5高斯核半徑的計算/220
6.4.6代碼實現:實現CenterNet模型類的訓練/222
6.5訓練模型/224
6.5.1代碼實現:構建數據集/224
6.5.2代碼實現:實例化MyCenterNet類並加載權重參數/225
6.5.3代碼實現:訓練模型並保存*優結果/226
6.6使用模型/228
6.6.1代碼實現:實例化MyCenterNet類/228
6.6.2代碼實現:讀取圖片並預測/229
6.7模型開發過程中的經驗與技巧/230
6.7.1如何用tf.data.Dataset接口返回變長的批次樣本數據/230
6.7.2在模型訓練過程中處理損失值為None的思路/231
6.7.3實例分析:由於計算方法的問題,引起損失值為None/232
6.7.4使用tf.data.Dataset接口對齊填充時的註意事項/233
6.7.5實例分析:由於模型輸出的問題,引起損失值為None/233
6.7.6實例分析:由於學習率過大,引起損失值為None/234
6.7.7歸一化權重設置不當會使模型停止收斂/235
6.7.8實例分析:歸一化權重設置不當會使模型停止收斂/235
6.7.9退化學習率使用不當會使模型停止收斂/236
6.7.10如何避免模型在預測和訓練時處理的樣本相同卻得到不同的結果/237
6.7.11實例分析:用模型檢測相同的數據卻得出不同的結果/237
6.7.12常用的帶補零的捲積運算/238
6.7.13使用更好的骨幹網模型Res2Net/239
6.8擴展:對漢字進行區域檢測/240
6.9練習題/240

7章實現OCR模型——可以從圖片中識別出文字的模型/241
7.1實例:用CNN模型識別驗證碼/242
7.1.1樣本/242
7.1.2代碼實現:生成自定義字體的驗證碼/242
7.1.3代碼實現:構建輸入數據集/243
7.1.4模型的設計思路/244
7.1.5代碼實現:搭建捲積網絡模型/244
7.1.6代碼實現:搭建多分類輸出層/246
7.1.7訓練模型並輸出結果/247
7.1.8原理分析:輸出層的每個分類是否可以與字符序列對應/247
7.1.9練習題:可視化分類器的關註區域/248
7.2通用OCR的實現原理/250
7.3文字檢測的相關技術/251
7.4文字識別的相關技術/252
7.5實例:用CRNN模型識別圖片中的變長文字/252
7.5.1製作樣本/253
7.5.2代碼實現:用tf.data.Dataset接口開發版本兼容的數據集/ 253
7.5.3 CRNN中的RNN/259
7.5.4代碼實現:構建CRNN模型/259
7.5.5 CTC算法與損失計算/264
7.5.6代碼實現:實現損失計算函數/265
7.5.7代碼實現:實現自定義Callbacks類並重新計算損失值/266
7.5.8代碼實現:訓練CRNN模型/267
7.5.9代碼實現:使用CRNN模型進行預測/270
7.6開發模型過程中的經驗與技巧/272
7.6.1在下採樣操作中盡可能用步長為2的操作代替池化/272
7.6.2實例驗證:全尺寸捲積與全連接完全一樣/273
7.6.3批量歸一化與激活函數的位置關係/274
7.6 .4在神經網絡模型中是否有必要操作Dropout層/277
7.6.5實例分析:應該將圖片歸一化到[0,1]區間還是[-1,1]區間/278
7.6.6用tf.keras接口編寫組合模型時容易犯的錯誤/279
7.6.7開發含CTC算法的代碼的註意事項/282
7.6.8在使用相同數據集的情況下訓練過程的損失值和驗證過程的損失值不同/282
7.6.9實例驗證:訓練時優化器的選取/283

第8章優化OCR模型——基於捲積網絡和循環網絡的優化/285
8.1優化OCR模型中的圖像特徵處理部分/286
8.1.1提升深度捲積神經網絡魯棒性的思路/286
8.1.2 STN模型/286
8.1.3 STN模型的原理分析/287
8.2實例:用STN實現MNIST數據集的仿射變換/288
8.2.1樣本/288
8.2.2代碼實現:構建STN層/288
8.2.3代碼實現:測試STNtransformer類/294
8.2.4代碼實現:製作DataSet/297
8.2.5獨立組件層的原理/298
8.2.6代碼實現:搭建應用ReNorm算法的IC層/299
8.2.7 ReNorm算法的原理/ 299
8.2.8代碼實現:搭建有STN層的捲積模型/300
8.2.9代碼實現:訓練STN模型/302
8.2.10代碼實現:使用模型進行預測並顯示STN層的結果/303
8.3實例:用STN層優化OCR模型/305
8.3.1帶STN層的CRNN模型的結構/305
8.3.2代碼實現:搭建有STN層的CRNN模型/306
8.3.3代碼實現:訓練模型並輸出結果/307
8.3.4優化步驟1:使損失不變的模型發生收斂/308
8.3. 5優化步驟2:消除模型在訓練和預測相同數據時的效果差異/310
8.3.6擴展:廣義的STN/313
8.4對OCR網絡中的序列生成部分進行優化/315
8.4.1多頭註意力與自註意力機制/315
8.4.2用多頭自註意力機制模型替換RNN模型/316
8.4.3用註意力機制改善RNN模型/318
8.4.4用seq2seq框架改善輸出序列/321
8.4.5 Addons模塊/322
8.4.6使用反向序列/322
8.5擴展實例:用控制點校正的方法優化OCR網絡/323
8.5.1代碼實現:搭建有控制點校正的STN模型/324
8.5.2控制點在模型預測中的效果/325
8.5.3 ASTER模型/326
8.6開發模型的經驗與技巧/327
8.6.1相關函數/327
8.6.2防範手動初始化權重的陷阱/329
8.6.3測試模型泛化能力過程中的註意事項/331
8.6.4使用Mish激活函數與Ranger優化器進一步提升性能/331