Adaboost算法的FPGA實現與性能分析
引言 Adaboost 算法是Freund 和Schapire 于1995 年提出的,全稱為Adaptive Boosting。它是 Boosting 算法的改進,意為該算法通過機器訓練與學習不斷自適應地調整假設的錯誤率,這 種靈活性使得Adaboost 算法很容易與實際應用聯系起來。2001 年,微軟研究院的P.Viola 提出了基于Haar 特征的Adaboost 算法[1],創(chuàng)造性地將積分圖的概念引入到人臉檢測的特征 計算當中,由于此算法使用了大量尺寸不一的矩形作用來表征人臉。并且該算法中用以檢測 人臉的分類器是采用的級聯結構,按照由弱到強的順序組織的,其優(yōu)點在于按照統計概率, 在圖像檢測的一開始就能夠將大部分不包含人臉的區(qū)域排除在外,省去了后面計算負載更重 的檢測步驟,以此達到檢測速度提升的目的。經過實際測試,P3 700MHz 的處理器對352*288 的圖像進行檢測的速度為15 幀/秒[2]。但是如果在嵌入式平臺上運行的話,純軟件的檢測速 度則為2 幀/秒[3]。本設計將這種快速檢測算法轉化成了一種并行處理圖片像素點的硬件結 構,能夠大幅度提升圖像中的人臉檢測速度。 目標平臺 Virtex5 系列FPGA 是Xilinx 最新一代基于65nm 的FPGA 產品。相比上代產品,速度 平均提高30%。其改進后的六輸入的查找表 (LUT) 和新型對角互連結構,減少了邏輯層次, 增強了構造塊之間的信號互連。 本文系統的實現主要用到了兩類邏輯資源來優(yōu)化系統性能:DSP48E Slice:25x18 位二進制補碼乘法器能產生48 位全精度結果。此功能單元還能夠 實現諸多DSP 模塊如乘累加器、桶形移位器、寬總線多路復用器等。 Block RAM:可配置成2 個18 Kb 或1 個36 Kb 的Block RAM,也能夠配置為雙端口 RAM 或FIFO,并提供了ECC 校驗檢查功能,提高了系統可靠性。 硬件系統結構 本文采用了一種像素積分單元陣列的結構來實現對圖像進行人臉檢測的并行性處理 [4,5]。該陣列的計算對象為Haar 特征。該特征被抽象為各種尺寸大小的矩形。一系列的矩形 組合起來即被用來表征人臉。黑白矩形內像素的灰度值經過加權求和后即為該特征的特征 值。積分圖ii 的定義是: 系統結構框圖如圖 3 所示,整個系統的工作流程和各模塊功能闡述如下: 圖像輸入模塊:系統輸入端外接一個模擬攝像頭,采集到的圖像信號經過板上的A/D 芯片轉換成ITU-R BT.656 (YCrCb 4:2:2,8 位數據寬度)分辨率為352x288(CIF)的圖像格式。 該模塊的作用為當檢測控制狀態(tài)機發(fā)送初始化信號后,通過I2C 總線配置A/D 芯片完成信號轉換。另外,由于BT.656 格式混合包含了視頻的場信息和圖像數據,因此該模塊還要從 BT.656 信號中提取出圖像數據存放到圖像RAM 中。針對該實現,RAM 大小為8 位寬度, 深度為101376。
其中ii(x, y)是積分圖在點(x, y)處的積分值,i(x', y')是圖像在點(x', y')處的灰度值。利用積分圖可以快速計算矩形S的灰度和,即Sum=A+D-B-C,其中A、B、C、D 是積分圖中矩形頂點對應的積分值。
評論