在目前的嵌入式視覺領域中,最熱門的話題之一就是機器學習(machine learning)。機器學習涵蓋多個產業重要趨勢,不僅是嵌入式視覺(Embedded Vision;EV),而且在工業物聯網(IIoT)和雲端運算中均發揮極為顯著的作用。

對於不熟悉機器學習的人來說,很多時候機器學習是透過神經網路的創造和訓練而實現的。神經網路(neural network)一語極為通用,包含大量截然不同的子類別。這些子類別的名稱一般用於辨識被實現的具體網路類型。這些網路在大腦皮層上建模,大腦皮層中每個神經元接收輸入、處理後並將其傳達給另一個神經元。因此,神經元一般由輸入層、多個內部隱藏層和一個輸出層組成。

在最簡單的層面上,神經元取得輸入、施加權重給輸入,然後在加權輸入總和上執行傳遞函數。其結果隨後傳遞至隱藏層中的另一層,或傳遞給輸出層。將某一階段的輸出傳遞給另一階段而不形成一個週期的神經網路被稱為「前饋神經網路」(FNN),而那些存在反饋、內含定向週期的神經網路則被稱為「循環神經網路」(RNN)。

20170721_Xilinx_TA31P 圖1:簡單的神經網路

在眾多機器學習應用中極為常用的神經網路之一是「深度神經網路」(DNN)。這類神經網路擁有多個隱藏層,能實現更複雜的機器學習任務。為了確定每一層使用的權重和偏差值,必須對神經網路進行訓練。在訓練過程中,為該神經網路施加一定數量的正確輸入和錯誤輸入,並使用誤差函數教授網路所需的性能。訓練深度神經網路可能需要相當龐大的資料集,才足以正確訓練所需性能。

機器學習最重要的應用之一是嵌入式視覺領域,其中,各類系統正從視覺實現的系統演進為視覺引導的自動化系統。相較於其他較簡單的機器學習應用,嵌入式視覺應用最主要的區別在於採用二維(2D)輸入格式。因此,在機器學習實施方案中,採用稱為卷積神經網路(CNN)的網路結構,因為它們能夠處理2D輸入。

CNN是一種前饋網路,其中包含多個卷積層和子採樣層以及一個單獨的全連接網路,以執行最終分類。由於CNN的複雜性,它們也被歸類在深度學習類別。在卷積層中,輸入影像被細分為一系列重疊的小模組(tile)。在進行進一步的子採樣和其它階段之前,來自該卷積的結果先使用啟動層建立啟動圖,然後應用到最終的全連接網路上。CNN網路的具體定義取決於所實施的網路架構,不過,一般通常至少包含下列元素:

‧卷積—用於辨識影像中的特徵 ‧修正線性單元(reLU)—用於在卷積後建立啟動圖的啟動層 ‧最大池化(Max Pooling)—在各層間進行子採樣 ‧全連接—執行最終分類

這些元素中的每一個權重都經由訓練決定,而CNN的優勢之一就在於訓練網路相對容易。透過訓練產生權重需要龐大的影像集,其中既有需要檢測的物件,也有偽影像。這樣能讓我們為CNN建立所需的權重。由於訓練過程中所涉及的處理要求,訓練流程一般執行於提供高性能運算的雲端處理器上。

架構

機器學習是一個複雜的課題,尤其是如果每一次都得從頭開始,定義網路、網路架構以及產生訓練演算法。為了協助工程師實作網路和訓練網路,有一些產業標準架構可供使用,例如Caffe和Tensor Flow。Caffe架構為機器學習開發人員提供各種工具庫、模型以及具有C++庫的預訓練權重,同時提供Python和Matlab綁定。該架構能讓使用者無需從頭開始,就能建立並訓練網路,以執行所需的運算。

為了便於重複使用,Caffe的使用者能通過model zoo共用自己的模型。Model Zoo提供多種能根據所需的專門任務實作和更新的模型。這些網路和權重定義在prototxt檔案中。在用於機器學習環境時,prototxt檔是用於定義推論引擎的檔案。

20170721_Xilinx_TA31P2 圖2:定義網路的Prototxt檔案實例

實現嵌入式視覺和機器學習

基於可編程邏輯的解決方案越來越廣泛地用於嵌入式視覺應用,例如異質的賽靈思(Xilinx) All Programmable Zynq-7000 SoC和Zynq UltraScale+MPSoC等多處理器SoC(MPSoC)。這些元件結合了可編程邏輯(PL)架構以及處理系統(PS)中的高性能ARM核心。這種組合形成的系統能夠擁有更快的回應速度、極其靈活以便於未來修改,並且提供了高能效解決方案。

