崔 文,李 強,劉曉春,李 由
(1. 中國人民解放軍96941部隊, 北京 102208; 2. 國防科技大學 空天科學學院, 湖南 長沙 410073;3. 中國航天員科研訓練中心人因工程重點實驗室, 北京 100194 )
紅外成像末制導[1]是精確制導武器的一種重要制導方式,采用前視紅外末制導的導彈在進行攻擊檢查時可用圖像匹配[2-8]實時推演判斷識別點可跟蹤性,以特定姿態(tài)仿真導彈導引至目標點的可行彈道。霧靄氣象條件下,為保障命中精度,紅外導引頭一般需要對實時圖進行預處理而后進行匹配運算。為仿真紅外導引頭實時匹配導引過程,完成目標實時跟蹤性判斷,本文針對限制對比度自適應直方圖均衡(Contrast-Limit Adaptive Histogram Equalization, CLAHE[9])和歸一化互相關(Normalization Cross Correlation, NCC)算法開展加速策略研究,提出基于統(tǒng)一計算設備架構(Compute Unified Device Architecture, CUDA)的霧靄圖像實時處理加速方案,程序優(yōu)化后,可實現(xiàn)目標可跟蹤性實時判斷。
在實時圖像處理算法設計領域,學者們研究的熱點集中在數(shù)字信號處理器(Digital Signal Processor, DSP)、現(xiàn)場可編程門陣列(Field Programmable Gate Array, FPGA)和多核中央處理器(Central Processing Unit, CPU)算法設計與應用。陳正剛等[10]研究了基于DSP與FPGA的視頻跟蹤系統(tǒng)硬件設計和NCC方法快速實現(xiàn),將一幀圖像的跟蹤算法計算時間降至20 ms以內(nèi)。肖漢等[11]采用圖形處理器(Graphics Processing Unit, GPU)并行化方法研究圖像匹配問題,獲得7倍于CPU實現(xiàn)的圖像匹配運算速度,雖然在影像數(shù)據(jù)較大時,由于未對主機和設備之間的數(shù)據(jù)傳輸進行優(yōu)化,實時度明顯降低,但研究給后繼者以啟迪,推動著GPU并行化應用加速發(fā)展。宋驥等[12]改進優(yōu)化了基于GPU并行計算的圖像快速匹配,改進優(yōu)化后的算法對圖像尺寸有較強適應性。實時圖像處理硬件設計方面,曾有研究人員[13-14]指出,對于數(shù)據(jù)處理能力要求很高的應用領域,GPU具有CPU甚至高端DSP不可比擬的性能優(yōu)勢。以上研究表明,選用合適的硬件和軟件實現(xiàn)對實時圖像處理速度至關重要,是值得設計人員重點考慮的因素?;谶壿嬮T和觸發(fā)器等數(shù)字電路進行并行任務處理的FPGA,實時性很高,但造價昂貴、編程速度慢,并不適合做實時圖像處理算法驗證實驗。鑒于上述研究成果和工程經(jīng)驗,本文初步確定采用GPU+CPU的硬件組成形式進行實驗。
針對實時圖像處理并行加速,有文獻[15]指出,基于開源計算機視覺庫OpenCV進行數(shù)字圖像處理、模式識別、運動跟蹤等多核CPU算法開發(fā)可以提升運算速度;文獻[16]指出,采用高效的GPU并行計算算法,構建CPU/GPU異構計算平臺已解決眾多模擬計算加速問題;文獻[17]指出,在目標跟蹤點搜索及跟蹤應用領域,基于CUDA并行程序設計的GPU編程加快了運算速度。也就是說,多核CPU并行算法、GPU并行算法都可用于圖像處理加速。更好更優(yōu)的算法決定了更少的計算時間,是實現(xiàn)實時性的關鍵,也是本文要著重考慮的問題。
圖1 霧靄圖像實時處理算法計算流程圖Fig.1 Real-time foggy image processing flowchart
在進行加速策略研究之前,先對加速的對象——霧靄圖像實時處理算法進行簡單描述。該算法以CLAHE算法和模板圖像匹配算法為核心要素,計算流程見圖1?;诜謮K處理的自適應直方圖均衡算法可對霧靄天氣條件下的圖像進行去霧增強,并通過限制對比度閾值去除圖像噪聲影響,均衡效果較經(jīng)典直方圖優(yōu)秀且不會過度放大噪聲。圖像匹配就是以“圖”搜圖,較為成熟的有基于模板的匹配和基于特征的匹配兩種[1]?;谀0宓钠ヅ涫菑膶崟r圖中搜索比對出模板圖,計算量大[18],對旋轉、形變、遮擋比較敏感,但匹配準確度高,需要考慮硬件加速;基于特征的匹配是從實時圖中搜索到特征量,計算量相對較小,對灰度、形變及遮擋的適應性較好,匹配精度較高。常用的圖像匹配計算公式有絕對平均誤差(Mean Absolute Deviation, MAD)、絕對差和(Sum of Absolute Differences, SAD)、最小均方誤差(Mean Squared Error, MSE)和NCC(如式(1)所示)。對于本文研究的目標實時跟蹤性判斷來說,需要考慮相互匹配的圖像間亮度變化可能,NCC能更好消除這種影響,準確度更高。
(1)
要解決的問題就集中到如何在毫秒間完成圖像匹配,即算法實時化加速問題。
OpenMP多核CPU并行加速方案是采用多線程技術進行并行計算加速。特點是CPU所有的核共享一個內(nèi)存,不同核執(zhí)行不同線程,在同一內(nèi)存的不同部分操作多數(shù)據(jù),加速的目的是將各線程工作負載均衡分配,CPU整體計算速度達到最高。常見的For循環(huán)語句采用圖2方式實現(xiàn)代碼并行化;不同代碼段并行執(zhí)行時,采用OpenMP Section語句(見圖3)實現(xiàn)。
#pragma omp parallel for schedule(dynamic)
for(i=0;i { 可并行部分代碼; } 圖2 OpenMP并行化For循環(huán)實現(xiàn)方式 #pragma omp parallel sections GPU并行加速方案是通過使用NVIDIA公司的CUDA編程模型實現(xiàn)“block間粗粒度并行”和“thread間細粒度并行”雙層并行加速。 加速方案用CUDA實現(xiàn)時,由CUDA編程指定CPU指令和內(nèi)存分配,GPU完成具體并行計算。具體說就是,用CPU可編譯執(zhí)行的代碼實現(xiàn)并行數(shù)據(jù)加載內(nèi)存,數(shù)據(jù)映射到GPU,然后GPU開展并行計算、共享存儲器塊內(nèi)數(shù)據(jù),定制運行的眾線程數(shù)量,完成核函數(shù)(用_global_前綴標明)并行計算,完成后再把控制權交回CPU,數(shù)據(jù)映射回CPU,最終進行數(shù)據(jù)存取和文件讀寫,由GPU可編譯執(zhí)行的代碼和CPU可編譯執(zhí)行代碼共同完成全算法加速。加速算法實現(xiàn)時,要注意劃分的線程塊內(nèi)warp數(shù)目合理,每個流處理器都可交替執(zhí)行內(nèi)部warp,提高整體計算效率;也要根據(jù)NVIDIA GPU設備的流處理器個數(shù),并行使用合理的線程塊block數(shù),提升流多處理器(Streaming Multiprocessor, SM)利用率。 GPU算法開銷常見的有調(diào)度開銷、GPU內(nèi)核函數(shù)啟動開銷和內(nèi)核函數(shù)之間數(shù)據(jù)傳輸開銷。算法優(yōu)化主要考慮循環(huán)融合和內(nèi)核融合。循環(huán)融合是盡量將明顯獨立的循環(huán)進行歸并,減少總體迭代的次數(shù);內(nèi)核融合是將數(shù)據(jù)重用、內(nèi)存合并、線程間數(shù)據(jù)共享。霧靄圖像實時處理算法加速策略中的歸一化互相關部分,考慮申請共享內(nèi)存進行CUDA并行實現(xiàn),使得每個線程塊block、每個線程thread都能訪問和操作這塊共享內(nèi)存。由于共享內(nèi)存是基于存儲體切換架構的,無論多少個線程發(fā)起操作,每個存儲體每個周期只執(zhí)行一次操作,即如果有線程束中的一個線程訪問片上共享內(nèi)存,所有的線程都能在這同一指令周期內(nèi)同時執(zhí)行訪問共享內(nèi)存,無須順序訪問,因而能有效減少圖像匹配算法像元讀取訪問次數(shù),降低數(shù)據(jù)訪問開銷。 圖4 實時圖內(nèi)block劃分Fig.4 Block division in real-time figure 需要說明的是,匹配循環(huán)次數(shù)也對算法效率產(chǎn)生影響。由于匹配循環(huán)次數(shù)等于[(實時圖寬度-模板圖寬度)/ 線程塊Y方向大小, (實時圖長度-模板圖長度)/ 線程塊X方向大小],匹配循環(huán)次數(shù)越少, CUDA內(nèi)核函數(shù)1次可使用核心數(shù)越多,算法開銷也越小。當內(nèi)核函數(shù)計算需被拆分成多次,無法一次完成時,加速效果將大大降低。以上性能加速均基于線程塊大小的平方與匹配循環(huán)次數(shù)的乘積小于GPU設備標稱核心數(shù)目。實驗使用的GPU單個線程塊block管理的最大線程數(shù)量為1024,BLOCKSIZE必須小于等于32。固定模板圖為64像素×64像素,模板圖線程塊大小BLOCKSIZE可從典型值8、16、32中取一種;固定模板圖為32像素×32像素,模板圖線程塊大小BLOCKSIZE可從典型值8、16中取一種。又鑒于實驗所用GPU設備標稱核心數(shù)目,線程塊大小、匹配循環(huán)次數(shù)最好按表1所列配對方式選取,具體的實驗結果參見下一部分內(nèi)容。 表1 主要設計參數(shù)配對表 CLAHE部分的CUDA優(yōu)化加速是分別對直方圖生成、直方圖裁剪、直方圖再均衡環(huán)節(jié)進行,將圖像各個分組箱分塊內(nèi)的像元灰階數(shù)、分組箱分塊內(nèi)超出限定灰度閾值范圍的灰階數(shù)目使用共享存儲器實現(xiàn)數(shù)據(jù)共享,實現(xiàn)圖像像素點For循環(huán)累加計數(shù)運算CUDA并行化,達到降低算法開銷、優(yōu)化加速的目的。 針對上述兩種加速方案開展對比實驗。針對圖5(a)所示的霧靄圖像進行去霧處理,處理后的圖像增強效果見圖5(b)。近處樓房、遠處樓房、天空均得到對比度增強,去霧效果顯著。進行方案一加速和方案二加速后,圖像匹配歸一化算法部分GPU加速后的性能指標、OpenMP多核CPU加速后的性能指標分別見表2、表3;CLAHE算法部分GPU加速后性能指標、OpenMP多核CPU加速后性能指標分別見表4、表5。 (a) 原始霧靄圖像(a) Origin foggy image (b) 去霧靄效果圖(b) Foggy image processing effect show圖5 霧靄圖像處理效果Fig.5 Foggy image processing effect 表2 NCC算法GPU加速后性能指標 表3 NCC算法OpenMP多核CPU加速后性能指標Tab.3 Performance indicators of NCC algorithm with multicore CPU OpenMP acceleration 表4CLAHE算法GPU加速后性能指標 Tab.4 Performance indicators of CLAHE with GPU acceleration 表5 CLAHE算法OpenMP多核CPU加速后性能指標Tab.5 Performance indicators of CLAHE with multicore CPU OpenMP acceleration 查看表2中加速比為1.37和1.86的兩個數(shù)據(jù)發(fā)現(xiàn),選用的線程塊尺寸大小不合適(圖像大小不能整除線程塊尺寸大小)會造成加速比過低,導致效果接近表3中OpenMP多核CPU加速效果。為提高加速比,在GPU CUDA加速實現(xiàn)策略中避免選擇此種線程塊尺寸。剔除兩數(shù)據(jù)后的表2,圖像匹配 GPU優(yōu)化加速后較未使用加速策略前計算時間縮短至4.85%~17.11%,計算性能提高5~20倍,加速效果理想。對比表4、表5可以發(fā)現(xiàn),CLAHE算法GPU優(yōu)化加速后時間可縮短至10.17%~14.32%,計算性能提高6~9倍。分析表2中圖像大小與加速比關系可發(fā)現(xiàn),使用CUDA并行實現(xiàn)NCC加速時,選定線程塊大小后,存在實時圖與模板圖最優(yōu)尺寸配對,使加速比達到最大。 透過數(shù)據(jù)本身,進一步分析可得到:線程塊大小設計對加速性能有很大影響,這進一步驗證了優(yōu)化設計的原理;當圖像大小是線程塊尺寸大小的整數(shù)倍時,相比隨意的線程塊大小尺寸,計算時間更短,這是因為減少了總迭代次數(shù),降低了算法開銷;同時線程塊越小,GPU使用的核心數(shù)越多,加速性能越明顯。對于圖像匹配NCC算法,實時圖為64像素×64像素、模板圖為32像素×32像素、線程塊大小為8像素×8像素時,CUDA使用核心數(shù)為4×4×8=128<384(GPU核心數(shù)),并且中間成果數(shù)據(jù)融合效率最高,因而加速性能最高。當實時圖為128像素×128像素、模板圖為64像素×64像素、線程塊大小為8像素×8像素時,CUDA使用核心數(shù)為8×8×8=512>384(GPU核心數(shù)),內(nèi)核函數(shù)計算被拆分成多次計算,加速性能有所減弱,但因分塊形式對于數(shù)據(jù)融合較為高效,也能最終獲得9.33倍的加速效果。 1)充分利用共享寄存器的CUDA加速算法設計,可以降低GPU設備讀取數(shù)據(jù)次數(shù),實現(xiàn)并行線程間數(shù)據(jù)共享,實現(xiàn)算法加速。單幅圖像CUDA加速算法線程塊尺寸設計對加速性能有較大影響,當模板圖圖像大小是線程塊尺寸大小整數(shù)倍時,相比隨意的線程塊大小尺寸,計算時間更短;對于性能指標固定的GPU,選定線程塊大小后,能實時處理的實時圖和模板圖存在最優(yōu)尺寸大小,可通過仿真實驗方法進行測試標定。 2)從總體時間性能指標方面來看,基于CUDA的霧靄圖像GPU并行處理算法計算速度較未進行CUDA加速優(yōu)化前提高5~20倍,且GPU使用的核心數(shù)越多,加速性能越明顯;64像素×64像素實時圖與32像素×32像素模板圖匹配的計算時間僅為5.57 ms,達到實時仿真計算的要求,能夠用于目標實時跟蹤性判斷檢測。 3)在解決單幅圖像并行處理需求方面,使用OpenMP實現(xiàn)多核CPU并行加速效果不如使用GPU CUDA加速明顯,OpenMP算法開支時間較大,實時性較差。相比之下,OpenMP多核CPU并行更適合多幅圖像同時進行處理,減少總體作業(yè)開支時間。
Fig.2 For loop′s OpenMP parallelization
{
# pragma omp section
{
可并行代碼
}
# pragma omp section
{
可并行代碼
}
}
圖3 不同段并行執(zhí)行的OpenMP Section語句
Fig.3 Different section parallelization in OpenMP2.3 加速方案二:高效GPU并行算法
2.4 CUDA實現(xiàn)并行加速策略
3 結果與分析
4 結論