談談嵌入式視覺的幾個典型應用

引言

如何做AI視覺應用的嵌入式部署分為硬體選型,軟體框架和最佳化的選擇,模型演算法的設計三大板塊。

AI視覺應用雲端部署VS嵌入式端部署

談談嵌入式視覺的幾個典型應用

大家其實對於AI深度學習已經很熟悉了,我們在伺服器上就可以用GPU或者Tensorflow來做訓練,訓練完之後要做推理計算。推理最簡單的一個方法就是放在雲端,用雲端推理的板卡比如NVIDIA的T4或者國產NPU做推理計算。在雲端,推理計算是廣泛使用的。百度的API或者Face++等雲端API是在前端探測資料,把影片影象傳回雲端,雲端做完處理返回結果,這就是雲端的部署。

嵌入式部署其實和雲端部署很相似,只不過是在最後把模型傳送到了嵌入式裝置上(手機和無人機),那它是在手機和無人機上來做推理計算,這就是我們認為嵌入式部署的AI使用模型情況。

1。1嵌入式視覺典型應用

談談嵌入式視覺的幾個典型應用

列舉幾個典型的嵌入式視覺應用。

第一個是輔助駕駛或者自動駕駛,在駕駛的車上會有AI處理加速的模組,應用了AI演算法。在這種場景下做AI的嵌入式部署主要是為了環境的感知、目標的檢測追蹤或者在無人機上可能會做視覺或鐳射的SLAM,為了在嵌入式端實現高實時性。

第二個是手機的美顏和AR。預覽和編輯操作都是在手機本地完成的,它其實是完成了更好的互動性,給使用者的體驗性更好。從另一方面對於手機APP公司來說,是更加節省成本的,比如你編輯一段影片,這裡的AR操作返回給伺服器來做,成本是很高的。

第三個是邊緣智慧化盒子,優勢是相容了已有的攝像頭。在安防場景和智慧社群裡已有很多傳統的攝像頭,但使用邊緣智慧化盒子,能夠處理多路且相容已有攝像頭,從節省成本上來說也是一個好的選擇。

嵌入式AI硬體選型

2。1Intel CPU或NVIDIA GPU

談談嵌入式視覺的幾個典型應用

嵌入式AI的硬體是怎麼選型的?

第一個常見的型別是工控機,用X86的CPU加上NVIDIA的GPU,這種好處就是生態分層成熟。如果是純CPU的應用,深度學習一類的應用算力可能會偏弱。

第二個是NVIDIA的TX2和Nano系列,NVIDIA對於嵌入式的AI有專門的這種SoC的晶片,也出了很多板卡,相對成本低,算力也比伺服器低。GPU支援了FP16和FP32的精度,對於嵌入式部署是很有幫助的,意味著模型精度和伺服器上訓練的精度幾乎能保持一致。伺服器都是用32位做訓練,如果說其他的NPU轉換成Int8的話,必然會造成精度的損失。唯一的弱點就是主CPU偏弱,就只是ARM Cortex-A57的四核或多核。如果放在無人機上使用,無人機應用很多是很複雜的,不是深度學習或GPU就能加速的,這裡用ARM Cortex-A57可能就會存在問題。這實際上是NVIDIA的嵌入式系列面臨的一些挑戰,主要是要評估組合效能是不是好。

2。2AMD APU

談談嵌入式視覺的幾個典型應用

目前AMD的處理器用的偏少。它的CPU比較好,能夠對標到i7主屏比較高的CPU ,GPU也不錯,比TX2的效能要提高2倍,整體效能還可以,也可以利用X86上面的生態,存在的問題是它的程式設計需要OpenCL,這比CUDA要弱,就是它存在深度學習的部署門檻。另外就是它這款盒子的功耗偏高,比NVIADA的TX2或Nano高一倍,但效能加強了。利用AMD的APU盒子放在駕校車上是比較好用的。

2。3主流嵌入式AI開發板

談談嵌入式視覺的幾個典型應用

大家也知道具備NPU的SoC晶片其實是越來越多的,之前是以加速卡的形式來存在,比如一個USB的NPU加速棒插在已有裝置上。如果你是做嵌入式的部署,不要選擇這種分離式的USB加速裝置,因為它穩定性較差,另外資料傳輸比較麻煩。儘量選擇整合在一起的帶NPU的SoC,這是第一選擇。目前帶NPU的SoC也是越來越多的,廠商也越來越多。在華為晶片被禁之前,市面上主要的選擇都是華為系列,大概有四款帶NPU的,從低端的0。5T-1T算力,2T-4T算力都有覆蓋。它的好處是成本相比較低,比NVIDIA的同樣算力成本要低很多;第二個是它的ISP挑的比較好。下面的都是可以替換華為系列的,可以選擇瑞芯微的RK3399、RK1808、RK3588或者全志等。

目前的NPU基本都是8bit量化,在8bit量化下模型精度是如何保證的,工具鏈的成熟度是一個問題,除此之外就是算力的選擇。如果說想替換華為晶片,要求其他選型是效能超過2T算力,ISP不錯,價效比不錯的SoC選擇目前是比較少的,至少在去年底來看還沒有。

談談嵌入式視覺的幾個典型應用

第三塊常見的開發板工作是用FPGA來做AI計算,主要用在工業場景下,實時性更好。比如在野外、工業級的無人機或者研究所機構會要求國產FPGA達到毫秒級左右的實時性。這部分的FPGA基本上是要自研AI的加速軟核。圖中是我們自研的一個AI加速軟核,它已經支援了很多常見的FPGA,AI加速軟盒基本上結構都是這樣。

談談嵌入式視覺的幾個典型應用

這部分IP是一個軟核的IP,部署在FPGA資源上,核心部分有一個計算陣列,完成卷積操作。

如果NPU公司卷積只做一個3x3,就意味著這NPU是用不了的,雖然核心部分加速的很快,但是其他部分必須也是搬到NPU上才能整體的做嵌入式的部署和加速,所以就會需要有相應的部署模組緩衝資料。資料搬運需要把它從記憶體搬運到晶片的快取上,控制邏輯相當於發指令的,控制排程、計算部件是怎麼執行的,基本上NPU都是這幾個部件組成的,具體的差別是在於並行度的方式不同,可能加了不同的加速部件來得到更好的效能。對於NPU來說第一個要考查是卷積效能到底怎麼樣,第二個運算元是不是能支援的更多,支援的運算元更多意味著在CPU端所跑的運算元相對少一些而且支援的模型更多。

談談嵌入式視覺的幾個典型應用

這個是我們實際用FPGA做了一些專案,做無人機,檢測情況和可見光的處理,都是比較常用的。

談談嵌入式視覺的幾個典型應用

在IoT級別的AI操作,我舉的例子是法國的一家叫Greenwave公司,做的是無人機的一個自主的飛行控制。在效能方面差很多,基本上只能做到每秒18幀的處理速度,計算在100M Hz的功耗頻率和6。5fps下整體的功耗是40mW,是非常低的功耗了。IoT級別還會使用在做智慧門鈴的場景下,以前的門鈴只是用紅外線檢查是否有人過來,這個準確度不高。如果是加一個智慧喚醒模組在門鈴上,就可以提高判斷的準確性,這是IoT級別的智慧識別影象。

嵌入式AI軟體效能最佳化

3。1前向推理框架

談談嵌入式視覺的幾個典型應用

實際上在軟體的推理框架上已經有非常多的選擇了,有NVIDIA的TensorRT,Tensorflow lite,騰訊的NCNN,TNN,阿里MNN等等。圖中是Tensorflow lite整體的圖,從訓練後的Tensorflow lite的網路模型中間會有一個轉換步驟,轉換到Tensorflow lite支援的網路結構,然後再嵌入到手機APP裡。

談談嵌入式視覺的幾個典型應用

前後推理框架的核心觀點有五個。第一個是裝置管理,比如現在的嵌入式SoC有GPU或者NPU,推理框架能支援這些裝置。第二個是模型管理,單模型和多模型是不同的管理方式。第三個是記憶體管理和儲存格式,要考慮是以最佳化記憶體佔用優先還是以效能優先。第四個是層級融合,Barch Norm層可以和卷積層合併,當運算元層中之間融合的越多,節省仿存的操作來發揮更多的效率。第五個是實現方法選擇,這塊需要框架要來處理,根據不同的輸入特性來選擇不同的實現運算元最佳化的方法,來達到最高的效率。

3。2效能評價

談談嵌入式視覺的幾個典型應用

看一下這個效能對比的例子,從運算元最佳化上其實就可以做到不少的效能提升,在運算元上針對卷積運算元做了最佳化,在同樣的一個嵌入式的平臺,獲得了一倍的效能提升,硬體是完全相同的,就靠軟體來做。

談談嵌入式視覺的幾個典型應用

