尹科棹, 魏藍海, 李洪強, 李 蠡
(成都信息工程大學通信工程學院,四川成都610225)
軟硬件協同設計是指在整個系統上,對軟硬件進行同時設計和協調。設計明確軟硬件如何劃分分工,協調確定如何進行系統開發與聯合調試。軟硬件協同設計方案能提高原型系統的開發效率,縮短開發周期,滿足復雜設計要求,還能及早發現設計錯誤,進行系統級別的調試。文中通過軟硬件協同開發了一套人臉識別系統,包括圖像采集、人臉檢測、顯示屏輸出的軟件設計部分和人臉識別算法的硬件設計部分。整個系統在片上系統(System on Chip,SoC)上利用可編程技術實現,這是一種有效的設計方案。主要創新在于:(1)采用軟硬件協同的方式實現了人臉識別原型系統;(2)在PCA算法中提出一種適用于硬件的簡單篩選特征值的方式;(3)將不同特征值進行統計分析,發現不同特征的人臉具有不同累積分布函數,即可以幫助選擇人臉識別判斷的門限值,說明可通過估計累積分布函數提高人臉識別效率,避免環境帶來的判斷偏差。
隨著微處理器設計技術和半導體制造工藝的進步,芯片的規模和復雜度急劇增大,超高的功耗密度時系統穩定性造成很大影響,功耗壁壘已經成為提升微處理器性能的最大障礙[1]。多核處理器的出現,在保證相同性能的基礎上,利用其并行處理的能力,降低處理器的工作頻率,大大減少功耗。
隨著芯片集成度越來越高,處理器功耗已經和性能、時鐘頻率、芯片尺寸共同成為衡量一個處理器優劣的最主要標準[2],雖然單核處理器擁有并行指令級技術,但是目前來看其開發潛力已所剩不多,相較于多核處理器,難以滿足復雜系統對于性能的要求。如果考慮工藝問題,相對于單核處理器,多核處理器可以采用更為簡單的處理內核(Central Processing Unit,CPU),良品率高。從文獻[3-4]也可知到多核處理器以其高性能、低功耗優勢正逐步取代傳統的單處理器成為市場的主流。
多核處理器的內部架構可分為同構多核架構和異構多核架構。同構多核架構,顧名思義,只是通過增加CPU內核數量提升處理器的性能。其存在一定的極限,達到極限值之后,性能就無法再隨著內核數量的增加而提升。即使能夠不斷增加同類型的CPU內核以加強并行處理能力,但整個系統的處理性能仍然受到串行軟件設計以及不同CPU通信開銷的制約。
但在異構多核架構中,如文獻[5]提到異構多核處理器的異構特性,CPU內核所不擅長的浮點運算及信號處理(Digital Signal Processing,DSP)工作,將由集成在同一塊芯片上的協處理器處理。
面向并行處理的應用軟件所要求的浮點運算及定點運算將由協處理器執行;而CPU內核則致力于執行傳統處理器的主要任務,如運行操作系統進行任務調度。這樣,芯片就可以高效地執行和處理大量獨立數據的任務。異構處理器架構將成為今后多核處理器架構的主流趨勢。
軟硬件協同設計,一般是從一個給定的系統任務描述著手,通過有效地分析系統任務和所需的資源,采用一系列變換方法并遵循特定的準則生成符合系統功能要求的、符合實現代價約束的硬件和軟件架構[6]。軟硬件劃分好分工以后,軟件和硬件的設計一直是保持并行的,在設計過程中兩者交織在一起,互相支持,互相提供開發的平臺。文獻[7-8]提到軟硬件協同設計是電子系統復雜化后的一種設計新趨勢,SoC是這一趨勢的典型代表,是嵌入式系統未來的主流設計思路之一,具有良好的發展前景。
介紹面向異構多核系統的SoC的軟硬件協同設計。SoC一般包括系統級邏輯控制模塊、CPU內核模塊、DSP模塊、嵌入的存儲器模塊、和外部進行通訊的接口模塊、電源提供和功耗管理模塊。SoC將原來需要由許多芯片完成的功能,集中到一塊芯片中完成。以Xilinx公司的Zynq-7000系列全可編程SoC為例,它既包含同構的雙核ARM處理器Cortex A9,又包括起到加速作用的協處理器——可編程邏輯門陣列(Field-Programmable Gate Array,FPGA),使整體系統可以成為一個異構多核系統。方案就是ARM處理器負責軟件設計,FPGA負責硬件設計,二者協同設計、各司其責實現人臉識別系統。
在項目實際進行中具體使用MathWorks公司Simulink和Xilinx公司的System Generator分別實現軟件功能性仿真和硬件電路級仿真和實現。
Simulink是Matlab提供的一個用來對動態系統進行建模、仿真和分析的軟件包,支持連續、離散及兩者混合的線性和非線性系統,也支持具有多種采樣頻率的系統。在Simulink環境中,利用鼠標就可以在模型窗口中直觀地“畫”出系統模型,然后直接進行仿真。
System Generator是Xilinx公司進行數字信號處理開發的一種設計工具,通過將Xilinx開發的一些模塊嵌入到Simulink的庫中,可以在Simulink中進行FPGA硬件電路仿真,較之直接利用Xilinx公司的集成開發環境里仿真,能夠加快DSP系統的開發進度[9]。
軟硬件協同設計涉及到硬件功能描述、軟硬件劃分、軟硬件綜合、軟硬件模擬及驗證的問題[10]。其步驟可以分成系統描述、軟硬件劃分、軟硬件聯合調試和仿真[11]。在這里給出一個普適性強的設計流程如圖1所示。首先,設計者必須對系統的功能進行描述,利用基于軟硬件協同設計的集成開發環境,將系統的構架確定下來。由于研究對象是異構多核系統,其中協處理器由FPGA充當,可以把它設計成掛載在ARM處理器外面的外設,軟件負責驅動硬件外設和實現其他軟件功能。利用集成開發環境的圖形化設計,可以很好地表示系統的構架。

