張戰(zhàn)偉,李增三,龐 坤
(山東明嘉勘察測繪有限公司,山東 淄博 255086)
遙感大數(shù)據(jù)時代,衛(wèi)星遙感數(shù)據(jù)量持續(xù)增長,數(shù)據(jù)來源呈多樣化發(fā)展趨勢且更新速度不斷加快。對這些大量遙感影像數(shù)據(jù)進行快速、準確的處理和分析變得越來越重要。幾何校正是對衛(wèi)星影像進行位置精確度的修正,其目的是將影像中的每個像元與地球表面相應的地理位置對應,以消除地球曲率和地形變化等因素對影像位置精度的影響,為后續(xù)遙感數(shù)據(jù)的分析和應用提供準確的地理信息[1]。當前,來自不同傳感器的遙感數(shù)據(jù)不斷增加,快速幾何校正可以使不同傳感器獲取的影像具有一致的地理坐標系,從而為遙感數(shù)據(jù)的融合分析創(chuàng)造條件。在環(huán)境變化、資源管理和城市規(guī)劃等領(lǐng)域,研究者們需要對長時間序列的遙感數(shù)據(jù)進行分析,快速幾何校正可以消除不同時間和空間的遙感數(shù)據(jù)之間的位置誤差,使得時序數(shù)據(jù)具有可比性[2]。
RPC(Rational Polynomial Coefficients)模型是一種廣泛應用于衛(wèi)星影像幾何校正的方法,通過多項式擬合實現(xiàn)像方坐標與物方坐標轉(zhuǎn)換[3]。無法獲得高精度數(shù)字正射影像等參考數(shù)據(jù)時,基于RPC模型對遙感影像進行校正能夠獲得可信的精度[4]。RPC模型具有較高的精度和通用性,在遙感領(lǐng)域的多種應用場景中發(fā)揮著重要作用。隨著遙感數(shù)據(jù)量的快速增長,傳統(tǒng)的串行處理方法已經(jīng)難以滿足實時性和高效性的需求。因此,針對RPC校正模型開發(fā)并行算法具有重要意義。并行算法可以充分利用多核處理器和GPU等并行計算資源,顯著縮短遙感影像幾何校正的處理時間,提高數(shù)據(jù)處理效率[5-6]。采用并行算法可以克服單機內(nèi)存和計算能力的限制,支持大規(guī)模遙感數(shù)據(jù)的快速幾何校正,為遙感大數(shù)據(jù)時代的應用需求提供技術(shù)支撐。
隨著GPU和多核CPU技術(shù)的發(fā)展,它們在遙感影像處理中的應用得到了廣泛的關(guān)注。研究人員在遙感影像分類[7]、正射校正[8]、特征匹配[9]、特征檢測[10]、影像融合[11]等多個方面開發(fā)了并行算法。在海量遙感影像處理及分析任務中,GPU及多核CPU的應用提供了更高的計算效率,確保了數(shù)據(jù)的實時性。為了提高處理效率,一些研究人員對RPC校正的并行算法進行了研究。比如,劉宇等人為縮短影像校正時間,使用GPU實現(xiàn)了寬幅遙感影像的并行RPC校正,在高分二號多光譜影像和全色影像上的計算上獲得了3.71及8.27的加速比[12]。
雖然GPU在RPC模型進行衛(wèi)星影像校正并行算法方面具有優(yōu)勢,但目前的并行算法仍存在一些不足之處,缺少對內(nèi)存限制、通信開銷、負載均衡、資源利用率等方面的系統(tǒng)研究。因此,本文對GPU及多核CPU基于RPC模型衛(wèi)星影像校正并行算法的設計及算法優(yōu)化進行研究,以進一步提高并行算法的效率以及算法的適用性。
基于 RPC(有理多項式系數(shù))模型[13]的衛(wèi)星影像校正是一種廣泛應用的方法。RPC模型通過有理多項式函數(shù)描述地面坐標和像素坐標之間的映射關(guān)系。RPC模型通常包括兩個有理多項式方程,一個用于計算像素的行坐標,另一個用于計算像素的列坐標。
假設地面坐標為(X,Y,Z),影像坐標為(x,y),RPC模型的基本形式如式(1)—式(6):
(1)
(2)
(3)
(4)
(5)
(6)
其中,Ox,Oy均為平移系數(shù);Sx,Sy均為縮放系數(shù);aijk,bijk,cijk,dijk均為PRC模型參數(shù),i,j和k的取值范圍為0~3。這些系數(shù)通常由衛(wèi)星影像供應商提供,使用這些系數(shù)可以通過上述公式將地面坐標(X,Y,Z)轉(zhuǎn)換為影像坐標(x,y)。然后,利用這些影像坐標進行影像校正。
CUDA(Compute Unified Device Architecture)是NVIDIA推出的一種并行計算框架,可以充分利用GPU的計算能力,加速影像處理過程。本文基于CUDA進行GPU并行算法及其優(yōu)化研究,算法思路如圖1所示。
以下是算法關(guān)鍵步驟的具體細節(jié)。
1)RPC讀取:讀取由衛(wèi)星影像數(shù)據(jù)提供商提供的RPC模型參數(shù)文件(如*.rpb),獲取平移系數(shù)、縮放系數(shù)及多項式參數(shù)數(shù)據(jù)。
2)CUDA核函數(shù)設計:核函數(shù)處理單元為單個像素,根據(jù)當前線程像素坐標和RPC模型參數(shù)計算地面坐標,然后將地面坐標轉(zhuǎn)換為輸出影像的像素坐標,最后將輸入影像的像素值復制到輸出影像的相應位置。
3)線程塊和網(wǎng)格大小確定:為了充分利用GPU的計算能力,需要合理地選擇線程塊和網(wǎng)格大小。線程塊大小通常為16×16或32×32,應確保每個線程塊中的線程數(shù)量是warp大小的整數(shù)倍。網(wǎng)格大小根據(jù)影像尺寸和線程塊大小來確定,以確保所有像素點都被處理。
4)GPU內(nèi)存分配及數(shù)據(jù)拷貝:為輸入影像和輸出影像分配GPU內(nèi)存,然后將輸入影像從主機內(nèi)存復制到GPU內(nèi)存。
5)核函數(shù)調(diào)用:調(diào)用核函數(shù)進行RPC變換,核函數(shù)在GPU上并行執(zhí)行,每個線程處理一個像素點。
6)GPU內(nèi)存數(shù)據(jù)輸出:核函數(shù)執(zhí)行完成后,將輸出影像從GPU內(nèi)存復制回主機內(nèi)存并保存至磁盤。
7)優(yōu)化:使用共享內(nèi)存、常量內(nèi)存來加速內(nèi)存訪問,并進行多流優(yōu)化、多線程多流優(yōu)化、對邊界和異常值進行處理。具體優(yōu)化策略包括:
a.將RPC模型參數(shù)存儲在常量內(nèi)存中,以減少全局內(nèi)存訪問。
b.使用CUDA多流技術(shù)實現(xiàn)任務并行執(zhí)行,將影像分割成多個子區(qū)域,并為每個子區(qū)域創(chuàng)建一個CUDA流。
c.針對大影像,影像分割為大小相等的子區(qū)域,以確保每個線程處理的任務量相似。
d.根據(jù)GPU的計算能力動態(tài)調(diào)整線程塊和網(wǎng)格大小,充分利用GPU資源。
e.根據(jù)GPU內(nèi)存容量采用拷貝數(shù)據(jù)最大化策略,在GPU上完成所有計算任務,再將輸出影像復制回主機內(nèi)存。
f.異步數(shù)據(jù)傳輸與計算策略,使用cudaMemcpyAsync函數(shù)實現(xiàn)異步數(shù)據(jù)傳輸,在數(shù)據(jù)傳輸過程中同時執(zhí)行其他任務。
OpenMP(Open Multi-Processing)是一種支持多平臺共享內(nèi)存并行編程API,它采用基于指令的方法簡化并行程序的開發(fā)。OpenMP使用編譯器指令(#pragma omp)來實現(xiàn)并行化,使得將串行代碼轉(zhuǎn)換為并行代碼變得相對簡單。通過在適當?shù)奈恢锰砑又噶?開發(fā)人員可以在不修改原始代碼結(jié)構(gòu)的情況下實現(xiàn)并行處理。此外,OpenMP還具有可移植性、兼容性、可擴展性、支持多種并行模式以及自動化并行任務管理等特點和優(yōu)勢,使得它成為多核CPU并行編程的理想選擇。
RPC模型遙感影像校正的最小處理單元為像素,可以將不同的像素分配給不同的CPU線程進行處理,這種任務分解方法便于使用OpenMP的并行計算能力。由于OpenMP并行實現(xiàn)相對簡單,以下通過偽代碼的形式來說明本文的并行算法設計及優(yōu)化方法,如圖2所示。
在代碼中,對于并行算法的優(yōu)化主要采用以下策略:
1)使用高效數(shù)學庫,提高數(shù)學運算性能。2)采用一維數(shù)組存儲影像數(shù)據(jù),通過計算索引值來訪問像素,減少內(nèi)存訪問開銷。3)設計RPC模型參數(shù)結(jié)構(gòu)體來組織數(shù)據(jù)。4)使用OpenMP的“collapse”將嵌套循環(huán)合并為一個并行循環(huán),以提高線程利用率。
采用高分一號衛(wèi)星(GF-1)、高分6號衛(wèi)星(GF-6)、高分7號衛(wèi)星(GF-7)影像進行實驗,高分系列衛(wèi)星遙感影像標準產(chǎn)品中提供了全色及多光譜影像數(shù)據(jù)及*.rpb文件(RPC參數(shù))。本文總計開展了4組實驗,影像數(shù)據(jù)量介于0.69 GB~1.81 GB之間,如表1所示。
表1 實驗數(shù)據(jù)情況
實驗采用的計算機硬件如表2所示。
表2 實驗采用的計算機硬件配置
本文采用加速比評價并行算法的加速效果,加速比計算如式(7)所示。
(7)
其中,S為加速比;T1為單線程算法的執(zhí)行時間;T為并行算法的執(zhí)行時間。
表3為4組實驗分別采用CPU、多核CPU,GPU進行計算的時長統(tǒng)計,以及多核CPU,GPU與單線程CPU計算的加速比統(tǒng)計情況。
表3 加速比統(tǒng)計情況
由表3可以看出,本文提出的并行算法在計算效率上提升明顯,其中GPU的加速比介于22.9~71.5之間,多核CPU的加速比介于5.4~5.7之間;在綜合效率上,GPU的加速比介于2.4~32.4之間,多核CPU的加速比介于2.1~5.0之間。其中第4組加速效果最為明顯,主要原因是第4組數(shù)據(jù)為單波段數(shù)據(jù),大幅縮短了數(shù)據(jù)I/O操作的時間,從而體現(xiàn)了并行算法在整體時間上的優(yōu)勢。為了優(yōu)化數(shù)據(jù)I/O操作,本文針對波段數(shù)多于1的情況,對算法進行了進一步優(yōu)化,按照波段逐一進行處理,然后再將各波段寫入同一影像。表4是按照新的優(yōu)化策略,GPU計算時間及總處理時間的統(tǒng)計情況。從表4可以看出,該策略取得了明顯的數(shù)據(jù)處理效率提升效果。
表4 I/O優(yōu)化后加速比統(tǒng)計
相對GPU并行,基于OpenMP進行多核并行的開發(fā)十分簡單,僅用幾行代碼即可實現(xiàn)算法的并行,而且在讀寫密集型并行計算中,可以獲得與GPU并行相當?shù)募铀俦?。為了進一步了解多核CPU并行加速的效果,本文對使用不同線程數(shù)量對加速結(jié)果的影響進行了實驗,如圖3所示。
由圖3可以看出,線程數(shù)量較少時處理效率提升明顯,當線程數(shù)量接近處理器核心數(shù)時,處理效率提升趨于平緩。因此,選擇合適的線程數(shù)量十分重要,通常可以將線程數(shù)量設置為處理器核心數(shù)或者稍多于核心數(shù)以獲得相對理想的性能提升。
本文針對衛(wèi)星遙感影像RPC幾何校正問題,提出了基于GPU和多核CPU的并行算法并進行了優(yōu)化。通過對比實驗,驗證了該算法計算性能的優(yōu)勢。具體來說,本文的主要貢獻包括以下幾點:
1)提出了一種基于RPC模型衛(wèi)星影像幾何校正的GPU并行優(yōu)化算法,獲得了22.9~71.5的計算加速比及2.4~32.4的綜合加速比,加速效果明顯。
2)提出了一種基于RPC模型衛(wèi)星影像幾何校正的多核CPU并行優(yōu)化算法,獲得了5.4~5.7的計算加速比及2.1~5.0的綜合加速比。
3)針對多波段數(shù)據(jù)I/O操作壓力大的情況,提出分波段處理的優(yōu)化策略,進一步獲得了1.8倍~2.0倍的加速效果。
提出的并行算法可大幅提升遙感影像計算速度,為諸如生態(tài)環(huán)境監(jiān)測、城市應急、智慧農(nóng)業(yè)、災害監(jiān)測等領(lǐng)域提供更快的數(shù)據(jù)處理支持。盡管本文所提出的并行算法在遙感影像RPC幾何校正上取得了顯著效果,但是仍有以下幾個方面的改進空間:進一步優(yōu)化負載均衡策略,提高多核CPU和GPU之間的協(xié)同效率;進一步研究遙感數(shù)據(jù)的I/O優(yōu)化方法,降低I/O對整體處理效率的影響;針對特定應用場景和硬件配置進行算法定制,以滿足不同用戶的需求。