以目前來說,效能差距已經非常低了。圖中資料柱狀線代表的是時間,測了很多不同的模型。比如ARM Cortex-A76和ARM Cortex-A55,可以看到差距非常小。

我的結論是如果AI部署是用ARM的CPU,對於小模型哪個方便用哪個,對於大模型實際上是有NPU存在,可以直接用NPU來做,跟推理框架的成熟度關係不大。

3。3NPU的效能最佳化

談談嵌入式視覺的幾個典型應用

NPU的部署應該怎麼做或者NPU的效能最佳化能做什麼,現在的NPU公司存在兩類情況,一類是完全封死的狀態,透過Caffe做模型轉化,很多運算元不支援,要回到CPU來做。這種情況的轉化模型成本很高,遇到一個新的模型需要演算法工程師進行手動切分,很少有工具去劃分哪些運算元是NPU支援的,轉化起來就比較麻煩。另一類是類似GPU程式設計介面,就是提供一個基礎的加速部件,可以做運算元的定製化,好處是網路進展較快。當出現特殊運算元的時候,不用再放回CPU來做,可以在加速卡NPU上做,這是一個比較好的趨勢。

嵌入式AI演算法模型

4。1深度學習模型

談談嵌入式視覺的幾個典型應用

針對嵌入式AI的深度學習模型大概有四塊,包含ARM Soc CPU、lnt8量化、模型剪枝和新的網路結構。ARM Soc CPU來跑深度學習模型,卷積在10層卷積或以下,就是小模型才能流暢的跑視覺應用。

4。2Int8量化精度

談談嵌入式視覺的幾個典型應用

不管是在CPU還是NPU都要跑量化的模型,發揮著很重要的速度作用。量化的基本原理是如何用定點數來表示浮點數,或者更高的效率表示浮點數。基本的公式是整數值減去零點值得出的值乘以刻度值,得出一個浮點數,簡單的量化就是這樣處理的。

在處理量化的時候需要注意,第一個轉化成量化是Per layer量化還是Per Channel量化,Per layer量化代表著輸出的全部用一個量化引數,Per Channel量化代表著每一個Channel都是不同的,量化的係數也是不同的。目前來說如果想達到Int8量化比較好的精度,要求模型的權重引數要做Per Channel量化。Feature map一般都是用Per layer量化,成本相對較低,硬體實現也更容易。

第二個需要注意的是刻度值怎麼選擇,一種是支援2的冪,轉化的乘法透過定點數的移位操作當成浮點,硬體容易實現,但精度值差。另一種就是支援任意浮點數,精度值高。

第三個注意的是對稱量化和非對稱量化,是和零點值相關的。對稱量化的零點是不能動的,好處是更容易實現,壞處是資料分佈有問題。

第四個注意的是QAT,量化感知的訓練。實際上就是把量化資料過程加入進去,讓權重引數和Feature map的浮點數來更容易被量化。

最後一個就是有些模型的量化精度是很難做,需要看大家對於量化精度調點的要求。不同意調點的就需要做混合來保證精度。

4。3模型壓縮技術-剪枝法

談談嵌入式視覺的幾個典型應用

模型壓縮有兩種常用的,一種是非結構化的模型壓縮,靈活程度和稀疏度更高,目前的NPU、FPGA或者加速卡沒辦法去識別權重的零值。結構化的剪枝就是去除Channel或layer,需要識別出哪些是重要的通道,哪些是不重要的。

當剪枝和量化綜合在一起時可能會遇到新的問題。lnt8的量化是進一步的資訊壓縮,從浮點到定點再到資訊損失;剪枝是去除Channel或layer,也是對資訊進行壓縮,當兩部分結合時,有效資訊被去除很多,導致精度大幅下降,有可能最後直接崩掉。在實際做的過程中,剪枝和量化需要迭代分開做,這樣才能保證精度。

總結

談談嵌入式視覺的幾個典型應用

整體上在AI的嵌入式應用裡需要硬體的選型,軟體框架和最佳化的選擇,模型演算法的設計,剪枝和量化的綜合來處理完成,還需要考慮不同的AI部署應用有不同的模型需求。

以上,感謝澎峰科技創始人張先軼在2021全球機器學習技術大會上的主題分享。

重磅推薦

Boolan面向企業賦能團隊

機器學習相關課程

談談嵌入式視覺的幾個典型應用

聯絡我們

談談嵌入式視覺的幾個典型應用

掃碼新增客服領取資料

諮詢熱線:400-821-5876

官網:www.boolan.com