- 深入理解計算機視覺:在邊緣端構建高效的目標檢測應用
- 張晨然
- 5476字
- 2023-12-13 15:56:56
前言
數字化時代的核心是智能化。隨著人工智能技術的逐步成熟,越來越多的智能化應用不斷涌現,這必然要求信息行業從業人員具備一定的人工智能知識和技術。人工智能最突出的兩個技術應用領域是計算機視覺和自然語言。計算機視覺處理的是圖像或視頻,自然語言處理的是語音或語言。由于計算機視覺采用的CNN神經元結構提出較早,技術方案也較為成熟,因此本書著重介紹計算機視覺技術。
在整個計算機視覺領域,本書重點講述二維和三維目標檢測技術,主要基于兩方面的考慮:一方面,目標檢測技術是當前計算機視覺中最具有應用價值的技術,大到自動駕駛中的行人和車輛識別,小到智慧食堂中的餐盤識別,應用領域非常廣泛,無論是日常生活中的視頻監控,還是專業領域的路面鋪裝質量監控,都是目標檢測技術的具體應用演繹;另一方面,目標檢測神經網絡一般包含骨干網絡(特征提取網絡)、中段網絡(特征融合網絡)、預測網絡(頭網絡)、解碼網絡、數據重組網絡、NMS算法模塊等單元,這些算法模塊單元構成了基于深度學習的神經網絡設計哲學,后續的注意力機制或多模態神經網絡可以被視為這些模塊的不同實現方式。
從計算機視覺的新手到目標檢測專家的進階過程,要求開發者不僅要具備數據集和骨干網絡設計的基本技能,也要具備中段網絡、預測網絡的設計技能,更要具備根據邊緣端部署和云端部署的要求,調整網絡結構的能力。可以說,學會了目標檢測技術,開發者就擁有了計算機視覺的完整技術棧,就具備了一個較為全面的技能去應對其他計算機視覺項目。
本書的編程計算框架采用TensorFlow,它是深度學習領域應用最為廣泛的編程框架,最早由谷歌公司推出,目前已被廣泛用于全球各大人工智能企業的深度學習實驗室和工業生產環境。互聯網上大部分的人工智能前沿成果都是通過TensorFlow實現的。TensorFlow提供比較齊全的數據集支持和快速的數據管道,支持GPU和TPU的硬件加速。TensorFlow支持多種環境部署。開發者可通過TensorFlow Serving工具將模型部署在服務器上,也可通過TensorFlow Lite工具將模型轉換為可在邊緣端推理的TFLite格式。TensorFlow升級到2.X版本之后,可支持EagerMode的立即執行模式,這使得它的編程更加直觀和便于調試。
本書并不執著于講授高深的計算機視覺基礎理論,也不是簡簡單單地堆砌若干代碼樣例,而是采用了“理論”“代碼”“數據流圖”一一對應的書寫方式。理論有利于讀者建立知識的深度,代碼有利于讀者培養動手能力,數據流圖有利于讀者快速領會算法原理。希望本書作者對計算機視覺技術的“抽絲剝繭”,能幫助讀者在建立計算機視覺能力地圖時,不僅具有理論理解的深度,還具有動手實踐的寬度。
最后,為避免混淆,有必要厘清兩個概念——人工智能和深度學習。人工智能是指使計算機應用達到與人類智慧相當的水平,深度學習是指運用深度神經網絡技術使計算機應用達到一定的智能水平。人工智能指向的是“效果”,深度學習指向的是“方法”,二者不能畫等號。實現人工智能目標的方法肯定不止深度學習這一種,還包含傳統的信息化手段和專家邏輯判斷。但以目前的技術水平,深度學習所能達到的智能水平是比較高的,所以大家一般都用人工智能來指代深度學習,也用深度學習來指代人工智能,因此本書對二者不做嚴格的區分。
為什么寫作本書
作者在做以目標檢測為主題的講座報告或技術分享時,發現聽眾普遍對人工智能技術很感興趣,但是又不知從何處下手。目標檢測技術的確涉及多種理工科基礎知識和技能。首先是數學,涉及矩陣計算、概率分布;然后是編程,涉及計算框架API和面向對象的Python等語言的編程技巧;最后是數據處理,涉及數字圖像處理算法和嵌入式系統。每種基礎知識和技能都對應著高等教育中的一門課程,開發者似乎都有所了解,但深究起來又理解得不夠深刻。高等教育偏向于垂直領域的深度,并沒有刻意將跨領域的知識融會貫通。因此,本書在講授目標檢測原理和應用的同時,還深度介紹了涉及的理論知識,希望能夠幫助讀者在理論和實踐上都達到一定的高度。
為避免讀者在閱讀公式和代碼時感覺到抽象,作者在編寫過程中有意著重圍繞較為形象的數據流來闡釋原理,盡量使用數據結構圖來展示算法對數據的處理意圖和邏輯。相信讀者在理解了輸入/輸出數據流結構圖的基礎上,面對公式和代碼時不會感到晦澀。
作者發現許多企業在初期涉足人工智能時,由于對人工智能不甚了解,通常會陷入“模型選型→性能不理想→修改失敗→嘗試其他模型→再次失敗”的怪圈。目前有大量現成的目標檢測代碼可以下載,簡單配置后就能快速成功運行,但作者仍建議讀者從基礎的數據集處理入手,理解目標檢測的數據流圖和損失函數,理解模型量化和模型編譯,才能自由地組裝骨干網絡、中段網絡和預測網絡,才能讓自己設計的神經網絡在邊緣端獨立運行。在實際工作中,我們需要計算機視覺解決的問題不盡相同,我們所使用的邊緣計算硬件也五花八門,但不同模型和不同硬件在本質上有異曲同工之處,作者希望所有人工智能從業人員都能扎實地掌握某種框架下具有代表性的模型的設計和編譯,這樣在計算機視覺領域甚至自然語言領域自然能有所創新。
關于本書作者
作者本科畢業于天津大學通信工程專業,碩士研究生階段就讀于廈門大學,主攻嵌入式系統和數字信號底層算法,具備扎實的理論基礎。作者先后就職于中國電信集團公司和福建省電子信息(集團)有限責任公司,目前擔任福建省人工智能學會的理事和企業工作委員會的主任,同時也擔任谷歌開發者社區、亞馬遜開發者生態的福州區域負責人,長期從事計算機視覺和自然語言基礎技術的研究,積累了豐富的人工智能項目經驗,致力于推動深度學習在交通、工業、民生、建筑等領域的應用落地。作者于2017年獲得高級工程師職稱,擁有多項發明專利。
本書作者GitHub賬號是fjzhangcr。
本書主要內容
本書共5篇,第1篇、第2篇重點介紹以YOLO為代表的一階段目標檢測神經網絡;第3篇、第4篇重點介紹目標檢測神經網絡在云端和邊緣端的部署,其中對邊緣端的量化原理進行了重點介紹;第5篇重點介紹當前較為流行的自動駕駛的數據計算原理和目標檢測。本書實用性非常強,既適合對計算機視覺具有一定了解的高等院校本科生、研究生及具有轉型意愿的軟件工程師入門學習,又適合計算機視覺工程項目研發和運營人員參考閱讀。
第1篇,以知名計算機視覺競賽任務為例,旨在介紹目標檢測應用場景下的基本概念和約定,以及數據標注工具和格式,使讀者具備特征融合網絡、預測網絡的設計能力。對于數據后處理技術則介紹了解碼網絡、數據重組網絡、NMS算法等后處理算法,在此基礎上結合各式各樣的骨干網絡,讀者就可以搭建完整的一階段目標檢測神經網絡模型了。
第2篇,旨在向讀者展示目標檢測神經網絡的訓練全流程。本篇從數據集制作到損失函數設計,從訓練數據監控到NaN或INF異常處理,特別是對不同損失函數的設計,進行了非常詳細的原理性闡述。相比神經網絡設計,損失函數的設計是最具有可解釋性的,也是計算機視覺研究中比較容易出成果的一個研究方向。
第3篇,旨在運用目標檢測神經網絡的訓練成果,搭建完整的目標檢測推理模型。推理模型支持云端部署和邊緣端部署。對于云端部署,以主流的亞馬遜云為例進行介紹;對于邊緣端部署,以谷歌Coral開發板為例,介紹神經網絡量化模型的基礎原理和模型編譯邏輯。
第4篇,結合作者主導過的智慧交通、智慧后勤等項目,旨在介紹實際計算機視覺數據增強技術,以及神經網絡性能評估的原理和具體應用。本篇還結合應用同樣廣泛的算能科技(比特大陸)SE5邊緣計算網關和瑞芯微RK3588邊緣計算系統,介紹實際項目中如何使用邊緣計算硬件加速人工智能的產業化應用。根據邊緣計算硬件特性對神經網絡進行針對性修改,是真正考驗一個開發者對神經網絡理解程度的試金石。跟隨本書介紹熟練掌握2~3款邊緣計算硬件,就能更快速地將計算機視覺應用到實際生產中,在具體應用中創造價值。
第5篇,旨在將讀者引入三維計算機視覺中最重要的應用領域之一:自動駕駛。圍繞KITTI數據集,本篇介紹了自動駕駛數據的計算原理,并重點介紹了PointNet++等多個三維目標檢測神經網絡。
附錄列表說明了本書所參考的目標檢測源代碼、Python運行環境搭建,以及TensorFlow的基本操作。對基本操作有疑問的讀者,可以根據附錄中的說明登錄相關網站進行查閱和提問。
當前市面上有能力提供邊緣計算硬件的廠商眾多,各個廠商對產品性能的描述不盡相同。
第一,開發者應當破除“總算力迷信”,分清單核心算力和核心數量這兩個參數。這是因為目前邊緣計算硬件的標稱算力一般是多核心的累計算力,依靠堆積核心無法提高中小模型的推理速度。
第二,開發者應當認清評測模型的算力開銷,這是因為不同廠商對評測模型的邊界定義不同。例如,大部分廠商的評測模型往往不包含解碼網絡、數據重組網絡和NMS算法,甚至有些不包含預測網絡,通過不同的網絡所測試出的結果是不具備可比性的。
第三,開發者應當重點關注邊緣計算硬件的算子支持情況和生態建設。如果邊緣計算硬件所支持的算子門類齊全,那么意味著模型被迫做出的改動比較小;反之,模型需要進行大量的算子替換甚至根本無法運行。優良的開發者生態意味著遇到問題可以很快搜索到解決方案,加快研發進度。建議在選擇邊緣計算硬件之前先登錄官方網站和GitHub感受不同生態的差異。
第四,開發者應當破除“硬件加速迷信”。邊緣計算硬件有它固有的局限性。例如,幾乎所有的邊緣計算硬件都不擅長處理某些CPU所擅長處理的算子,如Reshape、Transpose等。另外,NMS算法這一類動態尺寸矩陣的計算也是無法通過邊緣計算硬件進行加速的,要解決NMS算法的耗時問題,就需要借鑒自然語言模型的注意力機制,在神經網絡設計層面解決,但要注意注意力機制的資源開銷問題。
如何閱讀本書
本書適合具備一定計算機、通信、電子等理工科專業基礎的本科生、研究生及具有轉型意愿的軟件工程師閱讀。讀者應當具備計算機、通信、電子等基礎知識,學習過高等數學、線性代數、概率論、Python編程、圖像處理等課程或具備這些基礎知識。如果對上述知識有所遺忘也無大礙,本書會幫助讀者進行適當的溫習和回顧,力爭成為一本可供“零基礎”的人閱讀的目標檢測和專業計算的專業書籍。
但這畢竟是一本大厚書,讀者應該怎樣利用這本書呢?
如果讀者希望快速建立目標檢測神經網絡的設計能力,那么建議讀者閱讀本書的第1篇和第2篇。第1篇重點介紹了目標檢測神經網絡的結構性拼裝方法,介紹了除骨干網絡外的中段網絡、預測網絡、解碼網絡、數據重組網絡、NMS算法等。第2篇重點介紹了目標檢測數據集和神經網絡訓練技巧,對于神經網絡訓練中不可避免的NaN和INF現象給出了翔實的原因剖析和解決方案建議。對神經網絡基礎原理不了解或對封裝性較強的骨干網絡感興趣的讀者,可以參考作者的《深入理解計算機視覺實戰全書:關鍵算法解析和深度神經網絡設計》或其他相關書籍。
如果讀者希望了解神經網絡在部署階段的相關知識,那么建議讀者閱讀本書的第3篇和第4篇。第3篇重點介紹了亞馬遜云端部署和Edge TPU邊緣端部署,特別為神經網絡量化模型的基本原理著墨較多,也基于項目實踐介紹了算子替換的具體技巧。第4篇基于作者完成的幾個人工智能項目,介紹了數據增強技術和神經網絡性能評估原理。合理運用數據增強技術,相信能為讀者的應用錦上添花。
如果讀者希望從二維計算機視覺跨入三維計算機視覺甚至自動駕駛領域,建議讀者以本書的第5篇作為入門文檔。第5篇雖然受篇幅限制無法著墨太多,但所介紹的KITTI自動駕駛數據集計算原理和若干三維計算機視覺神經網絡是三維計算機視覺的入門必備知識。
本書遵循理論和實踐相結合的編寫原則。理論和實踐相結合意味著讀者無須提前了解晦澀的理論,直接通過代碼加深理論理解即可。理論和實踐相結合更加凸顯了理論的重要性,數學是工科的基礎,理論永遠走在技術前面。建議讀者務必按照本書的篇章順序,以動手實踐本書所介紹的計算機視覺編程項目為契機,從零開始打好目標檢測的基礎,更快上手其他計算機視覺技術(如三維計算機視覺、圖像分割、圖像注意力機制、圖像文本多模態等)。另外,需要聲明的是,由于本書涉及實際工程知識較多,所以在書中偶有將計算機視覺稱為機器視覺的地方,機器視覺是計算機視覺在實際工程中的應用。
致謝
感謝我的家人,特別是我的兒子,是你平時提出的一些問題,推動我不斷地思考人工智能的哲學和原理。這門充斥著公式和代碼的學科背后其實也有著淺顯直白的因果邏輯。
感謝求學路上的福州格致中學的王恩奇老師,福州第一中學的林立燦老師,天津大學的李慧湘老師,廈門大學的黃聯芬、鄭靈翔老師,是你們當年的督促和鼓勵讓我有能力和勇氣用學到的知識去求索技術的極限。
感謝福建省人工智能學會的周昌樂理事長,谷歌全球機器學習生態系統項目負責人Soonson Kwon,谷歌Coral產品線負責人欒躍,谷歌中國的魏巍、李雙峰,亞馬遜中國的王萃、王宇博,北京算能科技有限公司的范硯池、金佳萍、張晉、侯雨、吳楠、檀庭梁、劉晨曦,以及福州十方網絡科技有限公司,福建米多多網絡科技有限公司,福州樂凡唯悅網絡科技有限公司,還有那些無法一一羅列的默默支持我的專家們,感謝你們一直以來對人工智能產業的關注,感謝你們對我在本書寫作過程中提供的支持和無微不至的關懷。
最后,還要感謝電子工業出版社計算機專業圖書分社社長孫學瑛女士,珠海金山數字網絡科技有限公司(西山居)人工智能技術專家、高級算法工程師黃鴻波的熱情推動,這最終促成了我將內部培訓文檔出版成圖書,讓更多的人看到。你們具有敏銳的市場眼光,你們將傾聽到的廣大致力于投身人工智能領域的開發者的心聲與我分享,堅定了我將技術積淀整理成書稿進行分享的決心。在本書的整理寫作過程中,你們多次邀請專家對本書提出有益意見,對于本書的修改完善起到了重要作用。
由于作者水平有限,書中不足之處在所難免,作者的GitHub賬號為fjzhangcr,敬請專家和讀者批評指正。
張晨然
2023年4月