鐘志強,陳新度,吳 磊,刁世普
(廣東工業(yè)大學 a.廣東省計算機集成制造重點實驗室;b.省部共建精密電子制造技術與裝備國家重點實驗室,廣州 510006)
6D目標姿態(tài)估計一直是計算機視覺領域中的一個重要問題,過去已經有大量的研究致力于此。深度神經網絡(DNN)在實時姿態(tài)估計領域表現(xiàn)出卓越性能,但是,為了使DNN網絡具有更好的泛化能力,現(xiàn)有網絡本身的結構都是非常龐大且復雜的,從而導致它的計算效率低,實時性不夠好,并且需要在有很強的計算能力和足夠內存的計算機上才可以運行,這對一些計算能力不強和僅需要對單一目標姿態(tài)估計的場合非常不友好。
實時目標檢測和6D姿態(tài)估計對于醫(yī)學診斷、增強現(xiàn)實、虛擬現(xiàn)實和機器人技術至關重要[1]。6D目標姿態(tài)估計不僅需要對單幅RGB圖像中的目標進行定位,還需要檢測目標在三維空間中的旋轉角度??偨Y大部分前人的工作來看,姿態(tài)估計方法主要分為三類:基于RGB-D的方法[2]、基于模板匹配的方法[3]和基于卷積神經網絡的方法[4]。最近幾年的研究中表明,基于深度學習的方法在RGB圖像中的檢測和6D姿態(tài)估計可以獲得具有代表性的結果。SSD6D擴展了2D物體檢測器的思想,基于離散視點分類而不是用直接回歸法的6D姿態(tài)估計,以這種方式預測的結果是非常不準確的,因為它們是真實位置的近似離散,需要后期的優(yōu)化提升精度[5]。BB8使用多階段方法,在前兩個階段中,執(zhí)行了從整體到精細的分割,其結果是對象邊界框點的第三個或兩個投影之間的交集,但這是一種多階段的方法,從而導致計算的速度非常慢[6]。PVNet采用了回歸指向關鍵點的像素單位向量的方法,并對這些向量使用RANSAC對關鍵點位置進行投票[7],這種表示提供了關鍵點位置的不確定性。PNP解算器又可以進一步利用這些不確定性[8]?;赟SD網絡提出了Tiny SSD網絡[9],該網絡基于SSD改進而來,比SSD更輕量,占用的資源更少,但是精確度卻和原網絡一樣優(yōu)異。
受此啟發(fā),在單一目標物的6D姿態(tài)識別時,不需要網絡有很好的泛化能力,但是對網絡的識別速度有很高的要求,需要很強的實時性。針對以上問題,本文提出了一種基于YOLO6D[10]網絡的端到端訓練的單階段網絡結構,它可以直接檢測三維邊界框頂點的二維投影,不需要額外的后處理等細化步驟,比原網絡更加輕量化,模型參數(shù)更少,占用的資源更少,從而運算的速度更快,可以做到很好的實時性。
YOLO6D網絡主體框架是在YOLOv2主體框架上經過優(yōu)化得到的,YOLOv2是單階段檢測網絡,且無需優(yōu)先生成預選區(qū)域,可以直接在整個輸入圖像中做目標回歸預測,這樣不僅訓練過程中能夠實現(xiàn)端到端的優(yōu)化,而且檢測效率高,能夠滿足實時處理需求。YOLOv2 相較于YOLOv3網絡結構簡單,并且在受限制的環(huán)境下有較好的實時性。
YOLO6D網絡框架是在YOLOv2網絡框架上經過修改得到的。如表1所示,YOLO V2網絡結構總共有31層,第0~22層是Darknet-19網絡,其中卷積層數(shù)量為19個,最大池化層數(shù)量為5個。YOLOv2的最后一個卷積層的輸出通道數(shù)為5(anchor數(shù)量)*[4(center_x,center_y,width,height)+ 1(confidence)+ num_classes。其中anchor表示錨框,center_x,center_y,width,height分別表示錨框的中心點坐標和寬高,confidence表示置信度,num_classes表示目標種類。YOLO6D將網絡的輸出改為5(anchor數(shù)量)*[18(9個頂點在像素坐標系下的坐標)+ 1(置信度)+ num_classes。
表1 YOLOv2網絡結構
在卷積神經網絡中,卷積層的作用是提取更深層次的特征信息,卷積層數(shù)量越多就意味著提取到的特征越細小,每增加一個卷積層,對應神經元的數(shù)量,網絡的參數(shù)也都隨之增加,從而模型就變得更加復雜,越復雜的模型計算量就越大,而且更容易出現(xiàn)過擬合現(xiàn)象。
池化層的主要作用:第一是去掉冗余信息,節(jié)約計算資源,第二是保留檢測物體的特征信息,第三是降低參數(shù)量,提高模型性能,防止過擬合。特征提取的誤差主要來自兩個方面:①鄰域大小受限造成的估計值方差增大;②卷積層參數(shù)誤差造成估計均值的偏移。平均池化能減小第一種誤差,更多地保留圖像的背景信息,最大池化和平均池化都是對數(shù)據(jù)做了下采樣,但是最大池化偏向于減小第二種誤差,更多地保留紋理信息,選出分類辨識度更好的特征,提供了非線性。平均池化強調對整體特征信息進行下采樣,偏向于減少參數(shù)數(shù)量,在減少維度的同時,更有利信息傳遞到下一個模塊進行特征提取。
基于我們當前使用場景下姿態(tài)估計對象的單一性,我們的網絡不需要很強的泛化能力,也不需要對小目標有很強的識別能力。綜上所述,受文獻[1,9]改進方法的啟發(fā),對原YOLO6D網絡進行改進。將原網絡的第5層去掉1個1×1和1個3×3的卷積層,將第6層去掉2個3×3的卷積層,并將原網絡的5個最大池化層修改為4個最大池化層加上1個全局平均池化層,從而減少原網絡中深層卷積層,減少參數(shù),提升網絡速度。
如圖1為改進后的網絡結構圖,網絡輸入一張2D的彩色圖片,輸出一S×S×(9×2+1+C)的3D 張量。網絡輸入圖片劃分成S×S個網格,物體的中心點所在的網格負責預測該物體的9個坐標點(9×2),置信度1(confidence)以及類別(C)。
圖1 改進的YOLO6D網絡結構圖
為了增加網絡深度同時壓縮特征,在3×3的卷積核之間加入1×1 的卷積核,每次最大池化操作后通道數(shù)會翻倍。在每一層網絡前先對輸入的圖像數(shù)據(jù)進行批量歸一化操作,可以有效提高準確率(mAP)以及顯著改善收斂性,防止過擬合。
3D目標檢測和2D目標檢測一樣,空間中存在一個可以將目標物包圍住的3D邊界框,我們的目標是檢測出3D邊界框并將其分類。3D邊界框可以表示一個物體的姿態(tài),其中包含物體在3D空間中的位置xyz,以及物體繞x軸,y軸和z軸的旋轉角度等信息,即6個自由度,只要我們知道空間中任意物體的這6個自由度就可以確定唯一的物體姿態(tài)。在預測6D姿態(tài)之前,首先要預測3D邊界框在2D圖像上投影的1個中心點和8個角點,我們定義這9個控制點是3D對象模型的中心點和邊界框角點。通過這9個點由PnP算法計算得到6D姿態(tài)。這樣我們就可以把預測物體6D姿態(tài)的問題轉化為預測9個坐標點的問題。
模型將一幅RGB圖像作為輸入,用圖1所示的全卷積結構對其進行32倍降采樣處理,輸出的特征尺寸為13×13,將圖像分割成一個包含S×S個網格的2D規(guī)則網格,輸出3D張量中的每個網格位置將與一個多維向量相關聯(lián),該多維向量包括預測的9個控制點在2D圖像上的位置、對象的類別概率和總體置信度值。
訓練好的網絡不僅能夠預測精確的2D位置,而且能夠預測物體存在區(qū)域的高置信度值和不存在區(qū)域的低置信度值。2D物體檢測時,一般使用圖像中預測的錨框和真實的2D矩形相關聯(lián)的交集(IoU)分數(shù)作為其置信度值。而我們的對象是3D的,為了計算兩個任意長方體的等效IoU分數(shù),我們需要計算對應于它們交點的3D區(qū)域。這個計算是復雜的,并且會減慢訓練速度。因此,這里采取了不同的方法。使用圖2所示的置信度函數(shù)對預測的置信值進行建模。置信函數(shù)c(x)基于預測的2D點與實際目標2D點的距離,返回由x表示的預測點的置信值。函數(shù)公式如下[10]:
圖2 置信度函數(shù)[10]
(1)
其中,DT(x)被定義為圖像空間中的2D歐幾里德距離,是一個具有截止值的尖銳指數(shù)函數(shù),而不是單調遞減的線性函數(shù),因此可以實現(xiàn)精確定位。指數(shù)函數(shù)的銳度由參數(shù)α定義。在實踐中,我們將置信函數(shù)應用于所有控制點,計算平均值并將其指定為置信度。
該方法還計算了預測的3D邊界框與真實邊界框的交并比得分,從而可以保證低置信度表示沒有目標的區(qū)域,高置信度區(qū)域存在目標。為了提高對不同尺寸物體的魯棒性,當網絡按32的下采樣因子對圖像進行下采樣時,我們將輸入分辨率更改為從集合{320,352,…,608 }中隨機選擇的32的倍數(shù)。
在6D物體姿態(tài)估計的時候只需要調用一次網絡,從而保證了網絡快速運行。每個網格都可以預測該網格內物體的姿態(tài),并且通過調整置信度閾值來刪除具有低置信度的預測單元。對于尺寸較大的目標和位于兩個網格相交處的投影對象,多個網格很可能都會預測出較高的置信度。為了獲得更魯棒的姿態(tài)估計,找出置信度得分最高的3×3鄰域的單元,把相關單元的置信度得分當作權重,通過計算各個檢測的加權平均值來組合這些相鄰單元的各個角的預測。
網絡給出目標質心的2D投影與其3D邊界框的角以及對象標識。我們使用PnP姿態(tài)估計方法根據(jù)2D點和3D點之間的對應關系來估計6D姿態(tài)。PnP算法使用9個已知物體在相機坐標中的旋轉矩陣和平移矩陣對應的點,包括8個角點和一個中心點。中心點和角點的預測不一樣,因為中心點落在某個網格,相應的網格就負責預測這個物體,所以中心點的偏移一定會落在網格之內,因此通過sigmoid激活函數(shù)將網絡的輸出壓縮到0~1之間,但對于其他8個角點,有可能落在網格之外,所以8個角點的坐標偏移可以表示為[10]:
gx=f(x)+cx
(2)
gx=f(y)+cy
(3)
其中,cx,cy表示cell的坐標。對于中心點而言,f(·)表示sigmoid函數(shù),對于角點而言,f(·)表示恒等函數(shù)。通過最小化公式(4)[10]來找到目標的近似位置,然后再細化到頂點位置。
L=λptLpt+λconfLconf+λidLid
(4)
其中,Lpt為坐標損失;Lconf為置信度損失;Lid為分類損失。坐標損失和置信度損失用均方誤差函數(shù)來表示,分類損失用交叉熵函數(shù)來表示。為了提高模型的穩(wěn)定性,將不包含目標的權重設置為0.1,包含目標的權重設置為5,分類損失函數(shù)和坐標損失函數(shù)的權重都設為1。
模型的6D姿態(tài)精度評估用3個標準來度量,即2D重投影誤差、5 cm5°標準和算法運行時間對比。2D重投影誤差表示的是物體3D網格頂點的2D投影和物體真實姿態(tài)之間的平均距離,當該誤差小于5個像素的時候認為姿態(tài)估計是準確的。2D重投影誤差公式如下[11]:
(5)
其中,Pi是像素i的位置;μ是像素分布的混合權重最大的平均值;H是估計的對象姿態(tài);C是相機矩陣。
5 cm5°標準是指如果平移誤差和旋轉誤差分別低于5 cm和5°則表示估計是正確的。公式如下[12]:
(6)
ekE=arccos[(Tr(RR′-1)-1)/2]
(7)
其中,t和t′分別是預測的平移矩陣和真實的平移矩陣;R和R′分別是預測的旋轉矩陣和真實的旋轉矩陣,由旋轉的軸角的角度來表示誤差ekE。
本文實驗平臺如圖3所示,硬件配置為:SHANSU IRC100底盤,HUASHU CO602六軸機械臂,Intel D435i相機,因時機器人EG2-4B1電動夾爪,Intel(R)Core(TM)i7-9750H CPU @ 2.60 GHz 2.59 GHz,32 GB內存,GPU為:NVIDIA GeForce RTX 2060。軟件環(huán)境為:ubuntu16.04,anaconda3,python3.6,pytorch0.4.1,cuda10.0,cudnn7.5。
圖3 實驗平臺
3.2.1 實驗數(shù)據(jù)集制作
傳統(tǒng)LineMod格式的數(shù)據(jù)集制作非常麻煩,首先要制作三維模型然后才可以得到目標的三維信息,對于不規(guī)則的目標物體,其三維模型制作非常復雜且存在精度不高的問題。本文利用二維碼信息識別的方法生成三維信息數(shù)據(jù)集,該方法通過目標物體最小外接矩形的尺寸獲得目標物體的三維坐標信息,從而規(guī)避了三維模型的制作過程。
數(shù)據(jù)集采集平臺包含Kinect2.0相機、轉盤、碼盤、目標物體、三腳架等。數(shù)據(jù)采集的流程如圖4所示,首先利用打印好的棋盤格對相機進行標定,獲取相機的內外參數(shù)。然后利用Aruco庫生成并打印包括至少一個二維碼的碼盤,并將目標物擺放在碼盤平面正中間位置。啟動轉盤,設定轉速大約在60 s/圈,在轉盤轉動的過程中,用相機對碼盤上的物體進行實時視頻采集,在這個過程中要調整相機的采集角度,從而可以獲得物體的各個角度的數(shù)據(jù)。
圖4 數(shù)據(jù)集制作流程圖
采集的過程中碼盤上的二維碼至少有一個不被遮擋,如果有多個二維碼都沒有被遮擋,可以選擇其中一個二維碼的中心點為原點設立世界坐標系,計算出世界坐標系相對相機坐標系的旋轉矩陣和平移矩陣。測量目標物體的外形尺寸和二維碼之間的距離,從而計算出目標物體最小外接矩形的8個頂點的世界坐標。結合8個頂點的世界坐標和相機的內外參數(shù),利用Opencv中的Projectpoint函數(shù)計算出8個頂點的像素坐標。將8個頂點連接成6個面,對面內外不同區(qū)域設置不同像素值從而得到相應的掩碼mask文件和mask-show文件。通過查看mask-show文件,判斷8個頂點的像素坐標是否精確,對于誤差過大的圖片可以手動刪除。剔除不好的數(shù)據(jù)后,由掩碼mask、目標物體、像素坐標生成LineMod格式數(shù)據(jù)集。
本文采取大約1000張目標對象各個角度的圖片,其中70%用來當作訓練集,30%用來當作測試集。
3.2.2 實現(xiàn)細節(jié)
為了提高網絡模型的魯棒性,避免過擬合,實驗時對圖像進行數(shù)據(jù)增強。每次從訓練集讀取圖片之后,都對圖像進行一次隨機的翻轉、旋轉、抖動、或將圖像的飽和度和亮度按照1.5倍的指數(shù)改變、或隨機縮放和平移圖像使其達到圖像大小的20%。同時將置信度α設置為2,距離閾值設置為30 pix,設置學習率從0.001開始,每100個周期將學習率變?yōu)樵瓉淼氖种弧?/p>
我們基于3.2節(jié)的數(shù)據(jù)集進行了單目標姿態(tài)估計的測試。該數(shù)據(jù)集不涉及深度圖像信息,僅僅包含RGB圖像。如圖5所示,我們的目標對象包含不同顏色和形狀,對這些目標從俯視,平視,側視等不同的角度進行測試。圖5的第一、二、三列分別展示同一目標物在不同的光照條件下從不同的角度進行姿態(tài)估計的結果,維他奶盒的尺寸為:長0.063 m、寬0.041 m、高0.105 m;可樂罐的尺寸為:半徑0.033 m、高0.115 m;旺仔牛奶盒的尺寸為:長0.048 m、寬0.032 m、高0.087 m。第四列目標物材質分別是黃銅和紅銅的圓柱體,半徑為0.01 m,高為0.034 m,維他奶盒的體積是其25倍多。因此同時展示了對于同一種材質不同顏色的目標物進行姿態(tài)估計的結果也展示了改進后的算法對小尺寸目標位姿估計的效果。第五列展示了塑料的積木塊和銅柱的姿態(tài)估計結果,并在銅柱上顯示出坐標姿態(tài)。結果顯示目標對象的最小外接矩形可以完整地把目標對象包圍住,最終的姿態(tài)估計結果和真實的姿態(tài)非常接近,尤其是數(shù)據(jù)集中存在光照導致的亮度不同和模糊不清的數(shù)據(jù)時,算法依然能很好地計算出目標的姿態(tài)。
圖5 姿態(tài)估計效果圖
基于3.2節(jié)的數(shù)據(jù)集,對比了幾種目前使用較廣泛的算法。在本數(shù)據(jù)集中,Rcu和Ycu分別表示紅色銅柱和黃色銅柱,半徑為0.01 m,高為0.034 m,體積很小,維他奶盒是其體積的25倍多。由表2~表4結果可知,基于改進的姿態(tài)估計算法和當前主流的算法進行對比,對2D重投影誤差和5 cm5°度量的結果而言,改進后的網絡對于維他奶和可樂罐這種尺寸相對大,紋理相對豐富的目標物的識別準確率和原網絡一樣優(yōu)異,比BB8精度高。對于Rcu和Ycu這樣的小目標物位姿估計準確率稍低于原網絡,但在運行速度方面本文的方法遠遠高于其它算法,運行速度是BB8算法的近12倍,是Brachmann算法運行速度的17倍多,可以達到35 FPS,適用于實時處理。
表2 重投影誤差準確率 (%)
表3 5 cm5°準確率 (%)
表4 處理速度對比結果 (FPS)
因為改進后的網絡結構簡單,所以對于Rcu和Ycu這樣的小目標物位姿估計準確率稍低于原網絡。也正是因為改進后的網絡結構簡單,在運行速度方面我們的方法遠遠高于其它算法,適用于目標對象單一,對運行速度有要求的場合。
現(xiàn)有的基于卷積神經網絡的位姿估計算法都需要增加后處理步驟來提升姿態(tài)估計精度,并且需要精確的三維模型,這會使程序的運行速度大大減慢。針對目前主流的三維位姿估計算法實時性不高的問題,提出了基于Yolo6D改進的位姿估計算法。改進后的算法通過輸入圖像和與之對應的三維模型之間的多組2D-3D對應關系,利用PnP和RANSAC方法計算6自由度姿態(tài),是單階段處理算法,且不需要精確的三維模型。相較于改進前的算法,改進后的算法在保留深度卷積神經網絡特征提取能力的基礎上,通過改變卷積層和池化層結構,減少特征圖和模型參數(shù)等方法,使網絡檢測速度有了明顯的提升。改進后的算法對小目標的兼顧還不是很好,在接下來的研究中,可以在此網絡的基礎上增加殘差網絡或者更換激活函數(shù)來提升對小尺寸目標的檢測精度。