對於許多應用來說,低延遲的決策與反應時間極為重要,例如視覺導向的自主機器人,其回應時間對於避免對人員造成傷害、對環境造成破壞至關重要。增加反應時間的具體方法是使用可編程邏輯,實作視覺處理流水線,以及使用機器學習推斷引擎實現機器學習。

相較於傳統的解決方案,在這方面使用可編程邏輯,能夠減少系統瓶頸問題。在使用基於CPU/GPU的方法時,每一階段的運算都必須使用外部DDR,因為影像不能在有限的內部快取功能之間傳遞。可編程邏輯途徑讓內部RAM得以按需要提供緩衝,從而實現串流的方法。如此則可免於在DDR內儲存中介元素,不僅減少影像處理的延遲,同時也降低了功耗,甚至提高了確定性,因為無需與其他系統資源分享存取。

20170721_Xilinx_TA31P3 圖3:實現可編程邏輯的好處

在異質SoC中實現影像處理演算法和機器學習網路,可透過諸如reVISION堆疊等工具來實現。reVISION能同時支援傳統影像應用,以及基於SDSoC工具的機器學習應用;reVISION並同時支援OpenVX和Caffe Framework。為了支援OpenVX架構,核心的影像處理功能可被加速至可編程邏輯中,以建立影像處理管線。同時,機器學習推論環境支援可編程邏輯中的硬體最佳化工具庫,以實現執行機器學習實作方案的推論引擎。

20170721_Xilinx_TA31P4 圖4:reVISION堆疊

reVISION並提供與Caffe的整合,如此,實現機器學習推論引擎,就像是提供prototxt檔案和經訓練的權重一樣簡單,並由架構負責處理其餘的工作。然後再用prototxt檔案對執行於處理系統上的C/C++調度器進行配置,以加速可編程邏輯中硬體最佳化工具庫上的神經網路推論。可編程邏輯用於實現推論引擎,其中包含Conv、ReLu和Pooling等功能。

20170721_Xilinx_TA31P5 圖5:Caffe流程整合

機器學習推論引擎實作方案中所使用的數值顯示系統,也對機器學習的性能發揮重要影響。越來越多的機器學習應用採用更高效的較低精確度定點數值系統,例如INT8運算式。相較於傳統的浮點32(FP32)途徑,使用較低精確度的定點數值系統並不會造成明顯的精確度降低。因為與浮點運算相較,定點數學更易於實現,轉而採用INT8則能在一些實作中提供更高效且快速的解決方案。

對於在可編程邏輯解決方案中進行實作而言,使用定點數值系統十分理想,例如,reVISION能夠在可編程邏輯中與INT8運算式協同工作。這些INT8運算式便於在可編程邏輯中使用專用的DSP模組。在使用相同的核心權重時,這些DSP模組架構能實現最多兩個同步的INT8乘法累加運算進行。這樣不僅能提供高性能的實作方案,而且還能降低功耗。可編程邏輯元件的靈活性也便於實現進一步降低精確度的定點數值表達系統。

20170721_Xilinx_TA31T1 表1:不同權重表現的網路精確度

真實世界性能

在嵌入式視覺應用中使用機器學習的應用實例之一是車輛的避免碰撞系統。以reVISION堆疊針對Xilinx UltraScale+MPSoC開發相關應用,使用SDSoC為可編程邏輯的各項功能進行加速,以達到最佳化性能,能明顯提高反應程度。在用於實施GoogLeNet解決方案的條件下,比較reVISION MPSoC的反應時間以及基於GPU的途徑發現,二者差異相當明顯。reVISION 設計能在2.7ms的時間內發現潛在的碰撞事件並啟動煞車(使用批次規模為1),而基於GPU的方法則需要49ms~320ms的時間(大批次規模),具體取決於實作方案。GPU架構需要大批次的規模才能實現較合理的輸送量,但其代價是犧牲反應時間,而Zynq在批次規模為1的情況下也能以極低延遲實現高性能。這種反應時間上的差異可能就決定了是否發生碰撞。

結語

機器學習將持續作為眾多應用的重要推動因素,尤其是視覺導向的機器人或所謂的「協作機器人」(cobot)應用。結合處理器核心與可編程邏輯的異質SoC,能打造出十分高效、反應快且可重配置的解決方案。