葛旭陽,黃尚鋒,蔡國榕
(1.集美大學(xué)理學(xué)院,福建 廈門 361021;2.集美大學(xué)計(jì)算機(jī)工程學(xué)院,福建 廈門 361021)
三維目標(biāo)檢測在自動駕駛[1]、機(jī)器人[2]等領(lǐng)域有著廣泛的應(yīng)用。通過估計(jì)空間目標(biāo)的3D位置,自主駕駛的車輛或機(jī)器人可以更準(zhǔn)確地預(yù)判和規(guī)劃自己的行為和路徑,避免碰撞和違規(guī)。目前,三維目標(biāo)檢測按照數(shù)據(jù)類型可分為三類:單目圖像、多視圖圖像、點(diǎn)云目標(biāo)檢測。基于單視圖的方法,如GS3D[3]使用單目攝像頭完成三維目標(biāo)檢測;基于多視圖的方法,如Chen等[4]從不同視圖的圖像中得到的視差來獲得深度圖完成三維目標(biāo)檢測;基于點(diǎn)云的方法,如PointRCNN[5]、VoteNet[6]從點(diǎn)云獲取目標(biāo)信息完成三維目標(biāo)檢測。
目前基于點(diǎn)云的目標(biāo)檢測方法,想獲得更好的檢測性能有三種方法:一是用更好的主干網(wǎng);二是設(shè)計(jì)更好的策略提取更好的特征;三是用并集上的交集(Intersection over Union,IoU)計(jì)算的度量損失來替代傳統(tǒng)的邊界框回歸損失,如l1范數(shù)、l2范數(shù)等。邊界框回歸是2D/3D視覺任務(wù)中一個最基礎(chǔ)的模塊,不論是實(shí)例分割、目標(biāo)跟蹤,還是目標(biāo)檢測,都依賴于對邊界框進(jìn)行回歸,以獲得準(zhǔn)確的定位效果。因此,選擇更好的邊界框回歸損失,有利于提高目標(biāo)檢測網(wǎng)絡(luò)的性能。
IoU又被稱為Jaccard索引,常用來表示兩個任意形狀目標(biāo)的相似性,在目標(biāo)檢測的邊界框回歸中起到重要的作用。在anchor-based[7]的方法中,IoU不僅可以用來確定正樣本和負(fù)樣本,還可以用來評價輸出框和真實(shí)框的距離,或者說預(yù)測框的準(zhǔn)確性。IoU還有一個好的特性,就是尺度不變性。由于這個良好的屬性,所以在語義分割[8]、目標(biāo)檢測[9]和跟蹤[10]等任務(wù)中的性能測量均采用IoU作為測量指標(biāo)。
ln范數(shù)類型損失的一個較好的局部最優(yōu)解可能并非IoU的局部最優(yōu)解;而且與IoU不同的是,ln范數(shù)不具有尺度不變性,相同重疊程度的邊界框的損失值不一定相同。另外,一些邊界框的表示方法,由于沒有對不同類型的表示參數(shù)進(jìn)行正則處理,當(dāng)表示參數(shù)變多時,或在問題中添加更多維度時,復(fù)雜性會增加。為了緩解上述問題,目前最先進(jìn)的對象檢測器引入了錨盒(anchor box)[11]的概念,他們還定義了一個非線性的表示[12-13]來補(bǔ)償尺度的變化。即使進(jìn)行了這些手工更改,優(yōu)化回歸損失和最大化IoU值之間仍然存在差距。
Rezatofighi等[14]探索了軸對齊矩形之間的IoU,此時IoU有解析解,并且可反向傳播,意味著,IoU可以直接用作目標(biāo)函數(shù)進(jìn)行優(yōu)化。而優(yōu)化IoU目標(biāo)函數(shù)與優(yōu)化某個損失函數(shù)之間,顯然選擇優(yōu)化IoU目標(biāo)函數(shù),可以提高IoU指標(biāo)的強(qiáng)相關(guān)。但是這其中也存在問題:如果兩個框不相交,那么就無法衡量兩個框的距離;同時IoU的值為0,其梯度也將為0,當(dāng)計(jì)算梯度的時候就無法使用優(yōu)化器進(jìn)行傳播。針對這些問題,提出了泛化版的IoU,稱為GIoU。GIoU的優(yōu)點(diǎn)有:a)沿襲IoU能將被比較的目標(biāo)形狀屬性編碼進(jìn)區(qū)域?qū)傩?;b)維持IoU的尺度不變性;c)在目標(biāo)有重疊情況下與IoU強(qiáng)相關(guān)。
本文在此基礎(chǔ)上,設(shè)計(jì)了一個適用于三維目標(biāo)檢測邊界框回歸的度量方法(3D_CGIoU),將3D_CGIoU的值納入三維目標(biāo)檢測邊界框回歸的損失中,并將該方法融入到目前主流的三維目標(biāo)檢測網(wǎng)絡(luò)中,如PointRCNN、VoteNet和VoxelNet[15]等,評估其對檢測性能的影響。
三維目標(biāo)檢測中,邊界框回歸的目標(biāo)是盡可能準(zhǔn)確地獲取預(yù)測框。目前絕大部分的目標(biāo)檢測都會用IoU對候選預(yù)測框進(jìn)行篩選,多數(shù)的目標(biāo)檢測通過ln范數(shù)來作為度量標(biāo)準(zhǔn),這將會存在兩個預(yù)測框ln范數(shù)的絕對值相同,而和真實(shí)框的重疊方式卻不相同的情況。另外,ln范數(shù)對物體的尺度變化很敏感,而IoU和GIoU具有尺度不變性可以更好地度量預(yù)測框的精準(zhǔn)度。受到GIoU的啟發(fā),本文設(shè)計(jì)了一個適用于三維目標(biāo)檢測邊界框回歸的度量和損失(3D_CGIoU)的計(jì)算方法。
IoU是用來比較任意形狀(體積)之間的相似性,但是當(dāng)預(yù)測框與真實(shí)框完全不重合時,損失函數(shù)梯度為0。另外,預(yù)測框與真實(shí)框可以以不同的方式重疊,得到相同的IoU值,即IoU不能反映兩個框之間如何發(fā)生重疊。
針對以上存在的問題,Rezatofighi等[14]設(shè)計(jì)了適用于二維目標(biāo)檢測的GIoU。首先,計(jì)算預(yù)測框和真實(shí)框的最小閉包區(qū)域面積(同時包含了預(yù)測框和真實(shí)框的最小長方形的面積),再計(jì)算閉包區(qū)域中不屬于兩個框的區(qū)域占閉包區(qū)域的比重,最后用IoU(其值記為I1)減去這個比重得到GIoU(其值記為I2)。
IoU和GIoU的計(jì)算方式如下:
I1=S紫色/(S紫色+S綠色+S藍(lán)色),
(1)
I2=I1-S黃色/(S紫色+S藍(lán)色+S綠色+S黃色)。
(2)
公式(1)和公式(2)中的S指代各顏色區(qū)域面積,各顏色區(qū)域如圖1所示。
借鑒GIoU的方法,本文設(shè)計(jì)了一個適用于三維目標(biāo)檢測邊界框的度量方法,該方法在鳥瞰圖上以最小凸多邊形為外接圖形進(jìn)行計(jì)算,稱為3D_CGIoU,其值記為I3,則
I3=|A∩B|/|A∪B|-|C/(A∪B)|/|C|。
(3)
其中:A代表真實(shí)框Bg的體積;B代表預(yù)測框Bp的體積;C表示封閉盒Bc的體積。
為了更好地理解在3D_CGIoU中最小的封閉盒Bc的形狀與計(jì)算,給出了更直觀展示的圖2。
圖3中預(yù)測框Bp的中心點(diǎn)、長、寬、高、傾角分別是A0(xp,yp,zp)、lp、Wp、Hp、θp;真實(shí)框Bg的中心點(diǎn)、長、寬、高、傾角分別是B0(xg,yg,zg)、lg、Wg、Hg、θg。根據(jù)這些參數(shù)可以得到Bp和Bg頂點(diǎn)的坐標(biāo)為:Ai(xpi,ypi,hp),Bi(xgi,ygi,hg)。當(dāng)i=1,2,3,4時,hp=zp+Hp/2,hg=zg+Hg/2;當(dāng)i=5,6,7,8時,hp=zp-Hp/2,hg=zg-Hg/2。
由于框的底部均平行于水平面,因此只要從鳥瞰圖中找出兩個框的相交截面部分并求出面積S0,就可得到兩個框相交部分的體積V0:V0=S0H,其中H=min(maxhp,maxhg)-max(minhp,minhg)。
為了計(jì)算相交部分的面積S0,首先,判斷每個頂點(diǎn)是否在另一個矩形內(nèi)部(不包含邊緣)。如果沒有頂點(diǎn)在另一個矩形內(nèi)部,則無相交部分存在;如果有,則保存并進(jìn)行下一步,計(jì)算2個矩形各邊的交點(diǎn)(不包含8個頂點(diǎn))并保存。接著,將保存的所有點(diǎn)連起來組成一個凸多邊形,這個凸多邊形就是相交的部分。將第一個保存的點(diǎn),與其他與其不相鄰的點(diǎn)依次連接后,凸多邊形被分割成多個三角形。每個點(diǎn)坐標(biāo)都可以計(jì)算得到,顯然三角形的每一條邊長也可求得,根據(jù)海倫公式算出每個三角形面積并求和,最終得到S0(見圖4)。
通過鳥瞰圖外接框形狀(見圖5)確定算法,得到鳥瞰圖中2個矩形的外接面積最小的凸多邊形,如圖4b所示多邊形A1B2B3A3A4,求其面積S1的方法同S0。將這個凸多邊形作為橫截面所形成的棱柱并當(dāng)作預(yù)測框和真實(shí)框的外接框,計(jì)算出其體積V1:V1=S1H1,其中H1=max(maxhp,maxhg)-min(minhp,minhg)。
將GIoU從二維目標(biāo)檢測遷移到三維目標(biāo)檢測中,并對鳥瞰圖的外接框進(jìn)行優(yōu)化,得到3D_CGIoU的值I3:
I3=V0/(Vp+Vg-V0)-(V1-(Vp+Vg-V0))/V1。
(4)
其中:Vp為預(yù)測框Bp的體積;Vg為真實(shí)框Bg的體積。
首先,要確定預(yù)測框和真實(shí)框的鳥瞰圖外接框的形狀及大小。
第一步:確定鳥瞰圖中最左下角的點(diǎn)(坐標(biāo)排序:x最小,如果x相同則取y更小的),記為P0。這一步需要掃描一遍所有的點(diǎn),時間復(fù)雜度為O(n),n為點(diǎn)的總數(shù)量。在該算法中,n為8,因此時間復(fù)雜度為O(1)。
第二步:將所有的點(diǎn)按照相對于第一步中得到的點(diǎn)P0的極角大小進(jìn)行排序。當(dāng)極角相同時,距離P0比較近的排在前面。如圖5a所示,排序結(jié)果為P1,P2,P3,P4,P5。
第三步:用一個棧(數(shù)組)來保存當(dāng)前的凸多邊形的頂點(diǎn),先將P0和P1依次加入到棧中。按順序掃描每一個點(diǎn),用叉積判斷當(dāng)前點(diǎn)和棧頂頭兩個點(diǎn)形成的拐向。若順時針就彈出棧頂元素,接著繼續(xù)判斷;否則壓入新點(diǎn)Pi。
然后,棧中的點(diǎn)則為外接最小凸多邊形的所有頂點(diǎn),按照其順序連接起來即可,如圖5b所示。
鳥瞰圖外接框的算法流程如下:
輸入 鳥瞰圖的8個頂點(diǎn)坐標(biāo),如圖3中A1A2A3A4B1B2B3B4
輸出 鳥瞰圖中所有點(diǎn)的外接凸多邊形的頂點(diǎn)
步驟 1)P0← The bottom left point //最左下角的點(diǎn)
2)P1,P2,…,P7//其他點(diǎn)與最左下角點(diǎn)之間的極角逆時針進(jìn)行排序
3)letSbe an empty stack //用來存放最終得到外接凸多邊形的頂點(diǎn)
4)PUSH(P0,S) // 將前三個點(diǎn)作為初始點(diǎn),并壓入棧
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作為邊界框回歸損失算法流程如下:
輸入 預(yù)測框p={xp,yp,zp,lp,Wp,Hp,θp},預(yù)測框?qū)?yīng)的真實(shí)框g={xg,yg,zg,lg,Wg,Hg,θg}
輸出L3D_CGIoU
步驟 1)SA=lp×Wp//預(yù)測框Bp俯視圖A1A2A3A4的面積
2)SB=lg×Wg//真實(shí)框Bg俯視圖B1B2B3B4的面積
3)S0//預(yù)測框Bp和真實(shí)框Bg俯視圖相交的面積
4)S1//預(yù)測框Bp和真實(shí)框Bg俯視圖外接最小凸多邊形的面積
5)H//預(yù)測框Bp和真實(shí)框Bg交集的高度
6)H1//預(yù)測框Bp和真實(shí)框Bg并集的高度
7)Vp=SA×Hp//預(yù)測框Bp的體積
8)Vg=SB×Hg//真實(shí)框Bg的體積
9)V1=S1×H1//預(yù)測框Bp和真實(shí)框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實(shí)驗(yàn)設(shè)置
本算法在Linux系統(tǒng)下,使用Pytorch編程,分別在不同數(shù)據(jù)集和主干網(wǎng)上進(jìn)行實(shí)驗(yàn)。通過PointRCNN、VoxelNet[15]、PointPillars[16]在KITTI基準(zhǔn)數(shù)據(jù)集[17]上的表現(xiàn),以及VoteNet在ScanNet數(shù)據(jù)集[18]上的表現(xiàn),對本文提出的方法進(jìn)行了評估。KITTI數(shù)據(jù)集包含7481個訓(xùn)練樣本和7518個測試樣本。由于測試數(shù)據(jù)集的真實(shí)性是不公開的,因此將訓(xùn)練數(shù)據(jù)集分為訓(xùn)練集(3712)和驗(yàn)證集(3769)[19]。ScanNet數(shù)據(jù)集一共有1513個采集場景數(shù)據(jù)(每個場景中點(diǎn)云數(shù)量都不一樣,如果用端到端的網(wǎng)絡(luò)框架,需要對原始點(diǎn)云進(jìn)行采樣,使每一個場景的點(diǎn)云數(shù)量都相同),21個類別的對象,其中1201個場景用于訓(xùn)練,312個場景用于驗(yàn)證。
實(shí)驗(yàn)所采用的每種方法中,都使用原作者提供的默認(rèn)參數(shù)和每個基準(zhǔn)上的迭代次數(shù),并嚴(yán)格遵循其訓(xùn)練協(xié)議。實(shí)驗(yàn)結(jié)果中每個方法的檢測精度,是網(wǎng)絡(luò)通過訓(xùn)練后,在驗(yàn)證集上展現(xiàn)的精度。
通過多種方法在KITTI數(shù)據(jù)集上的表現(xiàn),評估3D_CGIoU算法融入主干網(wǎng)后對檢測性能的影響,結(jié)果如表1所示。本實(shí)驗(yàn)對場景中的汽車進(jìn)行檢測,IoU閾值為0.7,評估指標(biāo)為平均精度。所有的檢測結(jié)果都使用官方的KITTI評估檢測指標(biāo)進(jìn)行測量,這些指標(biāo)包括:鳥瞰圖、3D、2D和平均方向相似度。二維檢測是在圖像平面上進(jìn)行的。KITTI數(shù)據(jù)集被劃分為容易的、中等的和困難的三種難度,而官方的KITTI排行榜則根據(jù)中等的性能進(jìn)行排序。
相比于二維目標(biāo)檢測,三維目標(biāo)檢測更具挑戰(zhàn)性,因?yàn)樗鼘θS包圍盒在空間中的定位精度要求更高。從表1可以看出,將3D_CGIoU算法納入到邊界框回歸損失后的主干網(wǎng)對車輛的檢測性能明顯都要優(yōu)于原始主干網(wǎng)。所采用的方法在各個難度上的檢測性能均有提升,VoxelNet提升了1.89%,VoxelNet提升了1.79%,PointRCNN提升了1.03%。
表1 在KITTI驗(yàn)證集的汽車類上進(jìn)行目標(biāo)檢測的性能對比
表2為VoteNet在ScanNet數(shù)據(jù)集上各類目標(biāo)的平均檢測精度,其中baseline為原始的VoteNet檢測結(jié)果,ours為將L3D_CGIoU納入預(yù)測框回歸損失后的VoteNet檢測結(jié)果。如表2所示,ours的平均精度和平均召回率都要優(yōu)于baseline。在VoteNet主干網(wǎng)中融入3D_CGIoU算法優(yōu)化邊界框的回歸損失,其檢測性能在各類別目標(biāo)上都有提升,所有類別的平均精度提升了近1.5個百分點(diǎn)。其中,“柜子”和“冰箱”的檢測性能提升差距過大。這兩者形狀都比較規(guī)則,也都是相對較大的物體,且GIoU有尺度不變性,因此排除由于大小或形狀而導(dǎo)致的精度差異,推測是由于basiline在訓(xùn)練過程中由于網(wǎng)絡(luò)初始化的隨機(jī)性等問題,導(dǎo)致對“柜子”的表現(xiàn)低于應(yīng)有的水準(zhǔn)。但在本文算法中,“柜子”的檢測性能表現(xiàn)較好,而“冰箱”可能與“柜子”的情況恰恰相反,最終使得“柜子”和“冰箱”的精度提升幅度差距過大。
表2 VoteNet在ScanNet數(shù)據(jù)集上的平均檢測精度
圖6是PointRCNN和PointRCNN+3D_CGIoU在KITTI上的檢測結(jié)果,可視化其中的三個場景,左側(cè)為原始的PointRCNN檢測結(jié)果可視化,右側(cè)為將L3D_CGIoU納入預(yù)測框回歸損失后的PointRCNN+3D_CGIoU檢測結(jié)果可視化。實(shí)物圖下方是對應(yīng)的點(diǎn)云圖。實(shí)物圖中藍(lán)色的是預(yù)測框,紅色是真實(shí)框,綠色是label;點(diǎn)云圖中紅色的是預(yù)測框,綠色是真實(shí)框。實(shí)物圖中并不是所有的紅色框都作為ground truth(GT),只有有l(wèi)abel的框才會在訓(xùn)練中作GT。
點(diǎn)云圖的左右對比顯示,3D_CGIoU算法納入邊界框回歸損失后,預(yù)測框與真實(shí)框重合度有一定的提升,即得到的預(yù)測框的準(zhǔn)確率更高。場景一中,在實(shí)物圖中可以很明顯地看出道路的遠(yuǎn)處有2輛車,但沒有標(biāo)簽;在點(diǎn)云圖中,PointRCNN只檢測出了1輛車,而PointRCNN+3D_CGIoU將2輛車都檢測了出來。這進(jìn)一步說明了3D_CGIoU的有效性和優(yōu)越性。
本文設(shè)計(jì)了3D_CGIoU作為新的三維點(diǎn)云目標(biāo)檢測的評估指標(biāo),對預(yù)測框與真實(shí)框進(jìn)行相似性比較。3D_CGIoU繼承了IoU的優(yōu)秀特性且完善了其缺點(diǎn)(非重疊情況),因此,在基于IoU作為評估指標(biāo)的一些三維計(jì)算機(jī)視覺任務(wù)中, 相比于IoU,3D_CGIoU是更好的選擇。將3D_CGIoU計(jì)算損失的方法融入目前主流的三維目標(biāo)檢測算法中,如PointRCNN、VoxelNet、PointPillars,在KITTI數(shù)據(jù)集和ScanNet數(shù)據(jù)集上其檢測性能均得到有效提升,平均精度提高了近2個百分點(diǎn)。實(shí)驗(yàn)結(jié)果表明,在三維邊界框回歸的應(yīng)用中,可以通過3D_CGIoU方法優(yōu)化回歸損失,從而提高檢測的精確度。