包志強(qiáng),邢 瑜,呂少卿,黃瓊丹
西安郵電大學(xué) 通信與信息工程學(xué)院,西安710121
6D目標(biāo)姿態(tài)估計(jì)不僅需要對單幅RGB圖像中的目標(biāo)進(jìn)行定位,還需要檢測目標(biāo)在三維空間中的旋轉(zhuǎn)自由度。這種技術(shù)目前主要的應(yīng)用有無人駕駛、機(jī)器人自動(dòng)抓取、增強(qiáng)現(xiàn)實(shí)和虛擬現(xiàn)實(shí)等[1]。但在實(shí)際應(yīng)用中,姿態(tài)估計(jì)技術(shù)遇到了很多挑戰(zhàn),比如有復(fù)雜背景干擾、多個(gè)目標(biāo)互相遮擋以及相機(jī)成像條件不一(低光照、曝光過度以及鏡面反射等)。
就目前大部分研究者的工作來看,姿態(tài)估計(jì)方法主要分為三個(gè)類別:基于關(guān)鍵點(diǎn)和模版匹配的方法、基于RGB-D的方法和基于CNN的方法。基于關(guān)鍵點(diǎn)的方法主要在局部特征上建立2D-3D 對應(yīng)關(guān)系[2],然后采用PnP 算法計(jì)算6D 姿態(tài)估計(jì)參數(shù)。盡管精度很高,但不足以解決無紋理的目標(biāo)姿態(tài)估計(jì)問題[3]?;赗GB-D的姿態(tài)估計(jì)方法隨著商用深度相機(jī)的出現(xiàn)也有了很大的發(fā)展。Hinterstoisser 等人[4]提出了3D 點(diǎn)云的表面模版匹配,之后還提出了點(diǎn)對特征及其幾種變體[5],以提高對復(fù)雜背景和噪聲的魯棒性。然而,這些基于RGB-D的姿態(tài)估計(jì)方法在計(jì)算上是昂貴的。
近年來,基于CNN 的姿態(tài)估計(jì)方法能得到具有高度代表性的目標(biāo)檢測模型。基于CNN姿態(tài)估計(jì)的方法一般有兩個(gè)策略,分別是回歸和映射。第一種策略利用CNN 直接產(chǎn)生連續(xù)的姿態(tài)參數(shù)或離散的視點(diǎn)。比如,deep-6Dpose[3]用來檢測和分割輸入圖像中的目標(biāo),同時(shí)用目標(biāo)的卷積特征回歸6D姿態(tài)參數(shù)。SSD-6D[6]在單個(gè)階段利用SSD 結(jié)構(gòu)預(yù)測目標(biāo)的2D 邊界框和方向,然后根據(jù)2D 邊界框的大小估計(jì)目標(biāo)的深度,將輸出信息從2D提升到6D。這些方法遵循基于外觀的方法規(guī)則,并且通常依靠后期優(yōu)化來提高姿態(tài)估計(jì)精度。第二種策略利用關(guān)鍵點(diǎn)學(xué)習(xí)和預(yù)測RGB 圖像與3D 模型之間的2D-3D 對應(yīng)關(guān)系。比如,由一個(gè)卷積神經(jīng)網(wǎng)絡(luò)組成的BB8[7]算法分割目標(biāo)后預(yù)測目標(biāo)的3D邊界框映射的2D位置,然后用PnP方法計(jì)算6D姿態(tài)。該算法效果顯著,但受限于方法本身多階段的特性,導(dǎo)致其速度很慢。另外,在文獻(xiàn)[8]中,CNN 會(huì)預(yù)測輸入圖像中3D 邊界框的2D 投影位置,以減少遮擋的影響。受此啟發(fā),基于YOLO V2[9]框架,設(shè)計(jì)了一種深度卷積神經(jīng)網(wǎng)絡(luò)完成目標(biāo)的6D姿態(tài)估計(jì)任務(wù)。
在這篇論文中,基于YOLO V2 框架,提出了一種單階段、端到端的深度卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),它以圖像作為輸入,直接檢測3D 邊界框頂點(diǎn)的2D 映射。同時(shí),不需要細(xì)化等后處理步驟,只需訓(xùn)練目標(biāo)的3D 邊界框映射模型。在LineMod[4]和Occlusion LineMod[10]數(shù)據(jù)集上進(jìn)行了測試,結(jié)果表明當(dāng)處理單個(gè)目標(biāo)時(shí),本文方法的計(jì)算速度比其他方法快10 倍多,精度優(yōu)于經(jīng)典的姿態(tài)估計(jì)算法。
YOLO V2[8]算法對目標(biāo)進(jìn)行檢測,用基于回歸的方法來提取特征,是一種端到端的訓(xùn)練方法,它直接在特征層上回歸出類別和邊框,節(jié)省了大量提取邊框的時(shí)間。BB8 則在目標(biāo)的周圍找到一個(gè)2D 分割掩模,然后將裁剪后的圖像送到下一個(gè)網(wǎng)絡(luò),該網(wǎng)絡(luò)預(yù)測圖像中目標(biāo)的8 個(gè)2D 角點(diǎn)。在這兩個(gè)網(wǎng)絡(luò)的基礎(chǔ)上,本文設(shè)計(jì)了基于YOLO V2的姿態(tài)估計(jì)深度網(wǎng)絡(luò),用來預(yù)測目標(biāo)3D邊界框頂點(diǎn)的2D投影,然后利用PnP算法計(jì)算目標(biāo)的6D姿態(tài)。
在預(yù)測目標(biāo)的6D 姿態(tài)之前,首先需要預(yù)測目標(biāo)的3D 模型在二維圖像上的坐標(biāo)映射[11]。9 個(gè)控制點(diǎn)可描述一個(gè)目標(biāo)的3D 模型,包括3D 邊界框的8 個(gè)角點(diǎn)和1個(gè)中心點(diǎn)。這9 個(gè)控制點(diǎn)保證了3D 模型在2D 圖像上規(guī)則的可視化。
模型輸入為單幅RGB 圖像,用全卷積結(jié)構(gòu)提取目標(biāo)特征信息。首先把圖像分成包含S×S個(gè)單元的規(guī)則網(wǎng)格。每一個(gè)網(wǎng)格都與一個(gè)多維向量關(guān)聯(lián),包括9個(gè)控制點(diǎn)、目標(biāo)的類別概率以及總的置信度。
另外,為了保證在有目標(biāo)的區(qū)域預(yù)測的置信度高,在沒有目標(biāo)的區(qū)域預(yù)測低的置信度,該算法還計(jì)算了預(yù)測的3D邊界框與真實(shí)框的交并比得分。
本文提出的算法調(diào)整了YOLOV2 的網(wǎng)絡(luò)結(jié)構(gòu),將原始的23 個(gè)卷積層和5 個(gè)最大池化層改成了6 個(gè)卷積塊,如圖1所示。第一塊和第二塊都是由一個(gè)卷積層和一個(gè)池化層組成,第三塊、第四塊和第五塊都是由三個(gè)卷積層和一個(gè)池化層組成,第六塊由三個(gè)卷積層組成,最后一層輸出線性卷積結(jié)果,每一個(gè)塊都表示一種級(jí)別的特征。該網(wǎng)絡(luò)將提取的目標(biāo)特征分成了6個(gè)級(jí)別,低層輸出低級(jí)別特征,高層輸出高級(jí)別特征,如圖1(a)~(g)所示。所有的卷積層卷積核尺寸是3×3,步長為3;池化層采用最大池化,濾波器尺寸是2×2,步長設(shè)置為2。整個(gè)HCNN 特征提取網(wǎng)絡(luò)只有14 個(gè)卷積層,5 個(gè)最大池化層,激活函數(shù)全部是LeakyReLU,最后一個(gè)卷積層用的是線性激活函數(shù)。
圖1 特征提取網(wǎng)絡(luò)結(jié)構(gòu)
卷積層通過卷積核和非線性激活函數(shù)計(jì)算多個(gè)特征圖,每個(gè)特征圖表示目標(biāo)可能出現(xiàn)的位置視覺特征。圖2 中第一行至第五行表示第一個(gè)至第五個(gè)卷積塊的特征圖的部分輸出表示,淺層卷積塊提取圖像的紋理和局部細(xì)節(jié)特征,深層卷積塊提取圖像的輪廓和抽象的全局特征。最大池化層在一個(gè)小的特征圖上計(jì)算最大特征表示,最后一個(gè)卷積層的卷積核個(gè)數(shù)為19+C:9 對角點(diǎn)坐標(biāo),1 個(gè)置信度值,再加上C個(gè)類別。該網(wǎng)絡(luò)的特征提取過程可以學(xué)習(xí)包含復(fù)雜背景的目標(biāo)特征(高級(jí)特征表示)。
另外,在訓(xùn)練期間用批量歸一化調(diào)整了輸入圖像的大小。當(dāng)網(wǎng)絡(luò)的圖像下采樣因子是32 時(shí),將輸入分辨率的大小改為32 的倍數(shù){320,352,…,608},以提高對不同尺寸目標(biāo)檢測的魯棒性。
圖2 卷積特征圖示例(從上到下依次為卷積塊1~5的特征圖輸出結(jié)果)
姿態(tài)估計(jì)網(wǎng)絡(luò)的最后一層使用的是softmax 函數(shù),輸出目標(biāo)類別概率,以及角點(diǎn)在平面上的坐標(biāo),還有整個(gè)置信度得分。訓(xùn)練期間,通過1.3 節(jié)構(gòu)造的置信度函數(shù)計(jì)算置信度分?jǐn)?shù)。最小化下面的損失函數(shù)訓(xùn)練網(wǎng)絡(luò):
其中,損失函數(shù)分別包含坐標(biāo)損失lco、置信度損失lconf、分類損失lcl,用均方誤差函數(shù)MSE表示坐標(biāo)和置信度損失,用交叉熵表示分類損失。損失函數(shù)求和權(quán)重設(shè)計(jì)中,設(shè)置不包含目標(biāo)的網(wǎng)格單元置信度函數(shù)的權(quán)重為0.1,包含目標(biāo)的權(quán)重為5,坐標(biāo)損失和分類損失函數(shù)的權(quán)重均設(shè)置為1。訓(xùn)練過程中,置信度損失一般從10開始下降,隨著迭代次數(shù)的增加最終會(huì)下降到0.5以內(nèi)。
通過調(diào)用一次網(wǎng)絡(luò)進(jìn)行6D 姿態(tài)估計(jì),保證了網(wǎng)絡(luò)的快速運(yùn)行。得益于YOLOV2[8]的框架,每個(gè)網(wǎng)格單元可以預(yù)測該單元格內(nèi)的目標(biāo)姿態(tài),如圖3所示。用一個(gè)置信度閾值過濾掉低置信度的預(yù)測,對于大目標(biāo)或者兩個(gè)單元交叉點(diǎn)的目標(biāo)來說,多個(gè)單元很可能都會(huì)預(yù)測高置信度的檢測。因此,為了得到更穩(wěn)定的姿態(tài)估計(jì),檢測有最大置信度得分的3×3鄰域的單元,通過計(jì)算各個(gè)檢測的加權(quán)平均來合并這些相鄰單元的各個(gè)角點(diǎn)預(yù)測,其中加權(quán)的權(quán)重是相鄰單元格的置信度分?jǐn)?shù)。
圖3描述了目標(biāo)從平面到空間的映射關(guān)系(空間坐標(biāo)軸起點(diǎn)為(0,0,0))。圖3(1)中紅色的點(diǎn)表示提出的方法預(yù)測的目標(biāo)可能出現(xiàn)的質(zhì)心,該點(diǎn)坐標(biāo)所在的單元格負(fù)責(zé)預(yù)測該目標(biāo)的類別概率。圖3(1)是目標(biāo)在三維空間的真實(shí)姿態(tài)(綠色框表示),圖3(3)、(4)是網(wǎng)絡(luò)預(yù)測結(jié)果。為了保證預(yù)測的準(zhǔn)確度,本文基于歐氏距離設(shè)計(jì)了置信度函數(shù)c(x) ,該函數(shù)用來評估預(yù)測姿態(tài)與真實(shí)姿態(tài)之間的偏差程度。c(x) 定義如下:
圖3 目標(biāo)姿態(tài)映射圖
其中,α表示c(x)函數(shù)的銳利程度,DT(x)表示歐氏距離,dth表示置信度函數(shù)的像素閾值。
為了預(yù)測目標(biāo)3D 邊界框角點(diǎn)的投影位置,本文提出的方法首先檢測目標(biāo)在圖像中可能出現(xiàn)的位置坐標(biāo)。該坐標(biāo)在整幅圖像的一個(gè)單元格中,負(fù)責(zé)預(yù)測目標(biāo)的類別概率,緊接著根據(jù)目標(biāo)的3D 模型(目標(biāo)已知參數(shù))預(yù)測對應(yīng)的投影點(diǎn)。
網(wǎng)絡(luò)模型輸出目標(biāo)的質(zhì)心、3D 邊界框角點(diǎn)的投影以及目標(biāo)類別。為了進(jìn)一步確定目標(biāo)的6D 姿態(tài),利用RANSAC 非確定性迭代的特性,根據(jù)網(wǎng)絡(luò)輸出結(jié)果估計(jì)6D 姿態(tài)數(shù)學(xué)模型的參數(shù),隨著迭代次數(shù)的增加產(chǎn)生近似真實(shí)姿態(tài)的結(jié)果。此過程不需要隨機(jī)地初始化參數(shù),只需從對應(yīng)的3D 坐標(biāo)集合中隨機(jī)選取小的子集生成假設(shè),對于每個(gè)假設(shè),利用PnP算法恢復(fù)相機(jī)位姿,并將其用于計(jì)算投影誤差,根據(jù)誤差參數(shù)判斷哪些點(diǎn)是內(nèi)點(diǎn)(預(yù)測的角點(diǎn)中與真實(shí)姿態(tài)足夠接近的點(diǎn))。本文投影誤差閾值為22個(gè)像素。迭代次數(shù)k計(jì)算如下:
其中,w是內(nèi)點(diǎn)與所有點(diǎn)數(shù)量之間的比率,k是迭代次數(shù),它隨著子集的增加而增大,p表示要確保隨機(jī)選擇中至少有一個(gè)是n個(gè)無差錯(cuò)集合數(shù)據(jù)點(diǎn)的概率。本文取p=0.95。
為了得到最佳迭代次數(shù),比較了迭代次數(shù)的期望和標(biāo)準(zhǔn)差:
在實(shí)驗(yàn)中,為了保證所有預(yù)測的投影點(diǎn)中至少有一半的內(nèi)點(diǎn),設(shè)定w=9/18(18表示18個(gè)頂點(diǎn)),同時(shí)希望無差錯(cuò)的n個(gè)數(shù)據(jù)點(diǎn)越多越好。根據(jù)計(jì)算可得,當(dāng)n=4,w=0.5 時(shí),E(k)=16,SD(k)=15.5,它們近似相等。
為了避免過擬合,在LineMod數(shù)據(jù)集中加入了其他訓(xùn)練圖像,同時(shí)還使用了一些抖動(dòng)操作,比如用1.5倍的因子隨機(jī)改變圖像的亮度、飽和度,用0.2的因子隨機(jī)改變圖像旋轉(zhuǎn)角度、尺寸。用隨機(jī)梯度下降方法進(jìn)行優(yōu)化,同時(shí)置信度函數(shù)的距離閾值dth設(shè)置為30 個(gè)像素,歐式距離指數(shù)形式中指數(shù)常數(shù)α設(shè)置為2。初始學(xué)習(xí)率為0.001,學(xué)習(xí)率分別在迭代40 000、60 000 次時(shí)分別衰減0.1 倍。為了使模型在訓(xùn)練過程中更快收斂,還在LineMod數(shù)據(jù)集上進(jìn)行一次預(yù)訓(xùn)練,該預(yù)訓(xùn)練過程中將置信度估計(jì)設(shè)置為0。
LineMod:這是6D 目標(biāo)姿態(tài)估計(jì)的標(biāo)準(zhǔn)數(shù)據(jù)集,這個(gè)數(shù)據(jù)集包含多個(gè)姿態(tài)估計(jì)場景,比如復(fù)雜背景、無紋理目標(biāo)、光照條件變化的場景。每一幅圖像的中心都有一個(gè)標(biāo)記了平移、旋轉(zhuǎn)和類別的不同旋轉(zhuǎn)角度的的目標(biāo)。同時(shí)該數(shù)據(jù)集還提供了每個(gè)目標(biāo)的3D 模型表示。在LineMod 數(shù)據(jù)集中一共有15 783 張圖像,13 類目標(biāo),每個(gè)目標(biāo)特征大約有1 200個(gè)實(shí)例。
Occlusion LineMod:這個(gè)數(shù)據(jù)集是對LineMod數(shù)據(jù)集的一個(gè)擴(kuò)展,每一幅圖像包含多個(gè)被標(biāo)記的目標(biāo),大部分目標(biāo)被部分遮擋。在實(shí)驗(yàn)中,Occlusion LineMod數(shù)據(jù)集僅用來測試,只用LineMod數(shù)據(jù)集進(jìn)行訓(xùn)練。
2D 投影指標(biāo)[12]:這個(gè)指標(biāo)計(jì)算的是預(yù)測的角點(diǎn)與真實(shí)標(biāo)注角點(diǎn)之間的投影的平均距離。實(shí)驗(yàn)中,如果該距離小于5個(gè)像素,預(yù)測就是正確的。2D重投影指標(biāo)定義如下:
其中,C是相機(jī)矩陣,H是需要估計(jì)的目標(biāo)姿態(tài),pi是像素i的位置,μ是像素分布的混合權(quán)重最大的平均值。
ADD 指標(biāo)[4]:ADD 指標(biāo)計(jì)算的是模型頂點(diǎn)之間3D平均距離。如果3D模型頂點(diǎn)的坐標(biāo)與估計(jì)的坐標(biāo)之間的平均距離小于目標(biāo)直徑的10%,預(yù)測就是正確的。該指標(biāo)計(jì)算公式如下:
其中,M表示3D模型的頂點(diǎn)集合,p和p′分別表示估計(jì)和真實(shí)的目標(biāo)姿態(tài)。
5cm5°[13]:這個(gè)指標(biāo)用來估計(jì)6D 姿態(tài)估計(jì)的精度。如果平移和旋轉(zhuǎn)誤差分別低于5 cm 和5°,則估計(jì)是正確的。平移誤差和旋轉(zhuǎn)誤差表示如下:
其中,t和t′分別是估計(jì)和真實(shí)的平移矩陣,R和R′分別是估計(jì)和真實(shí)的旋轉(zhuǎn)矩陣。誤差eRE由旋轉(zhuǎn)的軸角表示的角度給出。
本文在LineMod 數(shù)據(jù)集上進(jìn)行了單目標(biāo)姿態(tài)估計(jì)測試,部分結(jié)果如圖4 中的第1 列和第2 列所示。最終的姿態(tài)估計(jì)結(jié)果和真實(shí)標(biāo)注姿態(tài)非常接近,尤其是當(dāng)數(shù)據(jù)集中包含復(fù)雜的背景和不同程度的光照時(shí),檢測性能仍然很出色。
圖4 姿態(tài)估計(jì)結(jié)果圖
就2D 重投影誤差而言,將實(shí)驗(yàn)結(jié)果與當(dāng)前常見的幾種姿態(tài)估計(jì)方法進(jìn)行了比較,如表1 所示,本文的算法表現(xiàn)最好,2D重投影精度達(dá)到89.27%,并且在端到端訓(xùn)練過程中本文算法沒有細(xì)化操作,表中方法標(biāo)記(R)的表示有細(xì)化過程。
就ADD指標(biāo)而言,本文提出的算法仍然與BB8[7]和Brachmann 等[10]提出的方法比較,如表2 所示。即使提出的方法沒有細(xì)化和預(yù)處理分割過程,但算法結(jié)果仍優(yōu)于Brachmann等提出的包含后處操作的方法,其結(jié)果提高了1.32個(gè)百分點(diǎn)。
就5cm5°指標(biāo)而言,提出的方法與Brachmann 等提出的方法相比有較大的優(yōu)勢,其結(jié)果提高了23.44 個(gè)百分點(diǎn),精度超過64%,如表3。對于目前姿態(tài)估計(jì)的研究任務(wù)來說,這是相當(dāng)不錯(cuò)的一個(gè)進(jìn)步。
表4給出了本文方法和其他方法[1,6-8,10,14-16]的運(yùn)行時(shí)間。本文提出的網(wǎng)絡(luò)結(jié)構(gòu)簡單,在訓(xùn)練和推理的過程中大大減少了運(yùn)算量。本文算法運(yùn)行速度可達(dá)37 frame/s,完全可以實(shí)時(shí)運(yùn)行,超過BB8算法速度10倍多,較之目前姿態(tài)估計(jì)任務(wù)有明顯的速度優(yōu)勢。
表1 2D重投影誤差%
表2 ADD測試結(jié)果%
表3 5cm5°測試結(jié)果%
表4 算法運(yùn)行速度
圖5 Occlusion LineMod數(shù)據(jù)集上2D投影誤差隨閾值變化的準(zhǔn)確率
在圖5中,本文提出的方法與其他常用的姿態(tài)估計(jì)方法[7-8,17]相比,在6個(gè)目標(biāo)類別(總類別個(gè)數(shù)為13)的檢測上整體性能優(yōu)于Tekin 等人的方法,在10%閾值下單個(gè)類別最大的準(zhǔn)確率高出其他算法9.14%,充分驗(yàn)證了本文算法在LineMod和Occlusion LineMod兩個(gè)數(shù)據(jù)集上檢測的穩(wěn)定性。
本文還在Occlusion LineMod數(shù)據(jù)集上進(jìn)行了遮擋目標(biāo)的姿態(tài)估計(jì)測試,測試結(jié)果如圖4第3、4列所示,其結(jié)果驗(yàn)證了本文算法的有效性,能夠較好地估計(jì)目標(biāo)的姿態(tài)。圖6 給出了Occlusion LineMod 數(shù)據(jù)集中6 個(gè)類別的2D 重投影誤差隨著距離閾值的增加的變化趨勢。從圖中各類的變化曲線得出結(jié)論:大多數(shù)類別在閾值為50 個(gè)像素時(shí),其檢測精度在80%左右。值得一提的是,雖然本文的方法沒有細(xì)化過程,但可以在有遮擋的數(shù)據(jù)集中取得較好的檢測結(jié)果。另外,訓(xùn)練集中并沒有包含遮擋目標(biāo)的圖像,說明提出的方法有較強(qiáng)的環(huán)境適應(yīng)性。
圖6 在Occlusion LineMod數(shù)據(jù)集上檢測精度隨閾值變化結(jié)果
本文針對三維空間中的目標(biāo)6D 姿態(tài)估計(jì)問題,基于YOLO V2 深度學(xué)習(xí)框架提出了一種簡單快速的姿態(tài)估計(jì)算法。該算法首先依靠卷積神經(jīng)網(wǎng)絡(luò)提取目標(biāo)高維空間特征信息,然后利用目標(biāo)的3D 空間模型頂點(diǎn)坐標(biāo)得到二維平面的映射坐標(biāo),獲得目標(biāo)在平面上的立體表示,最后經(jīng)過PnP 算法計(jì)算目標(biāo)的空間姿態(tài),確定目標(biāo)姿態(tài)的粗略估計(jì)。相較于經(jīng)典的姿態(tài)估計(jì)算法,本文提出的方法在精度和速度上都有較大優(yōu)勢,未來的研究將主要針對多目標(biāo)姿態(tài)估計(jì)遮擋問題繼續(xù)完善網(wǎng)絡(luò)結(jié)構(gòu)和計(jì)算過程。