崔 文,李 強,劉曉春,李 由
(1. 中國人民解放軍96941部隊, 北京 102208; 2. 國防科技大學 空天科學學院, 湖南 長沙 410073;3. 中國航天員科研訓練中心人因工程重點實驗室, 北京 100194 )
紅外成像末制導[1]是精確制導武器的一種重要制導方式,采用前視紅外末制導的導彈在進行攻擊檢查時可用圖像匹配[2-8]實時推演判斷識別點可跟蹤性,以特定姿態仿真導彈導引至目標點的可行彈道。霧靄氣象條件下,為保障命中精度,紅外導引頭一般需要對實時圖進行預處理而后進行匹配運算。為仿真紅外導引頭實時匹配導引過程,完成目標實時跟蹤性判斷,本文針對限制對比度自適應直方圖均衡(Contrast-Limit Adaptive Histogram Equalization, CLAHE[9])和歸一化互相關(Normalization Cross Correlation, NCC)算法開展加速策略研究,提出基于統一計算設備架構(Compute Unified Device Architecture, CUDA)的霧靄圖像實時處理加速方案,程序優化后,可實現目標可跟蹤性實時判斷。
在實時圖像處理算法設計領域,學者們研究的熱點集中在數字信號處理器(Digital Signal Processor, DSP)、現場可編程門陣列(Field Programmable Gate Array, FPGA)和多核中央處理器(Central Processing Unit, CPU)算法設計與應用。陳正剛等[10]研究了基于DSP與FPGA的視頻跟蹤系統硬件設計和NCC方法快速實現,將一幀圖像的跟蹤算法計算時間降至20 ms以內。肖漢等[11]采用圖形處理器(Graphics Processing Unit, GPU)并行化方法研究圖像匹配問題,獲得7倍于CPU實現的圖像匹配運算速度,雖然在影像數據較大時,由于未對主機和設備之間的數據傳輸進行優化,實時度明顯降低,但研究給后繼者以啟迪,推動著GPU并行化應用加速發展。宋驥等[12]改進優化了基于GPU并行計算的圖像快速匹配,改進優化后的算法對圖像尺寸有較強適應性。實時圖像處理硬件設計方面,曾有研究人員[13-14]指出,對于數據處理能力要求很高的應用領域,GPU具有CPU甚至高端DSP不可比擬的性能優勢。以上研究表明,選用合適的硬件和軟件實現對實時圖像處理速度至關重要,是值得設計人員重點考慮的因素?;谶壿嬮T和觸發器等數字電路進行并行任務處理的FPGA,實時性很高,但造價昂貴、編程速度慢,并不適合做實時圖像處理算法驗證實驗。鑒于上述研究成果和工程經驗,本文初步確定采用GPU+CPU的硬件組成形式進行實驗。
針對實時圖像處理并行加速,有文獻[15]指出,基于開源計算機視覺庫OpenCV進行數字圖像處理、模式識別、運動跟蹤等多核CPU算法開發可以提升運算速度;文獻[16]指出,采用高效的GPU并行計算算法,構建CPU/GPU異構計算平臺已解決眾多模擬計算加速問題;文獻[17]指出,在目標跟蹤點搜索及跟蹤應用領域,基于CUDA并行程序設計的GPU編程加快了運算速度。也就是說,多核CPU并行算法、GPU并行算法都可用于圖像處理加速。更好更優的算法決定了更少的計算時間,是實現實時性的關鍵,也是本文要著重考慮的問題。

圖1 霧靄圖像實時處理算法計算流程圖Fig.1 Real-time foggy image processing flowchart
在進行加速策略研究之前,先對加速的對象——霧靄圖像實時處理算法進行簡單描述。該算法以CLAHE算法和模板圖像匹配算法為核心要素,計算流程見圖1?;诜謮K處理的自適應直方圖均衡算法可對霧靄天氣條件下的圖像進行去霧增強,并通過限制對比度閾值去除圖像噪聲影響,均衡效果較經典直方圖優秀且不會過度放大噪聲。圖像匹配就是以“圖”搜圖,較為成熟的有基于模板的匹配和基于特征的匹配兩種[1]。基于模板的匹配是從實時圖中搜索比對出模板圖,計算量大[18],對旋轉、形變、遮擋比較敏感,但匹配準確度高,需要考慮硬件加速;基于特征的匹配是從實時圖中搜索到特征量,計算量相對較小,對灰度、形變及遮擋的適應性較好,匹配精度較高。常用的圖像匹配計算公式有絕對平均誤差(Mean Absolute Deviation, MAD)、絕對差和(Sum of Absolute Differences, SAD)、最小均方誤差(Mean Squared Error, MSE)和NCC(如式(1)所示)。對于本文研究的目標實時跟蹤性判斷來說,需要考慮相互匹配的圖像間亮度變化可能,NCC能更好消除這種影響,準確度更高。
(1)

