點擊上方“3D視覺工坊”,選擇“星標”
乾貨第一時間送達
作者:steven Li | 來源:知乎
https://zhuanlan.zhihu.com/p/150339896
本文僅做學術分享,如有侵權,請聯繫刪除。
Object detection就是在回答where和what問題,對應的是定位和分類兩個任務。拿大家耳熟能詳的Faster RCNN爲例,在RoI Pooling之後,通過兩個shared fc layers得到1024-dim的feature vector,再送入兩個sibling head,一個用於分類,另一個用於定位。
Faster RCNN結構
其實,分類和定位這兩個task,對feature有着不同的要求,存在一定的衝突。這個特徵衝突問題,有大佬在《目標檢測中的特徵衝突與不對齊問題》中已經很好地分析了。我再結合CVPR20的幾篇工作,簡述一下。
一. 特徵衝突問題
在Faster RCNN中,可以從三個角度來分析分類和定位任務之間的衝突問題。
1.1 分類和定位對特徵的要求
分類要求特徵具有平移和尺度不變性(invariance),不管object在圖片中是什麼位置,是什麼類別就是什麼類別,學到的feature,不會因爲尺度、旋轉和位置等變換髮生改變。而定位是一個position-sensitive的任務,object所在的位置不同,尺度不同,學到的feature肯定是不一樣的。舉一個例子,下圖是RPN產生的兩個Proposals,對於分類任務,它們都應該分類成person,應該產生相同的分類特徵 ;但是對於定位任務,它們應該預測出不同的offset,所以應該有不同的定位特徵 。
RPN產生的proposals
從這個角度考慮,送入兩個sibling head的1024-dim feature vector,最好是不共享的。
1.2 分類和定位的sensitive map不同
根據文章TSD[1]的motivation,分類的sensitive區域是物體的salient areas,也就是最具有判別性的地方;而定位任務的sensitive區域是在物體的邊緣區域。簡而言之,這兩個task響應的區域是不同的。
TSD的motivation
1.3 fc層不適合做localization
根據文章Double-Head[2]的分析,fc層具有spatially sensitive的特性,因爲fc層對不同的輸入元素,會連有不同的參數,所以更適合於,從part feature來分類出整個object。而conv層具有參數共享的特性,對輸入的所有元素,用相同的conv kernel去卷積,這樣卷積得到的feature,有更強的spatial correlation,更容易區分出哪些是pixel是object,哪些pixel是background.
二. 已有工作
下面簡述一下CVPR20的三篇文章,都是在Faster RCNN的基礎上,將分類和定位這兩個任務解耦,但是具體解耦的方法又各有千秋。
2.1 Double-Head
印象裏,這個工作在arxiv上掛了一些時日了。在這個工作中,給了很多insight,分析出了fc層比較spatially sensitive,更適合做分類;而conv層有更強的spatial correlation,更適合做定位,所以在RoI Pooling之後,沒有再用shared fc layers,而是直接分出了兩個分支,一個分支是接了2個fc層,用於分類;另一個是接了5個residual block,用於定位,結構圖如下。這種用fc做分類,conv做定位的操作,在Grid RCNN中也被用到。
文章中,作者對兩個task是否共享參數,以及每個task是使用fc還是conv,基本都做了一遍實驗,結果見下表。此外,文章還嘗試了unfocused task,也會帶來一些性能提升,具體見文章。
2.2 Task-aware Spatial Disentanglement
商湯的Task-aware spatial disentanglement (TSD),分析了分類和定位這兩個task對特徵空間的敏感區域是不同的。分類對salient areas比較敏感,而定位對物體邊緣比較敏感,所以這兩個task需要解耦。解耦的方法和Double-Head不一樣,在RoI Pooling之前就把兩個分支解耦開了,每一個分支有各自的RoI Pooling。根據任務驅動的方式,兩個分支對proposal進行了不同的特徵變換,從而得到task-aware features,再分別送入分類和定位分支。對分類任務,使用Deformable RoI Pooling,對每一個grid都學了一個offset,是point-wise的變換,最終得到proposal的discriminative features,更適合於分類;而對於定位任務,採用了proposal-wise變換,從proposal的feature中,學到整個proposal的offset,從而修正proposal的位置,使得proposal覆蓋的區域是更適合定位的,如覆蓋更多的物體邊緣區域。根據分類和定位這兩個task的具體需要,對proposal進行了相應的特徵變換,從而使得輸入每個task的特徵都是最優的。
2.3 D2Det
D2Det[3]受到Grid RCNN的啓發,將分類和定位解耦,用全連接做分類,用全卷積結構來做定位,也是在RoI Pooling之前就將兩個task解耦。文章發現Grid RCNN做定位的時候,只能在proposal內檢測關鍵點,對於large scale object,有時候proposal不能覆蓋住整個物體,所以這種在proposal內檢測關鍵點的方法,會受到proposal region的約束,不是很有效。基於這個發現,作者提出了dense local regression,對proposal內的每個feature point,都回歸一個box,是一種dense prediction;然後對所有迴歸出來的box取平均,得到最終的box結果。這種迴歸座標的方式,和檢測關鍵點相比,就不會受到proposal region的約束,迴歸的座標可以在proposal外面,所以比Grid RCNN的檢測關鍵點的方式有效。對於分類這個分支,也是通過Deformable RoI Pooling的方式,找到更加discriminative的features來進行分類。
上面三個工作都是在two-stage detector上做的,從RPN得到proposal之後,根據分類和定位兩個任務的具體需求,對proposal做了相應的變換。在one-stage detector上,應該也同樣存在兩個task衝突的問題,目前我還沒看到相關工作,歡迎補充。
參考
^https://arxiv.org/abs/2003.07540
^https://arxiv.org/abs/1904.06493
^http://openaccess.thecvf.com/content_CVPR_2020/html/Cao_D2Det_Towards_High_Quality_Object_Detection_and_Instance_Segmentation_CVPR_2020_paper.html