關于我們
書單推薦
新書推薦
|
機器視覺之TensorFlow 2 入門、原理與應用實戰(zhàn)(異步圖書出品)
本書主要介紹了TensorFlow 2在機器視覺中的應用。本書共8章,主要內容包括神經(jīng)網(wǎng)絡的原理,如何搭建開發(fā)環(huán)境,如何在網(wǎng)絡側搭建圖片分類器,如何識別圖片中不同膚色的人數(shù),如何用遷移學習診斷醫(yī)療影像,如何使用Anchor-Free模型檢測文字,如何實現(xiàn)OCR模型,如何優(yōu)化OCR模型。
本書適合機器視覺、深度學習方面的專業(yè)人士閱讀。 1.本書基于TensorFlow 2.0 新版本講解,涵蓋與計算機視覺有關的算法模型,代碼基于Python語言; 2.書中包括模型設計和優(yōu)化、編程實現(xiàn)和調試技巧等實戰(zhàn)知識; 3.結合工業(yè)落地熱門的圖像和視頻處項目,以實戰(zhàn)案例融會貫通所有知識點,注重讀者實踐能力的培養(yǎng); 4.提供源代碼,全彩印刷 基于TensorFlow 2新版本講解工業(yè)應用的圖像和視頻應用 通過識別圖片中不同膚色人數(shù)的案例講解在網(wǎng)絡側搭建圖片分類器 講解了遷移學習在診斷醫(yī)療影像上的應用 講解了使用Anchor-Free模型檢測文字,如實現(xiàn)OCR模型、優(yōu)化OCR模型
李金洪,代碼醫(yī)生工作室高級工程師,大蛇智能網(wǎng)站創(chuàng)始人,精通C、C++、匯編、Python、Java、Go等語言,擅長神經(jīng)網(wǎng)絡、算法、協(xié)議分析、移動互聯(lián)網(wǎng)安全架構等技術,先后擔任過CAD算法工程師、手機架構師、項目經(jīng)理、首席技術官、部門經(jīng)理、資深產(chǎn)品總監(jiān)等職位。在深度學習領域中參與過某移動互聯(lián)網(wǎng)后臺的光學字符識別項目、某娛樂節(jié)目機器人的語音識別和聲紋識別項目及金融領域的若干分類項目。發(fā)布過兩套關于CNTK深度學習框架的視頻教程。
第 一篇基礎知識
第 1章 神經(jīng)網(wǎng)絡的原理/3 1.1 神經(jīng)網(wǎng)絡/4 1.1.1 神經(jīng)元的結構/4 1.1.2 生物神經(jīng)元與計算機中神經(jīng)元模型結構的相似性/6 1.1.3 生物神經(jīng)元與計算機神經(jīng)元模型工作流程的相似性/6 1.1.4 神經(jīng)網(wǎng)絡的形成/6 1.2 神經(jīng)網(wǎng)絡與深度學習的關系/7 1.3 全連接神經(jīng)網(wǎng)絡/7 1.3.1 全連接神經(jīng)網(wǎng)絡的結構/7 1.3.2 實例分析:全連接神經(jīng)網(wǎng)絡中每個神經(jīng)元的作用/8 1.3.3 全連接神經(jīng)網(wǎng)絡的擬合原理/10 1.3.4 全連接神經(jīng)網(wǎng)絡的設計思想/10 1.4 生物界的視覺處理系統(tǒng)/11 1.4.1 大腦對視覺信號的處理流程 /11 1.4.2 大腦對神經(jīng)信號的分級處理 /12 1.5 離散微積分/12 1.5.1 離散微分與離散積分/12 1.5.2 計算機視覺中的離散積分/13 1.6 卷積神經(jīng)網(wǎng)絡/13 1.6.1 卷積的過程/14 1.6.2 1D卷積、2D卷積和3D卷積/14 1.6.3 實例分析:Sobel算子的原理/15 1.6.4 深度神經(jīng)網(wǎng)絡中的卷積核/17 1.6.5 反卷積/18 1.7 卷積分/18 1.8 卷積神經(jīng)網(wǎng)絡與全連接神經(jīng)網(wǎng)絡的關系/19 第 2章 搭建開發(fā)環(huán)境/21 2.1 準備硬件環(huán)境/22 2.2 下載及安裝Anaconda/22 2.2.1 下載Anaconda開發(fā)工具/22 2.2.2 安裝Anaconda開發(fā)工具/23 2.2.3 安裝Anaconda開發(fā)工具時的注意事項/23 2.3 使用Anaconda安裝TensorFlow/24 2.3.1 查看TensorFlow的版本/24 2.3.2 使用Anaconda 安裝TensorFlow/24 2.3.3 TensorFlow的安裝指南/25 2.4 測試顯卡及開發(fā)環(huán)境的一些常用命令/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 用代碼測試安裝環(huán)境/28 2.5 使用Python虛環(huán)境實現(xiàn)多個 TensorFlow版本共存/28 2.5.1 查看當前的Python虛環(huán)境及Python版本/28 2.5.2 創(chuàng)建Python虛環(huán)境/29 2.5.3 在Python虛環(huán)境中安裝TensorFlow 1.x版本/31 2.5.4 進行界面配置/31 2.5.5 使用PyCharm編輯器切換虛環(huán)境/33 2.6 安裝Docker/35 2.6.1 Docker簡介/35 2.6.2 在Dabian系列的Linux系統(tǒng)中安裝Docker/35 2.6.3 在Red Had系列的Linux系統(tǒng)中安裝Docker/36 2.6.4 安裝NVIDIA Docker/38 2.7 安裝TF_Serving模塊/38 2.7.1 在Linux系統(tǒng)中使用apt-get命令安裝TF_Serving模塊/38 2.7.2 在Linux系統(tǒng)中使用Docker安裝TF_Serving模塊/39 第3章 在網(wǎng)絡側搭建圖片分類器/41 3.1基礎概念/42 3.1.1 ResNet50模型與殘差網(wǎng)絡/42 3.1.2 tf.keras接口/43 3.2 代碼環(huán)境及模型準備/44 3.2.1 獲取預訓練模型/44 3.2.2 在本地進行模型部署/45 3.3 代碼實現(xiàn):用ResNet50模型識別圖片所屬類別/45 3.4 使用模型時如何預處理輸入圖片/48 3.4.1 最近鄰法/48 3.4.2 調整圖片尺寸的其他方法/48 3.4.3 數(shù)據(jù)預處理在模型應用中的重要性/49 3.4.4 ImgNet中預訓練模型的數(shù)據(jù)預處理方法/49 3.5 代碼實現(xiàn):將模型導出為支持部署的凍結圖/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 關閉網(wǎng)絡側服務的方法/53 3.7 代碼實現(xiàn):構建URL請求客戶端/54 3.8 網(wǎng)絡側的分類應用/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章 識別圖片中不同膚色的人數(shù)/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 代碼實現(xiàn):定義爬蟲類/66 4.2.3 代碼實現(xiàn):用爬蟲爬取圖片/69 4.3 加工樣本/70 4.3.1 提取人臉信息的具體步驟/70 4.3.2 代碼實現(xiàn):將裁剪圖片加工成訓練樣本/70 4.4 將樣本載入數(shù)據(jù)集/72 4.4.1 tf.data.Dataset接口/72 4.4.2 tf.data.Dataset接口支持的數(shù)據(jù)集變換操作/72 4.4.3 代碼實現(xiàn):構建數(shù)據(jù)集/77 4.5 tf.keras接口的使用/79 4.5.1 調用函數(shù)式API的模式/79 4.5.2 構建子類的模式/83 4.5.3 其他模式及總結/86 4.6 深度卷積神經(jīng)網(wǎng)絡/86 4.6.1 深度卷積神經(jīng)網(wǎng)絡的組成/87 4.6.2 卷積運算/87 4.6.3 池化運算/88 4.6.4 激活函數(shù)ReLU及相關的變體函數(shù)/89 4.7 構建網(wǎng)絡模型/91 4.7.1 設計深度卷積神經(jīng)網(wǎng)絡模型的結構/92 4.7.2 Dropout層的實現(xiàn)與原理/92 4.7.3 Softmax算法及其原理/93 4.7.4 常用的損失算法/94 4.7.5 代碼實現(xiàn):用tf.keras接口搭建卷積神經(jīng)網(wǎng)絡/95 4.7.6 代碼實現(xiàn):定義網(wǎng)絡模型的訓練接口/97 4.7.7 代碼實現(xiàn):可視化模型結構/98 4.8 使用模型/101 4.8.1 代碼實現(xiàn):使用模型對圖片進行識別/101 4.8.2 代碼實現(xiàn):使用模型對實時視頻流進行識別/102 4.8.3 在Linux系統(tǒng)中調用攝像頭并使用模型/104 4.9 卷積神經(jīng)網(wǎng)絡的優(yōu)化方法/106 4.9.1 批量歸一化/106 4.9.2 更好的激活函數(shù)/106 4.9.3 更好的Dropout方法/108 4.9.4 更好的網(wǎng)絡結構/110 4.9.5 更好的卷積核/111 4.9.6 卷積核的分解技巧/114 4.9.7 可分離深度卷積/115 4.9.8 空洞卷積/115 4.10 練習題/116 第5章 用遷移學習診斷醫(yī)療影像/117 5.1 處理樣本/118 5.1.1 醫(yī)療影像的文件格式/118 5.1.2 ChestX-ray14數(shù)據(jù)集/119 5.1.3 在實例中部署數(shù)據(jù)集/121 5.1.4 數(shù)據(jù)增強/121 5.1.5 用tf.keras接口進行數(shù)據(jù)增強的方法/123 5.1.6 代碼實現(xiàn):創(chuàng)建用于數(shù)據(jù)增強的圖像生成器/125 5.1.7 應用圖像生成器的方法/126 5.1.8 代碼實現(xiàn):在數(shù)據(jù)集上應用圖像生成器/129 5.2 分類任務與樣本均衡/134 5.2.1 二分類任務/134 5.2.2 互斥多分類任務與互斥分類任務/134 5.2.3 非互斥分類任務/134 5.2.4 訓練過程中的樣本均衡問題/134 5.2.5 代碼實現(xiàn):為ChestX-ray14 數(shù)據(jù)集進行樣本均衡/135 5.3 遷移訓練CheXNet模型/137 5.3.1 遷移訓練/137 5.3.2 CheXNet模型/137 5.3.3 下載DenseNet121預訓練模型/139 5.3.4 代碼實現(xiàn):用tf.keras接口搭建預訓練模型/139 5.3.5 代碼實現(xiàn):構建模型/141 5.4 編譯模型/141 5.4.1 優(yōu)化器的種類與選。141 5.4.2 tf.keras接口中的損失函數(shù)/143 5.4.3 學習率與退化學習率的設置/143 5.4.4 評估函數(shù)的設置/144 5.4.5 代碼實現(xiàn):為模型添加自定義評估接口/145 5.4.6 代碼實現(xiàn):編譯模型/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 輸出訓練過程中的指定數(shù)據(jù)/151 5.6.2 將訓練過程中的指定數(shù)據(jù)輸出到TensorBoard上/151 5.6.3 保存訓練過程中的檢查點文件/151 5.6.4 設置訓練模型的早停功能/152 5.6.5 設置退化學習率/152 5.6.6 自定義Callbacks方法/152 5.7 添加回調函數(shù)并訓練模型/153 5.7.1 代碼實現(xiàn):添加檢查點回調函數(shù)/153 5.7.2 代碼實現(xiàn):添加退化學習率回調函數(shù)/153 5.7.3 代碼實現(xiàn):訓練模型并可視化訓練過程/154 5.8 使用基于梯度定位的深度網(wǎng)絡可視化方法顯示病灶區(qū)域/156 5.8.1 Grad-CAM方法/156 5.8.2 代碼實現(xiàn):計算病灶區(qū)域/158 5.9 擴展實例:多模型融合/161 5.9.1 多模型融合/161 5.9.2 使用八度卷積來替換模型中的普通卷積/162 5.9.3 使用隨機數(shù)據(jù)增強方法訓練模型/164 5.9.4 使用AdvProp方法訓練模型/164 5.9.5 使用自訓練框架Noisy Student訓練模型/166 5.9.6 關于更多訓練方法的展望/167 5.10 在衣服數(shù)據(jù)集上處理多標簽非互斥分類任務/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 高斯核函數(shù)/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 代碼實現(xiàn):用tf.data.Dataset接口開發(fā)版本兼容的數(shù)據(jù)集/185 6.2.3 代碼實現(xiàn):為尺寸調整后的樣本圖片同步標注坐標/192 6.2.4 代碼實現(xiàn):將標簽改為“中心點、高、寬”的形式/195 6.3 構建堆疊式沙漏網(wǎng)絡模型/198 6.3.1 沙漏網(wǎng)絡模型/198 6.3.2 代碼實現(xiàn): 構建沙漏網(wǎng)絡模型的基礎結構/200 6.3.3 代碼實現(xiàn): 構建沙漏網(wǎng)絡模型的前置結構/201 6.3.4 代碼實現(xiàn): 構建沙漏網(wǎng)絡模型的主體結構/203 6.3.5 代碼實現(xiàn): 搭建堆疊式沙漏網(wǎng)絡模型/206 6.3.6 代碼實現(xiàn): 對沙漏網(wǎng)絡模型進行單元測試/207 6.4 構建CenterNet模型類/208 6.4.1 代碼實現(xiàn): 定義CenterNet模型類并實現(xiàn)初始化方法/208 6.4.2 代碼實現(xiàn): 定義模型的輸入節(jié)點/209 6.4.3 代碼實現(xiàn): 構建模型的網(wǎng)絡結構/211 6.4.4 代碼實現(xiàn): 計算模型的損失值/215 6.4.5 高斯核半徑的計算/220 6.4.6 代碼實現(xiàn): 實現(xiàn)CenterNet模型類的訓練/222 6.5 訓練模型/224 6.5.1 代碼實現(xiàn): 構建數(shù)據(jù)集/224 6.5.2 代碼實現(xiàn): 實例化MyCenterNet類并加載權重參數(shù)/225 6.5.3 代碼實現(xiàn): 訓練模型并保存最優(yōu)結果/226 6.6 使用模型/228 6.6.1 代碼實現(xiàn): 實例化MyCenterNet類/228 6.6.2 代碼實現(xiàn): 讀取圖片并預測/229 6.7 模型開發(fā)過程中的經(jīng)驗與技巧/230 6.7.1 如何用tf.data.Dataset接口返回變長的批次樣本數(shù)據(jù)/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 實例分析:用模型檢測相同的數(shù)據(jù)卻得出不同的結果/237 6.7.12 常用的帶補零的卷積運算/238 6.7.13 使用更好的骨干網(wǎng)模型Res2Net/239 6.8 擴展:對漢字進行區(qū)域檢測/240 6.9 練習題/240 第7章 實現(xiàn)OCR模型——可以從圖片中識別出文字的模型/241 7.1實例:用CNN模型識別驗證碼/242 7.1.1 樣本/242 7.1.2 代碼實現(xiàn):生成自定義字體的驗證碼/242 7.1.3 代碼實現(xiàn):構建輸入數(shù)據(jù)集/243 7.1.4 模型的設計思路/244 7.1.5 代碼實現(xiàn):搭建卷積網(wǎng)絡模型/244 7.1.6 代碼實現(xiàn):搭建多分類輸出層/246 7.1.7 訓練模型并輸出結果/247 7.1.8 原理分析:輸出層的每個分類是否可以與字符序列對應/247 7.1.9 練習題:可視化分類器的關注區(qū)域/248 7.2 通用OCR的實現(xiàn)原理/250 7.3 文字檢測的相關技術/251 7.4 文字識別的相關技術/252 7.5 實例:用CRNN模型識別圖片中的 變長文字/252 7.5.1 制作樣本/253 7.5.2 代碼實現(xiàn):用tf.data.Dataset接口開發(fā)版本兼容的數(shù)據(jù)集/253 7.5.3 CRNN中的RNN/259 7.5.4 代碼實現(xiàn):構建CRNN模型/259 7.5.5 CTC算法與損失計算/264 7.5.6 代碼實現(xiàn):實現(xiàn)損失計算函數(shù)/265 7.5.7 代碼實現(xiàn):實現(xiàn)自定義Callbacks類并重新計算損失值/266 7.5.8 代碼實現(xiàn):訓練CRNN模型/267 7.5.9 代碼實現(xiàn):使用CRNN模型進行預測/270 7.6 開發(fā)模型過程中的經(jīng)驗與技巧/272 7.6.1 在下采樣操作中盡可能用步長為2的操作代替池化/272 7.6.2 實例驗證:全尺寸卷積與全連接完全一樣/273 7.6.3 批量歸一化與激活函數(shù)的位置關系/274 7.6.4 在神經(jīng)網(wǎng)絡模型中是否有必要操作Dropout層/277 7.6.5 實例分析:應該將圖片歸 一 化到[0,1]區(qū)間還是[-1,1]區(qū)間/278 7.6.6 用tf.keras接口編寫組合模型時容易犯的錯誤/279 7.6.7 開發(fā)含CTC算法的代碼的注意事項/282 7.6.8 在使用相同數(shù)據(jù)集的情況下訓練過程的損失值和驗證過程的損失值不同/282 7.6.9 實例驗證:訓練時優(yōu)化器的選。283 第8章 優(yōu)化OCR模型——基于卷積網(wǎng)絡和循環(huán)網(wǎng)絡的優(yōu)化/285 8.1 優(yōu)化OCR模型中的圖像特征處理部分/286 8.1.1 提升深度卷積神經(jīng)網(wǎng)絡魯棒性的思路/286 8.1.2 STN模型/286 8.1.3 STN模型的原理分析/287 8.2 實例:用STN實現(xiàn)MNIST數(shù)據(jù)集的仿射變換/288 8.2.1 樣本/288 8.2.2 代碼實現(xiàn):構建STN層/288 8.2.3 代碼實現(xiàn):測試STNtransformer類/294 8.2.4 代碼實現(xiàn):制作DataSet/297 8.2.5 獨立組件層的原理/298 8.2.6 代碼實現(xiàn):搭建應用ReNorm算法的IC層/299 8.2.7 ReNorm算法的原理/299 8.2.8 代碼實現(xiàn):搭建有STN層的卷積模型/300 8.2.9 代碼實現(xiàn):訓練STN模型/302 8.2.10 代碼實現(xiàn):使用模型進行預測并顯示STN層的結果/303 8.3 實例:用STN層優(yōu)化OCR模型/305 8.3.1 帶STN層的CRNN模型的結構/305 8.3.2 代碼實現(xiàn):搭建有STN層的CRNN模型/306 8.3.3 代碼實現(xiàn):訓練模型并輸出結果/307 8.3.4 優(yōu)化步驟1:使損失不變的模型發(fā)生收斂/308 8.3.5 優(yōu)化步驟2:消除模型在訓練和預測相同數(shù)據(jù)時的效果差異/310 8.3.6 擴展:廣義的STN/313 8.4 對OCR網(wǎng)絡中的序列生成部分進行優(yōu)化/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 擴展實例:用控制點校正的方法優(yōu)化OCR網(wǎng)絡/323 8.5.1 代碼實現(xiàn): 搭建有控制點校正的STN模型/324 8.5.2 控制點在模型預測中的效果/325 8.5.3 ASTER模型/326 8.6 開發(fā)模型的經(jīng)驗與技巧/327 8.6.1 相關函數(shù)/327 8.6.2 防范手動初始化權重的陷阱/329 8.6.3 測試模型泛化能力過程中的注意事項/331 8.6.4 使用Mish激活函數(shù)與Ranger優(yōu)化器進一步提升性能/331
你還可能感興趣
我要評論
|