葛旭陽,黃尚鋒,蔡國榕
(1.集美大學理學院,福建 廈門 361021;2.集美大學計算機工程學院,福建 廈門 361021)
三維目標檢測在自動駕駛[1]、機器人[2]等領域有著廣泛的應用。通過估計空間目標的3D位置,自主駕駛的車輛或機器人可以更準確地預判和規劃自己的行為和路徑,避免碰撞和違規。目前,三維目標檢測按照數據類型可分為三類:單目圖像、多視圖圖像、點云目標檢測。基于單視圖的方法,如GS3D[3]使用單目攝像頭完成三維目標檢測;基于多視圖的方法,如Chen等[4]從不同視圖的圖像中得到的視差來獲得深度圖完成三維目標檢測;基于點云的方法,如PointRCNN[5]、VoteNet[6]從點云獲取目標信息完成三維目標檢測。
目前基于點云的目標檢測方法,想獲得更好的檢測性能有三種方法:一是用更好的主干網;二是設計更好的策略提取更好的特征;三是用并集上的交集(Intersection over Union,IoU)計算的度量損失來替代傳統的邊界框回歸損失,如l1范數、l2范數等。邊界框回歸是2D/3D視覺任務中一個最基礎的模塊,不論是實例分割、目標跟蹤,還是目標檢測,都依賴于對邊界框進行回歸,以獲得準確的定位效果。因此,選擇更好的邊界框回歸損失,有利于提高目標檢測網絡的性能。
IoU又被稱為Jaccard索引,常用來表示兩個任意形狀目標的相似性,在目標檢測的邊界框回歸中起到重要的作用。在anchor-based[7]的方法中,IoU不僅可以用來確定正樣本和負樣本,還可以用來評價輸出框和真實框的距離,或者說預測框的準確性。IoU還有一個好的特性,就是尺度不變性。由于這個良好的屬性,所以在語義分割[8]、目標檢測[9]和跟蹤[10]等任務中的性能測量均采用IoU作為測量指標。
ln范數類型損失的一個較好的局部最優解可能并非IoU的局部最優解;而且與IoU不同的是,ln范數不具有尺度不變性,相同重疊程度的邊界框的損失值不一定相同。另外,一些邊界框的表示方法,由于沒有對不同類型的表示參數進行正則處理,當表示參數變多時,或在問題中添加更多維度時,復雜性會增加。為了緩解上述問題,目前最先進的對象檢測器引入了錨盒(anchor box)[11]的概念,他們還定義了一個非線性的表示[12-13]來補償尺度的變化。即使進行了這些手工更改,優化回歸損失和最大化IoU值之間仍然存在差距。
Rezatofighi等[14]探索了軸對齊矩形之間的IoU,此時IoU有解析解,并且可反向傳播,意味著,IoU可以直接用作目標函數進行優化。而優化IoU目標函數與優化某個損失函數之間,顯然選擇優化IoU目標函數,可以提高IoU指標的強相關。但是這其中也存在問題:如果兩個框不相交,那么就無法衡量兩個框的距離;同時IoU的值為0,其梯度也將為0,當計算梯度的時候就無法使用優化器進行傳播。針對這些問題,提出了泛化版的IoU,稱為GIoU。GIoU的優點有:a)沿襲IoU能將被比較的目標形狀屬性編碼進區域屬性;b)維持IoU的尺度不變性;c)在目標有重疊情況下與IoU強相關。
本文在此基礎上,設計了一個適用于三維目標檢測邊界框回歸的度量方法(3D_CGIoU),將3D_CGIoU的值納入三維目標檢測邊界框回歸的損失中,并將該方法融入到目前主流的三維目標檢測網絡中,如PointRCNN、VoteNet和VoxelNet[15]等,評估其對檢測性能的影響。
三維目標檢測中,邊界框回歸的目標是盡可能準確地獲取預測框。目前絕大部分的目標檢測都會用IoU對候選預測框進行篩選,多數的目標檢測通過ln范數來作為度量標準,這將會存在兩個預測框ln范數的絕對值相同,而和真實框的重疊方式卻不相同的情況。另外,ln范數對物體的尺度變化很敏感,而IoU和GIoU具有尺度不變性可以更好地度量預測框的精準度。受到GIoU的啟發,本文設計了一個適用于三維目標檢測邊界框回歸的度量和損失(3D_CGIoU)的計算方法。
IoU是用來比較任意形狀(體積)之間的相似性,但是當預測框與真實框完全不重合時,損失函數梯度為0。另外,預測框與真實框可以以不同的方式重疊,得到相同的IoU值,即IoU不能反映兩個框之間如何發生重疊。
針對以上存在的問題,Rezatofighi等[14]設計了適用于二維目標檢測的GIoU。首先,計算預測框和真實框的最小閉包區域面積(同時包含了預測框和真實框的最小長方形的面積),再計算閉包區域中不屬于兩個框的區域占閉包區域的比重,最后用IoU(其值記為I1)減去這個比重得到GIoU(其值記為I2)。
IoU和GIoU的計算方式如下:
I1=S紫色/(S紫色+S綠色+S藍色),
(1)
I2=I1-S黃色/(S紫色+S藍色+S綠色+S黃色)。
(2)
公式(1)和公式(2)中的S指代各顏色區域面積,各顏色區域如圖1所示。
借鑒GIoU的方法,本文設計了一個適用于三維目標檢測邊界框的度量方法,該方法在鳥瞰圖上以最小凸多邊形為外接圖形進行計算,稱為3D_CGIoU,其值記為I3,則
I3=|A∩B|/|A∪B|-|C/(A∪B)|/|C|。
(3)
其中:A代表真實框Bg的體積;B代表預測框Bp的體積;C表示封閉盒Bc的體積。
為了更好地理解在3D_CGIoU中最小的封閉盒Bc的形狀與計算,給出了更直觀展示的圖2。


