當AI侵入嵌入式設計......

這兩年我們參加了不少大學生電子競賽之類的比賽。這些比賽的板子贊助商越來越傾向于提供帶AI加速單元的開發板,高校之類的主辦方本身也鼓勵學生在競賽作品中盡可能地融入AI技術,甚至將其作為一個硬性規定加入到比賽規則里,比如去年底我們參加的全國大學生電子設計競賽,瑞薩作為贊助商,提供的板子就是加入了AI圖像處理加速單元的產品——而且比賽中著意于突出這項特性本身。

這和AIoT或者說邊緣AI的大趨勢是有很大關系的。這類學生競賽對AI技術,尤其是計算機視覺技術的融入,一定程度表明現在采用AI技術的開發門檻并不高,或者說以計算機視覺應用為代表的AI技術在走向成熟。

對于嵌入式應用、DIY愛好者、研究人員而言,現在要在產品或作品中融入AI技術,已經變得越來越容易。畢竟人臉檢測、對象存在檢測、人頭計數以及各種計算機視覺相關的應用很熱門,而且頗有稀松平常之勢。現成的傳感器、處理器算力支持,乃至算法支持的軟件和庫都愈發完善。

甚至主要占據云上AI市場的英偉達,在2019年GTC大會上都推出了價格99美元的Jetson Nano開發者套裝——看起來其實不怎么像我們理解中英偉達的風格。這類型的產品對于AI相關的算法研究、做AI原型產品測試之類的都有價值。

當AI侵入嵌入式設計......的圖1

而且在去年10月份,老黃又發揮生(jīng)態(zhàn)建(dāo)設(fǎ)的特色,推出一款2GB RAM的Jetson Nano開發套裝,59美元的價格,即更低門檻就能上手AI(和CUDA)。英偉達自己在Jetson Nano產品的宣傳上,分別用了“AI for Everyone”(4G版)和“Discover AI”(2G版)兩個宣傳語。

這個產品線尤其在邊緣AI、AIoT方面具備了代表性,借此我們也能談談,嵌入式設計普遍開始融入AI技術的趨勢,以及這個趨勢的兩個組成部分:性能與生態。

當AI技術入侵嵌入式設計

面向研究人員、開發者、技術愛好者、學生等的同類開發板,市場上比較知名的自然就是樹莓派了,不過要單純依賴樹莓派的硬件資源做AI開發和研究還是不大靠譜的,同類的產品包括香蕉派、Nano Pi之類。畢竟通用處理器做AI計算還是效率太低,尤其是做實時的ML應用。很早以前我們就提過,從大趨勢來看,無論是嵌入式領域,還是其他各種端側(或邊緣側)設備,AI計算已經成為通用計算、圖形計算之外,越來越重要的第三種能力。

所以類似英偉達Jetson Nano開發者套裝這樣的產品就問世了。一些面向特定領域的芯片和開發板產品,其實有不少也加入了AI專核。比如說前文提到的瑞薩RZ/A2M開發板,帶DRP(動態可配置處理器)加速單元——雖然其面向的市場可能更具針對性——這類產品在工業領域就很常見。

當AI侵入嵌入式設計......的圖2

更通用一些的開發板,有些即便沒有AI專核,也有通過支持Tengine獲得計算效率提升的——一款輕量級的模塊化神經網絡inference引擎,如瑞芯微RK3399開發板(ROCK960);進階款的RK3399 Pro則加入了專門的NPU;還有比如晶晨A311D開發板,A311D芯片本身也集成了專門的NPU;下文還會看到谷歌edge TPU和Intel Myriad X......

Jetson Nano與這些產品的不同之處,主要還是延續了英偉達用GPU來做AI計算的傳統(而且上面這些板子還真是一點也不便宜),這是英偉達與這些產品在思路上的差異。不過包括2GB版在內的Jetson Nano,在小身板下就支持CUDA,還是令人感覺相當不可思議(淘 寶現在的價格似乎在430元左右)。