圖1 軟硬件協同設計流程圖
在這里軟硬件的劃分可以理解成圖形描述的那樣,系統的實現方法被劃分為將在處理器上執行的C程序和將要轉換為硬件算法電路的Verilog/VHDL程序。如何最優化設計軟硬件分工應該考慮到硬件在信號處理方面能提供更好的性能,而軟件容易開發和修改,開發時間短。
設計好的硬件部分應獨立完成驗證,之后設計者還要將它恰當地集成到整個系統中。而軟件部分需要為硬件部分設計接口,如果涉及操作系統(Operation System,OS),還需要設計驅動程序。在Linux操作系統下的完成軟件設計,并為硬件電路提供了驅動。
最后,需要將軟硬件在一起仿真和調試,如果性能、資源消耗不滿足設計要求,需要回到之前的步驟重新設計。從這里看出軟硬件協同設計的好處:整個系統通過迭代設計最終得到最優化的設計,相對于軟硬件獨立設計無法在仿真層次優化,只能在實際實現整個系統并且發現錯誤后再重新設計軟件和硬件,這個過程效率高并且沒有額外的成本消耗。
人臉識別系統能夠分辨出監控環境中人的身份信息,廣泛應用在公安罪犯追逃和安全身份認證領域。其往往在嵌入式設備中實現,以便在監控環境中安置。實現方法是軟件部分包括視頻流的采集、人臉的檢測、顯示器的輸出。硬件部分實現人臉識別算法。
具體到Soc芯片Zynq 7000,其中的ARM Cortex-A9內核,在它上面搭建Linux操作系統,在Linux操作系統上掛載OpenCV計算機視覺庫實現人臉檢測,并掛載由FPGA充當的硬件加速器外設。ARM內核從USB攝像頭視頻流中檢測出人臉后將數據傳輸給FPGA,由FP-GA來實現人臉識別,最后通過HDMI顯示器顯示識別結果。還利用QT搭建圖形用戶界面以實現良好的人機交互界面。利用異構多核系統的優勢,具有并行計算能力的FPGA,ARM內核可以專心于操作系統的任務調度和對外設的控制,其中就包括視頻流的讀取和顯示器的輸出,具體框圖如圖2所示。

圖2 人臉識別系統框架
人臉識別算法可以利用K-L變換、奇異值分解、主分量分析和Fisher線性判別分析技術提取最終特征,可以使分類器的設計更加簡潔有效,使用較少的特征向量數目就能取得較高的識別率[12-14],先講解K-L變換也就是主成分分析算法的實現。
主成分分析(principal components analysis,PCA)是一種分析、簡化數據集的技術。PCA經常用于減少數據集的維數,同時保持數據集中的對方差貢獻最大的特征。這是通過保留低階主成分,忽略高階主成分做到。這樣低階成分往往能夠保留圖像的重要特征。
其方法主要是通過對協方差矩陣進行特征分解,以得出數據的主成分(即特征向量)與權值(即特征值)。
PCA是最簡單的以特征量分析多元統計分布的方法。其結果可以理解為對原數據中的方差做出解釋:哪一個方向的數據值對方差的影響最大?換而言之,PCA提供了一種降低數據維度的有效辦法;如果在原數據中除掉最小的特征值所對應的成分,獲得低維度的數據,以損失有限信息的代價換取較低的復雜度。PCA在分析具有較明顯特征的復雜圖片數據時尤為有用,比如人臉信息。
設有N個人臉灰度圖片訓練樣本,每個樣本由其像素灰度值組成一個列向量Xi,那么樣本圖像的像素點數即為Xi的維數,設N是列向量個數,L是Xi的維數,由N個列向量構成的訓練樣本集為XN={X1,X2,...,Xn}。算法可以通過如下方式實現:
(1)構建一個平均向量,這一向量通過大量的灰度圖片所對應的向量平均后獲得,數學表達式為

(2)為了獲得降維后的向量組,以及構建灰度圖片的協方差矩陣,經過如下處理

Xi是N個列向量中任意一個,由此得到處理過后的協方差向量σi,σi表示N個訓練樣本中任意一個的協方差向量。
(3)然后通過矩陣乘法得到協方差矩陣Ω的表達式為

類似前面的定義,σN表示N個訓練樣本的協方差向量σi集合成的矩陣,由矩陣的運算規則易知Ω矩陣的行列數均為L。
(4)通過常用的Givens-Rotation的方法獲得特征向量μi和特征值λi,類似前面的定義,μL是L個μi按列組成的矩陣,λL是λi組成的L列L行對角矩陣。
采用eig(Ω)函數表示特征值的分解

(5)降序排列特征值

提出一種適用于硬件的簡單篩選特征值的方式,沒有把所有的特征值進行排序,而是有效地設定一個門限值,如果特征值小于這個門限,不再排序。這樣大大降低排序的復雜度,其次,在硬件實現中,采用有限比特位比較的方式,即僅僅比較比較重要的比特位(most significant bits)而忽略次要的比特位(least significant bits)。
(6)按特征值降序排列取前面X個數據,后面舍棄。得到對應的前X個特征向量組成矩陣和前X個特征值組成的對角矩陣。類似前面的定義,設為μX和λX,計算前X個正交的特征矩陣更新μX。

(7)將原始數據Xi在特征矩陣μX上進行投影,即可獲得原始圖像的主特征數據K。

(8)將新的人臉灰度圖片的像素灰度值組成新的列向量γ在特征矩陣μX上進行投影,即可獲得對比圖像的主特征數據f1。

(9)將原始圖像的主特征數據和對比圖像的主特征數據相減求絕對值,即得到差異值Δ。

(10)將Δ的值和一個判決門限值進行比較,如果小于門限值,可以認為兩張圖片是一個人的照片。

圖3 CDF圖形討論閥值門限設置
這里給出一個例子。隨機選取3個人臉樣本(A,B,C),每人采集N張照片,然后得到每張圖片的相應PCA算法的N個輸出值K,發現3個人的人臉采集多次后繪制的 CDF曲線是不同的(如圖3,樣本A、B、C),說明想要識別的人臉是具有各自特性的。分析3個樣本的CDF曲線,發現不同人臉在同一環境下得到的K統計上并不相同,即在CDF曲線中表現為3條曲線互不重合;其次,曲線A樣本和曲線B樣本之間的差異較小,而曲線C樣本差異較大。因此,可以考慮閥值主要區分更為相近的2個樣本為主。從圖中發現,曲線A樣本和曲線B樣本的K必然小于5500,所以在當前環境下可以判斷大于5500的必然是曲線C樣本。所以可以判斷當K的取值在5000~5500的時候,樣本C的識別率異常高。因此,從例子看出,可以判斷當前數據的可靠性。利用CDF曲線,很容易得到不同樣本K值之間統計上的不同,由差異值Δ,對于從攝像頭新采集得到的主數據特征,可以先利用CDF確定范圍預判斷,如果不在這個區間范圍內,可以看作并非可靠數據,而不予判斷;并且已經知道不同樣本K的范圍了,就可以得到不同樣本適合的閥值與差異值比較,提高識別準確。從另外一個角度來看,人臉的面部特征不同,所獲得的K的值范圍有差異,因而可知判斷不同的人群,可能可以采用這個方法。而且對于人臉進行多次采樣后的信息更豐富,準確性更高。但是受限于現實條件,樣本數目較少,不能進行全面可靠的分析。
從硬件的角度來說,只需要判斷一部分獲取的人臉面部特征值K可以一定程度降低復雜度,提高速度。
FPGA上面的算法就是盡可能實現第5.1節的每一個步驟,并且并行計算地去得到結果,以提高效率。文獻[15]提到分塊矩陣乘并行結構。以矩陣乘法為例,如果利用ARM軟件實現,假設向量乘法耗時t秒,n維的矩陣乘法,受到串行軟件設計的限制,運算花費的時間將是n個t秒的時間,但是FPGA硬件可以通過多個乘法器同時進行n個向量的乘法,所耗時間就是t秒,利用并行計算大大提高執行效率。
為適應算法在硬件平臺上的移植,減少計算量,對算法做一些改進。如前所述,XN是N個人臉灰度圖片訓練樣本集,列數是照片張數N,行數是照片的像素點個數。以92×112的分辨率為例,協方差矩陣Ω算出結果是10304×10304的大矩陣,對于一般的硬件要實現這類運算幾乎是不現實的。采取的辦法利用線性代數中降維方法令Ω=σNTσN,將協方差矩陣變成N×N的矩陣,從而大大降低了進行特征值計算量,而且對Ω的特征向量左乘σN就可以還原10304×n的特征向量μN,這個μN就可以用于投影。采用這個方法,特征值分解的復雜度降低好幾個數量級,除此以外,還可以考慮采用自適應濾波的方式才進行迭代求解特征值,進一步降低其復雜度。

圖4 人臉識別MATLAB仿真
將經驗性改進的PCA算法用軟件仿真。圖4利用耶魯大學提供的人臉庫作為系統的人臉數據庫(40個人,每人10張照片),隨機取出2個人,1人2張照片共4張照片進行比較,即取N為4,得到4個樣本分別為X1X2X3X4。取第一個樣本X1為被對比樣本(既是被對比樣本也是比較樣本,這樣當取到的樣本與被對比樣本相同時,差異值Δ應為0,圖4第一個顯示結果正是如此),那么通過Δ=|K-f1|,樣本X1對應的K和f1應該相同;X2對應的K和f1應該相差不大,因為X1和X2為同一人的相似照片;X3和X4和前2張照片為不同人,所以差值應該較大。多達100次類似這樣的仿真,測得正確率為90%,錯拒率為4%,誤識率為6%。可以證明算法是正確有效的。
5.2節中提到的經驗改進,使計算量減小易于算法在FPGA上實現。另外還應該考慮到軟件仿真時一直是對浮點數進行運算的,因為PCA算法中的運算勢必使數據變成浮點類型,事實上也是這樣的,如圖4所示,最終結果不僅是double類型顯示,而且是以double類型運算。如果在硬件上實現浮點運算勢必帶來算法復雜度的提升和算法效率的喪失,這就失去了硬件加速器的初衷。
要實現算法在硬件上的移植就要考慮到這個問題,解決方案是對在算法運算前實現浮點數到定點數的轉換。比如說浮點數0.25,用4位二進制量化,最高位代表符號位,第二位代表整數位,最后兩位量化小數,量化結果為0011;浮點數-0.25用同樣方法量化,但是注意因為計算機的數據存儲均用補碼表示,所以量化結果為1101。
具體到系統,浮點轉定點可以有兩種實現方法,第一種ARM將圖像數據采集后,傳送給FPGA做識別前實現浮點定點的轉換,這要求ARM在Linux操作系統下除了檢測人臉、QT人臉顯示和數據傳輸外多一項任務,利用之前解釋的原理,編寫軟件程序實現。
內核模塊IP核,是一種預先設計好的甚至已經經過驗證的具有某種特定功能的集成電路或部件,并且是具有知識產權保護的產品。第二種方法利用Xilinx公司提供的浮點轉定點IP核,可以直接將它加入系統設計中完成所需的功能。
因為硬件電路效率高,Xilinx公司提供的IP技術成熟,并且比較2種方案發現,軟件實現浮點定點轉換需要提前對所有像素點的數據進行處理,大大延長了處理時間,使數據傳輸給FPGA的實時性受到很大限制,所以最終選擇第2種方案。
利用5.3的案例,硬件電路仿真結果如圖5所示,可以發現由于浮點轉定點的量化喪失一定的精度,第1張圖結果稍微比0大,但最終識別結果正確。大量實驗結果與5.3節的實驗結果大致相同。另需要說明的是,這里為了顯示結果與5.3節案例做對比,將得到的定點數的結果轉成浮點數來顯示。

圖5 人臉識別硬件電路仿真
最終將這套設計好的算法電路在FPGA上實現,發現耗時大約為10ms,這其中還包含了數據在ARM和FPGA之間的傳輸時間和結果顯示在顯示屏上的時間。最終顯示效果如圖6所示。而用軟件實現,耗時大約為50 ms。這里其實可以考慮畫一個照片尺寸和處理時間的圖形,來說明FPGA在更大照片尺寸下處理速度依然有優勢。
實際識別效果如硬件電路仿真有差距,多次試驗,識別率下降到74%,并且還要求光照均勻的條件下,如果環境變化明顯,效果也會下降。原因主要有幾點,由于硬件資源的限制,截取了以人臉為中心的115×92分辨率的圖像,喪失了部分細節;并且人臉庫主要是幾位項目的參與者的人臉構成,數量遠遠不及仿真時利用的耶魯大學提供的人臉庫多,所以平均臉也不具備普適意義;另外仿真時的環境十分理想,但是實際環境中,鏡頭的移動、光線的變化都帶來識別效果的下降。

圖6 人臉識別實際效果
通過人臉識別系統的實例,系統闡述了軟硬件協同設計的實現方法,解釋了軟硬件協同設計的優點。并且介紹了人臉識別算法在FPGA上實現,更加理解了硬件加速協處理器對給系統帶來的好處。軟硬件協同設計與FPGA的應用將會給嵌入式系統設計帶來可靠的解決方案。未來可以通過更強大的算法實現更高的識別率以及較低的環境條件要求。其次,發現PCA門限閥值的設置可以極大的改善PCA的識別性能,能夠提升4%~6%的識別率,可以考慮針對不同人群選擇不同的特征值范圍。在未來的工作中,可以考慮通過估計累積分布函數和自適應濾波的方式來選擇閾值,提高人臉識別的準確率。
[1] 張駿,樊曉椏,劉松鶴.多核、多線程處理器的低功耗設計技術研究[J].計算機科學,2007,(10).
[2] 郝松,都志輝,王曼,等.多核處理器降低功耗技術綜述[J]. 計算機科學,2007,(11).
[3] 史莉雯,樊曉椏,張盛兵.單片多處理器的研究[J]. 計算機應用研究,2007,(9).
[4] 黃國睿,張平,魏廣博.多核處理器的關鍵技術及其發展趨勢[J].計算機工程與設計,2009,(10).
[5] 蔣建春.異構多核嵌入式軟件關鍵問題研究[D].重慶:重慶大學,2011.
[6] 趙川,徐濤,孫曉光.軟硬件協同設計方法的研究[J]. 計算機工程與設計,2003,7.
[7] 馬宏星.可重構多核片上系統軟硬件功能劃分與協同技術研究[D].合肥:中國科學技術大學,2010.
[8] 韓璽.SOPC軟硬件協同設計的方法研究[D].北京:北京交通大學,2006.
[9] 云創工作室.多媒體處理FPGA實現——System Generator篇[M].北京:電子工業出版社,2010.
[10] 陳宇.可重構片上系統的軟硬件協同設計方法研究[D].長沙:湖南大學,2012.
[11] 陸佳華,潘祖龍,彭競宇.嵌入式系統軟硬件協同設計實戰指南:基于 Xilinx ZYNQ[M].北京:機械工業出版社,2014.
[12] 周德龍,高文,趙德斌.基于奇異值分解和判別式KL投影的人臉識別[J].軟件學報,2003,(4).
[13] 洪子泉,楊靜宇.基于奇異值特征和統計模型的人像識別算法[J].計算機研究與發展,1994,(3).
[14] 洪子泉,楊靜宇.用于圖象識別的圖象代數特征抽取[J].自動化學報,1992,(2).
[15] 鄔貴明.FPGA矩陣計算并行算法與結構[D].長沙:國防科學技術大學,2011.