圖3中預測框Bp的中心點、長、寬、高、傾角分別是A0(xp,yp,zp)、lp、Wp、Hp、θp;真實框Bg的中心點、長、寬、高、傾角分別是B0(xg,yg,zg)、lg、Wg、Hg、θg。根據這些參數可以得到Bp和Bg頂點的坐標為:Ai(xpi,ypi,hp),Bi(xgi,ygi,hg)。當i=1,2,3,4時,hp=zp+Hp/2,hg=zg+Hg/2;當i=5,6,7,8時,hp=zp-Hp/2,hg=zg-Hg/2。
由于框的底部均平行于水平面,因此只要從鳥瞰圖中找出兩個框的相交截面部分并求出面積S0,就可得到兩個框相交部分的體積V0:V0=S0H,其中H=min(maxhp,maxhg)-max(minhp,minhg)。
為了計算相交部分的面積S0,首先,判斷每個頂點是否在另一個矩形內部(不包含邊緣)。如果沒有頂點在另一個矩形內部,則無相交部分存在;如果有,則保存并進行下一步,計算2個矩形各邊的交點(不包含8個頂點)并保存。接著,將保存的所有點連起來組成一個凸多邊形,這個凸多邊形就是相交的部分。將第一個保存的點,與其他與其不相鄰的點依次連接后,凸多邊形被分割成多個三角形。每個點坐標都可以計算得到,顯然三角形的每一條邊長也可求得,根據海倫公式算出每個三角形面積并求和,最終得到S0(見圖4)。

通過鳥瞰圖外接框形狀(見圖5)確定算法,得到鳥瞰圖中2個矩形的外接面積最小的凸多邊形,如圖4b所示多邊形A1B2B3A3A4,求其面積S1的方法同S0。將這個凸多邊形作為橫截面所形成的棱柱并當作預測框和真實框的外接框,計算出其體積V1:V1=S1H1,其中H1=max(maxhp,maxhg)-min(minhp,minhg)。
將GIoU從二維目標檢測遷移到三維目標檢測中,并對鳥瞰圖的外接框進行優化,得到3D_CGIoU的值I3:
I3=V0/(Vp+Vg-V0)-(V1-(Vp+Vg-V0))/V1。
(4)
其中:Vp為預測框Bp的體積;Vg為真實框Bg的體積。