要解決的問題就集中到如何在毫秒間完成圖像匹配,即算法實時化加速問題。
OpenMP多核CPU并行加速方案是采用多線程技術進行并行計算加速。特點是CPU所有的核共享一個內存,不同核執行不同線程,在同一內存的不同部分操作多數據,加速的目的是將各線程工作負載均衡分配,CPU整體計算速度達到最高。常見的For循環語句采用圖2方式實現代碼并行化;不同代碼段并行執行時,采用OpenMP Section語句(見圖3)實現。
#pragma omp parallel for schedule(dynamic)
for(i=0;i { 可并行部分代碼; } 圖2 OpenMP并行化For循環實現方式 #pragma omp parallel sections GPU并行加速方案是通過使用NVIDIA公司的CUDA編程模型實現“block間粗粒度并行”和“thread間細粒度并行”雙層并行加速。 加速方案用CUDA實現時,由CUDA編程指定CPU指令和內存分配,GPU完成具體并行計算。具體說就是,用CPU可編譯執行的代碼實現并行數據加載內存,數據映射到GPU,然后GPU開展并行計算、共享存儲器塊內數據,定制運行的眾線程數量,完成核函數(用_global_前綴標明)并行計算,完成后再把控制權交回CPU,數據映射回CPU,最終進行數據存取和文件讀寫,由GPU可編譯執行的代碼和CPU可編譯執行代碼共同完成全算法加速。加速算法實現時,要注意劃分的線程塊內warp數目合理,每個流處理器都可交替執行內部warp,提高整體計算效率;也要根據NVIDIA GPU設備的流處理器個數,并行使用合理的線程塊block數,提升流多處理器(Streaming Multiprocessor, SM)利用率。 GPU算法開銷常見的有調度開銷、GPU內核函數啟動開銷和內核函數之間數據傳輸開銷。算法優化主要考慮循環融合和內核融合。循環融合是盡量將明顯獨立的循環進行歸并,減少總體迭代的次數;內核融合是將數據重用、內存合并、線程間數據共享。霧靄圖像實時處理算法加速策略中的歸一化互相關部分,考慮申請共享內存進行CUDA并行實現,使得每個線程塊block、每個線程thread都能訪問和操作這塊共享內存。由于共享內存是基于存儲體切換架構的,無論多少個線程發起操作,每個存儲體每個周期只執行一次操作,即如果有線程束中的一個線程訪問片上共享內存,所有的線程都能在這同一指令周期內同時執行訪問共享內存,無須順序訪問,因而能有效減少圖像匹配算法像元讀取訪問次數,降低數據訪問開銷。 圖4 實時圖內block劃分Fig.4 Block division in real-time figure 需要說明的是,匹配循環次數也對算法效率產生影響。由于匹配循環次數等于[(實時圖寬度-模板圖寬度)/ 線程塊Y方向大小, (實時圖長度-模板圖長度)/ 線程塊X方向大小],匹配循環次數越少, CUDA內核函數1次可使用核心數越多,算法開銷也越小。當內核函數計算需被拆分成多次,無法一次完成時,加速效果將大大降低。以上性能加速均基于線程塊大小的平方與匹配循環次數的乘積小于GPU設備標稱核心數目。實驗使用的GPU單個線程塊block管理的最大線程數量為1024,BLOCKSIZE必須小于等于32。固定模板圖為64像素×64像素,模板圖線程塊大小BLOCKSIZE可從典型值8、16、32中取一種;固定模板圖為32像素×32像素,模板圖線程塊大小BLOCKSIZE可從典型值8、16中取一種。又鑒于實驗所用GPU設備標稱核心數目,線程塊大小、匹配循環次數最好按表1所列配對方式選取,具體的實驗結果參見下一部分內容。 表1 主要設計參數配對表 CLAHE部分的CUDA優化加速是分別對直方圖生成、直方圖裁剪、直方圖再均衡環節進行,將圖像各個分組箱分塊內的像元灰階數、分組箱分塊內超出限定灰度閾值范圍的灰階數目使用共享存儲器實現數據共享,實現圖像像素點For循環累加計數運算CUDA并行化,達到降低算法開銷、優化加速的目的。 針對上述兩種加速方案開展對比實驗。針對圖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的兩個數據發現,選用的線程塊尺寸大小不合適(圖像大小不能整除線程塊尺寸大小)會造成加速比過低,導致效果接近表3中OpenMP多核CPU加速效果。為提高加速比,在GPU CUDA加速實現策略中避免選擇此種線程塊尺寸。剔除兩數據后的表2,圖像匹配 GPU優化加速后較未使用加速策略前計算時間縮短至4.85%~17.11%,計算性能提高5~20倍,加速效果理想。對比表4、表5可以發現,CLAHE算法GPU優化加速后時間可縮短至10.17%~14.32%,計算性能提高6~9倍。分析表2中圖像大小與加速比關系可發現,使用CUDA并行實現NCC加速時,選定線程塊大小后,存在實時圖與模板圖最優尺寸配對,使加速比達到最大。 透過數據本身,進一步分析可得到:線程塊大小設計對加速性能有很大影響,這進一步驗證了優化設計的原理;當圖像大小是線程塊尺寸大小的整數倍時,相比隨意的線程塊大小尺寸,計算時間更短,這是因為減少了總迭代次數,降低了算法開銷;同時線程塊越小,GPU使用的核心數越多,加速性能越明顯。對于圖像匹配NCC算法,實時圖為64像素×64像素、模板圖為32像素×32像素、線程塊大小為8像素×8像素時,CUDA使用核心數為4×4×8=128<384(GPU核心數),并且中間成果數據融合效率最高,因而加速性能最高。當實時圖為128像素×128像素、模板圖為64像素×64像素、線程塊大小為8像素×8像素時,CUDA使用核心數為8×8×8=512>384(GPU核心數),內核函數計算被拆分成多次計算,加速性能有所減弱,但因分塊形式對于數據融合較為高效,也能最終獲得9.33倍的加速效果。 1)充分利用共享寄存器的CUDA加速算法設計,可以降低GPU設備讀取數據次數,實現并行線程間數據共享,實現算法加速。單幅圖像CUDA加速算法線程塊尺寸設計對加速性能有較大影響,當模板圖圖像大小是線程塊尺寸大小整數倍時,相比隨意的線程塊大小尺寸,計算時間更短;對于性能指標固定的GPU,選定線程塊大小后,能實時處理的實時圖和模板圖存在最優尺寸大小,可通過仿真實驗方法進行測試標定。 2)從總體時間性能指標方面來看,基于CUDA的霧靄圖像GPU并行處理算法計算速度較未進行CUDA加速優化前提高5~20倍,且GPU使用的核心數越多,加速性能越明顯;64像素×64像素實時圖與32像素×32像素模板圖匹配的計算時間僅為5.57 ms,達到實時仿真計算的要求,能夠用于目標實時跟蹤性判斷檢測。 3)在解決單幅圖像并行處理需求方面,使用OpenMP實現多核CPU并行加速效果不如使用GPU CUDA加速明顯,OpenMP算法開支時間較大,實時性較差。相比之下,OpenMP多核CPU并行更適合多幅圖像同時進行處理,減少總體作業開支時間。
Fig.2 For loop′s OpenMP parallelization
{
# pragma omp section
{
可并行代碼
}
# pragma omp section
{
可并行代碼
}
}
圖3 不同段并行執行的OpenMP Section語句
Fig.3 Different section parallelization in OpenMP2.3 加速方案二:高效GPU并行算法
2.4 CUDA實現并行加速策略



3 結果與分析






4 結論