鄭燦,廖可非,2,3*,歐陽繕,2,3,謝寧波,蔣俊正,2,3
(1.桂林電子科技大學(xué)信息與通信學(xué)院,桂林 541004;2.衛(wèi)星導(dǎo)航定位與位置服務(wù)國家地方聯(lián)合工程研究中心(桂林電子科技大學(xué)),桂林 541004;3.廣西無線寬帶通信與信號(hào)處理重點(diǎn)實(shí)驗(yàn)室(桂林電子科技大學(xué)),桂林 541004)
合成孔徑雷達(dá)是一種能夠在任何時(shí)間、任何天氣條件下獲取高分辨率圖像的主動(dòng)遙感系統(tǒng)[1]?,F(xiàn)今雷達(dá)已成為重要的信息傳感器之一,在國防領(lǐng)域以及民用領(lǐng)域得到越來越廣泛的應(yīng)用[2]。雷達(dá)的高分辨率圖像是對(duì)在一定雷達(dá)頻帶和觀測角范圍內(nèi)的散射數(shù)據(jù)進(jìn)行處理得到的[3],但是要獲得高分辨率的圖像通常需要通過更多計(jì)算來獲得,計(jì)算量的提升進(jìn)而導(dǎo)致成像速率降低。文獻(xiàn)[4]提出在處理海陸分割光學(xué)遙感圖像利用圖形處理器(graphics processing unit, GPU)并行處理的優(yōu)勢, 能夠有效提升算法執(zhí)行速度。文獻(xiàn)[5]提出將GPU的高性能浮點(diǎn)計(jì)算的能力應(yīng)用到探地雷達(dá)三維正演中,能夠使得執(zhí)行效率得到有效提升。在實(shí)現(xiàn)中GPU相較于 CPU而言面臨的問題有成本較高、GPU緩存有限性;而且想要實(shí)現(xiàn)多GPU共享并行運(yùn)算的架構(gòu)較為復(fù)雜[6],雖然壓縮感知(compressive sensing,CS)可以減少常規(guī)SAR的大量數(shù)據(jù)采樣,但CS-SAR成像也面臨成像時(shí)間長、單機(jī)的計(jì)算能力擴(kuò)展性不足的問題。文獻(xiàn)[7]提出了一種基于MapReduce分布式框架計(jì)算SAR原始數(shù)據(jù)仿真方法,有效提高了SAR原始數(shù)據(jù)的仿真速度。文獻(xiàn)[8]提出了MR-CS的方法,該方法基于分布式平臺(tái)利用MapReduce計(jì)算框架在一定的程度上提升了SAR的CS成像。文獻(xiàn)[9]提出了基于MapReduce的SAR后向投影(back projection,BP)快速成像方法(MR-BP)方法,該方法將BP算法與分布式計(jì)算框架MapReduce相結(jié)合,在單機(jī)計(jì)算BP方位向成像是速度有明顯的提升。但是Apache Spark與Hadoop的MapReduce框架相比,在涉及大量迭代算法中Spark的性能要優(yōu)于MapReduce,造成這種差異的主要原因是Spark基于分布式彈性數(shù)據(jù)集(resilient distributed dataset, RDD)處理內(nèi)存中的數(shù)據(jù)[10]。
由此可見,將分布式平臺(tái)應(yīng)用于雷達(dá)成像上可以明顯提升成像效率,但是MapReduce計(jì)算框架不適合大量的迭代運(yùn)算[11],綜上所述,將Spark分布式系統(tǒng)應(yīng)用于SAR成像是解決計(jì)算量大的有效方法之一。基于此,現(xiàn)結(jié)合Spark分布式計(jì)算框架,提出一種基于Spark的SAR壓縮感知成像分布式成像方法,即Spark-CS方法。Spark-CS方法在距離向成像時(shí),首先將壓縮后的數(shù)據(jù)沿方位向?qū)⒚恳恍袆澐譃橐粋€(gè)行向量,使用Map方法將這些行向量以及計(jì)算邏輯發(fā)送到分布式集群上進(jìn)行距離向分布式并行重構(gòu),然后通過聚合方法聚合成距離圖像矩陣;在方位向成像時(shí),將距離向成像的結(jié)果矩陣沿著距離向?qū)⒚恳涣袆澐殖梢粋€(gè)列向量,再使用一次Map方法將這些列向量以及計(jì)算邏輯發(fā)送到分布式集群中進(jìn)行方位向分布式并行重構(gòu),然后將方位向的成像結(jié)果通過聚合方法聚合,完成Spark-CS成像。該方法具有良好的計(jì)算能力擴(kuò)展性,充分利用集群資源通過提高線程數(shù)來提高成像效率,Spark-CS方法可以有效解決基于單機(jī)CS的SAR成像計(jì)算能力擴(kuò)展性不足以及計(jì)算量大導(dǎo)致成像時(shí)間長的問題。
在傳統(tǒng)的CS-SAR方法中,若距離向觀測維數(shù)為N′,方位向觀測維數(shù)為M′,稀疏觀測后的數(shù)據(jù)是一個(gè)M′×N′的復(fù)數(shù)矩陣,則在距離向成像中,重構(gòu)算法中每次重構(gòu)一個(gè)1×N′的行向量,需要重構(gòu)M′次完成距離向重構(gòu);對(duì)于方位向成像,若距離向成像矩陣為M′×N,則每次重構(gòu)一個(gè)M′×1的列向量,需要進(jìn)行N次重構(gòu),完成目標(biāo)成像。對(duì)于此方法迭代次數(shù)較多,單機(jī)串行計(jì)算比較耗時(shí);由于在CS-SAR方法中的待重構(gòu)數(shù)據(jù)的各行、各列都是獨(dú)立重構(gòu)運(yùn)算,且各行、各列的重構(gòu)結(jié)果互不影響,因此在重構(gòu)時(shí)可以考慮CPU的多核多線程以及Spark分布式并行框架來實(shí)現(xiàn)分布式并行迭代計(jì)算達(dá)到成像加速的效果。
Spark-CS方法首先從HDFS上導(dǎo)入數(shù)據(jù)進(jìn)行距離向成像,將距離向成像結(jié)果緩存到RDD中,然后在距離向成像的基礎(chǔ)上完成方位向成像,最后將結(jié)果輸出到分布式文件系統(tǒng)(hadoop distributed file system, HDFS)上完成Spark-CS成像,Spark-CS算法的工作流程圖如圖1所示。
圖1 工作流程圖
本實(shí)驗(yàn)的Spark共享內(nèi)存大規(guī)模數(shù)據(jù)分布式并行計(jì)算平臺(tái)是依托于yarn調(diào)度,且Spark是基于內(nèi)存的大數(shù)據(jù)綜合處理框架,其彈性分布式數(shù)據(jù)集RDD方案,在Spark執(zhí)行作業(yè)的過程中會(huì)自動(dòng)將RDD中的數(shù)據(jù)與相關(guān)計(jì)算邏輯的任務(wù)分發(fā)到集群上,實(shí)現(xiàn)分布式并行化執(zhí)行,有效提升計(jì)算效率;在Spark中各個(gè)RDD之間的作業(yè)相互依賴,Spark通過有向無環(huán)圖(directed acyclic graph, DAG)的方案把所有作業(yè)統(tǒng)一調(diào)度,這種方案不僅速度快而且還有很好的容錯(cuò)性。
Spark的分布式的計(jì)算流程如圖2所示,首先從HDFS中導(dǎo)入數(shù)據(jù),在導(dǎo)入數(shù)據(jù)的同時(shí)并將待處理數(shù)據(jù)進(jìn)行分區(qū),保存到RDD中;每一個(gè)分區(qū)對(duì)應(yīng)的正交匹配追蹤(orthogonal matching pursuit,OMP)計(jì)算邏輯完全相同,將此計(jì)算邏輯封裝在Map方法中,并將這些不同的分區(qū)里的數(shù)據(jù)和相同的計(jì)算邏輯打包成一個(gè)任務(wù)(task),然后將這些Task發(fā)送到不同的執(zhí)行器(executor)中計(jì)算,實(shí)現(xiàn)了分布式并行計(jì)算;最后通過聚合方法將這些結(jié)果聚合起來保存到HDFS中。
圖2 計(jì)算流程圖
由于在CS-SAR方法中,先進(jìn)行距離向成像,然后再進(jìn)行方位向成像;因此在設(shè)計(jì)Spark-CS算法時(shí)也是先進(jìn)性距離向成像,再進(jìn)行方位向成像。Spark是基于內(nèi)存運(yùn)算的,在中間結(jié)果沒有溢出內(nèi)存的情況下可以將中間結(jié)果緩存到內(nèi)存中方便下一次計(jì)算;因此在Spark-CS方法中當(dāng)完成距離向重構(gòu)后不需要落盤操作,能直接方位向重構(gòu)。Spark-CS方法具體操作如下,距離向重構(gòu)首先從HDFS上讀取稀疏矩陣I完成距離向成像,執(zhí)行一次聚合方法將距離向重構(gòu)后的行向量合并成一個(gè)矩陣,將距離向重構(gòu)的結(jié)果緩存到內(nèi)存中;將距離向成像的結(jié)果矩陣轉(zhuǎn)置翻轉(zhuǎn)后再進(jìn)行方位向重構(gòu),再執(zhí)行一次聚合方法并將最終結(jié)果矩陣I′輸出到HDFS,完成Spark-CS對(duì)目標(biāo)重構(gòu),Spark-CS方法具體任務(wù)執(zhí)行流程如圖3所示。
圖3 任務(wù)執(zhí)行流程圖
Spark-CS的距離向重構(gòu)階段,首先從HDFS讀取待的數(shù)據(jù),若重構(gòu)數(shù)據(jù)的大小為M′×N′的復(fù)數(shù)矩陣,將待重構(gòu)數(shù)據(jù)按列劃分成M′個(gè)1 ×N′的行向量,并把這些行向量劃分成n′個(gè)分區(qū),并將數(shù)據(jù)緩存到RDD中,具體劃分如圖4所示。
圖4 Spark-CS距離向成像階段
將已分區(qū)的RDD進(jìn)行Map轉(zhuǎn)換操作。在Spark分布式并行計(jì)算中每一個(gè)分區(qū)都對(duì)應(yīng)的相同的計(jì)算邏輯,因此將OMP重構(gòu)算法封裝到Map轉(zhuǎn)換的邏輯操作當(dāng)中;RDD中的每一個(gè)分區(qū)內(nèi)的數(shù)據(jù)量可能不同,但是每一個(gè)分區(qū)內(nèi)的數(shù)據(jù)所對(duì)應(yīng)的計(jì)算邏輯是完全相同;此時(shí)將每一個(gè)分區(qū)所對(duì)應(yīng)相同的計(jì)算邏輯打包成一個(gè)Task。將集群資源進(jìn)行分配,num-executors 設(shè)置為a,executor-cores 設(shè)置為b,同時(shí)開啟線程數(shù)是num-executors* executor-cores為a×b=c個(gè),而每一個(gè)Task占用一個(gè)線程,因此能夠同時(shí)執(zhí)行c個(gè)Task。將這些Task分發(fā)到各個(gè)節(jié)點(diǎn)的每一個(gè)Executor上去執(zhí)行。等待Executor把所有的Task執(zhí)行完畢后將數(shù)據(jù)進(jìn)行聚合操作,假設(shè)距離向成像的結(jié)果為M個(gè)1×N行矩陣,將這些行矩陣合并成一個(gè)A矩陣大小為M×N,將A先進(jìn)行轉(zhuǎn)置然后再進(jìn)行翻轉(zhuǎn),并A矩陣緩存到RDD中,為方位向重構(gòu)做準(zhǔn)備。
Spark-CS的方位向重構(gòu)階段是無需從HDFS上讀取待重構(gòu)的數(shù)據(jù),而是直接從RDD中讀取距離向重構(gòu)的結(jié)果矩陣A,并將A矩陣按列劃分成N個(gè)M×1的列向量,并把列向量劃分成n個(gè)分區(qū),具體示意圖如圖5所示。
圖5 Spark-CS方位向成像階段
然后將已分區(qū)的RDD進(jìn)行Map轉(zhuǎn)換操作。與距離向重構(gòu)類似,同樣是將OMP重構(gòu)算法封裝到Map轉(zhuǎn)換的邏輯操作當(dāng)中,對(duì)RDD中的每一個(gè)分區(qū)里的數(shù)據(jù)進(jìn)行OMP重構(gòu)計(jì)算,將每一個(gè)分區(qū)所對(duì)應(yīng)相同的計(jì)算邏輯打包成一個(gè)Task。將這些Task分發(fā)到各個(gè)節(jié)點(diǎn)的Executor上去執(zhí)行。等待Executor把所有的Task執(zhí)行完畢后將數(shù)據(jù)進(jìn)行聚合操作,完成方位向成像,再將方位向成像的結(jié)果進(jìn)行fftshift操作,并將最終結(jié)果輸出到HDFS上。
為了驗(yàn)證Spark-CS方法的成像效果的準(zhǔn)確性和加速性,采用基于散射點(diǎn)模型的步進(jìn)頻率目標(biāo)回波仿真數(shù)據(jù)。脈沖序列為1 024個(gè),每個(gè)脈沖序列包含512個(gè)子脈沖。對(duì)步進(jìn)頻信號(hào)的目標(biāo)回波仿真數(shù)據(jù)進(jìn)行稀疏觀測得到稀疏觀測矩陣,距離向和方位向的觀測維數(shù)分別是 450和900,稀疏觀測矩陣大小為900×450。
采用4臺(tái)實(shí)體計(jì)算機(jī)(cdh01~cdh04)搭建了基于CDH 6.3.2搭建的分布式計(jì)算平臺(tái)。為了保證系統(tǒng)的穩(wěn)定可靠的運(yùn)行,集群中的兩個(gè)Name Node角色分配在不同節(jié)點(diǎn),其中的Name Node一個(gè)是活躍的狀態(tài),一個(gè)是備用狀態(tài);集群中的兩個(gè)資源管理器也分配在了不同的節(jié)點(diǎn),其中的Resource Manager一個(gè)是活躍狀態(tài),另一個(gè)是備用狀態(tài);集群的Name Node, Resource Manager以及其他角色的具體分布如表1所示。
表1 角色分布表
通過計(jì)算灰度直方圖與成像圖像之間的相似度來驗(yàn)證Spark-CS成像的準(zhǔn)確性。實(shí)驗(yàn)以CS-SAR方法的成像結(jié)果為基準(zhǔn),計(jì)算Spark-CS方法的目標(biāo)成像圖和CS-SAR方法[12]的目標(biāo)成像圖的灰度直方圖。得到目標(biāo)成像圖像對(duì)應(yīng)的向量,然后計(jì)算兩個(gè)向量的余弦相似度。如果兩個(gè)向量余弦角更接近0°,則這兩個(gè)向量更相似,即這兩個(gè)向量對(duì)應(yīng)的兩個(gè)圖像更相似。Spark-CS方法的目標(biāo)成像結(jié)果如圖6(a)所示,CS-SAR方法的目標(biāo)成像結(jié)果如圖6(b)所示。從圖6可以得出,Spark-CS的成像圖與CS-SAR的成像圖余弦夾角為0°,兩個(gè)方法的成像圖余弦相似度為1,Spark-CS方法的成像結(jié)果與CS-SAR方法的成像結(jié)果相似,Spark-CS方法具有較好的成像精度。
圖6 Spark-CS成像圖與CS-SAR成像圖對(duì)比
壓縮感知成像采用Spark-CS方法與MR-CS方法以及傳統(tǒng)的CS-SAR方法對(duì)比。其中的Spark-CS方法是利用集群中所有節(jié)點(diǎn)分布式并行重構(gòu),實(shí)驗(yàn)重構(gòu)成像是基于Scala語言和Java語言混合編寫的,其中OMP算法迭代100次,距離向成像過程中Spark-CS方法的數(shù)據(jù)從HDFS中讀取,進(jìn)行距離向成像并將中間計(jì)算的結(jié)果緩存到RDD中;其中MR-CS是基于MapReduce的分布式計(jì)算框架,實(shí)驗(yàn)是基于Java語言編寫的,同樣為了保證變量的統(tǒng)一性,每次重構(gòu)采用OMP算法也迭代100次;其中CS-SAR方法是利用分布式計(jì)算集群中的一臺(tái)計(jì)算機(jī)來計(jì)算CS-SAR方法,實(shí)驗(yàn)的重建成像計(jì)算基于Java語言,為了保證變量的統(tǒng)一性,每次重建采用OMP算法也迭代100次。在提速方面Spark-CS與MR-CS、CS-SAR距離向成像時(shí)間對(duì)比如圖7所示,Spark-CS方法的距離向成像時(shí)間相較于CS-SAR方法的距離向成像提升了 1.9倍。Spark-CS方法的距離向成像相較于MR-SAR方法的距離向成像提升不是很明顯,其主要原因在于在Spark開始計(jì)算時(shí)向Yarn提交資源申請的過程比較耗時(shí),在Spark向Yarn提交資源申請后,Yarn會(huì)根據(jù)集群的資源使用情況分配相應(yīng)的計(jì)算資源,當(dāng)Spark得到Y(jié)arn分配的資源以后才開始執(zhí)行相應(yīng)的計(jì)算。
圖7 Spark-CS與MR-CS、CS-SAR距離向成像時(shí)間對(duì)比
Spark-CS方法的方位向成像讀取距離向成像結(jié)果,其結(jié)果緩存在RDD中的數(shù)據(jù),直接進(jìn)行方位向成像,將最終結(jié)果保存在HDFS中,其成像同樣采用OMP算法迭代次數(shù)為100次,成像時(shí)間花了258 s;MR-CS方法的方位向成像讀取距離向成像結(jié)果,將最終結(jié)果保存在HDFS中,為了保證變量的一致性MR-CS方法的方位向成像的OMP算法迭代次數(shù)也為100次,成像時(shí)間花了419 s;同樣為了保證變量的一致性CS-SAR方法的方位向成像的OMP算法迭代次數(shù)同樣為100次,成像時(shí)間花了503 s,Spark-CS與MR-CS、CS-SAR方位向成像時(shí)間對(duì)比如圖8所示。Spark-CS方法方位向成像是直接在內(nèi)存中將Spark-CS距離向的結(jié)果進(jìn)行計(jì)算,而MR-CS在方位向成像的時(shí)候還需從磁盤中讀取距離向的成像結(jié)果進(jìn)行計(jì)算,因此Spark-CS方法方位向成像相較于MR-SAR方法的方位向成像提升了 1.63倍;Spark-CS方法方位向成像相較于傳統(tǒng)的CS-SAR方法的方位向成像約提升了2倍。
圖8 Spark-CS與MR-CS、CS-SAR方位向成像時(shí)間對(duì)比
在Spark-CS方法中,將Spark的executor-cores 和 executor-num這兩個(gè)參數(shù)分別設(shè)置為5和4,因此同時(shí)計(jì)算的task為5×4 = 20個(gè),在距離向成像階段分區(qū)數(shù)為20時(shí)計(jì)算時(shí)間最短,如圖9所示,這樣每一個(gè)Executor分到的數(shù)據(jù)量都為5個(gè)task計(jì)算時(shí)間為186 s;在方位向成像當(dāng)分區(qū)數(shù)大于60時(shí)以后,方位向成像時(shí)間穩(wěn)定在258 s,如圖10所示,每一個(gè)Executor分到task數(shù)量基本一致,不存在數(shù)據(jù)傾斜。
圖9 Spark-CS距離向成像
圖10 Spark-CS方位向成像
Spark-CS方法的在成像過程中不需要將中間結(jié)果進(jìn)行落盤操作,而是將中間結(jié)果緩存在RDD中,以便于后續(xù)的操作直接讀取提升執(zhí)行效率,Spark-CS方法距離向和方位向總的成像時(shí)間花了444 s;MR-SAR方法成像需要將中間結(jié)果保存到HDFS中,降低了執(zhí)行效率,成像時(shí)間花了611 s;傳統(tǒng)的CS-SAR方法成像,成像時(shí)間花了847 s,Spark-CS與MR-CS、CS-SAR綜合成像時(shí)間對(duì)比如圖11所示。Spark-CS方法方位向成像相較于MR-SAR方法的方位向成像提升了 1.4倍;Spark-CS方法成像相較于傳統(tǒng)的CS-SAR方法成像提升了1.9倍。
圖11 Spark-CS與MR-CS、CS-SAR綜合成像時(shí)間對(duì)比
對(duì)于SAR-CS方法單機(jī)成像存在計(jì)算時(shí)間長和計(jì)算能力擴(kuò)展性不足兩個(gè)主要問題,Spark-CS方法距離成像速度和方位成像速度都有明顯的提升,有效地解決了單機(jī)成像存在計(jì)算時(shí)間長和計(jì)算能力擴(kuò)展性不足的問題;對(duì)于基于MapReduce計(jì)算平臺(tái)MR-CS方法的距離成像和方位成像,由于MapReduce計(jì)算平臺(tái)不擅長迭代計(jì)算,因此Spark-CS方法相較于MR-CS方法的距離向和方位向綜合成像能力方面有較為明顯的提升。