首先,要確定預測框和真實框的鳥瞰圖外接框的形狀及大小。
第一步:確定鳥瞰圖中最左下角的點(坐標排序:x最小,如果x相同則取y更小的),記為P0。這一步需要掃描一遍所有的點,時間復雜度為O(n),n為點的總數量。在該算法中,n為8,因此時間復雜度為O(1)。
第二步:將所有的點按照相對于第一步中得到的點P0的極角大小進行排序。當極角相同時,距離P0比較近的排在前面。如圖5a所示,排序結果為P1,P2,P3,P4,P5。
第三步:用一個棧(數組)來保存當前的凸多邊形的頂點,先將P0和P1依次加入到棧中。按順序掃描每一個點,用叉積判斷當前點和棧頂頭兩個點形成的拐向。若順時針就彈出棧頂元素,接著繼續判斷;否則壓入新點Pi。
然后,棧中的點則為外接最小凸多邊形的所有頂點,按照其順序連接起來即可,如圖5b所示。
鳥瞰圖外接框的算法流程如下:
輸入 鳥瞰圖的8個頂點坐標,如圖3中A1A2A3A4B1B2B3B4
輸出 鳥瞰圖中所有點的外接凸多邊形的頂點
步驟 1)P0← The bottom left point //最左下角的點
2)P1,P2,…,P7//其他點與最左下角點之間的極角逆時針進行排序
3)letSbe an empty stack //用來存放最終得到外接凸多邊形的頂點
4)PUSH(P0,S) // 將前三個點作為初始點,并壓入棧
5)PUSH(P1,S)
6)PUSH(P2,S)
7)fori= 3 to 7
8)while the angle formed by points NEXT-TO-TOP(S),TOP(S),andPimakes a nonleft turn
9)POP(S)
10)PUSH(Pi,S)
11)returnS
3D_CGIoU作為邊界框回歸損失算法流程如下:
輸入 預測框p={xp,yp,zp,lp,Wp,Hp,θp},預測框對應的真實框g={xg,yg,zg,lg,Wg,Hg,θg}
輸出L3D_CGIoU
步驟 1)SA=lp×Wp//預測框Bp俯視圖A1A2A3A4的面積
2)SB=lg×Wg//真實框Bg俯視圖B1B2B3B4的面積
3)S0//預測框Bp和真實框Bg俯視圖相交的面積
4)S1//預測框Bp和真實框Bg俯視圖外接最小凸多邊形的面積
5)H//預測框Bp和真實框Bg交集的高度
6)H1//預測框Bp和真實框Bg并集的高度
7)Vp=SA×Hp//預測框Bp的體積
8)Vg=SB×Hg//真實框Bg的體積
9)V1=S1×H1//預測框Bp和真實框Bg最小封閉盒的體積
10)IfS0≤0:
V0= 0;
Else:
IfH≤0:
V0= 0;
Else:
V0=S0×H;
11)I3=V0/V-(V1-V)/V1,whereV=Vp+Vg-V0
12)L3D_CGIoU=1-I3
2.1實驗設置
本算法在Linux系統下,使用Pytorch編程,分別在不同數據集和主干網上進行實驗。通過PointRCNN、VoxelNet[15]、PointPillars[16]在KITTI基準數據集[17]上的表現,以及VoteNet在ScanNet數據集[18]上的表現,對本文提出的方法進行了評估。KITTI數據集包含7481個訓練樣本和7518個測試樣本。由于測試數據集的真實性是不公開的,因此將訓練數據集分為訓練集(3712)和驗證集(3769)[19]。ScanNet數據集一共有1513個采集場景數據(每個場景中點云數量都不一樣,如果用端到端的網絡框架,需要對原始點云進行采樣,使每一個場景的點云數量都相同),21個類別的對象,其中1201個場景用于訓練,312個場景用于驗證。
實驗所采用的每種方法中,都使用原作者提供的默認參數和每個基準上的迭代次數,并嚴格遵循其訓練協議。實驗結果中每個方法的檢測精度,是網絡通過訓練后,在驗證集上展現的精度。
通過多種方法在KITTI數據集上的表現,評估3D_CGIoU算法融入主干網后對檢測性能的影響,結果如表1所示。本實驗對場景中的汽車進行檢測,IoU閾值為0.7,評估指標為平均精度。所有的檢測結果都使用官方的KITTI評估檢測指標進行測量,這些指標包括:鳥瞰圖、3D、2D和平均方向相似度。二維檢測是在圖像平面上進行的。KITTI數據集被劃分為容易的、中等的和困難的三種難度,而官方的KITTI排行榜則根據中等的性能進行排序。
相比于二維目標檢測,三維目標檢測更具挑戰性,因為它對三維包圍盒在空間中的定位精度要求更高。從表1可以看出,將3D_CGIoU算法納入到邊界框回歸損失后的主干網對車輛的檢測性能明顯都要優于原始主干網。所采用的方法在各個難度上的檢測性能均有提升,VoxelNet提升了1.89%,VoxelNet提升了1.79%,PointRCNN提升了1.03%。

