Adaboost算法的FPGA實現(xiàn)與性能分析
像素積分陣列:像素積分單元陣列是本系統(tǒng)中進行快速人臉檢測的核心處理模塊。在將 圖像進入片內(nèi)RAM 后,系統(tǒng)將采用20x20 的移動窗口對整幅圖像進行掃描處理。每個周期 的開始階段,檢測窗口包含的一行(20 像素)的灰度值由底部進入積分陣列,積分陣列上部輸 出按從左至右方向的行像素值的積分和,右部則輸出每行按從左至右方向的像素值的平方 和。陣列中的灰色方格則保存了檢測窗口對應(yīng)原始圖像部分的像素積分值。陣列中的帶豎線 和右斜線的方格表示了存儲特征所包含的矩形權(quán)重和特征相似度等參數(shù)的流水線。在整個掃 描窗口的像素積分值都進入此陣列后經(jīng)過左側(cè)編碼模塊的編碼控制后,從陣列的右側(cè)可以得 到當前一級分類器所包含的矩形的像素灰度值。此灰度值被送到右側(cè)的檢測模塊(如圖 4): 首先會和當前一級分類器中對應(yīng)特征的權(quán)重weight 相乘,然后將乘積進行累加后即得到當 前區(qū)域?qū)?yīng)此特征的特征值。接著這個值會與分類器中的特征閾值a 比較,從而選擇對應(yīng) 的特征相似度γo(大于等于a )或者γ1 (小于a ),此相似度值也將被累加,當該級分類器中 所包含的全部特征的特征相似度都累加完畢后會與最終的該級的檢測閾值β比較。比較后 的結(jié)果顯示了該窗口區(qū)域是否包含了人臉,1 即為包含,0 即為不包含。如果包含人臉,此 模塊還將把當前檢測到的人臉的區(qū)域信息(包括矩形的左上角起始坐標和矩形長、寬)保存在 一個專用的存儲區(qū)域,以用于后面的結(jié)果輸出。
人臉信息處理單元:像素積分單元陣列檢測到人臉后,此單元將首先保存檢測到的人臉 位置信息。如同檢測階段中分類器中的特征包含的矩形表達式一樣,人臉位置信息也是由起 始點坐標和矩形的長、寬組成:(x, y, width, height)。接著根據(jù)此信息控制后一級的視頻輸出 模塊用以顯示人臉。讀取(x, y),在圖像RAM中檢索到對應(yīng)人臉的起始點的地址,往該地址 中寫入像素值0。接著縱坐標不變,延x軸方向只至x+width-1的點的像素值均更新為0。然后 是繪制人臉的縱向邊界。保持橫坐標為x+width-1,y坐標依次增1只至y+height-1,將此列對 應(yīng)點的像素值更新為0。后面再按照類似的方法折回完成余下的人臉邊界的標識。此時存放 在RAM中的檢測后的圖像數(shù)據(jù)被送入到視頻輸出模塊,該模塊以800x600的分辨率將最后的 檢測結(jié)果顯示在VGA屏幕上,在屏幕顯示中,被黑色方框包圍的區(qū)域即是人臉。
圖像縮放單元:此模塊用以檢測圖像中大于20x20像素的人臉。本文采用的是固定大小 為20x20的移動窗口,以從上至下,從左至右的方向遍歷掃描整幅圖像來檢測人臉。對原始 圖像數(shù)據(jù)掃描完一遍后,能夠直接檢測出圖像中大小在20x20以內(nèi)的人臉。然后有檢測控制 狀態(tài)機負責啟動該單元模塊,以一定系數(shù)對原始圖像進行縮小處理。處理方法采用的是按照 縮小比例生成提取像素點的地址,并將這些像素點重新組成縮小后的圖像。其計算公式如下 所示,其中( x0 ,y0 ) 和(x1 , y1) 分別為原圖像和縮小后的點坐標,scale參數(shù)為查表所得:
測試結(jié)果
該 系 統(tǒng) 在 Xilinx ML509開發(fā)板上進行測試, 該開發(fā)板上采用了一塊 XC5VLX110T-FF1136 的FPGA 芯片,測試方案為:將攝像頭實時采集到的圖像送進系統(tǒng)視 頻輸入模塊,然后經(jīng)過撥碼開關(guān)來控制板上的AD9880 芯片轉(zhuǎn)化為384x288 的8 位灰度圖送 入核心檢測模塊檢測并輸出在VGA 顯示器上。整個系統(tǒng)邏輯資源占用情況如表 1 所示。表 2 為最后系統(tǒng)能夠運行的最高頻率。
結(jié)論
本文創(chuàng)新點在于采用了一種像素積分單元陣列結(jié)構(gòu),能夠?qū)?Adaboost 算法中的Haar 特征進行并行處理。結(jié)合Virtex5 平臺豐富和特殊結(jié)構(gòu)的邏輯資源,得到了理想的性能,甚 至已經(jīng)能夠和高性能的PC 平臺相提并論。從結(jié)果中可以看到,本系統(tǒng)只使用了部分資源。 通過在FPGA 芯片內(nèi)部例化更多的處理單元,還有進一步增大并行性以取得性能提升的空 間。
評論