談談邊緣計算的AI性能

Jetson Nano 2G開發板的主要配置包括,CPU部分是4顆1.43GHz的Arm Cortex-A57核心,GPU則為128個CUDA核的Nvidia Maxwell(Geforce 10系列Pascal架構的前一代),半精度浮點性能472GFlops,對比Myriad X之類更專用的VPU及上述NPU還是不及的。不過對比CPU仍然強了無數倍,而且英偉達那套令人難以望其項背的AI開發生態,也能某種程度無視競品在純硬件性能上的領先,下文在談生態時還將提到這一點。

從這個配置不難看出,Nano在英偉達的Jetson家族產品線上就是更專注于低功耗、低成本的IoT,且主要定位于inference,雖然從英偉達的介紹來看似乎也能用于AI training。

這塊板子的其他配置還包括2GB 64-bit LPDDR4,帶寬25.6GB/s;視頻編碼最高支持4k30,4路1080p30,視頻解碼最高4k60,8路1080p30;1個MIPI CSI-2攝像頭接口(支持Raspberry Pi攝像頭模塊、Intel Real-sense以及不少包括IMX219 CIS的攝像頭模塊),還有USB、HDMI、千兆網口、無線適配器、microSD插槽(作為本地存儲)等,其他I/O相關的配置就不贅述了。99美元4G內存版的Jetson Nano開發板除了內存更大以外,在I/O資源上也會更豐富一些(包括要額外接無線網卡的M.2接口)。

當AI侵入嵌入式設計......的圖3

英偉達自己有專門列一張表格,對比的是應用視頻流的不同模型下,Jetson Nano、Raspberry Pi 3、Raspberry Pi 3 + Intel Neural Compute Stick 2(集成的就是Myriad X)、谷歌Edge TPU開發板幾款產品的實時inference性能差異(batch size 1,精度FP16),如上圖所示(注意:這個對比的是4GB版的Jetson Nano)。

事實上,相較Raspberry Pi的碾壓優勢,以及相比TPU略弱的性能表現,是意料之中的——這本身就是通用和專用之間的差別(對比Myriad X的領先,可能是生態方面的能力體現)。不過這張表中有不少項目“DNR”是指did not run,可能是因為有限的內存容量、不支持網絡層或者其他軟硬件限制,所以跑不起來的。這部分英偉達想傳達的,應該是GPU的通用性會明顯更好。

2GB版的Jetson Nano,在主流模型下的性能表現則如下圖:

當AI侵入嵌入式設計......的圖4

當AI開始談生態

談到通用性,也就不得不說英偉達在AI領域已經幾乎沒有敵手的生態建設進度。英偉達此前不止一次地提到過,AI計算科學發展迅速,研究人員在相當迅速地發明新型神經網絡架構,AI研究人員或從業者在項目中使用各種各樣的AI模型。“所以對于學習和構建AI項目而言,理想的平臺應該是能夠跑各種AI模型、具備足夠的彈性,同時又能提供足夠的性能,來構建有意義的交互式AI體驗。”

主流ML框架,包括TesnorFlow、PyTorch、Caffe、Keras等就不多提了,上面的那張表給出流行的DNN模型,Jetson Nano都提供了支持。包括相對完整的框架支持、內存容量、統一內存子系統,還有各種軟件支持,是實現通用性的基礎。而且不只是DNN inferencing,Jetson Nano的CUDA架構可用來做更大范圍的計算機視覺、DSP,包括各種算法和操作。

當AI侵入嵌入式設計......的圖5

尤為值得一提的是,上面這些模型在Jetson Nano上執行用上了TensorRT。對英偉達AI生態熟悉的同學應該知道,TensorRT是英偉達推的一個中間件,輸入模型后,CUDA GPU藉由TensorRT就能生成優化過后的模型運行時,是英偉達實現AI計算性能優化的重要組成部分。