表1 在KITTI驗證集的汽車類上進行目標檢測的性能對比
表2為VoteNet在ScanNet數據集上各類目標的平均檢測精度,其中baseline為原始的VoteNet檢測結果,ours為將L3D_CGIoU納入預測框回歸損失后的VoteNet檢測結果。如表2所示,ours的平均精度和平均召回率都要優于baseline。在VoteNet主干網中融入3D_CGIoU算法優化邊界框的回歸損失,其檢測性能在各類別目標上都有提升,所有類別的平均精度提升了近1.5個百分點。其中,“柜子”和“冰箱”的檢測性能提升差距過大。這兩者形狀都比較規則,也都是相對較大的物體,且GIoU有尺度不變性,因此排除由于大小或形狀而導致的精度差異,推測是由于basiline在訓練過程中由于網絡初始化的隨機性等問題,導致對“柜子”的表現低于應有的水準。但在本文算法中,“柜子”的檢測性能表現較好,而“冰箱”可能與“柜子”的情況恰恰相反,最終使得“柜子”和“冰箱”的精度提升幅度差距過大。

表2 VoteNet在ScanNet數據集上的平均檢測精度
圖6是PointRCNN和PointRCNN+3D_CGIoU在KITTI上的檢測結果,可視化其中的三個場景,左側為原始的PointRCNN檢測結果可視化,右側為將L3D_CGIoU納入預測框回歸損失后的PointRCNN+3D_CGIoU檢測結果可視化。實物圖下方是對應的點云圖。實物圖中藍色的是預測框,紅色是真實框,綠色是label;點云圖中紅色的是預測框,綠色是真實框。實物圖中并不是所有的紅色框都作為ground truth(GT),只有有label的框才會在訓練中作GT。


點云圖的左右對比顯示,3D_CGIoU算法納入邊界框回歸損失后,預測框與真實框重合度有一定的提升,即得到的預測框的準確率更高。場景一中,在實物圖中可以很明顯地看出道路的遠處有2輛車,但沒有標簽;在點云圖中,PointRCNN只檢測出了1輛車,而PointRCNN+3D_CGIoU將2輛車都檢測了出來。這進一步說明了3D_CGIoU的有效性和優越性。
本文設計了3D_CGIoU作為新的三維點云目標檢測的評估指標,對預測框與真實框進行相似性比較。3D_CGIoU繼承了IoU的優秀特性且完善了其缺點(非重疊情況),因此,在基于IoU作為評估指標的一些三維計算機視覺任務中, 相比于IoU,3D_CGIoU是更好的選擇。將3D_CGIoU計算損失的方法融入目前主流的三維目標檢測算法中,如PointRCNN、VoxelNet、PointPillars,在KITTI數據集和ScanNet數據集上其檢測性能均得到有效提升,平均精度提高了近2個百分點。實驗結果表明,在三維邊界框回歸的應用中,可以通過3D_CGIoU方法優化回歸損失,從而提高檢測的精確度。