段 賀 胡子涵 蒿興華 沈 紅
1(中國科學(xué)院電子學(xué)研究所蘇州研究院 江蘇 蘇州 215123) 2(蘇州市空天大數(shù)據(jù)智能應(yīng)用技術(shù)重點實驗室 江蘇 蘇州 215123) 3(合肥工業(yè)大學(xué)軟件學(xué)院 安徽 合肥 230601) 4(中國人民解放軍31108部隊 江蘇 南京 210016)
隨著我國遙感系列衛(wèi)星的持續(xù)發(fā)射運(yùn)行,遙感技術(shù)不斷發(fā)展,產(chǎn)生的遙感影像分辨率不斷提高。高分遙感影像中的地物信息比低分辨率影像更加豐富,單幅影像的大小可達(dá)幾百M(fèi)B甚至幾GB,大量影像數(shù)據(jù)的存儲以TB為單位計算。高分遙感影像數(shù)據(jù)的爆炸性增長給影像的處理和解譯帶來巨大挑戰(zhàn)[1]。傳統(tǒng)遙感影像解譯算法以人工篩選重點影像并調(diào)用相應(yīng)算法進(jìn)行解譯為主,效率低,難以適用于海量數(shù)據(jù)。在應(yīng)對一些突發(fā)事件時(如重大災(zāi)情、安全防御等),針對目標(biāo)區(qū)域開展高分影像的解譯和跟蹤,對解譯結(jié)果的時效性及質(zhì)量要求極高。因此,需要設(shè)計一種適用于海量高分遙感影像快速處理與解譯的方法,使高分?jǐn)?shù)據(jù)在偵察監(jiān)控突發(fā)事件過程中發(fā)揮其自身的最大優(yōu)勢和價值。
針對海量影像的高效存儲和處理,不少學(xué)者從優(yōu)化計算性能的角度開展了相關(guān)研究。例如,張涵斐等[2]提出了針對海量遙感影像的存儲與快速調(diào)度顯示方法,依托高性能計算機(jī)的強(qiáng)大處理能力來提高影像的基礎(chǔ)預(yù)處理能力。王俊等[3]將計算機(jī)集群處理技術(shù)應(yīng)用到遙感影像的處理上,通過Hadoop分布式文件系統(tǒng)(HDFS)的云存儲。Lin等[4]實現(xiàn)了大型影像文件的多并發(fā)同步快速讀寫測試。深度學(xué)習(xí)技術(shù)的不斷開拓和應(yīng)用,為海量高分遙感影像數(shù)據(jù)的處理和解譯提供了新途徑。Maggiori等[5-8]的實驗表明,基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)提取的高分影像特征在區(qū)域分類、場景理解、地物識別等方面具有很好的效果。高常鑫等[9]利用高分遙感影像對典型目標(biāo)開展檢測和識別研究中,提出了一種分層深度學(xué)習(xí)模型以實現(xiàn)高精度目標(biāo)檢測。張鑫龍等[10]針對高分遙感影像的配準(zhǔn)誤差和特征提取問題,采用深度學(xué)習(xí)方法提升高分遙感影像變化檢測能力。
為加快高分影像的處理和解譯效率,本研究開發(fā)了一種基于B/S架構(gòu)的遙感影像快速解譯系統(tǒng),以多并發(fā)、多節(jié)點、多線程、多用戶、多任務(wù)為計算模式,快速實現(xiàn)大幅影像的入庫、影像信息的錄入及處理;以深度學(xué)習(xí)算法為核心解譯技術(shù),設(shè)計并實現(xiàn)了一套以自動識別為主、人工校驗判讀為輔的影像解譯流程;以模塊化的方式構(gòu)建部署深度學(xué)習(xí)模型訓(xùn)練平臺,提供可視交互的模型構(gòu)建和訓(xùn)練服務(wù);結(jié)合影像金字塔、分塊瓦片技術(shù)以及改進(jìn)的Nginx服務(wù)器,實現(xiàn)高分影像的快速加載和可視。
整個快速解譯系統(tǒng)基于B/S架構(gòu),整體分為四層,即前端交互層、Web服務(wù)層、業(yè)務(wù)邏輯層和計算服務(wù)層,如圖1所示。
圖1 系統(tǒng)架構(gòu)設(shè)計
(1) 前端交互層。前端交互層為用戶提供可交互式的影像數(shù)據(jù)入庫、影像判讀、可視化地搭建深度學(xué)習(xí)模型以及專題產(chǎn)品輸出四大功能模塊。
(2) Web服務(wù)層。Web服務(wù)層連通了用戶界面交互和系統(tǒng)的業(yè)務(wù)功能。由改進(jìn)的Nginx服務(wù)器提供穩(wěn)定高并發(fā)的網(wǎng)頁、數(shù)據(jù)、文本等資源的訪問和大影像的快速加載等服務(wù)。
(3) 業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯層實現(xiàn)了影像數(shù)據(jù)調(diào)度、影像解譯調(diào)度、算法模型構(gòu)建等業(yè)務(wù)邏輯。系統(tǒng)通過業(yè)務(wù)邏輯層統(tǒng)一調(diào)度數(shù)據(jù)資源與作業(yè)處理,優(yōu)化資源分配與計算效率。主要包括影像入庫、智能初級解譯、人工校驗、推送解譯結(jié)果、模型快速構(gòu)建與更新等模塊。
(4) 計算服務(wù)層。計算服務(wù)層為系統(tǒng)提供數(shù)據(jù)存儲、數(shù)據(jù)計算等功能。主要包括影像的入庫服務(wù)、數(shù)據(jù)庫服務(wù)、算法運(yùn)行服務(wù)、深度學(xué)習(xí)模型訓(xùn)練服務(wù)四個服務(wù)模塊。
用戶通過前端交互層,將高分遙感影像數(shù)據(jù)導(dǎo)入系統(tǒng)。系統(tǒng)生成影像金字塔并進(jìn)行影像數(shù)據(jù)分塊,隨后影像數(shù)據(jù)被保存到分布式文件系統(tǒng),同時將影像相關(guān)信息記錄存入數(shù)據(jù)庫表。
遙感影像數(shù)據(jù)入庫后,業(yè)務(wù)邏輯層自動調(diào)用相應(yīng)的解譯算法,并調(diào)度系統(tǒng)的計算節(jié)點,分配計算資源,執(zhí)行影像數(shù)據(jù)解譯任務(wù)。解譯任務(wù)完成后,得到初步解譯結(jié)果,業(yè)務(wù)邏輯層將結(jié)果反饋到前端層。
用戶在前端的影像判讀模塊查看解譯結(jié)果,進(jìn)行人工校驗,校驗完成后,業(yè)務(wù)邏輯層保存解譯結(jié)果,生成相應(yīng)的專題產(chǎn)品,并推送解譯結(jié)果至前端交互層。交互邏輯如圖2所示。
系統(tǒng)中的影像解譯算法由算法模型快速構(gòu)建模塊產(chǎn)出。用戶在前端層的算法可視化搭建界面中,通過拖拽算法組件的形式,可以快速搭建出算法模型。算法模型信息被推送到業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯層根據(jù)模型結(jié)構(gòu)調(diào)度相應(yīng)的算法組件,構(gòu)建對應(yīng)的算法運(yùn)行流程。
業(yè)務(wù)邏輯層將搭建的算法運(yùn)行流程推送到計算服務(wù)層模型訓(xùn)練模塊,進(jìn)行模型訓(xùn)練。訓(xùn)練完成后,業(yè)務(wù)邏輯層將成熟模型算法調(diào)度至算法運(yùn)行模塊,供后續(xù)影像解譯過程使用。
本節(jié)側(cè)重描述該影像解譯系統(tǒng)的主要功能模塊的詳細(xì)設(shè)計情況。
1) 影像數(shù)據(jù)存儲。海量高分遙感影像數(shù)據(jù)量巨大,影像數(shù)據(jù)的存儲需要考慮運(yùn)行成本、訪問效率以及容錯能力等問題。本系統(tǒng)的影像數(shù)據(jù)存儲可分為遙感影像金字塔分塊、分布式文件系統(tǒng)存儲和影像信息入庫三個部分。
錄入系統(tǒng)的高分遙感影像生成影像金字塔和數(shù)據(jù)分塊瓦片。影像金字塔是以原始影像作為底層,按一定重采樣方法建立的分辨率由細(xì)到粗的層次結(jié)構(gòu)。同時,遙感影像被分割成許多分塊瓦片存儲。在前端顯示影像時,系統(tǒng)會根據(jù)顯示區(qū)范圍和分辨率等信息計算加載相應(yīng)的塊數(shù)據(jù),以便于遙感影像數(shù)據(jù)的存儲管理和減少數(shù)據(jù)讀盤時間。
高分遙感影像建立影像金字塔和分塊瓦片后,其數(shù)據(jù)被存儲在HDFS分布式文件系統(tǒng)。HDFS具有高度的容錯性,能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。
遙感影像入庫的同時會建立記錄影像信息的Oracle數(shù)據(jù)庫表,其目的是:① 通過建立影像唯一產(chǎn)品標(biāo)識,便于影像相關(guān)信息進(jìn)行管理與搜索;② 便于通過影像標(biāo)志查詢相關(guān)處理信息;③ 建議相應(yīng)的產(chǎn)品輸出的數(shù)據(jù)庫表,便于專題產(chǎn)品的管理。影像快速解譯過程是以O(shè)racle數(shù)據(jù)庫進(jìn)行管理與調(diào)度的。
2) 影像快速加載與顯示。遙感影像被劃分成若干較小的分塊瓦片,影像顯示時會根據(jù)顯示區(qū)范圍和分辨率等信息計算加載相應(yīng)的遙感影像塊數(shù)據(jù),實現(xiàn)遙感影像的快速無延遲縮放加載。通過對Nginx服務(wù)器進(jìn)行改進(jìn),開發(fā)定制功能模塊來支持金字塔數(shù)據(jù)加載。主要擴(kuò)展模塊包括:基于GDAL開發(fā)的窗口自動加載影像金字塔層級數(shù)據(jù)及瓦片數(shù)據(jù)模塊,實現(xiàn)了快速無延遲加載影像;遙感影像色調(diào)處理和存儲模塊。通過以上拓展模塊,支持窗口影像的金字塔層級瓦片數(shù)據(jù)的加載與顯示,極大地提高了影像數(shù)據(jù)加載的速度,使數(shù)據(jù)加載延遲可以忽略不計。
3) 影像預(yù)處理與算法解譯。高分遙感影像的處理工作量龐大,人工方式調(diào)度影像解譯過程較為緩慢,成本巨大,且影像解譯速度較慢,等待過程漫長。若影像入庫時就直接預(yù)處理并調(diào)度相應(yīng)算法解譯,通過服務(wù)器多節(jié)點強(qiáng)大的計算能力,實現(xiàn)24小時不間斷自動處理,將避免用戶的持續(xù)等待。
基于以上構(gòu)想,實現(xiàn)影像入庫時,系統(tǒng)自動根據(jù)影像類別,同步調(diào)用相應(yīng)算法對影像的相關(guān)信息進(jìn)行標(biāo)注,如機(jī)場、港口等。
同時,為加快解譯速度,采用單幅存儲大影像分塊多節(jié)點算法處理,并且算法設(shè)計中對影像進(jìn)一步分塊,以多線程多核處理,充分利用計算機(jī)配置資源,盡可能減少影像的算法處理時間。通常多線程資源處理的均分原則是:假設(shè)計算機(jī)硬件最多可支持創(chuàng)建N個線程,需要處理M個的影像資源塊,在影像分塊結(jié)束后,即一次性分配處理資源塊,則第i個線程分配的資源塊數(shù)量是:
(1)
式中:floor是向下取整,則分配剩余的資源塊會分配給最后一個線程,那么最后一個線程需要處理的資源快數(shù)量為:
nN=M-(N-1)×ni
(2)
由于影像處理的總時間由運(yùn)算最后結(jié)束的線程決定,故影像處理的時間由最后一個線程處理nN決定,其他線程處理完成后必須等待最后一個線程,浪費(fèi)了線程資源時間。本文對線程資源分配進(jìn)行了優(yōu)化,使得不同線程處理影像的資源塊數(shù)量差異不超過1個。本文采用的策略是依次分配給每個線程一個資源塊,然后循環(huán)分配,避免出現(xiàn)某個線程處理可圖像塊數(shù)量太多而造成的整體的時間太長,則每個線程處理的時間是:
(3)
式中:%是求余數(shù)運(yùn)算。這樣前M%N個線程處理的資源塊數(shù)量比后面的線程多處理一個資源塊,加快了總體的線程處理影像的時間。
4) 解譯影像人工校驗。入庫影像經(jīng)過識別信息后將進(jìn)行自動解譯,解譯結(jié)果時存在兩種情況:① 在存在相應(yīng)解譯算法的情況下,影像解譯的結(jié)果并不能保證100%的準(zhǔn)確,解譯算法都有一定的適應(yīng)條件,因此存在一定的解譯錯誤率,直接進(jìn)行產(chǎn)品輸出是不可靠的。通過交互界面,加載遙感影像以及相應(yīng)的解譯結(jié)果,通過人工校驗的方式,將準(zhǔn)確的結(jié)果保存至服務(wù)后臺。② 影像解譯并不完全,如一幅標(biāo)記為機(jī)場的影像,既包含機(jī)場又包含車輛,此時需人工調(diào)用算法進(jìn)行車輛檢測。由于這種漏檢的情況出現(xiàn)概率較低,因此對整體影響解譯的速度影響甚微。基于上述兩種情況,均需要人工校驗,因此通過B/S架構(gòu)就可以實現(xiàn)多人同時對不同的影像進(jìn)行校驗判讀,提高高分影像的解譯速度。在這樣邏輯架構(gòu)下,實現(xiàn)以自動解譯為主,人工解譯為輔的解譯模式,可極大提高影像的解譯速度。
5) 可視交互的組件化深度學(xué)習(xí)模型構(gòu)建與訓(xùn)練。高分遙感影像的快速自動解譯是以強(qiáng)大且種類齊全的算法為基礎(chǔ)的。以人工編寫的方式產(chǎn)出解譯算法,成本巨大,且可擴(kuò)展性差。本文以深度學(xué)習(xí)為算法產(chǎn)生的基本形式,將深度學(xué)習(xí)的模型構(gòu)建可視化,將樣本選取、模型組建、參數(shù)設(shè)置、運(yùn)行查看等過程模塊化,構(gòu)建了一套基于B/S架構(gòu)的深度學(xué)習(xí)模型快速構(gòu)建可視化平臺。該平臺可以適應(yīng)于多種算法的產(chǎn)生,降低了構(gòu)建深度學(xué)習(xí)模型算法的門檻,方便不同智能基礎(chǔ)的用戶構(gòu)建深度學(xué)習(xí)模型。
深度學(xué)習(xí)??梢暬瘶?gòu)建平臺在前端交互層構(gòu)建了組件拖拽式算法流程搭建、算法效果評估和可視化展示等功能。前端提供了模型構(gòu)建的組件模塊,用戶拖拽算法組件到頁面中的模型構(gòu)建區(qū)域,各組件通過連接點進(jìn)行鏈接,并設(shè)置組件的參數(shù),即可構(gòu)建一個深度學(xué)習(xí)模型。通過前端提交,將當(dāng)前模型的模塊組成、模塊邏輯關(guān)系以及模型參數(shù)輸入到計算服務(wù)層,由后臺自動生成算法處理流程。
計算服務(wù)層將常用算法封裝為組件并制定規(guī)范化的組件接口,目前平臺已經(jīng)集成了數(shù)據(jù)預(yù)處理、分類回歸、目標(biāo)檢測等40余個模型組件,以及解決典型場景應(yīng)用獨特性問題的10余種智能算法組件,例如CNN、GoogleNet和ResNet等。
計算服務(wù)層根據(jù)傳入的模型信息自動構(gòu)建對應(yīng)的模型運(yùn)行流程并開始模型訓(xùn)練。模型訓(xùn)練的實時數(shù)據(jù)會推送至前端,便于使用者監(jiān)控模型訓(xùn)練的過程狀態(tài)。模型訓(xùn)練結(jié)束,推送訓(xùn)練結(jié)果信息至前端。
訓(xùn)練完的模型進(jìn)行應(yīng)用部署測試,并進(jìn)行算法應(yīng)用效果評價。對于評價較高的算法直接推送至遙感影像解譯后臺應(yīng)用,對于評價不理想的模型算法進(jìn)行模型數(shù)據(jù)的修改再次進(jìn)行訓(xùn)練,直至模型算法達(dá)到要求。深度學(xué)習(xí)平臺的構(gòu)建邏輯如圖3所示。
圖3 深度學(xué)習(xí)平臺的邏輯設(shè)計
深度學(xué)習(xí)平臺可視化構(gòu)建的效果圖如圖4所示。左側(cè)為模型構(gòu)建實驗?zāi)夸?中間為模型構(gòu)建區(qū)域與訓(xùn)練過程中的實時曲線區(qū)域;右側(cè)為模型組件參數(shù)面板與實驗屬性。通過簡單拖拽組件的形式,即可完成深度學(xué)習(xí)模型的構(gòu)建與訓(xùn)練,操作簡單便捷。
圖4 深度學(xué)習(xí)模型構(gòu)建效果圖
(1) 基于HDFS系統(tǒng)與數(shù)據(jù)節(jié)點存儲優(yōu)化技術(shù)。海量遙感影像的存儲需要充分考慮分布式文件存儲系統(tǒng)的運(yùn)行成本、訪問效率以及容錯能力等問題。本文采用Hadoop分布式文件系統(tǒng)(HDFS),該系統(tǒng)具有高度的容錯性,能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。
本文在使用HDFS時,對管理數(shù)據(jù)節(jié)點(dataNode)的NameNode采用了優(yōu)化策略,即NameNode節(jié)點采用基于共享存儲(磁盤陣列)方式的雙機(jī)熱備方案。雙機(jī)熱備是基于高可用系統(tǒng)中的兩臺服務(wù)器的熱備,共享存儲(磁盤陣列)方式主要通過磁盤陣列提供切換,對數(shù)據(jù)完整性和連續(xù)性的提供保障。用戶數(shù)據(jù)一般會放在磁盤陣列上,當(dāng)主機(jī)宕機(jī)后,備機(jī)繼續(xù)從磁盤陣列上取得原有數(shù)據(jù)。采用該方案,使得數(shù)據(jù)存儲的安全性得到保障。
(2) 基于影像金字塔與分塊瓦片的存儲技術(shù)。影像金字塔是以原始影像作為底層,采用一定的重采樣方法,自底向上建立分辨率由細(xì)到粗的影像數(shù)據(jù)分層組織結(jié)構(gòu)。具體來說,即在同一空間參照下,根據(jù)用戶需求將原始影像以不同分辨率進(jìn)行存儲與顯示。金字塔的底層影像分辨率最高,數(shù)據(jù)量最大,隨著層數(shù)的遞增,影像的分辨率逐層增加,數(shù)據(jù)量則逐層降低,最終形成多分辨率的金字塔結(jié)構(gòu)。影像金字塔結(jié)構(gòu)主要用于圖像的編碼和傳輸。
遙感影像數(shù)據(jù)分塊本質(zhì)上就是將一幅大的遙感圖像分割成許多小塊存放,在影像顯示時根據(jù)顯示區(qū)范圍和分辨率等信息計算加載相應(yīng)的塊數(shù)據(jù),遙感影像分塊的目的在于把遙感影像劃分成若干較小的物理數(shù)據(jù)塊,以便于存儲管理和減少數(shù)據(jù)讀盤時間。本文采用的Google 瓦片數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲。由于Google瓦片數(shù)據(jù)格式要求瓦片必須是正方形,且大小必須是256×256、512×512、1 024×1 024、2 048×2 048四種大小中的一種??紤]影像加載的時間與便捷性,本文采用的512×512的瓦片數(shù)據(jù)格式進(jìn)行存儲,并對Nginx服務(wù)器進(jìn)行改進(jìn),以支持加載顯示當(dāng)前視圖的金字塔相應(yīng)層級的瓦片數(shù)據(jù),進(jìn)而極大提高了影像數(shù)據(jù)加載的速度,數(shù)據(jù)加載延遲可以忽略不計。
如圖5所示,系統(tǒng)測試過程中加載了一幅大小為12 GB的高分衛(wèi)星影像,從入庫-信息錄入-目標(biāo)解譯識別-解譯結(jié)果加載校正,整個過程耗時約2分鐘:其中建立金字塔數(shù)據(jù)耗時15秒,基于深度學(xué)習(xí)的影像解譯耗時38秒,該過程調(diào)用3個節(jié)點運(yùn)算,每個節(jié)點32個線程同步進(jìn)行處理運(yùn)算;人工對影像結(jié)果進(jìn)行校驗耗時1分鐘,校驗結(jié)果的存儲與加載需5秒。與人工判讀所需時長(半小時或更長)相比,影像解譯時間得到顯著縮短,且檢測正確率達(dá)95%,加之人工校驗的輔助,準(zhǔn)確率可達(dá)100%。
圖5 影像的加載和目標(biāo)的自動識別
為了解決高分遙感影像解譯時效性的問題,本文構(gòu)建了一個基于B/S架構(gòu)的高分遙感影像快速解譯系統(tǒng)。系統(tǒng)以深度學(xué)習(xí)解譯算法為核心技術(shù),以多并發(fā)、多節(jié)點、多線程、多用戶、多任務(wù)為計算模式,以自動運(yùn)算為主,人工校驗為輔的影像解譯模式,實現(xiàn)高分遙感影像的快速解譯。同時,以模塊化的方式構(gòu)建部署深度學(xué)習(xí)模型訓(xùn)練平臺,提供可視交互的模型構(gòu)建和訓(xùn)練服務(wù)。實驗證明,利用本系統(tǒng)開展高分影像的快速解譯具有較好的時效性與可靠性。