TesnorRT作為一種軟件,是前面的例子中實現更高幀率,達成更高計算效率的重要組成部分。有研究人員測試過不用TensorRT優化,在Jetson Nano 2G上直接編譯一個版本的Caffe模型,雖然問題也不大,不過經過TensorRT加速的版本在效率上會有相當大的提升。

由TensorRT可引出的,一方面是英偉達每年在講自己不是或不只是一家芯片公司,另一方面這也是Jetson Nano生態資源有英偉達做靠山的管中一窺。

簡單來說,Jetson全系列所有硬件平臺對各種軟件工具和SDK的通用:Jetson Nano開發套裝軟件部分是JetPack SDK,包括Ubuntu操作系統,還有構建端到端AI應用的各種庫,比如說用于計算機視覺和圖像處理的OpenCV和VisionWorks;加速AI inferencing的CUDA、cuDNN、TensorRT,還有各種庫。英偉達此前在營銷上,把各種軟件加速庫稱作CUDA-X軟件棧(不過今年好像沒怎么提這個詞)。

當AI侵入嵌入式設計......的圖6

這其中比較典型,可列舉的與Jetson Nano強相關的,包括了針對智能視頻流分析的Nvidia DeepStream,針對醫療成像、基因和病人監護的Clara,以及用于機器人的Isaac等。更現成的資源還有一大堆英偉達儲備的預訓練模型,通過transfering learning遷移學習做定制化的模型調整后,應用于Jetson Nano做inference,也屬于這個生態中的重要組成部分。

這些我們在過去談Nvidia生態的文章中多少都有介紹過。感覺談到這里,其他板子從“AI生態”層面就弱了一截,更具效率的偏ASIC的AI專用處理器,好像這會兒也就不是個事兒。

舉幾個例子說說

我們瀏覽了英偉達官方寫的Jetson Nano開發指南,包括環境搭建、現成庫的簡單使用等;發現Jetson Nano的主要應用,應該是對象檢測、圖像分類、語義分割,還有語音處理之類的,再具體些則可能包括了NVR網絡視頻錄像機、自動駕駛小車、智能音箱、門禁系統、SLAM機器人,以及與智慧交通、智慧城市相關的各種嵌入式的AIoT應用。

當AI侵入嵌入式設計......的圖7

要形象地表現這類開發,我們來簡單地舉一些例子,同類板子在很多特性實現上也有類似的過程,不過Jetson Nano有更廣泛的生態。環境搭建的準備工作就不提了,給microSD卡寫入image還是比較簡單的過程。將microSD卡插入Jetson Nano(4GB/2GB)卡槽,接上電源、鼠標、鍵盤、顯示器,就能開始用了。操作系統是Ubuntu 18.04 L4T,2GB版為了減少系統占用,桌面預設為輕量級的LXDE。用來學習、開發Python、OpenCV和AI深度學習、ROS自動控制等應用都是可行的。

給Jetson Nano安裝攝像頭,包括前文提到的CSI接口的,也可以是USB接口的。JetPack有內置OpenCV開發環境,配合CSI攝像頭可以從攝像頭輸入,來實現一些基礎的機器視覺應用;包括對輸入圖像尺寸做放大插值、旋轉等;更高級的比如說追蹤畫面中特定顏色的對象、邊緣檢測、人臉追蹤/眼睛追蹤。

當AI侵入嵌入式設計......的圖8來源:NVIDIA英偉達企業解決方案

以邊緣檢測為例,執行過程大致上是首先將畫面轉為HSV灰度圖像;然后對HSV灰度圖進行高斯模糊處理——這一步是為了對畫面進行降噪;最后為圖像找出邊緣線條。整個過程調用幾個函數即可,如上圖所示。執行過程與結果大致如下:

當AI侵入嵌入式設計......的圖9

這是比較常見的機器視覺應用。再來看看真正利用了AI的應用,利用OpenCV庫和Python3開發環境來實現人臉識別,公司打卡、點名系統之類的就需要此類功能。利用face_recognition這個Python人臉識別庫就能搞定,這是基于dlib機器學習開源算法庫實現的,函數調用比較簡單。

