劉景赫, 林寶軍,3*
(1. 中國科學(xué)院 微小衛(wèi)星創(chuàng)新研究院, 上海 201203;2. 中國科學(xué)院大學(xué), 北京 100049;3. 中國科學(xué)院 空天信息創(chuàng)新研究院, 北京 100049)
隨著空間技術(shù)的發(fā)展,兩個航天器之間的空間在軌服務(wù)開始受到學(xué)術(shù)界和工業(yè)界的關(guān)注[1-3]。在諸如衛(wèi)星維修、航天器對接、碎片清理等在軌服務(wù)中,獲取對方航天器相對于己方的姿態(tài)是關(guān)鍵的一步。一般而言,空間目標(biāo)分為合作性和非合作性兩類。合作性目標(biāo)可自主提供自身姿態(tài)信息。然而,對于故障衛(wèi)星和太空碎片等非合作目標(biāo)而言,其自身無法提供準(zhǔn)確的姿態(tài)參數(shù),這類目標(biāo)的姿態(tài)只能通過一系列傳感器獲取。相對于激光雷達(dá)的高功耗和立體相機(jī)的復(fù)雜性,單目相機(jī)作為傳感器具有輕便、低能耗的特點,非常適用于航天器之間的相對導(dǎo)航場景。因此,如何從單張圖像中獲取目標(biāo)的6D(Dimension)姿態(tài)是值得深入研究的問題。6D 意為6 個自由度,包含3 個平移自由度和3 個旋轉(zhuǎn)自由度。衛(wèi)星姿態(tài),亦稱剛體姿態(tài),是指拍攝圖像當(dāng)前時刻與衛(wèi)星固連的參考系相對于相機(jī)坐標(biāo)系的旋轉(zhuǎn)和平移。
傳統(tǒng)的單目姿態(tài)算法[4-6]主要依賴從二維圖像中手動提取特征,依據(jù)特征建立模版匹配,從而估計目標(biāo)衛(wèi)星相對于相機(jī)所在航天器的姿態(tài)。然而,手工提取特征的過程速度慢且魯棒性差,當(dāng)圖像過曝光或曝光不足時,特征無法被準(zhǔn)確提取。
目前姿態(tài)估計領(lǐng)域的進(jìn)步主要依賴深度學(xué)習(xí)算法。這類算法利用神經(jīng)網(wǎng)絡(luò)自動提取特征的能力取代傳統(tǒng)的圖像處理流程。目前,依賴深度神經(jīng)網(wǎng)絡(luò)的姿態(tài)算法主要分為兩類:一階段算法和二階段算法。
一階段算法嘗試直接從二維圖像空間映射到六維姿態(tài)空間,屬于端到端范式,依靠神經(jīng)網(wǎng)絡(luò)的擬合能力完成上述映射的搜索[7-9]。該端到端范式一般有兩種形式:分類形式和擬合形式。分類形式將姿態(tài)空間離散成一個個小的區(qū)間,每個區(qū)間用一個類別表示,然后用神經(jīng)網(wǎng)絡(luò)預(yù)測圖中航天器的類別[10-11]。擬合形式則不依賴離散化,而是直接根據(jù)輸入圖像預(yù)測一個六維姿態(tài)向量[12-13]。一階段算法雖然流程簡單,但普遍精度不高、泛化能力不好,神經(jīng)網(wǎng)絡(luò)的優(yōu)化難度大,網(wǎng)絡(luò)難以學(xué)到有效的特征以表征目標(biāo)姿態(tài)。
基于神經(jīng)網(wǎng)絡(luò)的兩階段算法首先在圖像上定位若干二維關(guān)鍵點,然后利用2D-3D 匹配技術(shù)尋找目標(biāo)圖像與三維模型的關(guān)系,從而計算目標(biāo)姿態(tài)[14-17]。在此類方法中,圖像中的關(guān)鍵點充當(dāng)了姿態(tài)估計的中間表示,因此關(guān)鍵點的定位越準(zhǔn)確,姿態(tài)估計越精確。得益于關(guān)鍵點定位技術(shù)的魯棒性,目前二階段算法在各個姿態(tài)估計數(shù)據(jù)集上都得到了高于一階段算法的準(zhǔn)確度。但衛(wèi)星上的關(guān)鍵點分布較分散,關(guān)鍵點之間間距較大,卷積神經(jīng)網(wǎng)絡(luò)由于感受野受限,存在關(guān)鍵點定位精度不高的問題。且二階段算法為了訓(xùn)練關(guān)鍵點的定位模型,往往需要人工標(biāo)注大量圖像的掩膜和關(guān)鍵點的位置標(biāo)簽,因此二階段算法還存在標(biāo)注成本高的問題。
本文針對卷積神經(jīng)網(wǎng)絡(luò)的感受野小、全局建模能力差的問題,基于像素投票網(wǎng)絡(luò)PVNet 進(jìn)行改進(jìn),引入了自注意力機(jī)制,提高其全局建模能力,提高了關(guān)鍵點定位的準(zhǔn)確度。針對二階段姿態(tài)估計算法需要大量人工標(biāo)注的問題,提出了一種自動獲取圖像掩膜和關(guān)鍵點標(biāo)簽的流程,具體是通過空間雕刻重構(gòu)衛(wèi)星的點云,將點云重投影到像素平面,得到了關(guān)鍵點的像素坐標(biāo)和粗略的衛(wèi)星掩膜,再經(jīng)過形態(tài)學(xué)閉操作完善掩膜,避免了人工標(biāo)注這些信息的過程,提高了算法的實用性。實驗結(jié)果表明,所提方法在省略了大量標(biāo)注過程的情況下,取得了更高的姿態(tài)估計精度。
本文構(gòu)造衛(wèi)星的點云代表其三維形狀,目標(biāo)點云用Fref表示。為了構(gòu)造該點云,從數(shù)據(jù)集中隨機(jī)選取N張參考圖像鑒于姿態(tài)估計數(shù)據(jù)集都提供了每張圖像中的衛(wèi)星姿態(tài)標(biāo)簽,這些姿態(tài)標(biāo)簽用表示。然后利用多邊形標(biāo)注工具Labelme[18],手動將參考圖像中的衛(wèi)星輪廓標(biāo)注出來,圖1 中用表示這些輪廓。
圖1 點云重構(gòu)過程Fig.1 Point cloud reconstruction
為了構(gòu)造衛(wèi)星的點云,設(shè)該衛(wèi)星的最小外接球面直徑為r,首先初始化一團(tuán)以r為長寬高的點云立方體Aref∈RS×S×S,如圖1 中的立方體所示,其中-r≤(X,Y,Z)≤r。對于每個參考索引n∈(1,…,N),根據(jù)姿態(tài)參數(shù)和相機(jī)內(nèi)參K,將Aref投影到圖像平面,圖1 中的虛線代表該投影過程,并設(shè)得到的投影區(qū)域為∈RS×S,根據(jù)單目相機(jī)的投影原理,可由式(1)表示:
是Aref在圖像平面的投影。由于Aref是初始化的點云立方體,必有部分點投影到了目標(biāo)輪廓區(qū)域內(nèi)以及部分點投影到輪廓區(qū)域外,投影到輪廓區(qū)域內(nèi)的點得以保留,其余點切除。由此產(chǎn)生一個三維掩膜∈RS×S×S,其數(shù)學(xué)表示如式(2)所示:
其中:(grefn)x和(grefn)y是Grefn的(x,y)坐標(biāo),如此經(jīng)過N張圖像的雕琢,N張三維掩膜的交集,便構(gòu)成了衛(wèi)星較為精細(xì)的形狀。圖1 展示了點云雕刻過程,雕刻后的點云如圖2(a)所示。
圖2 為訓(xùn)練樣本自動生成掩膜Fig.2 Pipeline of generating mask for training set
之所以對目標(biāo)衛(wèi)星進(jìn)行點云重構(gòu),一是后面需要進(jìn)行關(guān)鍵點的2D 和3D 匹配,有了點云數(shù)據(jù),便擁有了關(guān)鍵點的3D 坐標(biāo);二是在訓(xùn)練關(guān)鍵點定位網(wǎng)絡(luò)時,需要關(guān)鍵點的位置標(biāo)簽和掩膜標(biāo)簽,有了目標(biāo)的點云數(shù)據(jù)后,便可以根據(jù)每張圖像的姿態(tài)標(biāo)簽將點云重投影到像素平面,由此可自動得到訓(xùn)練集每張圖像的掩膜標(biāo)簽和關(guān)鍵點標(biāo)簽,從而省略了大量人工標(biāo)注的過程。
圖2 展示了如何根據(jù)衛(wèi)星的點云得到數(shù)據(jù)集中每張圖像的掩膜。姿態(tài)估計數(shù)據(jù)集提供了每張圖像的姿態(tài)標(biāo)簽[Ri|ti],利用該信息可將衛(wèi)星點云投影到每張圖像上,得到如圖2(b)所示的掩膜。但該掩膜存在空洞,原因在于點云數(shù)據(jù)并不是一種連續(xù)數(shù)據(jù),于是利用形態(tài)學(xué)閉操作修補空洞,得到最終的掩膜如圖2(c)所示,其對應(yīng)的原圖如圖2(d)所示??梢娝岱椒?zhǔn)確地得到了訓(xùn)練樣本的掩膜標(biāo)簽。
本文中估計衛(wèi)星姿態(tài)的算法分為兩階段:第一階段預(yù)測向量場,用于定位目標(biāo)關(guān)鍵點;第二階段由關(guān)鍵點計算目標(biāo)姿態(tài)。流程簡圖如圖3所示。
圖3 姿態(tài)估計算法流程圖Fig.3 Flowchart of the pose estimation algorithm
首先將輸入圖像裁剪為H×W大小,輸入向量場回歸網(wǎng)絡(luò),再由向量場投票預(yù)測關(guān)鍵點位置,最后使用PnP 算法計算得到姿態(tài)。
本文基于PVNet[15]進(jìn)行改進(jìn)。針對衛(wèi)星上的關(guān)鍵點分散、卷積神經(jīng)網(wǎng)絡(luò)的感受野受限問題,引入自注意力機(jī)制,增強模型的全局建模能力,提高關(guān)鍵點的定位精度。自注意力機(jī)制的核心在于:其掃描序列中的每個元素并通過聚合序列中的信息來更新每個元素。自注意力機(jī)制的優(yōu)勢在于全局計算和記憶功能,這使得其相比于卷積算子更適合對全局信息進(jìn)行建模。本文神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖4 所示。
圖4 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Structure of neural network
圖4 中,考慮到卷積算子在提取低階語義以及收斂速度方面的優(yōu)越性,本文采用卷積層做為backbone,并設(shè)backbone 輸出的特征圖為z0∈Rd×h×w。根據(jù)文獻(xiàn)[19],自注意力算子處理的是一維度序列,故在進(jìn)入自注意力模塊前,將特征圖變形為z0∈RL×d,其中L=h×w。然后將特征圖分別映射到query、key 和value 矩陣:
其中,Wq、Wk、Wv∈Rd×d為待學(xué)習(xí)參數(shù)。接下來通過Q矩陣和K矩陣計算注意力矩陣
其中,A∈RL×L為注意力矩陣,代表了特征圖中任意兩個特征點之間的相關(guān)性。矩陣A再點乘矩陣V,得到新的特征圖,即為融合了全局信息的特征圖。上述過程即為自注意力算子,在實踐中通常采用多頭自注意力算子提取更加豐富的特征。
由于神經(jīng)網(wǎng)絡(luò)為每個像素點均預(yù)測一個方向向量,理論上方向向量的交點即為關(guān)鍵點的位置,但圖像中屬于目標(biāo)體的像素點往往有數(shù)萬個,這些像素點的方向向量無法嚴(yán)格相交于一點,于是需要投票機(jī)制來決定最終關(guān)鍵點的位置[20]。
設(shè)關(guān)鍵點數(shù)量為K,對于任意一個關(guān)鍵點xk,首先隨機(jī)選取兩個像素點,這兩個點對應(yīng)的方向向量的交點記為候選點hk,i。該過程重復(fù)N次,得到的候選點集合記為{hk,i|i∈1,…N},代表xk可能的位置。接下來為每個候選點賦予權(quán)重,該權(quán)重由所有正樣本投票決定(正樣本即為屬于目標(biāo)體的像素點):
其中:p∈O 表示所有正樣本參與投票,vk(p)表示在向量場中p像素點為第k個關(guān)鍵點所預(yù)測的方向向量。
上述關(guān)鍵點的候選位置及其權(quán)重代表了關(guān)鍵點在圖像空間中的分布概率。該概率的均值代表該關(guān)鍵點的最終定位,而方差則代表該定位的不確定性。于是,經(jīng)過投票,第k個關(guān)鍵點的定位為:
該定位的不確定性為:
前述內(nèi)容通過點云重構(gòu),獲悉了關(guān)鍵點的三維坐標(biāo);又通過關(guān)鍵點檢測技術(shù),獲取了關(guān)鍵點在圖像中的二維坐標(biāo)。于是衛(wèi)星相對于相機(jī)參考系的姿態(tài)(R,t)可通過優(yōu)化如下馬氏距離得到:
其中:π是透視投影函數(shù),由相機(jī)內(nèi)參決定;Xk是第k個關(guān)鍵點的三維坐標(biāo);μk為第k個關(guān)鍵點的二維坐標(biāo);Σk為二維坐標(biāo)的方差。R,t為待求的姿態(tài)參數(shù),其初始值由EPnP[21]算法初始化。為了優(yōu)化方程(8),本文對比了梯度下降法和LM算法。相比于后者,前者對學(xué)習(xí)率較敏感,于是選擇LM 算法進(jìn)行方程(8)的優(yōu)化。
關(guān)鍵點的選取需要依目標(biāo)衛(wèi)星的形狀而定,選取的關(guān)鍵點最好位于衛(wèi)星的表面,同時,關(guān)鍵點之間的間距應(yīng)當(dāng)盡量分散??紤]到Tango 衛(wèi)星的形狀近似于長方體與3 根天線的組合,于是本文選取了長方體的8 個頂點與3 根天線的頂點,共K=11 個關(guān)鍵點。圖5 從多個視角展示了11 個關(guān)鍵點的分布。
圖5 選取的11 個關(guān)鍵點Fig.5 Selected 11 landmarks
神經(jīng)網(wǎng)絡(luò)輸出兩個分支:語義分割分支和向量場分支,兩部分的損失函數(shù)分別用lseg和lvector表示。對于向量場的監(jiān)督,本文使用平滑一范數(shù)(smoothl1)[22],損失函數(shù)如式(9)所示:
其中:K是關(guān)鍵點個數(shù),p∈O表示屬于目標(biāo)體的像素點參與計算,(p)為神經(jīng)網(wǎng)絡(luò)預(yù)測的方向向量,vk(p) 為方向向量的真值,Δvk(p)|x和Δvk(p)|y分別是Δvk(p)兩個分量。
對于語義分割分支的監(jiān)督,本文使用二值交叉熵?fù)p失(Binary cross entropy):
其中:是神經(jīng)網(wǎng)絡(luò)預(yù)測的每個像素點屬于前景的概率;yp為真值,yp=1 意味該像素屬于前景而yp=0 說明該像素屬于背景。
神經(jīng)網(wǎng)絡(luò)總的損失函數(shù)由以上兩部分損失構(gòu)成:
本文在Spacecraft PosE Estimation Dataset[2](SPEED)上進(jìn)行實驗。SPEED 由歐洲航天局和斯坦福大學(xué)空間交匯實驗室在2019 年發(fā)布,是關(guān)于衛(wèi)星姿態(tài)估計的數(shù)據(jù)集。其包含關(guān)于Tango航天器的12 000 張合成圖像和300 張真實圖像,用以估計空間物體的距離和方向。每張圖像中包含一個Tango 航天器,并給出該目標(biāo)相對于相機(jī)的姿態(tài)。隨后,為了充分模擬空間環(huán)境中復(fù)雜多變的光照條件,組織者又發(fā)布了SPEED+[23],擴(kuò)充了樣本數(shù)量,圖像中的光照條件更加多變。數(shù)據(jù)樣例可見圖5。
為了全面分析算法的有效性,本文分別對關(guān)鍵點的定位精度和姿態(tài)估計精度進(jìn)行評估,所用的評估指標(biāo)分別如下。
4.2.1 關(guān)鍵點定位的評估指標(biāo)
PCK指標(biāo)是關(guān)鍵點定位方面常用的精度指標(biāo)。PCK 定義為關(guān)鍵點被正確定位的比例(Percentage of Correct Keypoints),意為模型檢測出來的關(guān)鍵點與其真值之間的歸一化距離小于閾值的比例。當(dāng)閾值為0.5 時,產(chǎn)生的指標(biāo)即為PCK@0.5。
4.2.2 姿態(tài)估計的評估指標(biāo)
根據(jù)文獻(xiàn)[2],衛(wèi)星的姿態(tài)誤差分為兩部分:旋轉(zhuǎn)誤差eq和平移誤差et,圖6 展示了目標(biāo)系和相機(jī)系之間的相對位姿。平移誤差定義為:
圖6 衛(wèi)星系與相機(jī)系的相對變換Fig.6 Transformation between satellite body reference and camera reference
其中:B 和C 分別是目標(biāo)系和相機(jī)系的原點,t^BC為算法預(yù)測的二者之間的位移,tBC則代表其真值。
旋轉(zhuǎn)誤差則定義為四元數(shù)之間的夾角:
在點云重構(gòu)過程中,本文從SPEED 數(shù)據(jù)集[2]中隨機(jī)選取了N=70 張參考圖像并手動標(biāo)注其多邊形分割掩膜然后初始化一個3D 立方體,根據(jù)70 張圖像的姿態(tài)標(biāo)簽,分別將該立方體投影到圖像平面,只有其投影全部落在內(nèi)的點才得以保留。經(jīng)過70 張圖像的雕刻,得到衛(wèi)星的點云形狀如圖2(a)所示。
在實驗數(shù)據(jù)方面,SPEED 提供了12 000 張圖像及姿態(tài)標(biāo)簽,其中10 000 張用于神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,2 000 張用于實驗驗證。
實驗的所有代碼都采用Python 語言基于深度學(xué)習(xí)框架Pytorch 和圖像處理工具OpenCV 編寫,運行環(huán)境為Ubuntu 20.04 操作系統(tǒng),并使用Nvidia 2080 GPU 加速。
4.4.1 消融實驗
為了證明自注意力機(jī)制對關(guān)鍵點定位的有效性,本文與原像素投票網(wǎng)絡(luò)PVNet[15]進(jìn)行了消融實驗,如圖7 所示。未引入自注意力機(jī)制前,原PVNet 的定位精度為88.3%;引入一層自注意力層后,定位精度達(dá)到了91.5%,即加入了自注意力模塊的神經(jīng)網(wǎng)絡(luò)取得了更高的關(guān)鍵點定位精度。此外,為了探究自注意力的層數(shù)對模型性能的影響,本文逐層增加自注意力層數(shù)。隨著層數(shù)增加至4 層,模型的定位能力逐漸提高并趨于穩(wěn)定。
圖7 關(guān)鍵點定位精度Fig.7 Accuracy of landmark localization
4.4.2 與其他方案的對比實驗
作為對比,本文在SPEED 數(shù)據(jù)集上還試驗了其他姿態(tài)估計領(lǐng)域的經(jīng)典算法,性能對比如表1 所示。由于一階段算法沒有關(guān)鍵點定位過程,故該指標(biāo)省略。
表1 不同算法的性能對比Tab.1 Performance comparison of different algorithms
通過表1 可見,一階段算法的姿態(tài)誤差要普遍高于二階段算法。在二階段算法中,本文方法也取得了更高的關(guān)鍵點定位精度和更低的姿態(tài)誤差。之所以本文方法取得了更小的姿態(tài)誤差,原因在于兩方面:一是3D 點云重構(gòu)更為精細(xì),二是關(guān)鍵點的定位更加精確。
為了直觀地說明本文方法的效果,從SPEED測試集中隨機(jī)抽取了9 張圖像,圖8 展示了模型的語義分割效果和關(guān)鍵點定位效果。圖8 中綠色區(qū)域代表模型預(yù)測的掩膜,藍(lán)色點代表模型定位出來的關(guān)鍵點。圖8 顯示所提算法精準(zhǔn)地在圖中識別了衛(wèi)星區(qū)域,這得益于本文自動化地得到了大量掩膜標(biāo)簽,模型得以充分訓(xùn)練;同時模型準(zhǔn)確地檢測到關(guān)鍵點位置,這得益于自注意機(jī)制帶來的全局建模能力。圖8 還顯示,所提方法對目標(biāo)的尺寸具有較好的魯棒性。通過優(yōu)化方程(8),圖8 中的衛(wèi)星姿態(tài)得以解算,并以衛(wèi)星坐標(biāo)軸的形式顯示在了圖9 中。
圖8 隨機(jī)測試的衛(wèi)星的分割效果和關(guān)鍵點定位效果Fig.8 Randomly selected images with the predicted segmentation of the satellite and the landmarks
本文聚焦于單目視覺衛(wèi)星姿態(tài)估計,著重改善兩個問題:一是傳統(tǒng)方法需要人工標(biāo)注關(guān)鍵點位置和圖像的掩膜,針對該問題提出了基于空間雕刻的衛(wèi)星點云重構(gòu)方式,再將點云投影到像素平面,可自動化生成圖像的掩膜和關(guān)鍵點的2D 標(biāo)簽,提高了算法實用性;二是衛(wèi)星上的關(guān)鍵點分布較分散,卷積神經(jīng)網(wǎng)絡(luò)由于感受野受限,存在關(guān)鍵點定位精度低的問題,本文在PVNet 的基礎(chǔ)上,將自注意力機(jī)制引入其中,提高了關(guān)鍵點的定位精度,降低了姿態(tài)估計誤差。在SPEED數(shù)據(jù)集上的實驗結(jié)果表明,相比于原PVNet,本文方法的關(guān)鍵點定位精度提升了4.2%,姿態(tài)平移誤差降低了17.2%,姿態(tài)旋轉(zhuǎn)誤差降低了20.7%。
由于太空中的光照變化大(背光或逆光)、背景變化大(地球為背景或深空為背景)以及目標(biāo)的尺寸變化大,因此要求姿態(tài)估計算法對上述條件具有魯棒性??紤]到實驗數(shù)據(jù)SPEED 充分模擬了上述太空條件,在此條件下本文依然取得了較高的精度,說明本文方法對衛(wèi)星的6 自由度姿態(tài)估計具有實用性。