描述
內容簡介
※本書結構 本書共5篇,第1篇、第2篇重點介紹以YOLO為代表的一階段物件辨識神經網路;第3篇、第4篇重點介紹物件辨識神經網路在雲端和邊緣端的部署,其中對邊緣端的量化原理進行了重點介紹;第5篇重點介紹當前較為流行的自動駕駛的資料計算原理和物件辨識。本書實用性非常強,既適合對電腦視覺具有一定了解的高等院校大學生、所究所學生及具有轉型意願的軟體工程師入門學習,又適合電腦視覺工程項目研發和營運人員參考閱讀。第1篇,以知名電腦視覺競賽任務為例,旨在介紹物件辨識應用場景下的基本概念和約定,以及資料標注工具和格式,讓讀者具備特徵融合網路、預測網路的設計能力。對於資料後處理技術則介紹了解碼網路、資料重網路拓樸路、NMS演算法等後處理演算法,在此基礎上結合各式各樣的骨幹網路,讀者就可以架設完整的一階段物件辨識神經網路模型了。 第2篇,旨在介紹物件辨識神經網路的訓練全流程。本篇從資料集製作到損失函式設計,從訓練資料監控到NaN或INF異常處理,特別是對不同損失函式的設計,進行了非常詳細的原理性闡述。相比神經網路設計,損失函式的設計是最具有可解釋性的,也是電腦視覺研究中比較容易出成果的研究方向。 第3篇,旨在運用物件辨識神經網路的訓練成果,架設完整的物件辨識推理模型。推理模型支援雲端部署和邊緣端部署。對於雲端部署,以主流的亞馬遜雲端為例介紹;對於邊緣端部署,以GoogleCoral開發板為例,介紹神經網路量化模型的基礎原理和模型編譯邏輯。 第4篇,結合作者主導過的智慧交通、智慧後勤等專案,旨在介紹實際電腦視覺資料增強技術,以及神經網路性能評估的原理和具體應用。本篇還結合應用同樣廣泛的算能科技(比特中國)SE5邊緣計算閘道和瑞芯微RK3588邊緣計算系統,介紹實際專案中如何使用邊緣計算硬體加速人工智慧的產業化應用。根據邊緣計算硬體特性對神經網路進行針對性修改,是真正考驗一個開發者對神經網路理解程度的試金石。跟隨本書介紹熟練掌握2~3款邊緣計算硬體,就能更快速地將電腦視覺應用到實際生產中,在具體應用中創造價值。 第5篇,旨在將讀者引入三維電腦視覺中最重要的應用領域之一:自動駕駛。圍繞KITTI資料集,本篇介紹了自動駕駛資料的計算原理,並重點介紹了PointNet++等多個三維物件辨識神經網路。 附錄列表說明了本書所參考的物件辨識原始程式碼、Python運行環境架設,以及TensorFlow的基本操作。對基本操作有疑問的讀者,可以根據附錄中的說明登入相關網站進行查閱和提問。 |
作者簡介
※作者簡介
張晨然 作者大學畢業於天津大學通訊工程專業,碩士研究所學生階段就讀於廈門大學,主攻嵌入式系統和數位訊號底層演算法,具備紮實的理論基礎。
作者先後就職於中國電信集團公司和福建省電子資訊(集團)有限責任公司,目前擔任福建省人工智慧學會的理事和企業工作委員會的主任,同時也擔任Google開發者社區、亞馬遜開發者生態的福州區域負責人,長期從事電腦視覺和自然語言基礎技術的研究,累積了豐富的人工智慧專案經驗,致力於推動深度學習在交通、工業、民生、建築等領域的應用落地。作者於2017年獲得高級工程師職稱,擁有多項發明專利。
本書作者GitHub帳號是fjzhangcr。 |
目錄
※目錄
第1篇 一階段物件辨識神經網路的結構設計 第1章 物件辨識的競賽和資料集 1.1電腦視覺座標系的約定和概念 1.1.1 圖型的座標系約定 1.1.2 矩形框的描述方法約定 1.2 PASCAL VOC競賽和資料集 1.2.1 PASCAL VOC競賽任務和資料集簡介 1.2.2 PASCAL VOC2007資料集探索 1.3 MS COCO挑戰賽和資料集 1.3.1 MS COCO挑戰賽的競賽任務 1.3.2 MS COCO資料集簡介 1.4 物件辨識標注的解析和統計 1.4.1 XML檔案的格式 1.4.2 XML檔案解析和資料均衡性統計 第2章 物件辨識神經網路整體說明 2.1 幾個著名的物件辨識神經網路 2.1.1 R-CNN家族神經網路簡介 2.1.2 YOLO和SSD神經網路簡介 2.1.3 CenterNet神經網路簡介 2.1.4 U-Net神經網路簡介 2.2 物件辨識神經網路分類和高階API資源 2.3 矩形框的交並比評價指標和實現 第3章 一階段物件辨識神經網路的特徵融合和中段網路 3.1 一階段物件辨識神經網路的整體結構 3.2 一階段物件辨識神經網路的若干中段網路介紹 3.2.1 單向融合的中段網路 3.2.2 簡單雙向融合的中段網路 3.2.3 複雜雙向融合的中段網路 3.3 不同融合方案中段網路的關係和應用 3.4 YOLO的多尺度特徵融合中段網路案例 3.4.1 YOLOV3的中段網路及實現 3.4.2 YOLOV4的中段網路PANet及實現 3.4.3 YOLOV3-tiny和YOLOV4-tiny版本的中段網路及實現 3.5 神經網路輸出的解碼 3.5.1 融合特徵圖的幾何含義 3.5.2 矩形框中心點座標的解碼 3.5.3 矩形框寬度和高度的解碼 3.5.4 前背景機率和分類機率的解碼 3.5.5 矩形框角點座標和解碼函式整體輸出 第4章 一階段物件辨識神經網路典型案例——YOLO解析 4.1 YOLO家族物件辨識神經網路簡介 4.2 先驗錨框和YOLO神經網路的檢測想法 4.2.1 用人為設定方式找到的先驗錨框 4.2.2 用聚類回歸方式找到的先驗錨框 4.2.3 YOLO的先驗錨框編號 4.2.4 YOLO的XYSCALE和縮放比參數 4.3 建立YOLO神經網路 4.3.1 根據選擇確定YOLO神經網路參數 4.3.2 建立骨幹網路、中段網路和預測網路 4.3.3 加上解碼網路後建立完整的YOLO模型 4.4 YOLO神經網路的遷移學習和權重載入 4.4.1 骨幹網路關鍵層的起止編號 4.4.2 中段網路和預測網路關鍵層的起止編號 4.4.3 YOLO模型的權重載入 4.5 原版YOLO模型的預測 4.5.1 原版YOLO模型的建立和參數載入 4.5.2 神經網路的輸入/輸出資料重組 4.6 NMS演算法的原理和預測結果視覺化 4.6.1 傳統NMS演算法原理 4.6.2 NMS演算法的變種 4.6.3 預測結果的篩選和視覺化 4.7 YOLO模型的多個衍生變種簡介 4.8 YOLO模型的發展與展望 第2篇 YOLO神經網路的損失函式和訓練 第5章 將資料資源製作成標準TFRecord資料集檔案 5.1 資料資源的載入 5.2 資料資源的解析和提取 5.3 TFRecord資料集檔案的製作 5.4 單樣本的example物件製作 5.5 遍歷全部樣本製作完整資料集 5.6 從資料集提取樣本進行核對 第6章 資料集的後續處理 6.1 資料集的載入和打包 6.1.1 資料集的載入和矩陣化 6.1.2 圖型矩陣尺寸的標準化 6.1.3 真實矩形框標注矩陣尺寸的標準化 6.1.4 資料集的打包處理 6.2 將原始資料集打包為可計算資料集 6.2.1 計算真實矩形框與先驗錨框的匹配度排名 6.2.2 找到真實矩形框所對應的網格下的先驗錨框 6.2.3 可計算資料集測試 第7章 一階段物件辨識的損失函式的設計和實現 7.1 損失函式框架和輸入資料的合理性判別 7.2 真實資料和預測資料的對應和分解 7.3 預測矩形框的前背景歸類和權重分配 7.4 預測矩形框的誤差度量 7.4.1 用中心點表示的位置誤差 7.4.2 用寬度和高度表示的位置誤差 7.4.3 用通用交並比表示的矩形框誤差 7.4.4 用距離交並比表示的矩形框誤差 7.4.5 用完整交並比表示的矩形框誤差 7.4.6 用交並比量化矩形框預測誤差的實踐 7.5 前景和背景的預測誤差 7.5.1 前景誤差和背景誤差的定義 7.5.2 樣本均衡原理和Focal-Loss應用 7.6 分類預測誤差 7.7 總誤差的合併和數值合理性確認 第8章 YOLO神經網路的訓練 8.1 資料集和模型準備 8.1.1 參數配置 8.1.2 資料集前置處理 8.1.3 模型參數載入和凍結 8.2 動態模式訓練 8.2.1 監控指標的設計和日誌儲存 8.2.2 動態模式下神經網路的訓練和偵錯 8.3 訓練中非法數值的監控和偵錯 8.3.1 發現和監控非法數值計算結果 8.3.2 計算結果出現非法數值的原因和對策 8.4 靜態模式訓練和TensorBoard監控 第3篇 物件辨識神經網路的雲端和邊緣端部署 第9章 一階段物件辨識神經網路的雲端訓練和部署 9.1 一階段物件辨識神經網路的推理模型設計 9.1.1 一階段物件辨識神經網路的推理形態 9.1.2 推理場景下的資料重網路拓樸路 9.1.3 構造推理場景下的YOLO模型函式 9.1.4 構造和測試YOLO推理模型 9.2 物件辨識推理模型的雲端部署 9.2.1 亞馬遜EC2雲端運算實例選型 9.2.2 使用雲端伺服器部署模型並回應推理請求 9.3 在亞馬遜SageMakerStudio上訓練雲端運算模型 第10章 神經網路的INT8全整數量化原理 10.1 神經網路量化模型的基本概念 10.1.1 神經網路量化模型速覽和視覺化 10.1.2 浮點數值的量化儲存和計算原理 10.2 神經網路量化模型的製作和分析 10.2.1 運算元的映射和合併 10.2.2 量化參數搜索和代表資料集 10.2.3 TFLite量化模型的運算元和張量分析 10.3 量化性能分析和量化模型的逐層偵錯 10.3.1 量化信噪比分析原理 10.3.2 量化模型的單層誤差偵錯 10.3.3 量化模型的誤差累積偵錯 10.4 不支援運算元的替換技巧 10.4.1 大動態範圍非線性運算元替換原理 10.4.2 大動態範圍非線性運算元替換效果 第11章 以YOLO和Edge TPU為例的邊緣計算實戰 11.1 TensorFlow模型的量化 11.1.1 量化感知訓練獲得INT8整數模型 11.1.2 訓練後量化獲得INT8整數模型 11.2 神經網路模型的編譯 11.2.1 模型編譯的工作原理 11.2.2 在Edge TPU上部署模型的注意事項 11.3 YOLO物件辨識模型的量化和編譯 11.3.1 YOLO變種版本選擇和骨幹網路修改 11.3.2 針對硬體限制進行解碼網路的修改 11.3.3 預測矩陣的整理重組 11.3.4 YOLO推理模型的建立 11.3.5 YOLO模型的量化 11.3.6 量化模型的測試和信噪比分析 11.4 YOLO量化模型的編譯和邊緣端部署 11.4.1 量化模型轉為編譯模型 11.4.2 撰寫邊緣端編譯模型推理程式 第4篇 個性化資料增強和物件辨識神經網路性能測試 第12章 個性化物件辨識資料集處理 12.1 農村公路佔道資料的物件辨識應用 12.1.1 專案資料背景 12.1.2 資料的前置處理 12.2 資料的增強 12.2.1 資料增強技術的概念和效果 12.2.2 基於空間變換的資料增強方法 12.2.3 基於顏色空間的資料增強方法 12.2.4 其他圖像資料的增強手法 12.2.5 圖像資料集的增強工具和探索工具 12.3 使用Albumentations進行資料增強 12.3.1 Albumentations的安裝和使用 12.3.2 幾何資料增強管道的配置 12.3.3 使用資料管道處理並儲存資料 12.3.4 像素資料增強管道的配置 12.3.5 增強資料集的運用 第13章 模型性能的定量測試和決策設定值選擇 13.1 神經網路性能量化的基本概念 13.1.1 神經網路預測的混淆矩陣 13.1.2 神經網路量化評估和P-R曲線 13.1.3 多分類物件辨識場景和平均精確率平均值 13.1.4 F分數評估方法 13.2 餐盤辨識神經網路性能測試案例 13.2.1 專案背景 13.2.2 提取全部真實資料和預測結果 13.2.3 模擬不同決策設定值下的精確率和召回率 第14章 使用邊緣計算閘道進行多路攝影機物件辨識 14.1 邊緣計算閘道的整體結構 14.1.1 核心TPU組件 14.1.2 計算卡和模組 14.1.3 下位機的作業系統 14.1.4 下位機的開發環境簡介 14.2 開發環境準備 14.2.1 上位機安裝Docker 14.2.2 上位機加載鏡像和SDK開發套件 14.2.3 神經網路工具鏈和主要用途 14.2.4 針對TensorFlow模型的編譯方法 14.3 浮點32位元模型部署的全流程 14.3.1 訓練主機將Keras模型轉為單pb模型檔案 14.3.2 上位機將單pb模型檔案編譯為bmodel模型檔案 14.3.3 下位機讀取和探索bmodel模型檔案 14.3.4 下位機使用bmodel模型檔案進行推理 14.4 邊緣端全整數量化模型部署 14.4.1 在上位機Docker內製作代表資料集 14.4.2 在上位機Docker內生成fp32umodel模型檔案 14.4.3 手動增加fp32umodel模型檔案的輸入層映射運算元 14.4.4 對fp32umodel模型檔案進行最佳化 14.4.5 在上位機Docker內將fp32umodel模型檔案編譯為int8umodel模型檔案 14.4.6 umodel模型檔案的偵錯技巧 14.5模型的編譯和部署 14.5.1 上位機將int8umodel模型檔案編譯為bmodel模型檔案 14.5.2 全整數量化int8bmodel模型檔案的邊緣端推導和測試 14.5.3 編譯模型在邊緣計算閘道上的性能測試 第15章 邊緣計算開發系統和RK3588 15.1 RK3588邊緣推理開發系統結構 15.1.1 開發板和核心晶片架構 15.1.2 開發板作業系統和偵錯環境 15.2開發工具鏈和神經網路模型部署 15.2.1 上位機開發環境配置 15.2.2 上位機的模型轉換 15.2.3 下位機使用編譯模型進行推理 15.2.4 RK3588的運算元偵錯技巧 第5篇 三維電腦視覺與自動駕駛 第16章 三維物件辨識和自動駕駛 16.1 自動駕駛資料集簡介 16.2 KITTI資料集計算原理 16.3 自動駕駛的點雲特徵提取 附錄A 官方程式引用說明 附錄B 本書運行環境架設說明 附錄C TensorFlow矩陣基本操作 |
序
數位化時代的核心是智慧化。隨著人工智慧技術的逐步成熟,越來越多的智慧化應用不斷湧現,這必然要求資訊行業從業人員具備一定的人工智慧知識和技術。人工智慧最突出的兩個技術應用領域是電腦視覺和自然語言。電腦視覺處理的是圖型或視訊,自然語言處理的是語音或語言。由於電腦視覺採用的CNN神經元結構提出較早,技術方案也較為成熟,因此本書著重介紹電腦視覺技術。
在整個電腦視覺領域,本書重點說明二維和三維物件辨識技術,主要基於兩方面的考慮:一方面,物件辨識技術是當前電腦視覺中最具有應用價值的技術,大到自動駕駛中的行人和車輛辨識,小到智慧食堂中的餐盤辨識,應用領域非常廣泛,無論是日常生活中的視訊監控,還是專業領域的路面鋪裝品質監控,都是物件辨識技術的具體應用演繹;另一方面,物件辨識神經網路一般包含骨幹網路(特徵提取網路)、中段網路(特徵融合網路)、預測網路(頭網路)、解碼網路、資料重網路拓樸路、NMS演算法模組等單元,這些演算法模組單元組成了基於深度學習的神經網路設計哲學,後續的注意力機制或多模態神經網路可以被視為這些模組的不同實現方式。
從電腦視覺的新手到物件辨識專家的進階過程,要求開發者不僅要具備資料集和骨幹網路設計的基本技能,也要具備中段網路、預測網路的設計技能,更要具備根據邊緣端部署和雲端部署的要求,調整網路結構的能力。可以說,學會了物件辨識技術,開發者就擁有了電腦視覺的完整技術堆疊,就具備了一個較為全面的技能去應對其他電腦視覺專案。
本書的程式設計計算框架採用TensorFlow,它是深度學習領域應用最為廣泛的程式設計框架,最早由Google公司推出,目前已被廣泛用於全球各大人工智慧企業的深度學習實驗室和工業生產環境。網際網路上大部分的人工智慧前端成果都是透過TensorFlow實現的。TensorFlow提供比較齊全的資料集支援和快速的資料管道,支援GPU和TPU的硬體加速。TensorFlow支援多種環境部署。開發者可透過TensorFlow Serving工具將模型部署在伺服器上,也可透過TensorFlow Lite工具將模型轉為可在邊緣端推理的TFLite格式。TensorFlow升級到2.X版本之後,可支援EagerMode的立即執行模式,這使得它的程式設計更加直觀和便於偵錯。
本書並不執著於講授高深的電腦視覺基礎理論,也不是簡簡單單地堆砌若干程式樣例,而是採用了「理論」「程式」「資料流程圖」一一對應的書寫方式。理論有利於讀者建立知識的深度,程式有利於讀者培養動手能力,資料流程圖有利於讀者快速領會演算法原理。希望本書作者對電腦視覺技術的「抽絲剝繭」,能幫助讀者在建立電腦視覺能力地圖時,不僅具有理論理解的深度,還具有動手實踐的寬度。
最後,為避免混淆,有必要厘清兩個概念——人工智慧和深度學習。人工智慧是指使電腦應用達到與人類智慧相當的水準,深度學習是指運用深度神經網路技術使電腦應用達到一定的智慧水準。人工智慧指向的是「效果」,深度學習指向的是「方法」,二者不能畫等號。實現人工智慧目標的方法肯定不止深度學習這一種,還包含傳統的資訊化手段和專家邏輯判斷。但以目前的技術水準,深度學習所能達到的智慧水平是比較高的,所以大家一般都用人工智慧來指代深度學習,也用深度學習來指代人工智慧,因此本書對二者不做嚴格的區分。 |