本發(fā)明涉及fpga和adaboost算法領(lǐng)域,尤其涉及一種基于fpga的adaboost算法加速器及控制方法。
背景技術(shù):
fpga(fieldprogrammablegatearray,可編輯邏輯門陣列)廣泛的應(yīng)用于各種電子和控制領(lǐng)域,fpga的主要功能就是靈活的實(shí)現(xiàn)高速計(jì)算和控制。
adaboost是一種迭代算法,其核心思想是針對(duì)同一個(gè)訓(xùn)練集訓(xùn)練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構(gòu)成一個(gè)更強(qiáng)的最終分類器(強(qiáng)分類器)。為了實(shí)現(xiàn)adaboost算法加速的功能,使用fpga來實(shí)現(xiàn)。使用fpga進(jìn)行并行計(jì)算和加速是當(dāng)下較為常見的解決方案。然而現(xiàn)有技術(shù)中,adaboost算法在中央處理器(cpu)和其他處理器上實(shí)現(xiàn)速度較慢,目前為止還沒有很好的解決方法。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述的技術(shù)問題,本發(fā)明的目的在于提出一種基于fpga的adaboost算法加速器及控制方法,能夠?qū)崿F(xiàn)計(jì)算的并行化,極大地加快運(yùn)算速度。
為了達(dá)到上述目的,本發(fā)明提供了一種技術(shù)方案:一種基于fpga的adaboost算法加速器,包括fpga和微控制單元,fpga包括分別與微控制單元相連接的參數(shù)ram和圖像ram、與參數(shù)ram相連接且用于轉(zhuǎn)換參數(shù)使被簡化的參數(shù)轉(zhuǎn)換為完整的參數(shù)特征的參數(shù)轉(zhuǎn)換模塊、與參數(shù)轉(zhuǎn)換模塊相連接和圖像ram分別相連接且用于計(jì)算所需要的值在圖像ram數(shù)據(jù)中的位置的地址產(chǎn)生模塊、與圖像ram相連接且用于累加計(jì)算的多個(gè)運(yùn)算累加模塊、與微控制單元和多個(gè)運(yùn)算累加模塊分別相連接且用于整個(gè)加速器的循環(huán)控制和最后計(jì)算的輸出的循環(huán)控制模塊。
進(jìn)一步地,循環(huán)控制模塊包括控制整個(gè)加速器循環(huán)過程的狀態(tài)機(jī)。
進(jìn)一步地,參數(shù)轉(zhuǎn)換模塊和地址產(chǎn)生模塊分別具有定制的邏輯電路。
進(jìn)一步地,運(yùn)算累加模塊為僅受到一根信號(hào)線控制的乘加計(jì)算模塊。
進(jìn)一步地,循環(huán)控制單元通過axi總線與微控制單元相連接。
進(jìn)一步地,微控制單元為mcu或arm。
進(jìn)一步地,參數(shù)ram和圖像ram均為32位寬度的存儲(chǔ)陣列。
本發(fā)明還提供了另一種技術(shù)方案:一種利用上述的基于fpga的adaboost算法加速器的控制方法,包括以下步驟:
步驟1:圖像由微控制單元存入圖像ram;
步驟2:參數(shù)由微控制單元存入?yún)?shù)ram;步驟2與步驟1同時(shí)進(jìn)行;
步驟3:參數(shù)經(jīng)由特征轉(zhuǎn)換模塊和地址產(chǎn)生模塊,生成對(duì)應(yīng)于圖像的特征索引值;
步驟4:圖像ram輸出圖像值進(jìn)入運(yùn)算累加模塊;
步驟5:運(yùn)算累加模塊計(jì)算出結(jié)果,輸送至循環(huán)控制模塊;
步驟6:循環(huán)控制模塊經(jīng)過判斷和狀態(tài)機(jī)的控制,將數(shù)據(jù)輸出給微控制單元;循環(huán)步驟1至步驟6。
通過采用上述技術(shù)方案,本發(fā)明所提出的基于fpga的adaboost算法加速器及控制方法,例化了多個(gè)運(yùn)算累加模塊同時(shí)進(jìn)行計(jì)算,然后計(jì)算出的結(jié)果會(huì)由循環(huán)控制模塊進(jìn)行最后的輸出;會(huì)根據(jù)外部修改ram中的參數(shù)來實(shí)現(xiàn)不同的識(shí)別目標(biāo);fpga外部的微控制單元可以利用axi總線修改參數(shù)ram中的值,以應(yīng)用于不同的adaboost識(shí)別場景;整個(gè)加速器例化有多個(gè)運(yùn)算累加模塊用于實(shí)現(xiàn)計(jì)算的并行化,在足夠資源的情況下,可以例化多個(gè)不同的運(yùn)算累加模塊以加快運(yùn)算的速度。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,并可依照說明書的內(nèi)容予以實(shí)施,以下以本發(fā)明的較佳實(shí)施例并配合附圖詳細(xì)說明如后。
附圖說明
圖1為本發(fā)明基于fpga的adaboost算法加速器的結(jié)構(gòu)示意圖;
圖2為本發(fā)明利用本發(fā)明基于fpga的adaboost算法加速器的控制方法的步驟流程圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例,對(duì)本發(fā)明的具體實(shí)施方式作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
參照附圖1,本實(shí)施例中的一種基于fpga的adaboost算法加速器,一種基于fpga的adaboost算法加速器,包括fpga和微控制單元。fpga包括分別與微控制單元相連接的參數(shù)ram和圖像ram、與參數(shù)ram相連接且用于轉(zhuǎn)換參數(shù)使被簡化的參數(shù)轉(zhuǎn)換為完整的參數(shù)特征的參數(shù)轉(zhuǎn)換模塊、與參數(shù)轉(zhuǎn)換模塊相連接和圖像ram分別相連接且用于計(jì)算所需要的值在圖像ram數(shù)據(jù)中的位置的地址產(chǎn)生模塊、與圖像ram相連接且用于累加計(jì)算的多個(gè)運(yùn)算累加模塊、與微控制單元和多個(gè)運(yùn)算累加模塊分別相連接且用于整個(gè)加速器的循環(huán)控制和最后計(jì)算的輸出的循環(huán)控制模塊。
參數(shù)ram和圖像ram均為多端口的ram,在一種更為優(yōu)選的實(shí)施方案中,參數(shù)ram和圖像ram均為32位寬度的存儲(chǔ)陣列。緩存ram是用來存儲(chǔ)待測(cè)窗口的緩存數(shù)據(jù)的,因?yàn)樵跀?shù)據(jù)輸出進(jìn)行計(jì)算的同時(shí),需要從外部輸入數(shù)據(jù),這時(shí)候就要有另外數(shù)列用于緩存下一個(gè)計(jì)算周期的新數(shù)據(jù)。同理,也會(huì)多出一行數(shù)據(jù)進(jìn)行下一個(gè)周期的緩存。這樣可以保證在計(jì)算的同時(shí),ram也同時(shí)在輸入數(shù)據(jù),這樣可以使得加速器流水線工作,提高效率。
循環(huán)控制模塊是這個(gè)加速器的主要控制單元,它包括控制整個(gè)加速器循環(huán)過程的狀態(tài)機(jī)。循環(huán)控制模塊與arm通過axi-lite總線連接,用來接收代碼里配置的參數(shù),例如強(qiáng)分類器的數(shù)量和弱分類器的數(shù)量,還有圖像的大小尺度。同時(shí),特征索引的值也會(huì)被傳輸?shù)絽?shù)ram中,這樣特征參數(shù)就會(huì)被提取。循環(huán)控制模塊也會(huì)給加速器中不同的模塊分發(fā)參數(shù)和控制信號(hào),所以循環(huán)控制模塊是整個(gè)加速器的核心單元。
特征轉(zhuǎn)換模塊用于轉(zhuǎn)換參數(shù)使參數(shù)變成完整的參數(shù)特征。由于后面的運(yùn)算累加模塊需要的是完整的特征數(shù)據(jù),所以使用特征轉(zhuǎn)換模塊將被簡化過的特征轉(zhuǎn)換為完整的特征。
地址產(chǎn)生模塊則是用來計(jì)算所需要的值在緩存的數(shù)據(jù)中的位置。根據(jù)地址產(chǎn)生模塊生成的地址,運(yùn)算累加模塊會(huì)從存儲(chǔ)圖像數(shù)據(jù)的圖像ram中獲得相應(yīng)的數(shù)據(jù),所獲得的圖像數(shù)據(jù)和對(duì)應(yīng)的分類器參數(shù)將會(huì)被送進(jìn)運(yùn)算累加模塊進(jìn)行計(jì)算。
參數(shù)轉(zhuǎn)換模塊和地址產(chǎn)生模塊分別具有定制的邏輯電路以使各自的功能得以實(shí)現(xiàn)。
運(yùn)算累加模塊用于輸入圖像數(shù)值的計(jì)算和與閾值進(jìn)行比較的計(jì)算。具體地,是用來進(jìn)行探測(cè)窗的累加計(jì)算,并且用于累加每一個(gè)分類器的值,這個(gè)值與參數(shù)中的閾值進(jìn)行比較最后會(huì)來進(jìn)行結(jié)果的判斷。優(yōu)選地,運(yùn)算累加模塊為僅受到一根信號(hào)線控制的乘加計(jì)算模塊,用于輸入數(shù)據(jù)的計(jì)算和累加。
微控制單元為mcu或arm。
參照附圖2,本實(shí)施例還提供了一種利用上述的基于fpga的adaboost算法加速器的控制方法,包括以下步驟:
步驟1:圖像由微控制單元存入圖像ram;
步驟2:參數(shù)由微控制單元存入?yún)?shù)ram;步驟2與步驟1同時(shí)進(jìn)行;
步驟3:參數(shù)經(jīng)由特征轉(zhuǎn)換模塊和地址產(chǎn)生模塊,生成對(duì)應(yīng)于圖像的特征索引值;
步驟4:圖像ram輸出圖像值進(jìn)入運(yùn)算累加模塊;
步驟5:運(yùn)算累加模塊計(jì)算出結(jié)果,輸送至循環(huán)控制模塊;
步驟6:循環(huán)控制模塊經(jīng)過判斷和狀態(tài)機(jī)的控制,將數(shù)據(jù)輸出給微控制單元;循環(huán)步驟1至步驟6。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,并不用于限制本發(fā)明,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明技術(shù)原理的前提下,還可以做出若干改進(jìn)和變型,這些改進(jìn)和變型也應(yīng)視為本發(fā)明的保護(hù)范圍。