辨別臉部表情和情緒是人類社會互動早期階段中一項基本且非常重要的技能。人類可以觀察一個人的臉部,並且快速辨識常見的情緒:怒、喜、驚、厭、悲、恐。將這一技能傳達給機器是一項複雜的任務。研究人員經過幾十年的工程設計,試圖編寫出能夠準確辨識一項特徵的電腦程式,但仍必須不斷地反覆嘗試,才能辨識出僅有細微差別的特徵。

那麼,如果不對機器進行編程,而是直接教機器精確地辨識情緒,這樣是否可行呢?

深度學習(deep learning)技術對於降低電腦視覺(computer vision)辨識和分類的錯誤率展現出巨大的優勢。在嵌入式系統中實施深度神經網路(見圖1)有助於機器透過視覺解讀臉部表情,並達到類似人類的準確度。

20170719_Synopsys_TA31P1 圖1:深度神經網路的簡單例子

神經網路可經由訓練而辨識出模式,而且如果它擁有輸入輸出層以及至少一個隱藏的中間層,則被認為具有「深度」辨識能力。每個節點從上一層中多個節點的加權輸入值而計算出來。這些加權值可經過調整而執行特別的影像辨識任務。這稱為神經網路訓練過程。

例如,為了訓練深度神經網路辨識面帶開心笑臉的照片,我們向其展示開心的圖片作為輸入層上的原始資料(影像畫素)。由於知道結果是開心,網路就會辨識圖片中的模式,並調整節點加權,盡可能地減少開心類別圖片的錯誤。每個顯示出開心表情並帶有註解的新圖片都有助於最佳化圖片權重。藉由充份的輸入資訊與訓練,網路可以攝入不帶標記的圖片,並且準確地分析和辨識與開心表情相對應的模式。

深度神經網路需要大量的運算能力,用於計算所有這些互連節點的加權值。此外,資料記憶體和高效的資料移動也很重要。卷積神經網路(CNN)(見圖2)是目前針對視覺實施深度神經網路中實現效率最高的先進技術。CNN之所以效率更高,原因是這些網路能夠重複使用圖片間的大量權重資料。它們利用資料的二維(2D)輸入結構減少重複運算。

20170719_Synopsys_TA31P2 *圖2:用於臉部分析的卷積神經網路架構(示意圖) *

實施用於臉部分析的CNN需要兩個獨特且互相獨立的階段。第一個是訓練階段,第二個是部署階段。

訓練階段(見圖3)需要一種深度學習架構——例如,Caffe或TensorFlow——它採用中央處理器(CPU)和繪圖處理器(GPU)進行訓練計算,並提供架構使用知識。這些架構通常提供可用作起點的CNN圖形範例。深度學習架構可對圖形進行微調。為了實現盡可能最佳的精確度,可以增加、移除或修改分層。

20170719_Synopsys_TA31P3 圖3:CNN訓練階段

在訓練階段的一個最大挑戰是尋找標記正確的資料集,以對網路進行訓練。深度網路的精確度高度依賴於訓練資料的分佈和品質。臉部分析必須考慮的多個選項是來自「臉部表情辨識挑戰賽」(FREC)的情感標註資料集和來自VicarVision (VV)的多標註私有資料集。

針對即時嵌入式設計,部署階段(見圖4)可實施在嵌入式視覺處理器上,例如帶有可編程CNN引擎的Synopsys DesignWare EV6x嵌入式視覺處理器。嵌入式視覺處理器是均衡性能和小面積以及更低功耗關係的最佳選擇。

20170719_Synopsys_TA31P4 圖4:CNN部署階段

雖然標量單元和向量單元都採用C和OpenCL C(用於實現向量化)進行編程設計,但CNN引擎不必手動編程設計。來自訓練階段的最終圖形和權重(係數)可以傳送到CNN映射工具中,而嵌入式視覺處理器的CNN引擎則可經由配置而隨時用於執行臉部分析。

從攝影機和影像感測器擷取的影像或視訊畫面被饋送至嵌入式視覺處理器。在照明條件或者臉部姿態有顯著變化的辨識場景中,CNN比較難以處理,因此,影像的預處理可以使臉部更加統一。先進的嵌入式視覺處理器的異質架構和CNN能讓CNN引擎對影像進行分類,而向量單元則會對下一個影像進行預處理——光線校正、影像縮放、平面旋轉等,而標量單元則處理決策(即如何處理CNN檢測結果)。

影像解析度、畫面更新率、圖層數和預期的精確度都要考慮所需的平行乘積累加數量和性能要求。Synopsys帶有CNN的EV6x嵌入式視覺處理器採用28nm製程技術,以800MHz的速率執行,同時提供高達880MAC的性能。

一旦CNN經過配置和訓練而具備檢測情感的能力,它就可以更輕鬆地進行重新配置,進而處理臉部分析任務,例如確定年齡範圍、辨識性別或種族,並且分辨髮型或是否戴眼鏡。

總結

可在嵌入式視覺處理器上執行的CNN開闢了視覺處理的新領域。很快地,我們周圍將會充斥著能夠解讀情感的電子產品,例如偵測開心情緒的玩具,以及能經由辨識臉部表情而確定學生理解情況的電子教師。深度學習、嵌入式視覺處理和高性能CNN的結合將很快地讓這一願景成為現實。