引言
如何做AI視覺應(yīng)用的嵌入式部署分為硬件選型,軟件框架和優(yōu)化的選擇,模型算法的設(shè)計三大板塊。
AI視覺應(yīng)用云端部署VS嵌入式端部署
大家其實對于AI深度學(xué)習(xí)已經(jīng)很熟悉了,我們在服務(wù)器上就可以用GPU或者Tensorflow來做訓(xùn)練,訓(xùn)練完之后要做推理計算。推理最簡單的一個方法就是放在云端,用云端推理的板卡比如NVIDIA的T4或者國產(chǎn)NPU做推理計算。在云端,推理計算是廣泛使用的。百度的API或者Face++等云端API是在前端探測數(shù)據(jù),把視頻圖像傳回云端,云端做完處理返回結(jié)果,這就是云端的部署。
嵌入式部署其實和云端部署很相似,只不過是在最后把模型發(fā)送到了嵌入式設(shè)備上(手機(jī)和無人機(jī)),那它是在手機(jī)和無人機(jī)上來做推理計算,這就是我們認(rèn)為嵌入式部署的AI使用模型情況。
1.1
嵌入式視覺典型應(yīng)用
列舉幾個典型的嵌入式視覺應(yīng)用。
第一個是輔助駕駛或者自動駕駛,在駕駛的車上會有AI處理加速的模塊,應(yīng)用了AI算法。在這種場景下做AI的嵌入式部署主要是為了環(huán)境的感知、目標(biāo)的檢測追蹤或者在無人機(jī)上可能會做視覺或激光的SLAM,為了在嵌入式端實現(xiàn)高實時性。
第二個是手機(jī)的美顏和AR。預(yù)覽和編輯操作都是在手機(jī)本地完成的,它其實是完成了更好的交互性,給用戶的體驗性更好。從另一方面對于手機(jī)APP公司來說,是更加節(jié)省成本的,比如你編輯一段視頻,這里的AR操作返回給服務(wù)器來做,成本是很高的。
第三個是邊緣智能化盒子,優(yōu)勢是兼容了已有的攝像頭。在安防場景和智能社區(qū)里已有很多傳統(tǒng)的攝像頭,但使用邊緣智能化盒子,能夠處理多路且兼容已有攝像頭,從節(jié)省成本上來說也是一個好的選擇。
嵌入式AI硬件選型
2.1
嵌入式AI的硬件是怎么選型的?
第一個常見的類型是工控機(jī),用X86的CPU加上NVIDIA的GPU,這種好處就是生態(tài)分層成熟。如果是純CPU的應(yīng)用,深度學(xué)習(xí)一類的應(yīng)用算力可能會偏弱。
第二個是NVIDIA的TX2和Nano系列,NVIDIA對于嵌入式的AI有專門的這種SoC的芯片,也出了很多板卡,相對成本低,算力也比服務(wù)器低。GPU支持了FP16和FP32的精度,對于嵌入式部署是很有幫助的,意味著模型精度和服務(wù)器上訓(xùn)練的精度幾乎能保持一致。
服務(wù)器都是用32位做訓(xùn)練,如果說其他的NPU轉(zhuǎn)換成Int8的話,必然會造成精度的損失。唯一的弱點就是主CPU偏弱,就只是ARM Cortex-A57的四核或多核。如果放在無人機(jī)上使用,無人機(jī)應(yīng)用很多是很復(fù)雜的,不是深度學(xué)習(xí)或GPU就能加速的,這里用ARM Cortex-A57可能就會存在問題。這實際上是NVIDIA的嵌入式系列面臨的一些挑戰(zhàn),主要是要評估組合性能是不是好。
2.2
AMD APU
目前AMD的處理器用的偏少。它的CPU比較好,能夠?qū)?biāo)到i7主屏比較高的CPU ,GPU也不錯,比TX2的性能要提高2倍,整體性能還可以,也可以利用X86上面的生態(tài),存在的問題是它的編程需要OpenCL,這比CUDA要弱,就是它存在深度學(xué)習(xí)的部署門檻。另外就是它這款盒子的功耗偏高,比NVIADA的TX2或Nano高一倍,但性能加強(qiáng)了。利用AMD的APU盒子放在駕校車上是比較好用的。
2.3
主流嵌入式AI開發(fā)板
大家也知道具備NPU的SoC芯片其實是越來越多的,之前是以加速卡的形式來存在,比如一個USB的NPU加速棒插在已有設(shè)備上。如果你是做嵌入式的部署,不要選擇這種分離式的USB加速設(shè)備,因為它穩(wěn)定性較差,另外數(shù)據(jù)傳輸比較麻煩。盡量選擇集成在一起的帶NPU的SoC,這是第一選擇。目前帶NPU的SoC也是越來越多的,廠商也越來越多。在華為芯片被禁之前,市面上主要的選擇都是華為系列,大概有四款帶NPU的,從低端的0.5T-1T算力,2T-4T算力都有覆蓋。它的好處是成本相比較低,比NVIDIA的同樣算力成本要低很多;第二個是它的ISP挑的比較好。下面的都是可以替換華為系列的,可以選擇瑞芯微的RK3399、RK1808、RK3588或者全志等。
目前的NPU基本都是8bit量化,在8bit量化下模型精度是如何保證的,工具鏈的成熟度是一個問題,除此之外就是算力的選擇。如果說想替換華為芯片,要求其他選型是性能超過2T算力,ISP不錯,性價比不錯的SoC選擇目前是比較少的,至少在去年底來看還沒有。
第三塊常見的開發(fā)板工作是用FPGA來做AI計算,主要用在工業(yè)場景下,實時性更好。比如在野外、工業(yè)級的無人機(jī)或者研究所機(jī)構(gòu)會要求國產(chǎn)FPGA達(dá)到毫秒級左右的實時性。這部分的FPGA基本上是要自研AI的加速軟核。圖中是我們自研的一個AI加速軟核,它已經(jīng)支持了很多常見的FPGA,AI加速軟盒基本上結(jié)構(gòu)都是這樣。
這部分IP是一個軟核的IP,部署在FPGA資源上,核心部分有一個計算陣列,完成卷積操作。
如果NPU公司卷積只做一個3x3,就意味著這NPU是用不了的,雖然核心部分加速的很快,但是其他部分必須也是搬到NPU上才能整體的做嵌入式的部署和加速,所以就會需要有相應(yīng)的部署模塊緩沖數(shù)據(jù)。
數(shù)據(jù)搬運(yùn)需要把它從內(nèi)存搬運(yùn)到芯片的緩存上,控制邏輯相當(dāng)于發(fā)指令的,控制調(diào)度、計算部件是怎么執(zhí)行的,基本上NPU都是這幾個部件組成的,具體的差別是在于并行度的方式不同,可能加了不同的加速部件來得到更好的性能。對于NPU來說第一個要考查是卷積性能到底怎么樣,第二個算子是不是能支持的更多,支持的算子更多意味著在CPU端所跑的算子相對少一些而且支持的模型更多。
這個是我們實際用FPGA做了一些項目,做無人機(jī),檢測情況和可見光的處理,都是比較常用的。
在IoT級別的AI操作,我舉的例子是法國的一家叫Greenwave公司,做的是無人機(jī)的一個自主的飛行控制。在性能方面差很多,基本上只能做到每秒18幀的處理速度,計算在100M Hz的功耗頻率和6.5fps下整體的功耗是40mW,是非常低的功耗了。IoT級別還會使用在做智能門鈴的場景下,以前的門鈴只是用紅外線檢查是否有人過來,這個準(zhǔn)確度不高。如果是加一個智能喚醒模塊在門鈴上,就可以提高判斷的準(zhǔn)確性,這是IoT級別的智能識別圖像。
嵌入式AI軟件性能優(yōu)化
3.1
前向推理框架
實際上在軟件的推理框架上已經(jīng)有非常多的選擇了,有NVIDIA的TensorRT,Tensorflow lite,騰訊的NCNN,TNN,阿里MNN等等。圖中是Tensorflow lite整體的圖,從訓(xùn)練后的Tensorflow lite的網(wǎng)絡(luò)模型中間會有一個轉(zhuǎn)換步驟,轉(zhuǎn)換到Tensorflow lite支持的網(wǎng)絡(luò)結(jié)構(gòu),然后再嵌入到手機(jī)APP里。
前后推理框架的核心觀點有五個。第一個是設(shè)備管理,比如現(xiàn)在的嵌入式SoC有GPU或者NPU,推理框架能支持這些設(shè)備。第二個是模型管理,單模型和多模型是不同的管理方式。第三個是內(nèi)存管理和儲存格式,要考慮是以優(yōu)化內(nèi)存占用優(yōu)先還是以性能優(yōu)先。第四個是層級融合,Barch Norm層可以和卷積層合并,當(dāng)算子層中之間融合的越多,節(jié)省仿存的操作來發(fā)揮更多的效率。第五個是實現(xiàn)方法選擇,這塊需要框架要來處理,根據(jù)不同的輸入特性來選擇不同的實現(xiàn)算子優(yōu)化的方法,來達(dá)到最高的效率。
3.2
性能評價
看一下這個性能對比的例子,從算子優(yōu)化上其實就可以做到不少的性能提升,在算子上針對卷積算子做了優(yōu)化,在同樣的一個嵌入式的平臺,獲得了一倍的性能提升,硬件是完全相同的,就靠軟件來做。
以目前來說,性能差距已經(jīng)非常低了。圖中數(shù)據(jù)柱狀線代表的是時間,測了很多不同的模型。比如ARM Cortex-A76和ARM Cortex-A55,可以看到差距非常小。
我的結(jié)論是如果AI部署是用ARM的CPU,對于小模型哪個方便用哪個,對于大模型實際上是有NPU存在,可以直接用NPU來做,跟推理框架的成熟度關(guān)系不大。
3.3
NPU的性能優(yōu)化
NPU的部署應(yīng)該怎么做或者NPU的性能優(yōu)化能做什么,現(xiàn)在的NPU公司存在兩類情況,一類是完全封死的狀態(tài),通過Caffe做模型轉(zhuǎn)化,很多算子不支持,要回到CPU來做。
這種情況的轉(zhuǎn)化模型成本很高,遇到一個新的模型需要算法工程師進(jìn)行手動切分,很少有工具去劃分哪些算子是NPU支持的,轉(zhuǎn)化起來就比較麻煩。另一類是類似GPU編程接口,就是提供一個基礎(chǔ)的加速部件,可以做算子的定制化,好處是網(wǎng)絡(luò)進(jìn)展較快。當(dāng)出現(xiàn)特殊算子的時候,不用再放回CPU來做,可以在加速卡NPU上做,這是一個比較好的趨勢。
嵌入式AI算法模型
4.1
深度學(xué)習(xí)模型
針對嵌入式AI的深度學(xué)習(xí)模型大概有四塊,包含ARM Soc CPU、lnt8量化、模型剪枝和新的網(wǎng)絡(luò)結(jié)構(gòu)。ARM Soc CPU來跑深度學(xué)習(xí)模型,卷積在10層卷積或以下,就是小模型才能流暢的跑視覺應(yīng)用。
4.2
Int8量化精度
不管是在CPU還是NPU都要跑量化的模型,發(fā)揮著很重要的速度作用。量化的基本原理是如何用定點數(shù)來表示浮點數(shù),或者更高的效率表示浮點數(shù)。基本的公式是整數(shù)值減去零點值得出的值乘以刻度值,得出一個浮點數(shù),簡單的量化就是這樣處理的。
在處理量化的時候需要注意,第一個轉(zhuǎn)化成量化是Per layer量化還是Per Channel量化,Per layer量化代表著輸出的全部用一個量化參數(shù),Per Channel量化代表著每一個Channel都是不同的,量化的系數(shù)也是不同的。目前來說如果想達(dá)到Int8量化比較好的精度,要求模型的權(quán)重參數(shù)要做Per Channel量化。Feature map一般都是用Per layer量化,成本相對較低,硬件實現(xiàn)也更容易。
第二個需要注意的是刻度值怎么選擇,一種是支持2的冪,轉(zhuǎn)化的乘法通過定點數(shù)的移位操作當(dāng)成浮點,硬件容易實現(xiàn),但精度值差。另一種就是支持任意浮點數(shù),精度值高。
第三個注意的是對稱量化和非對稱量化,是和零點值相關(guān)的。對稱量化的零點是不能動的,好處是更容易實現(xiàn),壞處是數(shù)據(jù)分布有問題。
第四個注意的是QAT,量化感知的訓(xùn)練。實際上就是把量化數(shù)據(jù)過程加入進(jìn)去,讓權(quán)重參數(shù)和Feature map的浮點數(shù)來更容易被量化。
最后一個就是有些模型的量化精度是很難做,需要看大家對于量化精度調(diào)點的要求。不同意調(diào)點的就需要做混合來保證精度。
4.3
模型壓縮技術(shù)-剪枝法
模型壓縮有兩種常用的,一種是非結(jié)構(gòu)化的模型壓縮,靈活程度和稀疏度更高,目前的NPU、FPGA或者加速卡沒辦法去識別權(quán)重的零值。結(jié)構(gòu)化的剪枝就是去除Channel或layer,需要識別出哪些是重要的通道,哪些是不重要的。
當(dāng)剪枝和量化綜合在一起時可能會遇到新的問題。lnt8的量化是進(jìn)一步的信息壓縮,從浮點到定點再到信息損失;剪枝是去除Channel或layer,也是對信息進(jìn)行壓縮,當(dāng)兩部分結(jié)合時,有效信息被去除很多,導(dǎo)致精度大幅下降,有可能最后直接崩掉。在實際做的過程中,剪枝和量化需要迭代分開做,這樣才能保證精度。
總結(jié)
整體上在AI的嵌入式應(yīng)用里需要硬件的選型,軟件框架和優(yōu)化的選擇,模型算法的設(shè)計,剪枝和量化的綜合來處理完成,還需要考慮不同的AI部署應(yīng)用有不同的模型需求。
以上,感謝澎峰科技創(chuàng)始人張先軼在2021全球機(jī)器學(xué)習(xí)技術(shù)大會上的主題分享。
轉(zhuǎn)載自 | 博覽Boolan
編輯:jq
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19148瀏覽量
306190 -
cpu
+關(guān)注
關(guān)注
68文章
10882瀏覽量
212237 -
AI
+關(guān)注
關(guān)注
87文章
31155瀏覽量
269496 -
NPU
+關(guān)注
關(guān)注
2文章
286瀏覽量
18662
原文標(biāo)題:談?wù)勄度胧揭曈X的幾個典型應(yīng)用
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論