卞一杰 陳躍躍 扈嘯
摘? 要:近年來(lái)紅外傳感器在軍事、安防領(lǐng)域得到廣泛應(yīng)用,基于嵌入式平臺(tái)的紅外目標(biāo)識(shí)別算法是該領(lǐng)域的重點(diǎn)研究方向。該文提出了一種基于梯度方向特征的景象匹配算法,其可利用可見(jiàn)光模板對(duì)紅外圖像進(jìn)行異源圖像間的目標(biāo)識(shí)別。該文闡述了在算法移植過(guò)程中,如何基于TI公司的TMS320C6678 DSP芯片底層硬件、指令級(jí)流水線設(shè)計(jì),對(duì)算法及算法框架進(jìn)行優(yōu)化設(shè)計(jì)和編程,該方法可廣泛適用于其他圖像處理算法在DSP上的移植優(yōu)化。
關(guān)鍵詞:DSP;目標(biāo)識(shí)別;并行優(yōu)化
中圖分類號(hào):TP391? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)志碼:A
0 引言
隨著電子科技的快速發(fā)展,紅外傳感器成本更低,圖幅和分辨率等性能更佳,該類傳感器憑借著優(yōu)越的天時(shí)/天候適應(yīng)能力在汽車、航天、軍事等領(lǐng)域得到廣泛使用。由于異源圖像間灰度分布上存在極大的非均態(tài)性差異,導(dǎo)致異源圖像識(shí)別算法更具復(fù)雜性,異源圖像目標(biāo)識(shí)別一直是計(jì)算機(jī)視覺(jué)領(lǐng)域中重要的研究方向。近年來(lái),基于特征點(diǎn)、區(qū)域以及學(xué)習(xí)模型的異源圖像目標(biāo)識(shí)別算法不斷推陳出新,各有優(yōu)劣,大多數(shù)算法都是基于PC研發(fā)的,計(jì)算復(fù)雜度比較大,計(jì)算時(shí)間存在波動(dòng)性,在嵌入式軟件平臺(tái)上運(yùn)行,很難達(dá)到實(shí)時(shí)性、穩(wěn)定性要求。因此,基于嵌入式平臺(tái)的紅外目標(biāo)識(shí)別算法研究,在軍事、安防領(lǐng)域仍具有重大意義。
DSP(Digital Signal Processing)即數(shù)字信號(hào)處理,是以數(shù)字形式對(duì)信號(hào)進(jìn)行采集、變換、濾波等處理,以此來(lái)得到符合人們需要的信號(hào)形式。DSP芯片是特別適合用來(lái)進(jìn)行數(shù)字信號(hào)處理運(yùn)算的微處理器,其能夠快速實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法,其中C6000系列高性能DSP在圖像處理領(lǐng)域的應(yīng)用最廣泛?;贔PGA+DSP架構(gòu)的嵌入式系統(tǒng)設(shè)計(jì)充分利用了FPGA出色的半定制化電路擴(kuò)展管理外設(shè)接口,讓DSP從繁雜的圖像采集以及外部數(shù)據(jù)通信任務(wù)中脫離出來(lái),全力運(yùn)行圖像處理算法。該架構(gòu)的嵌入式處理平臺(tái)是圖像實(shí)時(shí)處理領(lǐng)域的主流系統(tǒng)架構(gòu),具有極高的工程意義。
該文介紹了一種基于高速移動(dòng)的多核DSP平臺(tái)的紅外目標(biāo)識(shí)別算法移植與優(yōu)化技術(shù),首先簡(jiǎn)單介紹了一種基于邊緣梯度方向特征的景象匹配算法 然后深入分析了DSP的硬件底層加速模塊設(shè)計(jì)對(duì)算法加速的支持,結(jié)合當(dāng)前算法對(duì)移植優(yōu)化過(guò)程的設(shè)計(jì)思路進(jìn)行重點(diǎn)介紹,最后展示了算法優(yōu)化前后性能上的實(shí)驗(yàn)結(jié)果。
1 景象匹配算法
景象匹配算法是基于區(qū)域特征的匹配算法,是利用事先制備的可見(jiàn)光模板,在紅外實(shí)時(shí)圖上搜索目標(biāo)的位置,該算法對(duì)每幅圖的計(jì)算量一致,是在嵌入式平臺(tái)上應(yīng)用最多的匹配算法。因?yàn)楫愒磮D像間非均態(tài)的灰度特征分布存在差異,如圖1所示,所以直接使用基于區(qū)域灰度特征的絕對(duì)誤差和算法(SAD)、誤差平方和算法(SSD)、平均絕對(duì)差算法(MAD)、平均誤差平方和算法(MSD)和歸一化積算法(NCC)等,通常無(wú)法定位出目標(biāo)的位置。分別在MATLAB中實(shí)現(xiàn)比較了以上5種算法的匹配結(jié)果(其中SAD與MAD、SSD與MSD結(jié)果一致),如圖2所示。
從圖2中列出的相關(guān)系數(shù)矩陣曲面圖中可以發(fā)現(xiàn),灰度特征的相關(guān)系數(shù)響應(yīng)峰值并不明顯,灰度特征匹配算法不能有效地將相似區(qū)域的特征區(qū)分出來(lái)。
通過(guò)人類視覺(jué)系統(tǒng)對(duì)外界信息處理機(jī)理進(jìn)行分析可知,人眼對(duì)亮度調(diào)節(jié)具有自適應(yīng)能力,對(duì)亮度級(jí)數(shù)的判斷能力很差,只能區(qū)分存在亮度差異的物體,視覺(jué)系統(tǒng)具有側(cè)抑制效應(yīng),其類似于一個(gè)帶通濾波器,大腦對(duì)人眼采集到的信號(hào)進(jìn)行加權(quán)求和運(yùn)算,形成一種邊緣增強(qiáng)的感覺(jué),使人眼對(duì)邊緣位置的變化更加敏感[1]。因此該文將邊緣梯度方向信息作為異源圖像匹配的特征空間,根據(jù)橫向和縱向梯度的強(qiáng)度差異,得到梯度方向[-π/2,π/2]的角度,然后歸一化到[0,255]灰度級(jí),得到邊緣梯,圖3為可見(jiàn)光和紅外圖像計(jì)算得到的梯度方向圖。
根據(jù)方向的幾何意義,方向越相近,其相似性越高,在提取特征空間后的特征圖中灰度級(jí)越相近相似性越高,因此可以使用SAD算法作為其相似性測(cè)度。匹配結(jié)果如圖4所示。
從圖4中的相關(guān)系數(shù)矩陣可以看出,對(duì)圖像進(jìn)行梯度方向的特征提取后,使用SAD算法,圖像相似性的相關(guān)峰值更明顯,根據(jù)匹配算法置信度測(cè)量標(biāo)準(zhǔn),次主相關(guān)峰和主相關(guān)峰值之間的比越小,則匹配結(jié)果更可靠。
2 TMS320C6678 DSP芯片
TMS320C6678采用TI公司最新研發(fā)的KeyStone多核架構(gòu),是當(dāng)前該公司性能最高、功耗最低的多核定點(diǎn)數(shù)字信號(hào)處理器,繼承了C64x+指令集架構(gòu)(ISA),且全面兼容IEEE 754二進(jìn)制浮點(diǎn)數(shù)算數(shù)標(biāo)準(zhǔn)。其內(nèi)核及外設(shè)示意圖如圖5所示。
TMS320C6678包含8個(gè)C64x DSP CorePac,架構(gòu)如圖5所示,每個(gè)CorePac主頻高達(dá)1.25 GHz,每個(gè)核可以提供20GMAC定點(diǎn)計(jì)算或者20GFLOP浮點(diǎn)計(jì)算能力[2],增加的多核導(dǎo)航器、網(wǎng)絡(luò)協(xié)處理器等功能模塊,可以使DSP與其他協(xié)處理器以及外設(shè)間的數(shù)據(jù)傳輸性能得到極大提高。
C66x CorePac兼容了C64x+內(nèi)核相同的A、B 2個(gè)對(duì)稱的功能區(qū),每個(gè)功能區(qū)都包含32個(gè)32位的通用寄存器文件組和4個(gè)功能單元(.D、.L、.M、.S),各功能單元各司其職,構(gòu)成了2條數(shù)據(jù)通路。每個(gè)CorePac中的32KB程序和數(shù)據(jù)L1 RAM以及512KB的L2 RAM賦予了單核極高的SIMD指令處理能力。擴(kuò)展內(nèi)存管理器(XMC)負(fù)責(zé)L2存儲(chǔ)器控制器與多核共享內(nèi)存控制器(MSMC)間的管理以及數(shù)據(jù)交互,并且還能通過(guò)預(yù)取功能來(lái)提高數(shù)據(jù)的吞吐率,為數(shù)字信號(hào)處理提供了硬件加速支持。
3 DSP平臺(tái)的移植與優(yōu)化
3.1 DSP程序開(kāi)發(fā)移植
DSP程序開(kāi)發(fā)可分為3個(gè)階段。1)編寫程序階段。該階段根據(jù)需求配置底層驅(qū)動(dòng),使用C/C++完成算法模塊的程序編寫。2) 精簡(jiǎn)代碼階段。通過(guò)日志或其他專用剖析工具監(jiān)測(cè)算法的性能是否滿足實(shí)時(shí)性要求,如果不滿足則通過(guò)開(kāi)啟編譯器優(yōu)化等級(jí),或算法結(jié)構(gòu)的并行設(shè)計(jì)來(lái)提升性能。3)線性匯編優(yōu)化階段。如果上輪優(yōu)化仍不滿足要求,需要利用線性匯編對(duì)待優(yōu)化的代碼進(jìn)行編寫,使用匯編優(yōu)化器進(jìn)行代碼優(yōu)化[3]。
一般第3階段增加更多對(duì)底層寄存器的操作,耗時(shí)比第2階段要多,因此需要盡量在第2階段提升代碼的性能。下面對(duì)該算法的工作模式及優(yōu)化移植工作進(jìn)行介紹。
算法在滿足啟用條件時(shí),喚醒處于休眠狀態(tài)的DSP,初始化DSP平臺(tái),搬運(yùn)目標(biāo)模板進(jìn)入共享內(nèi)存中,初始化算法全局變量。處理板FPGA實(shí)時(shí)接收相機(jī)采集的圖像數(shù)據(jù)和相機(jī)平臺(tái)發(fā)送的位姿信息,然后通過(guò)SRIO轉(zhuǎn)發(fā)到DSP0核,觸發(fā)設(shè)定的中斷響應(yīng),從緩沖區(qū)將圖像搬運(yùn)到共享內(nèi)存,更新串口接收的當(dāng)前彈體姿態(tài)信息,對(duì)實(shí)時(shí)圖像進(jìn)行幾何校正和預(yù)處理,然后調(diào)用目標(biāo)識(shí)別算法識(shí)別圖像中的目標(biāo)位置,最后將目標(biāo)的位置通過(guò)串口發(fā)送給上位機(jī)系統(tǒng)。DSP軟件流程圖如圖6所示。
3.2 數(shù)據(jù)傳輸優(yōu)化
在算法處理過(guò)程中,圖像數(shù)據(jù)搬運(yùn)所耗費(fèi)的時(shí)間是不能忽略的,F(xiàn)PGA通過(guò)SRIO傳輸圖像到L3 MSM,圖像處理算法對(duì)圖像進(jìn)行計(jì)算時(shí),從L3緩存到L2,從L2緩存到L1D,從L1D緩存到內(nèi)核都需要耗費(fèi)一定的時(shí)間,DSP軟件的底層驅(qū)動(dòng)通過(guò)配置數(shù)據(jù)Cache、DMA以及采用乒乓傳輸[4]相結(jié)合的方式,使傳輸時(shí)間與算法處理時(shí)間可以并行操作,以此來(lái)忽略數(shù)據(jù)傳輸?shù)牡却龝r(shí)間。
3.3 算法編程優(yōu)化
代碼編寫過(guò)程中,良好的編程方式同樣能提升代碼性能。循環(huán)運(yùn)算是圖像處理中常用計(jì)算單元,能夠通過(guò)軟件流水的方式實(shí)現(xiàn)指令級(jí)并行,但是在很多for循環(huán)中,有些不必要或不可預(yù)測(cè)的運(yùn)算破壞了流水線,因此需要對(duì)其循環(huán)體進(jìn)行拆分優(yōu)化。比如均值濾波時(shí)除以mask大小,這部分計(jì)算是冗余的,首先應(yīng)在循環(huán)體外用常量表示其計(jì)算結(jié)果,并且可以通過(guò)提前求導(dǎo)的方式,將循環(huán)體中的除法變成乘法運(yùn)算,節(jié)省了運(yùn)算量。for循環(huán)優(yōu)化編程如圖7所示。
C/C++編譯器支持很多的關(guān)鍵字和預(yù)編譯宏指令,在某些場(chǎng)合下使用能起到很好的效果。_nassert指令可判斷指針x所指的地址是否以單/雙字(32/64bit)對(duì)齊,語(yǔ)法_nassert(n)中n為1則通過(guò),為0則拋出異常,在DSP程序編程中通過(guò)圖8所示方法使用。該指令搭配#pragma DATA_ALIGN(symbol,constant)宏指令,在循環(huán)前調(diào)用該指令,將變量的首地址的字節(jié)對(duì)齊,便于編譯器對(duì)循環(huán)處理中的數(shù)據(jù)進(jìn)行優(yōu)化,充分利用Cache的行拷貝和塊拷貝。
TMS320C6678多核架構(gòu)支持OpenMP并行計(jì)算模型,配置完omp支持后,使用#paragram omp parallel for XXX宏指令的方式調(diào)用OpenMP加速,根據(jù)DSP核號(hào),編譯器自動(dòng)分配每個(gè)核處理的部分,如圖9所示。
C6000編譯器提供了很多內(nèi)聯(lián)函數(shù),并在其配套的MCSDK中提供了大量的算法庫(kù),如dsplib、mathlib、imglib等,這些內(nèi)聯(lián)函數(shù)是TI公司編寫優(yōu)化后的匯編代碼,可快速優(yōu)化C代碼。SAD匹配算法可將圖像分成8×8或16×16大小的子塊,每個(gè)子塊調(diào)用imglib中的IMG_sad_8×8/ IMG_sad_16×16函數(shù)來(lái)實(shí)現(xiàn)。
3.4 算法并行化設(shè)計(jì)
目標(biāo)識(shí)別算法中的預(yù)處理及匹配過(guò)程都需要對(duì)全圖進(jìn)行計(jì)算,每次計(jì)算只針對(duì)一個(gè)子窗口區(qū)域,這樣就為算法的并行化設(shè)計(jì)提供了方便,可以視算法的復(fù)雜程度將圖像處理區(qū)域劃分為7份或8份,分配給8個(gè)核進(jìn)行處理,圖像區(qū)域的劃分同樣需要考慮到內(nèi)存地址尋址的便捷、處理結(jié)果的融合以及數(shù)據(jù)處理過(guò)程中DMA搬運(yùn)數(shù)據(jù)沖突最小等因素。
圖像通常是對(duì)灰度圖進(jìn)行處理,只有8位有效數(shù)據(jù),可通過(guò)線性匯編的編程方式對(duì)核心處理算法進(jìn)行進(jìn)一步優(yōu)化,每個(gè)核的功能單元可同時(shí)處理2~4個(gè)像素的圖像數(shù)據(jù)。 DSP優(yōu)化加速前后結(jié)果見(jiàn)表1。
表1? DSP優(yōu)化加速前后結(jié)果
功能模塊 優(yōu)化方法 優(yōu)化前時(shí)間/ms 優(yōu)化后時(shí)間/ms
幾何校正 循環(huán)展開(kāi)、浮點(diǎn)轉(zhuǎn)定點(diǎn) 4.16 1.16
SAD imglib中內(nèi)聯(lián)函數(shù)(單核) 97.90 88.30
SAD 匯編優(yōu)化并行 97.90 22.30
4 結(jié)論
該文提出的紅外目標(biāo)識(shí)別算法適應(yīng)能力強(qiáng),計(jì)算過(guò)程簡(jiǎn)單快速,符合系統(tǒng)穩(wěn)定性、實(shí)時(shí)性的要求。在算法DSP移植及優(yōu)化過(guò)程中,更是結(jié)合了TMS320C6678芯片設(shè)計(jì)時(shí),對(duì)快速數(shù)據(jù)傳輸通道、指令執(zhí)行軟件流水以及多核并行等模塊的支持,對(duì)算法進(jìn)行并行化設(shè)計(jì),充分利用DSP多核、多流水的信號(hào)處理優(yōu)勢(shì)。TI官方提供的優(yōu)化代碼有一定的優(yōu)化效果,但是結(jié)合算法與芯片架構(gòu)進(jìn)行深度優(yōu)化效果更佳。算法優(yōu)化無(wú)止境,優(yōu)化前需要對(duì)算法各模塊的性能進(jìn)行監(jiān)測(cè)評(píng)估,優(yōu)先優(yōu)化耗時(shí)長(zhǎng)的模塊,使優(yōu)化效果達(dá)到最優(yōu)。
參考文獻(xiàn)
[1]吳立德.計(jì)算機(jī)視覺(jué)[M].上海:復(fù)旦大學(xué)出版社,1993.
[2]牛金海. TMS320C66x KeyStone架構(gòu)多核DSP入門實(shí)例精解[M].上海:上海交通大學(xué)出版社,2017.
[3]夏際金,趙洪立,李川. TIC66x多核DSP 高級(jí)軟件開(kāi)發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2017.
[4]陳國(guó)良.并行計(jì)算——結(jié)構(gòu)算法編程[M].北京:高等教育出版社,2011.