這個庫的face_locations方法就能找到圖像中人臉的位置,藉由OpenCV將框畫到原圖上并顯示結果。代碼如下圖所示,這個例子是對圖片中的人臉進行定位,套個while循環就能讀取視頻了。

當AI侵入嵌入式設計......的圖10

 

當AI侵入嵌入式設計......的圖11

在人臉定位后,還需要與人臉特征庫進行比對,完成身份識別這里不再展開,有興趣的同學可以去看英偉達官微針對Jetson Nano 2G的系列文章更新。就這個上手AI開發的過程,還是相當輕盈和方便。

值得一提的是,若要體現性能和生態方面的優越性,實際上JetPack安裝好以后,就能找到一些CUDA sample。這些示例包括了海洋模擬實驗oceanFFT、煙霧粒子模擬smokeParticles(256x256煙霧粒子運動變化,有光影變化)、nbody粒子碰撞模擬等。

對比執行過程可以用單純用CPU,或者藉由GPU并行能力做加速,就能感受到性能上的顯著差異。這些CUDA示例本身應該是最能體現Jetson Nano在性能和生態上的價值的。

當AI侵入嵌入式設計......的圖12

尤為值得一提的是,英偉達針對Jetson產品線和作為體驗AI的構成,特別做了個Hello AI World,也算是AI生態的一部分,宣稱開發者只需要在幾個小時內,就能感受各種深度學習inference demo,在Jetson Nano上搭配JetPack SDK、TensorRT等,用預訓練的模型,跑實時的圖像分類和對象檢測等功能。(而且英偉達的開發者blog也列舉了用Jetson Nano來跑完整的訓練框架,用Transfer Learning來重新訓練模型,感覺也算是個用途吧,估計所需時間不會很短……)

Hello AI World應該算是個教程,主要是相關計算機視覺、攝像頭的應用,相關圖像分類、對象檢測、語義分割等,還有Deep Learning Nodes for ROS這類將識別、檢測等特性與ROS(Robot Operating System)做融合,達成機器人系統和平臺的開源項目。其實Hello AI World本身就能表明,英偉達在生態布局上的全面性。

當AI侵入嵌入式設計......的圖13

最后可以談談英偉達軟件能力或者說AI生態能力的一個具體體現:英偉達官微曾經給出過10行python代碼,如上圖,“實現對90種類別的深度學習物體檢測識別”。似乎以Jetson Nano 2G的硬件資源,即便是很優秀的YOLOv4或者SSD-Mobilenet算法,跑起來也只能達到4-6FPS的性能。

但在JetPack生態下執行這段python,系統會為模型生成對應的TensorRT加速引擎。這里代碼第一行是導入工具庫模塊,爾后建立input和output對象;第四行是導入“深度學習推理應用”的模塊,然后用detectNet()建立net對象,處理后面的“物理檢測推理識別”任務。

While循環里,第七行是讀取一幀圖像,第八行代碼就把圖像中滿足閾值的對象檢測出來了。而且因為TensorRT的存在,這行代碼在實現上,性能可提升不少,初學者不需要面對調用TensorRT的問題。第九行的方法,是針對畫面中檢測到的對象,把包括框、類別名稱、置信度等數據疊加到圖像上。在英偉達的底層實現上,把原本4-6FPS的性能提升到10+FPS。這個例子我們感覺還是頗具代表性的。

本文以Jetson Nano 2G為例,簡單談了談嵌入式開發板加上AI能力之后,要把開發友好性做好,性能和生態都是必不可少的。硬件性能是基礎保障——更多的嵌入式板子開始帶AI算力加成是趨勢;而現有的開發生態,則已經有以英偉達為代表的廠商,極大降低了開發難度,起碼降低了初學者的上手難度,并實現了性能效率上的顯著優化。(也算是從側面印證了,英偉達可能是一家軟件公司…)

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP