尹科棹, 魏藍(lán)海, 李洪強(qiáng), 李 蠡
(成都信息工程大學(xué)通信工程學(xué)院,四川成都610225)
軟硬件協(xié)同設(shè)計(jì)是指在整個(gè)系統(tǒng)上,對(duì)軟硬件進(jìn)行同時(shí)設(shè)計(jì)和協(xié)調(diào)。設(shè)計(jì)明確軟硬件如何劃分分工,協(xié)調(diào)確定如何進(jìn)行系統(tǒng)開發(fā)與聯(lián)合調(diào)試。軟硬件協(xié)同設(shè)計(jì)方案能提高原型系統(tǒng)的開發(fā)效率,縮短開發(fā)周期,滿足復(fù)雜設(shè)計(jì)要求,還能及早發(fā)現(xiàn)設(shè)計(jì)錯(cuò)誤,進(jìn)行系統(tǒng)級(jí)別的調(diào)試。文中通過軟硬件協(xié)同開發(fā)了一套人臉識(shí)別系統(tǒng),包括圖像采集、人臉檢測(cè)、顯示屏輸出的軟件設(shè)計(jì)部分和人臉識(shí)別算法的硬件設(shè)計(jì)部分。整個(gè)系統(tǒng)在片上系統(tǒng)(System on Chip,SoC)上利用可編程技術(shù)實(shí)現(xiàn),這是一種有效的設(shè)計(jì)方案。主要?jiǎng)?chuàng)新在于:(1)采用軟硬件協(xié)同的方式實(shí)現(xiàn)了人臉識(shí)別原型系統(tǒng);(2)在PCA算法中提出一種適用于硬件的簡(jiǎn)單篩選特征值的方式;(3)將不同特征值進(jìn)行統(tǒng)計(jì)分析,發(fā)現(xiàn)不同特征的人臉具有不同累積分布函數(shù),即可以幫助選擇人臉識(shí)別判斷的門限值,說明可通過估計(jì)累積分布函數(shù)提高人臉識(shí)別效率,避免環(huán)境帶來的判斷偏差。
隨著微處理器設(shè)計(jì)技術(shù)和半導(dǎo)體制造工藝的進(jìn)步,芯片的規(guī)模和復(fù)雜度急劇增大,超高的功耗密度時(shí)系統(tǒng)穩(wěn)定性造成很大影響,功耗壁壘已經(jīng)成為提升微處理器性能的最大障礙[1]。多核處理器的出現(xiàn),在保證相同性能的基礎(chǔ)上,利用其并行處理的能力,降低處理器的工作頻率,大大減少功耗。
隨著芯片集成度越來越高,處理器功耗已經(jīng)和性能、時(shí)鐘頻率、芯片尺寸共同成為衡量一個(gè)處理器優(yōu)劣的最主要標(biāo)準(zhǔn)[2],雖然單核處理器擁有并行指令級(jí)技術(shù),但是目前來看其開發(fā)潛力已所剩不多,相較于多核處理器,難以滿足復(fù)雜系統(tǒng)對(duì)于性能的要求。如果考慮工藝問題,相對(duì)于單核處理器,多核處理器可以采用更為簡(jiǎn)單的處理內(nèi)核(Central Processing Unit,CPU),良品率高。從文獻(xiàn)[3-4]也可知到多核處理器以其高性能、低功耗優(yōu)勢(shì)正逐步取代傳統(tǒng)的單處理器成為市場(chǎng)的主流。
多核處理器的內(nèi)部架構(gòu)可分為同構(gòu)多核架構(gòu)和異構(gòu)多核架構(gòu)。同構(gòu)多核架構(gòu),顧名思義,只是通過增加CPU內(nèi)核數(shù)量提升處理器的性能。其存在一定的極限,達(dá)到極限值之后,性能就無法再隨著內(nèi)核數(shù)量的增加而提升。即使能夠不斷增加同類型的CPU內(nèi)核以加強(qiáng)并行處理能力,但整個(gè)系統(tǒng)的處理性能仍然受到串行軟件設(shè)計(jì)以及不同CPU通信開銷的制約。
但在異構(gòu)多核架構(gòu)中,如文獻(xiàn)[5]提到異構(gòu)多核處理器的異構(gòu)特性,CPU內(nèi)核所不擅長(zhǎng)的浮點(diǎn)運(yùn)算及信號(hào)處理(Digital Signal Processing,DSP)工作,將由集成在同一塊芯片上的協(xié)處理器處理。
面向并行處理的應(yīng)用軟件所要求的浮點(diǎn)運(yùn)算及定點(diǎn)運(yùn)算將由協(xié)處理器執(zhí)行;而CPU內(nèi)核則致力于執(zhí)行傳統(tǒng)處理器的主要任務(wù),如運(yùn)行操作系統(tǒng)進(jìn)行任務(wù)調(diào)度。這樣,芯片就可以高效地執(zhí)行和處理大量獨(dú)立數(shù)據(jù)的任務(wù)。異構(gòu)處理器架構(gòu)將成為今后多核處理器架構(gòu)的主流趨勢(shì)。
軟硬件協(xié)同設(shè)計(jì),一般是從一個(gè)給定的系統(tǒng)任務(wù)描述著手,通過有效地分析系統(tǒng)任務(wù)和所需的資源,采用一系列變換方法并遵循特定的準(zhǔn)則生成符合系統(tǒng)功能要求的、符合實(shí)現(xiàn)代價(jià)約束的硬件和軟件架構(gòu)[6]。軟硬件劃分好分工以后,軟件和硬件的設(shè)計(jì)一直是保持并行的,在設(shè)計(jì)過程中兩者交織在一起,互相支持,互相提供開發(fā)的平臺(tái)。文獻(xiàn)[7-8]提到軟硬件協(xié)同設(shè)計(jì)是電子系統(tǒng)復(fù)雜化后的一種設(shè)計(jì)新趨勢(shì),SoC是這一趨勢(shì)的典型代表,是嵌入式系統(tǒng)未來的主流設(shè)計(jì)思路之一,具有良好的發(fā)展前景。
介紹面向異構(gòu)多核系統(tǒng)的SoC的軟硬件協(xié)同設(shè)計(jì)。SoC一般包括系統(tǒng)級(jí)邏輯控制模塊、CPU內(nèi)核模塊、DSP模塊、嵌入的存儲(chǔ)器模塊、和外部進(jìn)行通訊的接口模塊、電源提供和功耗管理模塊。SoC將原來需要由許多芯片完成的功能,集中到一塊芯片中完成。以Xilinx公司的Zynq-7000系列全可編程SoC為例,它既包含同構(gòu)的雙核ARM處理器Cortex A9,又包括起到加速作用的協(xié)處理器——可編程邏輯門陣列(Field-Programmable Gate Array,F(xiàn)PGA),使整體系統(tǒng)可以成為一個(gè)異構(gòu)多核系統(tǒng)。方案就是ARM處理器負(fù)責(zé)軟件設(shè)計(jì),F(xiàn)PGA負(fù)責(zé)硬件設(shè)計(jì),二者協(xié)同設(shè)計(jì)、各司其責(zé)實(shí)現(xiàn)人臉識(shí)別系統(tǒng)。
在項(xiàng)目實(shí)際進(jìn)行中具體使用MathWorks公司Simulink和Xilinx公司的System Generator分別實(shí)現(xiàn)軟件功能性仿真和硬件電路級(jí)仿真和實(shí)現(xiàn)。
Simulink是Matlab提供的一個(gè)用來對(duì)動(dòng)態(tài)系統(tǒng)進(jìn)行建模、仿真和分析的軟件包,支持連續(xù)、離散及兩者混合的線性和非線性系統(tǒng),也支持具有多種采樣頻率的系統(tǒng)。在Simulink環(huán)境中,利用鼠標(biāo)就可以在模型窗口中直觀地“畫”出系統(tǒng)模型,然后直接進(jìn)行仿真。
System Generator是Xilinx公司進(jìn)行數(shù)字信號(hào)處理開發(fā)的一種設(shè)計(jì)工具,通過將Xilinx開發(fā)的一些模塊嵌入到Simulink的庫中,可以在Simulink中進(jìn)行FPGA硬件電路仿真,較之直接利用Xilinx公司的集成開發(fā)環(huán)境里仿真,能夠加快DSP系統(tǒng)的開發(fā)進(jìn)度[9]。
軟硬件協(xié)同設(shè)計(jì)涉及到硬件功能描述、軟硬件劃分、軟硬件綜合、軟硬件模擬及驗(yàn)證的問題[10]。其步驟可以分成系統(tǒng)描述、軟硬件劃分、軟硬件聯(lián)合調(diào)試和仿真[11]。在這里給出一個(gè)普適性強(qiáng)的設(shè)計(jì)流程如圖1所示。首先,設(shè)計(jì)者必須對(duì)系統(tǒng)的功能進(jìn)行描述,利用基于軟硬件協(xié)同設(shè)計(jì)的集成開發(fā)環(huán)境,將系統(tǒng)的構(gòu)架確定下來。由于研究對(duì)象是異構(gòu)多核系統(tǒng),其中協(xié)處理器由FPGA充當(dāng),可以把它設(shè)計(jì)成掛載在ARM處理器外面的外設(shè),軟件負(fù)責(zé)驅(qū)動(dòng)硬件外設(shè)和實(shí)現(xiàn)其他軟件功能。利用集成開發(fā)環(huán)境的圖形化設(shè)計(jì),可以很好地表示系統(tǒng)的構(gòu)架。
圖1 軟硬件協(xié)同設(shè)計(jì)流程圖
在這里軟硬件的劃分可以理解成圖形描述的那樣,系統(tǒng)的實(shí)現(xiàn)方法被劃分為將在處理器上執(zhí)行的C程序和將要轉(zhuǎn)換為硬件算法電路的Verilog/VHDL程序。如何最優(yōu)化設(shè)計(jì)軟硬件分工應(yīng)該考慮到硬件在信號(hào)處理方面能提供更好的性能,而軟件容易開發(fā)和修改,開發(fā)時(shí)間短。
設(shè)計(jì)好的硬件部分應(yīng)獨(dú)立完成驗(yàn)證,之后設(shè)計(jì)者還要將它恰當(dāng)?shù)丶傻秸麄€(gè)系統(tǒng)中。而軟件部分需要為硬件部分設(shè)計(jì)接口,如果涉及操作系統(tǒng)(Operation System,OS),還需要設(shè)計(jì)驅(qū)動(dòng)程序。在Linux操作系統(tǒng)下的完成軟件設(shè)計(jì),并為硬件電路提供了驅(qū)動(dòng)。
最后,需要將軟硬件在一起仿真和調(diào)試,如果性能、資源消耗不滿足設(shè)計(jì)要求,需要回到之前的步驟重新設(shè)計(jì)。從這里看出軟硬件協(xié)同設(shè)計(jì)的好處:整個(gè)系統(tǒng)通過迭代設(shè)計(jì)最終得到最優(yōu)化的設(shè)計(jì),相對(duì)于軟硬件獨(dú)立設(shè)計(jì)無法在仿真層次優(yōu)化,只能在實(shí)際實(shí)現(xiàn)整個(gè)系統(tǒng)并且發(fā)現(xiàn)錯(cuò)誤后再重新設(shè)計(jì)軟件和硬件,這個(gè)過程效率高并且沒有額外的成本消耗。
人臉識(shí)別系統(tǒng)能夠分辨出監(jiān)控環(huán)境中人的身份信息,廣泛應(yīng)用在公安罪犯追逃和安全身份認(rèn)證領(lǐng)域。其往往在嵌入式設(shè)備中實(shí)現(xiàn),以便在監(jiān)控環(huán)境中安置。實(shí)現(xiàn)方法是軟件部分包括視頻流的采集、人臉的檢測(cè)、顯示器的輸出。硬件部分實(shí)現(xiàn)人臉識(shí)別算法。
具體到Soc芯片Zynq 7000,其中的ARM Cortex-A9內(nèi)核,在它上面搭建Linux操作系統(tǒng),在Linux操作系統(tǒng)上掛載OpenCV計(jì)算機(jī)視覺庫實(shí)現(xiàn)人臉檢測(cè),并掛載由FPGA充當(dāng)?shù)挠布铀倨魍庠O(shè)。ARM內(nèi)核從USB攝像頭視頻流中檢測(cè)出人臉后將數(shù)據(jù)傳輸給FPGA,由FP-GA來實(shí)現(xiàn)人臉識(shí)別,最后通過HDMI顯示器顯示識(shí)別結(jié)果。還利用QT搭建圖形用戶界面以實(shí)現(xiàn)良好的人機(jī)交互界面。利用異構(gòu)多核系統(tǒng)的優(yōu)勢(shì),具有并行計(jì)算能力的FPGA,ARM內(nèi)核可以專心于操作系統(tǒng)的任務(wù)調(diào)度和對(duì)外設(shè)的控制,其中就包括視頻流的讀取和顯示器的輸出,具體框圖如圖2所示。
圖2 人臉識(shí)別系統(tǒng)框架
人臉識(shí)別算法可以利用K-L變換、奇異值分解、主分量分析和Fisher線性判別分析技術(shù)提取最終特征,可以使分類器的設(shè)計(jì)更加簡(jiǎn)潔有效,使用較少的特征向量數(shù)目就能取得較高的識(shí)別率[12-14],先講解K-L變換也就是主成分分析算法的實(shí)現(xiàn)。
主成分分析(principal components analysis,PCA)是一種分析、簡(jiǎn)化數(shù)據(jù)集的技術(shù)。PCA經(jīng)常用于減少數(shù)據(jù)集的維數(shù),同時(shí)保持?jǐn)?shù)據(jù)集中的對(duì)方差貢獻(xiàn)最大的特征。這是通過保留低階主成分,忽略高階主成分做到。這樣低階成分往往能夠保留圖像的重要特征。
其方法主要是通過對(duì)協(xié)方差矩陣進(jìn)行特征分解,以得出數(shù)據(jù)的主成分(即特征向量)與權(quán)值(即特征值)。
PCA是最簡(jiǎn)單的以特征量分析多元統(tǒng)計(jì)分布的方法。其結(jié)果可以理解為對(duì)原數(shù)據(jù)中的方差做出解釋:哪一個(gè)方向的數(shù)據(jù)值對(duì)方差的影響最大?換而言之,PCA提供了一種降低數(shù)據(jù)維度的有效辦法;如果在原數(shù)據(jù)中除掉最小的特征值所對(duì)應(yīng)的成分,獲得低維度的數(shù)據(jù),以損失有限信息的代價(jià)換取較低的復(fù)雜度。PCA在分析具有較明顯特征的復(fù)雜圖片數(shù)據(jù)時(shí)尤為有用,比如人臉信息。
設(shè)有N個(gè)人臉灰度圖片訓(xùn)練樣本,每個(gè)樣本由其像素灰度值組成一個(gè)列向量Xi,那么樣本圖像的像素點(diǎn)數(shù)即為Xi的維數(shù),設(shè)N是列向量個(gè)數(shù),L是Xi的維數(shù),由N個(gè)列向量構(gòu)成的訓(xùn)練樣本集為XN={X1,X2,...,Xn}。算法可以通過如下方式實(shí)現(xiàn):
(1)構(gòu)建一個(gè)平均向量,這一向量通過大量的灰度圖片所對(duì)應(yīng)的向量平均后獲得,數(shù)學(xué)表達(dá)式為
(2)為了獲得降維后的向量組,以及構(gòu)建灰度圖片的協(xié)方差矩陣,經(jīng)過如下處理
Xi是N個(gè)列向量中任意一個(gè),由此得到處理過后的協(xié)方差向量σi,σi表示N個(gè)訓(xùn)練樣本中任意一個(gè)的協(xié)方差向量。
(3)然后通過矩陣乘法得到協(xié)方差矩陣Ω的表達(dá)式為
類似前面的定義,σN表示N個(gè)訓(xùn)練樣本的協(xié)方差向量σi集合成的矩陣,由矩陣的運(yùn)算規(guī)則易知Ω矩陣的行列數(shù)均為L(zhǎng)。
(4)通過常用的Givens-Rotation的方法獲得特征向量μi和特征值λi,類似前面的定義,μL是L個(gè)μi按列組成的矩陣,λL是λi組成的L列L行對(duì)角矩陣。
采用eig(Ω)函數(shù)表示特征值的分解
(5)降序排列特征值
提出一種適用于硬件的簡(jiǎn)單篩選特征值的方式,沒有把所有的特征值進(jìn)行排序,而是有效地設(shè)定一個(gè)門限值,如果特征值小于這個(gè)門限,不再排序。這樣大大降低排序的復(fù)雜度,其次,在硬件實(shí)現(xiàn)中,采用有限比特位比較的方式,即僅僅比較比較重要的比特位(most significant bits)而忽略次要的比特位(least significant bits)。
(6)按特征值降序排列取前面X個(gè)數(shù)據(jù),后面舍棄。得到對(duì)應(yīng)的前X個(gè)特征向量組成矩陣和前X個(gè)特征值組成的對(duì)角矩陣。類似前面的定義,設(shè)為μX和λX,計(jì)算前X個(gè)正交的特征矩陣更新μX。
(7)將原始數(shù)據(jù)Xi在特征矩陣μX上進(jìn)行投影,即可獲得原始圖像的主特征數(shù)據(jù)K。
(8)將新的人臉灰度圖片的像素灰度值組成新的列向量γ在特征矩陣μX上進(jìn)行投影,即可獲得對(duì)比圖像的主特征數(shù)據(jù)f1。
(9)將原始圖像的主特征數(shù)據(jù)和對(duì)比圖像的主特征數(shù)據(jù)相減求絕對(duì)值,即得到差異值Δ。
(10)將Δ的值和一個(gè)判決門限值進(jìn)行比較,如果小于門限值,可以認(rèn)為兩張圖片是一個(gè)人的照片。
圖3 CDF圖形討論閥值門限設(shè)置
這里給出一個(gè)例子。隨機(jī)選取3個(gè)人臉樣本(A,B,C),每人采集N張照片,然后得到每張圖片的相應(yīng)PCA算法的N個(gè)輸出值K,發(fā)現(xiàn)3個(gè)人的人臉采集多次后繪制的 CDF曲線是不同的(如圖3,樣本A、B、C),說明想要識(shí)別的人臉是具有各自特性的。分析3個(gè)樣本的CDF曲線,發(fā)現(xiàn)不同人臉在同一環(huán)境下得到的K統(tǒng)計(jì)上并不相同,即在CDF曲線中表現(xiàn)為3條曲線互不重合;其次,曲線A樣本和曲線B樣本之間的差異較小,而曲線C樣本差異較大。因此,可以考慮閥值主要區(qū)分更為相近的2個(gè)樣本為主。從圖中發(fā)現(xiàn),曲線A樣本和曲線B樣本的K必然小于5500,所以在當(dāng)前環(huán)境下可以判斷大于5500的必然是曲線C樣本。所以可以判斷當(dāng)K的取值在5000~5500的時(shí)候,樣本C的識(shí)別率異常高。因此,從例子看出,可以判斷當(dāng)前數(shù)據(jù)的可靠性。利用CDF曲線,很容易得到不同樣本K值之間統(tǒng)計(jì)上的不同,由差異值Δ,對(duì)于從攝像頭新采集得到的主數(shù)據(jù)特征,可以先利用CDF確定范圍預(yù)判斷,如果不在這個(gè)區(qū)間范圍內(nèi),可以看作并非可靠數(shù)據(jù),而不予判斷;并且已經(jīng)知道不同樣本K的范圍了,就可以得到不同樣本適合的閥值與差異值比較,提高識(shí)別準(zhǔn)確。從另外一個(gè)角度來看,人臉的面部特征不同,所獲得的K的值范圍有差異,因而可知判斷不同的人群,可能可以采用這個(gè)方法。而且對(duì)于人臉進(jìn)行多次采樣后的信息更豐富,準(zhǔn)確性更高。但是受限于現(xiàn)實(shí)條件,樣本數(shù)目較少,不能進(jìn)行全面可靠的分析。
從硬件的角度來說,只需要判斷一部分獲取的人臉面部特征值K可以一定程度降低復(fù)雜度,提高速度。
FPGA上面的算法就是盡可能實(shí)現(xiàn)第5.1節(jié)的每一個(gè)步驟,并且并行計(jì)算地去得到結(jié)果,以提高效率。文獻(xiàn)[15]提到分塊矩陣乘并行結(jié)構(gòu)。以矩陣乘法為例,如果利用ARM軟件實(shí)現(xiàn),假設(shè)向量乘法耗時(shí)t秒,n維的矩陣乘法,受到串行軟件設(shè)計(jì)的限制,運(yùn)算花費(fèi)的時(shí)間將是n個(gè)t秒的時(shí)間,但是FPGA硬件可以通過多個(gè)乘法器同時(shí)進(jìn)行n個(gè)向量的乘法,所耗時(shí)間就是t秒,利用并行計(jì)算大大提高執(zhí)行效率。
為適應(yīng)算法在硬件平臺(tái)上的移植,減少計(jì)算量,對(duì)算法做一些改進(jìn)。如前所述,XN是N個(gè)人臉灰度圖片訓(xùn)練樣本集,列數(shù)是照片張數(shù)N,行數(shù)是照片的像素點(diǎn)個(gè)數(shù)。以92×112的分辨率為例,協(xié)方差矩陣Ω算出結(jié)果是10304×10304的大矩陣,對(duì)于一般的硬件要實(shí)現(xiàn)這類運(yùn)算幾乎是不現(xiàn)實(shí)的。采取的辦法利用線性代數(shù)中降維方法令Ω=σNTσN,將協(xié)方差矩陣變成N×N的矩陣,從而大大降低了進(jìn)行特征值計(jì)算量,而且對(duì)Ω的特征向量左乘σN就可以還原10304×n的特征向量μN(yùn),這個(gè)μN(yùn)就可以用于投影。采用這個(gè)方法,特征值分解的復(fù)雜度降低好幾個(gè)數(shù)量級(jí),除此以外,還可以考慮采用自適應(yīng)濾波的方式才進(jìn)行迭代求解特征值,進(jìn)一步降低其復(fù)雜度。
圖4 人臉識(shí)別MATLAB仿真
將經(jīng)驗(yàn)性改進(jìn)的PCA算法用軟件仿真。圖4利用耶魯大學(xué)提供的人臉庫作為系統(tǒng)的人臉數(shù)據(jù)庫(40個(gè)人,每人10張照片),隨機(jī)取出2個(gè)人,1人2張照片共4張照片進(jìn)行比較,即取N為4,得到4個(gè)樣本分別為X1X2X3X4。取第一個(gè)樣本X1為被對(duì)比樣本(既是被對(duì)比樣本也是比較樣本,這樣當(dāng)取到的樣本與被對(duì)比樣本相同時(shí),差異值Δ應(yīng)為0,圖4第一個(gè)顯示結(jié)果正是如此),那么通過Δ=|K-f1|,樣本X1對(duì)應(yīng)的K和f1應(yīng)該相同;X2對(duì)應(yīng)的K和f1應(yīng)該相差不大,因?yàn)閄1和X2為同一人的相似照片;X3和X4和前2張照片為不同人,所以差值應(yīng)該較大。多達(dá)100次類似這樣的仿真,測(cè)得正確率為90%,錯(cuò)拒率為4%,誤識(shí)率為6%。可以證明算法是正確有效的。
5.2節(jié)中提到的經(jīng)驗(yàn)改進(jìn),使計(jì)算量減小易于算法在FPGA上實(shí)現(xiàn)。另外還應(yīng)該考慮到軟件仿真時(shí)一直是對(duì)浮點(diǎn)數(shù)進(jìn)行運(yùn)算的,因?yàn)镻CA算法中的運(yùn)算勢(shì)必使數(shù)據(jù)變成浮點(diǎn)類型,事實(shí)上也是這樣的,如圖4所示,最終結(jié)果不僅是double類型顯示,而且是以double類型運(yùn)算。如果在硬件上實(shí)現(xiàn)浮點(diǎn)運(yùn)算勢(shì)必帶來算法復(fù)雜度的提升和算法效率的喪失,這就失去了硬件加速器的初衷。
要實(shí)現(xiàn)算法在硬件上的移植就要考慮到這個(gè)問題,解決方案是對(duì)在算法運(yùn)算前實(shí)現(xiàn)浮點(diǎn)數(shù)到定點(diǎn)數(shù)的轉(zhuǎn)換。比如說浮點(diǎn)數(shù)0.25,用4位二進(jìn)制量化,最高位代表符號(hào)位,第二位代表整數(shù)位,最后兩位量化小數(shù),量化結(jié)果為0011;浮點(diǎn)數(shù)-0.25用同樣方法量化,但是注意因?yàn)橛?jì)算機(jī)的數(shù)據(jù)存儲(chǔ)均用補(bǔ)碼表示,所以量化結(jié)果為1101。
具體到系統(tǒng),浮點(diǎn)轉(zhuǎn)定點(diǎn)可以有兩種實(shí)現(xiàn)方法,第一種ARM將圖像數(shù)據(jù)采集后,傳送給FPGA做識(shí)別前實(shí)現(xiàn)浮點(diǎn)定點(diǎn)的轉(zhuǎn)換,這要求ARM在Linux操作系統(tǒng)下除了檢測(cè)人臉、QT人臉顯示和數(shù)據(jù)傳輸外多一項(xiàng)任務(wù),利用之前解釋的原理,編寫軟件程序?qū)崿F(xiàn)。
內(nèi)核模塊IP核,是一種預(yù)先設(shè)計(jì)好的甚至已經(jīng)經(jīng)過驗(yàn)證的具有某種特定功能的集成電路或部件,并且是具有知識(shí)產(chǎn)權(quán)保護(hù)的產(chǎn)品。第二種方法利用Xilinx公司提供的浮點(diǎn)轉(zhuǎn)定點(diǎn)IP核,可以直接將它加入系統(tǒng)設(shè)計(jì)中完成所需的功能。
因?yàn)橛布娐沸矢?,Xilinx公司提供的IP技術(shù)成熟,并且比較2種方案發(fā)現(xiàn),軟件實(shí)現(xiàn)浮點(diǎn)定點(diǎn)轉(zhuǎn)換需要提前對(duì)所有像素點(diǎn)的數(shù)據(jù)進(jìn)行處理,大大延長(zhǎng)了處理時(shí)間,使數(shù)據(jù)傳輸給FPGA的實(shí)時(shí)性受到很大限制,所以最終選擇第2種方案。
利用5.3的案例,硬件電路仿真結(jié)果如圖5所示,可以發(fā)現(xiàn)由于浮點(diǎn)轉(zhuǎn)定點(diǎn)的量化喪失一定的精度,第1張圖結(jié)果稍微比0大,但最終識(shí)別結(jié)果正確。大量實(shí)驗(yàn)結(jié)果與5.3節(jié)的實(shí)驗(yàn)結(jié)果大致相同。另需要說明的是,這里為了顯示結(jié)果與5.3節(jié)案例做對(duì)比,將得到的定點(diǎn)數(shù)的結(jié)果轉(zhuǎn)成浮點(diǎn)數(shù)來顯示。
圖5 人臉識(shí)別硬件電路仿真
最終將這套設(shè)計(jì)好的算法電路在FPGA上實(shí)現(xiàn),發(fā)現(xiàn)耗時(shí)大約為10ms,這其中還包含了數(shù)據(jù)在ARM和FPGA之間的傳輸時(shí)間和結(jié)果顯示在顯示屏上的時(shí)間。最終顯示效果如圖6所示。而用軟件實(shí)現(xiàn),耗時(shí)大約為50 ms。這里其實(shí)可以考慮畫一個(gè)照片尺寸和處理時(shí)間的圖形,來說明FPGA在更大照片尺寸下處理速度依然有優(yōu)勢(shì)。
實(shí)際識(shí)別效果如硬件電路仿真有差距,多次試驗(yàn),識(shí)別率下降到74%,并且還要求光照均勻的條件下,如果環(huán)境變化明顯,效果也會(huì)下降。原因主要有幾點(diǎn),由于硬件資源的限制,截取了以人臉為中心的115×92分辨率的圖像,喪失了部分細(xì)節(jié);并且人臉庫主要是幾位項(xiàng)目的參與者的人臉構(gòu)成,數(shù)量遠(yuǎn)遠(yuǎn)不及仿真時(shí)利用的耶魯大學(xué)提供的人臉庫多,所以平均臉也不具備普適意義;另外仿真時(shí)的環(huán)境十分理想,但是實(shí)際環(huán)境中,鏡頭的移動(dòng)、光線的變化都帶來識(shí)別效果的下降。
圖6 人臉識(shí)別實(shí)際效果
通過人臉識(shí)別系統(tǒng)的實(shí)例,系統(tǒng)闡述了軟硬件協(xié)同設(shè)計(jì)的實(shí)現(xiàn)方法,解釋了軟硬件協(xié)同設(shè)計(jì)的優(yōu)點(diǎn)。并且介紹了人臉識(shí)別算法在FPGA上實(shí)現(xiàn),更加理解了硬件加速協(xié)處理器對(duì)給系統(tǒng)帶來的好處。軟硬件協(xié)同設(shè)計(jì)與FPGA的應(yīng)用將會(huì)給嵌入式系統(tǒng)設(shè)計(jì)帶來可靠的解決方案。未來可以通過更強(qiáng)大的算法實(shí)現(xiàn)更高的識(shí)別率以及較低的環(huán)境條件要求。其次,發(fā)現(xiàn)PCA門限閥值的設(shè)置可以極大的改善PCA的識(shí)別性能,能夠提升4%~6%的識(shí)別率,可以考慮針對(duì)不同人群選擇不同的特征值范圍。在未來的工作中,可以考慮通過估計(jì)累積分布函數(shù)和自適應(yīng)濾波的方式來選擇閾值,提高人臉識(shí)別的準(zhǔn)確率。
[1] 張駿,樊曉椏,劉松鶴.多核、多線程處理器的低功耗設(shè)計(jì)技術(shù)研究[J].計(jì)算機(jī)科學(xué),2007,(10).
[2] 郝松,都志輝,王曼,等.多核處理器降低功耗技術(shù)綜述[J]. 計(jì)算機(jī)科學(xué),2007,(11).
[3] 史莉雯,樊曉椏,張盛兵.單片多處理器的研究[J]. 計(jì)算機(jī)應(yīng)用研究,2007,(9).
[4] 黃國(guó)睿,張平,魏廣博.多核處理器的關(guān)鍵技術(shù)及其發(fā)展趨勢(shì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,(10).
[5] 蔣建春.異構(gòu)多核嵌入式軟件關(guān)鍵問題研究[D].重慶:重慶大學(xué),2011.
[6] 趙川,徐濤,孫曉光.軟硬件協(xié)同設(shè)計(jì)方法的研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2003,7.
[7] 馬宏星.可重構(gòu)多核片上系統(tǒng)軟硬件功能劃分與協(xié)同技術(shù)研究[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2010.
[8] 韓璽.SOPC軟硬件協(xié)同設(shè)計(jì)的方法研究[D].北京:北京交通大學(xué),2006.
[9] 云創(chuàng)工作室.多媒體處理FPGA實(shí)現(xiàn)——System Generator篇[M].北京:電子工業(yè)出版社,2010.
[10] 陳宇.可重構(gòu)片上系統(tǒng)的軟硬件協(xié)同設(shè)計(jì)方法研究[D].長(zhǎng)沙:湖南大學(xué),2012.
[11] 陸佳華,潘祖龍,彭競(jìng)宇.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南:基于 Xilinx ZYNQ[M].北京:機(jī)械工業(yè)出版社,2014.
[12] 周德龍,高文,趙德斌.基于奇異值分解和判別式KL投影的人臉識(shí)別[J].軟件學(xué)報(bào),2003,(4).
[13] 洪子泉,楊靜宇.基于奇異值特征和統(tǒng)計(jì)模型的人像識(shí)別算法[J].計(jì)算機(jī)研究與發(fā)展,1994,(3).
[14] 洪子泉,楊靜宇.用于圖象識(shí)別的圖象代數(shù)特征抽?。跩].自動(dòng)化學(xué)報(bào),1992,(2).
[15] 鄔貴明.FPGA矩陣計(jì)算并行算法與結(jié)構(gòu)[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2011.