作 者:李金洪 著
定 價:118
出 版 社:人民郵電出版社
出版日期:2020年08月01日
頁 數:331
裝 幀:平裝
ISBN:9787115539090
1.本書基於TensorFlow 2.0 新版本講解,涵蓋與計算機視覺有關的算法模型,代碼基於Python語言;2.書中包括模型設計和優化、編程實現和調試技巧等實戰知識;3.結合工業落地熱門的圖像和視頻處項目,以實戰案例融會貫通所有知識點,注重讀者實踐能力的培養;4.提供源代碼,全彩印刷基於TensorFlow 2新版本講解工業應用的圖像和視頻應用通過識別圖片中不同膚色人數的案例講解在網絡側搭建圖片分類器講解了遷移學習在診斷醫療影像上的應用講解了使用Anchor-Free模型檢測等
●第 一篇基礎知識第 1章 神經網絡的原理/31.1 神經網絡/41.1.1  的結構/41.1.2 生與計算機模型結構的相似性/61.1.3 生與計算模型工作流程的相似性/61.1.4 神經網絡的形成/61.2 神經網絡與深度學習的關繫/71.3 全連接神經網絡/71.3.1 全連接神經網絡的結構/71.3.2 實例分析:全連接神經網絡中每的作用/81.3.3 全連接神經網絡的擬合原理/101.3.4 全連接神經網絡的設計思想/101.4 生物界的視覺處理繫統/111.4.1 大腦對視覺信號的處理流程 /111.4.2 大腦對神經信號的分級處理 /121.5 離散微積分/121.5.1 離散微分與離散積分/121.5.2 計算機視覺中的離散積分/131.6 卷積神經網絡/131.6.1 卷積的過程/141.6.2 1D卷積、2D卷積和3D卷積/141.6.3 實例分析:Sobel算子的原理/151.6.4 深度神經網絡中的卷積核/171.6.5 反卷積/181.7 卷積分/181.8 卷積神經網絡與全連接神經網絡的關繫/19第 2章 搭建開發環境/212.1 準備硬件環境/222.2 下載及安裝Anaconda/222.2.1 下載Anaconda開發工具/222.2.2 安裝Anaconda開發工具/232.2.3 安裝Anaconda開發工具時的注意事項/232.3 使用Anaconda安裝TensorFlow/242.3.1 查看TensorFlow的版本/242.3.2 使用Anaconda 安裝TensorFlow/242.3.3 TensorFlow的安裝指南/252.4 測試顯卡及開發環境的一些常用命令/252.4.1 使用nvidia-smi命令查看顯卡 信息/252.4.2 nvidia-smi命令失效的解決 辦法/262.4.3 查看CUDA 的版本/272.4.4 查看cuDNN 的版本/272.4.5 用代碼測試安裝環境/282.5 使用Python虛環境實現多個 TensorFlow版本共存/282.5.1 查看當前的Python虛環境及Python版本/282.5.2 創建Python虛環境/292.5.3 在Python虛環境中安裝TensorFlow 1.x版本/312.5.4 進行界面配置/312.5.5 使用PyCharm編輯器切換虛環境/332.6 安裝Docker/352.6.1 Docker簡介/352.6.2 在Dabian繫列的Linux繫統中安裝Docker/352.6.3 在Red Had繫列的Linux繫統中安裝Docker/362.6.4 安裝NVIDIA Docker/382.7 安裝TF_Serving模塊/382.7.1 在Linux繫統中使用apt-get命令安裝TF_Serving模塊/382.7.2 在Linux繫統中使用Docker安裝TF_Serving模塊/39第3章 在網絡側搭建圖片分類器/413.1基礎概念/423.1.1 ResNet50模型與殘差網絡/423.1.2 tf.keras接口/433.2 代碼環境及模型準備/443.2.1 獲取預訓練模型/443.2.2 在本地進行模型部署/453.3 代碼實現:用ResNet50模型識別圖片所屬類別/453.4 使用模型時如何預處理輸入圖片/483.4.1 最近鄰法/483.4.2 調整圖片尺寸的其他方法/483.4.3 數據預處理在模型應用中的重要性/493.4.4 ImgNet中預訓練模型的數據預處理方法/493.5 代碼實現:將模型導出為支持部署的凍結圖/503.5.1 saved_model的用法/503.5.2 調用saved_model模塊為模型添加簽名並保存/503.5.3 運行代碼並生成凍結圖/513.6 在服務器上部署分類器模型/523.6.1 指定模型的版本號/523.6.2 啟動服務容器/523.6.3 關閉網絡側服務的方法/533.7 代碼實現:構建URL請求客戶端/543.8 網絡側的分類應用/553.9 擴展:使用更多預訓練模型進行部署/563.9.1 VGG模型/563.9.2 Inception模型/563.9.3 DenseNet模型/573.9.4 PNASNet模型/573.9.5 EfficientNet模型/583.9.6主流卷積模型的通用結構/60第二篇中級應用第4章 識別圖片中不同膚色的人數/634.1 安裝實例所依賴的模塊/644.1.1 安裝opencv-python模塊/644.1.2 安裝face_recognition模塊/644.1.3 安裝imageio模塊/654.1.4 安裝tqdm模塊/654.2 編寫爬蟲程序並收集樣本/654.2.1 設計爬蟲程序/654.2.2 代碼實現:定義爬蟲類/664.2.3 代碼實現:用爬蟲爬取圖片/694.3 加工樣本/704.3.1 提取人臉信息的具體步驟/704.3.2 代碼實現:將裁剪圖片加工成訓練樣本/704.4 將樣本載入數據集/724.4.1 tf.data.Dataset接口/724.4.2 tf.data.Dataset接口支持的數據集變換操作/724.4.3 代碼實現:構建數據集/774.5 tf.keras接口的使用/794.5.1 調用函數式API的模式/794.5.2 構建子類的模式/834.5.3 其他模式及總結/864.6 深度卷積神經網絡/864.6.1 深度卷積神經網絡的組成/874.6.2 卷積運算/874.6.3 池化運算/884.6.4 激活函數ReLU及相關的變體函數/894.7 構建網絡模型/914.7.1 設計深度卷積神經網絡模型的結構/924.7.2 Dropout層的實現與原理/924.7.3 Softmax算法及其原理/934.7.4 常用的損失算法/944.7.5 代碼實現:用tf.keras接口搭建卷積神經網絡/954.7.6 代碼實現:定義網絡模型的訓練接口/974.7.7 代碼實現:可視化模型結構/984.8 使用模型/1014.8.1 代碼實現:使用模型對圖片進行識別/1014.8.2 代碼實現:使用模型對實時視頻流進行識別/1024.8.3 在Linux繫統中調用攝像頭並使用模型/1044.9 卷積神經網絡的優化方法/1064.9.1 批量歸一化/1064.9.2 更好的激活函數/1064.9.3 更好的Dropout方法/1084.9.4 更好的網絡結構/1104.9.5 更好的卷積核/1114.9.6 卷積核的分解技巧/1144.9.7 可分離深度卷積/1154.9.8 空洞卷積/1154.10 練習題/116第5章 用遷移學習診斷醫療影像/1175.1 處理樣本/1185.1.1 醫療影像的文件格式/1185.1.2 ChestX-ray14數據集/1195.1.3 在實例中部署數據集/1215.1.4 數據增強/1215.1.5 用tf.keras接口進行數據增強的方法/1235.1.6 代碼實現:創建用於數據增強的圖像生成器/1255.1.7 應用圖像生成器的方法/1265.1.8 代碼實現:在數據集上應用圖像生成器/1295.2 分類任務與樣本均衡/1345.2.1 二分類任務/1345.2.2 互斥多分類任務與互斥分類任務/1345.2.3 非互斥分類任務/1345.2.4 訓練過程中的樣本均衡問題/1345.2.5 代碼實現:為ChestX-ray14 數據集進行樣本均衡/1355.3 遷移訓練CheXNet模型/1375.3.1 遷移訓練/1375.3.2 CheXNet模型/1375.3.3 下載DenseNet121預訓練模型/1395.3.4 代碼實現:用tf.keras接口搭建預訓練模型/1395.3.5 代碼實現:構建模型/1415.4 編譯模型/1415.4.1 優化器的種類與選取/1415.4.2 tf.keras接口中的損失函數/1435.4.3 學習率與退化學習率的設置/1435.4.4 評估函數的設置/1445.4.5 代碼實現:為模型添加自定義評估接口/1455.4.6 代碼實現:編譯模型/1475.5 tf.keras接口中訓練模型的方法/1485.5.1 fit方法的使用/1485.5.2 fit_generator方法的使用/1495.6 tf.keras訓練模型中的Callbacks方法/1505.6.1 輸出訓練過程中的指定數據/1515.6.2 將訓練過程中的指定數據輸出到TensorBoard上/1515.6.3 保存訓練過程中的檢查點文件/1515.6.4 設置訓練模型的早停功能/1525.6.5 設置退化學習率/1525.6.6 自定義Callbacks方法/1525.7 添加回調函數並訓練模型/1535.7.1 代碼實現:添加檢查點回調函數/1535.7.2 代碼實現:添加退化學習率回調函數/1535.7.3 代碼實現:訓練模型並可視化訓練過程/1545.8 使用基於梯度定位的深度網絡可視化方法顯示病灶區域/1565.8.1 Grad-CAM方法/1565.8.2 代碼實現:計算病灶區域/1585.9 擴展實例:多模型融合/1615.9.1 多模型融合/1615.9.2 使用八度卷積來替換模型中的普通卷積/1625.9.3 使用隨機數據增強方法訓練模型/1645.9.4 使用AdvProp方法訓練模型/1645.9.5 使用自訓練框架Noisy Student訓練模型/1665.9.6 關於更多訓練方法的展望/1675.10 在衣服數據集上處理多標簽非互斥分類任務/167第三篇高級應用第6章 用Anchor-Free模型檢測 文字/1736.1 基於圖片內容的處理任務/1746.1.1 目標識別任務/1746.1.2 圖片分割任務/1746.1.3 Anchor-Free模型/1756.1.4 非極大值抑制算法/1766.1.5 FCOS模型/1766.1.6 focal loss算法/1776.1.7 CornerNet與CornerNet-Lite模型/1786.1.8 CenterNet模型/1796.1.9 高斯核函數/1796.1.10 Matrix Net模型/1826.1.11 目標檢測中的上采樣與下采樣/1836.1.12 卷積運算與補零間的關繫/1836.2 處理樣本/1846.2.1 樣本/1846.2.2 代碼實現:用tf.data.Dataset接口開發版本兼容的數據集/1856.2.3 代碼實現:為尺寸調整後的樣本圖片同步標注坐標/1926.2.4 代碼實現:將標簽改為“中心點、高、寬”的形式/1956.3 構建堆疊式沙漏網絡模型/1986.3.1 沙漏網絡模型/1986.3.2 代碼實現: 構建沙漏網絡模型的基礎結構/2006.3.3 代碼實現: 構建沙漏網絡模型的前置結構/2016.3.4 代碼實現: 構建沙漏網絡模型的主體結構/2036.3.5 代碼實現: 搭建堆疊式沙漏網絡模型/2066.3.6 代碼實現: 對沙漏網絡模型測試/2076.4 構建CenterNet模型類/2086.4.1 代碼實現: 定義CenterNet模型類並實現初始化方法/2086.4.2 代碼實現: 定義模型的輸入節點/2096.4.3 代碼實現: 構建模型的網絡結構/2116.4.4 代碼實現: 計算模型的損失值/2156.4.5 高斯核半徑的計算/2206.4.6 代碼實現: 實現CenterNet模型類的訓練/2226.5 訓練模型/2246.5.1 代碼實現: 構建數據集/2246.5.2 代碼實現: 實例化MyCenterNet類並加載權重參數/2256.5.3 代碼實現: 訓練模型並保存很優結果/2266.6 使用模型/2286.6.1 代碼實現: 實例化MyCenterNet類/2286.6.2 代碼實現: 讀取圖片並預測/2296.7 模型開發過程中的經驗與技巧/2306.7.1 如何用tf.data.Dataset接口返回變長的批次樣本數據/2306.7.2 在模型訓練過程中處理損失值為None的思路/2316.7.3 實例分析:由於計算方法的問題,引起損失值為None/2326.7.4 使用tf.data.Dataset接口對齊填充時的注意事項/2336.7.5 實例分析:由於模型輸出的問題,引起損失值為None/2336.7.6 實例分析:由於學習率過大,引起損失值為None/2346.7.7 歸一化權重設置不當會使模型停止收斂/2356.7.8 實例分析:歸一化權重設置不當會使模型停止收斂/2356.7.9 退化學習率使用不當會使模型停止收斂/2366.7.10 如何避免模型在預測和訓練時處理的樣本相同卻得到不同的結果/2376.7.11 實例分析:用模型檢測相同的數據卻得出不同的結果/2376.7.12 常用的帶補零的卷積運算/2386.7.13 使用更好的骨干網模型Res2Net/2396.8 擴展:對漢字進行區域檢測/2406.9 練習題/240第7章 實現OCR模型——可以從圖片中識別出文字的模型/2417.1實例:用CNN模型識別驗證碼/2427.1.1 樣本/2427.1.2 代碼實現:生成自定義字體的驗證碼/2427.1.3 代碼實現:構建輸入數據集/2437.1.4 模型的設計思路/2447.1.5 代碼實現:搭建卷積網絡模型/2447.1.6 代碼實現:搭建多分類輸出層/2467.1.7 訓練模型並輸出結果/2477.1.8 原理分析:輸出層的每個分類是否可以與字符序列對應/2477.1.9 練習題:可視化分類器的關注區域/2487.2 通用OCR的實現原理/2507.3 文字檢測的相關技術/2517.4 文字識別的相關技術/2527.5 實例:用CRNN模型識別圖片中的 變長文字/2527.5.1 制作樣本/2537.5.2 代碼實現:用tf.data.Dataset接口開發版本兼容的數據集/2537.5.3 CRNN中的RNN/2597.5.4 代碼實現:構建CRNN模型/2597.5.5 CTC算法與損失計算/2647.5.6 代碼實現:實現損失計算函數/2657.5.7 代碼實現:實現自定義Callbacks類並重新計算損失值/2667.5.8 代碼實現:訓練CRNN模型/2677.5.9 代碼實現:使用CRNN模型進行預測/2707.6 開發模型過程中的經驗與技巧/2727.6.1 在下采樣操作中盡可能用步長為2的操作代替池化/2727.6.2 實例驗證:全尺寸卷積與全連接接近一樣/2737.6.3 批量歸一化與激活函數的位置關繫/2747.6.4 在神經網絡模型中是否有必要操作Dropout層/2777.6.5 實例分析:應該將圖片歸 一 化到[0,1]區間還是[-1,1]區間/2787.6.6 用tf.keras接口編寫組合模型時容易犯的錯誤/2797.6.7 開發含CTC算法的代碼的注意事項/2827.6.8 在使用相同數據集的情況下訓練過程的損失值和驗證過程的損失值不同/2827.6.9 實例驗證:訓練時優化器的選取/283第8章 優化OCR模型——基於卷積網絡和循環網絡的優化/2858.1 優化OCR模型中的圖像特征處理部分/2868.1.1 提升深度卷積神經網絡魯棒性的思路/2868.1.2 STN模型/2868.1.3 STN模型的原理分析/2878.2 實例:用STN實現MNIST數據集的仿射變換/2888.2.1 樣本/2888.2.2 代碼實現:構建STN層/2888.2.3 代碼實現:測試STNtransformer類/2948.2.4 代碼實現:制作DataSet/2978.2.5 獨立組件層的原理/2988.2.6 代碼實現:搭建應用ReNorm算法的IC層/2998.2.7 ReNorm算法的原理/2998.2.8 代碼實現:搭建有STN層的卷積模型/3008.2.9 代碼實現:訓練STN模型/3028.2.10 代碼實現:使用模型進行預測並顯示STN層的結果/3038.3 實例:用STN層優化OCR模型/3058.3.1 帶STN層的CRNN模型的結構/3058.3.2 代碼實現:搭建有STN層的CRNN模型/3068.3.3 代碼實現:訓練模型並輸出結果/3078.3.4 優化步驟1:使損失不變的模型發生收斂/3088.3.5 優化步驟2:消除模型在訓練和預測相同數據時的效果差異/3108.3.6 擴展:廣義的STN/3138.4 對OCR網絡中的序列生成部分進行優化/3158.4.1 多頭注意力與自注意力機制/3158.4.2 用多頭自注意力機制模型替換RNN模型/3168.4.3 用注意力機制改善RNN模型/3188.4.4 用seq2seq框架改善輸出序列/3218.4.5 Addons模塊/3228.4.6 使用反向序列/3228.5 擴展實例:用控制點校正的方法優化OCR網絡/3238.5.1 代碼實現: 搭建有控制點校正的STN模型/3248.5.2 控制點在模型預測中的效果/3258.5.3 ASTER模型/3268.6 開發模型的經驗與技巧/3278.6.1 相關函數/3278.6.2 防範手動初始化權重的陷阱/3298.6.3 測試模型泛化能力過程中的注意事項/3318.6.4 使用Mish激活函數與Ranger優化器進一步提升性能/331
本書主要介紹了TensorFlow 2在機器視覺中的應用。本書共8章,主要內容包括神經網絡的原理,如何搭建開發環境,如何在網絡側搭建圖片分類器,如何識別圖片中不同膚色的人數,如何用遷移學習診斷醫療影像,如何使用Anchor-Free模型檢測文字,如何實現OCR模型,如何優化OCR模型。本書適合機器視覺、深度學習方面的專業人士閱讀。
李金洪 著
李金洪,代碼醫生工作室高級工程師,大蛇智能網站創始人,精通C、C++、彙編、Python、Java、Go等語言,擅長神經網絡、算法、協議分析、移動互聯網安全架構等技術,先後擔任過CAD算法工程師、手機架構師、項目經理、首席技術官、部門經理、資深產品總監等職位。在深度學習領域中參與過某移動互聯網後臺的光學字符識別項目、某娛樂節目機器人的語音識別和聲紋識別項目及金融領域的若干分類項目。發布過兩套關於CNTK深度學習框架的視頻教程。