DCN RepPoints解读
簡介
近幾年,Anchor-free的目標檢測方法受到了很大的關注,究其原因,該類方法不需要像Anchor-base方法那樣受限于anchor的配置(anchor的設置要求開發者對數據很了解)就可以獲得不錯的檢測結果,大大減少了數據分析的復雜過程。Anchor-free方法中有一類方法是基于關鍵點的,它通過檢測目標的邊界點(如角點)來配對組合成邊界框,RepPoints系列就是其代表之作,這包括了RepPoints、Dense RepPoints和RepPoints v2。不過,回顧更久遠的歷史,從模型的幾何形變建模能力的角度來看,RepPoints其實也是對可變形卷積(Deformable Convolutional Networks,DCN)系列的改進,所以本文會從DCN開始講起,簡單回顧這幾個工作對幾何建模的貢獻,其中,DCN系列包括DCN和DCN v2。
- DCN(ICCV2017)
- DCN v2(CVPR2019)
- RepPoints(ICCV2019)
- Dense RepPoints(ECCV2020)
- RepPoints v2(暫未收錄)
DCN
首先,我們來看DCN v1。在計算機視覺中,同一物體在不同的場景或者視角中未知的幾何變化是識別和檢測任務的一大挑戰。為了解決這類問題,通??梢栽跀祿退惴▋蓚€方面做文章。從數據的角度看來,通過充分的數據增強來構建各種幾何變化的樣本來增強模型的尺度變換適應能力;從算法的角度來看,設計一些幾何變換不變的特征即可,比如SIFT特征。
上述的兩種方法都很難做到,前者是因為樣本的限制必然無法構建充分數據以保證模型的泛化能力,后者則是因為手工特征設計對于復雜幾何變換是幾乎不可能實現的。所以作者設計了Deformable Conv(可變形卷積)和Deformable Pooling(可變形池化)來解決這類問題。
可變形卷積
顧名思義,可變形卷積的含義就是進行卷積運算的位置是可變的,不是傳統的矩形網格,以原論文里的一個可視化圖所示,左邊的傳統卷積的感受野是固定的,在最上層的特征圖上其作用的區域顯然不是完整貼合目標,而右邊的可變形卷積在頂層特征圖上自適應的感受野很好的捕獲了目標的信息(這可以直觀感受得到)。
那么可變形卷積是如何實現的呢,其實是通過針對每個卷積采樣點的偏移量來實現的。如下圖所示,其中淡綠色的表示常規采樣點,深藍色的表示可變卷積的采樣點,它其實是在正常的采樣坐標的基礎上加上了一個偏移量(圖中的箭頭)。
我們先來看普通的卷積的實現。使用常規的網格R\mathcal{R}R在輸入特征圖xxx上進行采樣,采樣點的值和權重www相乘加和得到輸出值。舉個例子,一個3x3的卷積核定義的網格R\mathcal{R}R表示如下式,中心點為(0,0)(0,0)(0,0),其余為相對位置,共9個點。
R={(?1,?1),(?1,0),…,(0,1),(1,1)}\mathcal{R}=\{(-1,-1),(-1,0), \ldots,(0,1),(1,1)\} R={(?1,?1),(?1,0),…,(0,1),(1,1)}
那么,對輸出特征圖yyy上的任意一個位置p0p_0p0?都可以以下式進行計算,其中pn\mathbf{p}_npn?表示就是網格R\mathcal{R}R中的第nnn個點。
y(p0)=∑pn∈Rw(pn)?x(p0+pn)\mathbf{y}\left(\mathbf{p}_{0}\right)=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}_{n}\right) y(p0?)=pn?∈R∑?w(pn?)?x(p0?+pn?)
而可變形卷積干了啥呢,它對原本的卷積操作加了一個偏移量{Δpn∣n=1,…,N}\left\{\Delta \mathbf{p}_{n} \mid n=1, \ldots, N\right\}{Δpn?∣n=1,…,N},也就是這個偏移量使得卷積可以不規則進行,所以上面的計算式變為了下式。不過要注意的是,這個偏移量可以是小數,所以偏移后的位置特征需要通過雙線性插值得到,計算式如下面第二個式子。
y(p0)=∑pn∈Rw(pn)?x(p0+pn+Δpn)\mathbf{y}\left(\mathbf{p}_{0}\right)=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}_{n}+\Delta \mathbf{p}_{n}\right) y(p0?)=pn?∈R∑?w(pn?)?x(p0?+pn?+Δpn?)
x(p)=∑qG(q,p)?x(q)\mathbf{x}(\mathbf{p})=\sum_{\mathbf{q}} G(\mathbf{q}, \mathbf{p}) \cdot \mathbf{x}(\mathbf{q}) x(p)=q∑?G(q,p)?x(q)
至此,可變卷積的實現基本上理清楚了,現在的問題就是,這個偏移量如何獲得?不妨看一下論文中一個3x3可變卷積的解釋圖(下圖),圖中可以發現,上面綠色的分支其實學習了一個和輸入特征圖同尺寸且通道數為2N2N2N的特征圖(NNN為卷積核數目),這就是偏移量,之所以兩倍是因為網格上偏移有x和y兩個方向。
可變形RoI池化
理解了可變形卷積,理解可變形RoI就沒有太大的難度了。原始的RoI pooling在操作時將輸入RoI劃分為k×k=Kk\times k = Kk×k=K個區域,這些區域叫做bin,偏移就是針對這些bin做的。針對每個bin學習偏移量,這里通過全連接層進行學習,因此deformable RoI pooling的輸出如下式(含義參考上面的可變卷積即可)。
y(i,j)=∑p∈bin?(i,j)x(p0+p+Δpij)/nij\mathbf{y}(i, j)=\sum_{\mathbf{p} \in \operatorname{bin}(i, j)} \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}+\Delta \mathbf{p}_{i j}\right) / n_{i j} y(i,j)=p∈bin(i,j)∑?x(p0?+p+Δpij?)/nij?
至此,關于DCN的解讀就完成了,下圖是一個來自原論文對的DCN效果的可視化,可以看到綠點標識的目標基本上被可變形卷積感受野覆蓋,且這種覆蓋能夠針對不同尺度的目標。這說明,可變形卷積確實能夠提取出感興趣目標的完整特征,這對目標檢測大有好處。
DCN v2
DCNv1盡管獲得了不錯的效果,然而還是存在著不少的問題,DCNv2中進行了一個可視化,對比了普通卷積、DCNv1和DCNv2的區別,下圖中每個圖片都有從上到下三個可視化,分別是采樣點、有效感受野、有效分割區域??梢钥闯鰜?#xff0c;DCNv1雖然能覆蓋整個目標,但是這種覆蓋不夠“精細”,會帶來不少的背景信息的干擾。
為此,DCNv2提出了一些改進,總結下來就是:
更多的可變卷積層
DCNv1中,只在ResNet50的conv5中使用了3個可變形卷積,DCNv2認為更多的可變形卷積會有更強的幾何變化建模效果,所以將conv3到conv5都換為了可變形卷積。之前之所以沒有采用更多的可變形卷積,是因為當時沒有在大型檢測數據集上進行驗證,致使精度提升不高。
調制可變卷積模塊
這才是本文比較大的突破之一,設計了調制可變卷積來控制采樣點權重,這樣就可以忽略掉不重要甚至有負效果的背景信息。下式是引入偏移量的可變卷積輸出特征圖的計算式,這是DCNv1的思路。
y(p0)=∑pn∈Rw(pn)?x(p0+pn+Δpn)\mathbf{y}\left(\mathbf{p}_{0}\right)=\sum_{\mathbf{p}_{n} \in \mathcal{R}} \mathbf{w}\left(\mathbf{p}_{n}\right) \cdot \mathbf{x}\left(\mathbf{p}_{0}+\mathbf{p}_{n}+\Delta \mathbf{p}_{n}\right) y(p0?)=pn?∈R∑?w(pn?)?x(p0?+pn?+Δpn?)
上面我們不是發現DCNv1采樣了很多無效區域嗎,DCNv2則認為,從輸入特征圖上不僅僅需要學習偏移量,還需要學習一個權重來表示采樣點區域是否感興趣,不感興趣的區域,權重為0即可。所以原來的計算式變為下式,其中我們所說的權重Δmk∈[0,1]\Delta m_{k} \in [0,1]Δmk?∈[0,1]稱為調制因子。結構上的實現就是原來學習的offset特征圖由2N個通道變為3N個通道,這N個通道的就是調制因子。
y(p)=∑k=1Kwk?x(p+pk+Δpk)?Δmky(p)=\sum_{k=1}^{K} w_{k} \cdot x\left(p+p_{k}+\Delta p_{k}\right) \cdot \Delta m_{k} y(p)=k=1∑K?wk??x(p+pk?+Δpk?)?Δmk?
相應的,可變形池化也引入這樣的調制因子,計算式變為下式,結構上的實現類似上面的調制可變卷積,這里就不詳細展開了。
y(k)=∑j=1nkx(pkj+Δpk)?Δmk/nky(k)=\sum_{j=1}^{n_{k}} x\left(p_{k j}+\Delta p_{k}\right) \cdot \Delta m_{k} / n_{k} y(k)=j=1∑nk??x(pkj?+Δpk?)?Δmk?/nk?
RCNN特征模仿
作者發現,RCNN和Faster RCNN的分類score結合起來,模型的表現會有提升。這說明,RCNN學到的關注在物體上的特征可以解決無關上下文的問題。但是將RCNN融入整個網絡會降大大降低推理速度,DCNv2這里就采用了類似知識蒸餾的做法,把RCNN當作teacher network,讓DCNv2主干的Faster RCNN獲得的特征去模擬RCNN的特征。
整個訓練設計如上圖,左邊的網絡為主網絡(Faster RCNN),右邊的網絡為子網絡(RCNN)。用主網絡訓練過程中得到的RoI去裁剪原圖,然后將裁剪到的圖resize到224×224作為子網絡的輸入,最后將子網絡提取的特征和主網絡輸出的特征計算feature mimicking loss,用來約束這2個特征的差異(實現上就是余弦相似度)。同時子網絡通過一個分類損失(如下式)進行監督學習,因為并不需要回歸坐標,所以沒有回歸損失。推理階段因為沒有子網絡,所以速度不會有缺失。
Lmimic?=∑b∈Ω[1?cos?(fRCNN(b),fFRCNN(b))]L_{\operatorname{mimic}}=\sum_{b \in \Omega}\left[1-\cos \left(f_{\mathrm{RCNN}}(b), f_{\mathrm{FRCNN}}(b)\right)\right] Lmimic?=b∈Ω∑?[1?cos(fRCNN?(b),fFRCNN?(b))]
很多人不理解RCNN的有效性,其實RCNN這個子網絡的輸入就是RoI在原輸入圖像上裁剪出來的圖像,這就導致不存在RoI以外區域信息(背景)的干擾,這就使得RCNN這個網絡訓練得到的分類結果是非??煽康?#xff0c;以此通過一個損失函數監督主網絡Faster RCNN的分類路線訓練就能夠使網絡提取到更多RoI內部特征,而不是自己引入的外部特征。這是一種很有效的訓練思路,但這并不能算創新,所以DCNv2的創新也就集中在調制因子上了。而且,從這個訓練指導來看,DCNv2完全側重于分類信息,對采樣點沒有監督,因此只能學習分類特征而沒有幾何特征。
DCNv2對DCNv1進行了一些粗暴的改進并獲得了卓有成效的效果,它能將有效感受野更穩定地聚集在目標有效區域,盡管留下了一些遺憾,不過前人的坑總會被后人解決,那就是RepPoints的故事了。
RepPoints
這篇文章發表于ICCV2019,新穎地提出使用點集的方式來表示目標,這種方法在不使用anchor的前提下取得了非常好的效果。很多人認為RepPoints是DCNv3,這是由于RepPoints也采用了可變形卷積提取特征,不過它對采用點有相應的損失函數(追求更高的可解釋性),可以對DCN的采樣點進行監督,讓其學習有效的RoI內部信息。此外,它也彌補了之前DCNv2的遺憾,可以學習到目標的幾何特征,,而不僅僅是分類特征。
總結一下,個人覺得,RepPoints主要針對了之前DCNv2的offset(偏移量)學習過于black box,難以解釋,所以采用了定位和分類損失直接監督偏移量的學習,這樣定位和識別任務會更加“精致”一些。從這個角度來看(如果僅僅是將RepPoints看作一種新的目標表示法未免太低估其價值了),它其實是對DCNv2的改進,至于作者是不是這個出發點,,可以參考作者的知乎回答,,總之,其對DCNv2的改進可以總結如下:
當然,上面這些看法是從DCNv2的角度來看的,下面我們回歸作者論文的思路來看看RepPoints是如何實現的。
首先,RepPoints(representative points,表示點)具體是怎樣表示目標的呢,其實就像下圖這樣。顯然,這和傳統的bbox表示法(bounding box,邊界框)不同。在目標檢測任務中,bbox作為描述檢測器各階段的目標位置的標準形式。然而,其雖然容易計算,但它們僅提供目標的粗略定位,并不完全擬合目標的形狀和姿態(因為bbox是個矩形,而目標往往不可能如此規則,所以bbox中必然存在冗余信息,這會導致特征的質量下降從而降低了檢測器性能)。對此,提出了一種更貼合目標的細粒度目標表示RepPoints,其形式是一組通過學習自適應地置于目標之上的點,這種表示既限制了目標的空間位置又捕獲了精確的語義信息。
RepPoints是一種如下的二維表示(我們一般用2D表示和4D表示來區分anchor-free和anchor-base方法),一個目標由nnn個點確定,在該論文中nnn設置為9。
R={(xk,yk)}k=1n\mathcal{R}=\left\{\left(x_{k}, y_{k}\right)\right\}_{k=1}^{n} R={(xk?,yk?)}k=1n?
這種點表示可以通過轉換函數T\mathcal{T}T轉換為偽框(pseudo box),三種轉換函數具體可以參考原論文3.2節。然后就是RepPoints的監督學習了,這里也不難實現,通過pseudo box就可以和GT的bbox進行定位監督了,而分類監督和之前的方法沒有太大的區別。
借此,作者設計了一個anchor-free檢測框架RPDet,該框架在檢測的各個階段均使用RepPoints表示。通過下圖的Pipeline其實就能理解這個網絡架構:首先,通過FPN獲得特征圖;不同于其他單階段方法一次分類一次回歸得到最終結果,RPDet通過兩次回歸一次分類得到結果(作者自稱1.5階段),分類和第二次回歸均采用可變形卷積,可變形卷積可以很好的和RepPoints結合。因為它是在不規則點上進行的??尚巫兙矸e的偏移量是通過第一次回歸得到的,也就意味著偏移量在訓練過程中是有監督的,而第一次回歸的偏移量通過對角點監督得到。采用這種方式,后續的分類和回歸特征均是沿著目標選取的,特征質量更高。
Dense RepPoints
Dense RepPoints是RepPoints之后的一個成果,它將RepPoints拓展至實例分割任務,而方法就是采用更加密集的點集表示目標,如下圖。
Dense RepPoints在RepPoints的基礎上進行了如下拓展,使用了更多的點并賦予了點屬性。而在表示物體方面,Dense RepPoints采用上圖第四個邊緣掩碼的方式表示目標,它綜合了輪廓表示(表示邊緣)和網格掩碼(前后景區分,利于學習)的優點。
R={(xi+Δxi,yi+Δyi,ai)}i=1n\mathcal{R}=\left\{\left(x_{i}+\Delta x_{i}, y_{i}+\Delta y_{i}, \mathbf{a}_{i}\right)\right\}_{i=1}^{n} R={(xi?+Δxi?,yi?+Δyi?,ai?)}i=1n?
最后pipeline和常規的思路很類似,唯一的問題就是采用點集在目標檢測中尚可,用于分割會因為點數太多導致計算量大增,所以設計Group pooling;、Shared offset fields;、Shared attribute map來減少計算量,此外還發現點集損失比點損失更加合適等問題,具體可以查閱論文。
RepPoints v2
最后,我們來看看最新的RepPoints v2,這是對原本RepPoints目標檢測任務上的改進。驗證(這里指的是分割任務)和回歸是神經網絡兩類通用的任務。驗證更容易學習并且準確,回歸通常很高效并且能預測連續變化。因此,采用一定的方式將兩者組合起來能充分利用它們的優勢。RepPoints v2就是在RepPoints的基礎上增加了驗證模塊,提升了檢測器性能。
這篇文章細節不少,這里不展開了,直接對著上面的pipeline講講整體的思路。RepPoints V2在RepPoints方法基礎上添加了一個驗證(分割)分支,該分支主要包含兩部分,一部分是角點預測,另一部分是目標前景分割。
如上圖所示,訓練階段得到分割heatmap后,這個分割圖和原始特征相加,作為回歸特征的補充。不過,在推理階段,在回歸分支獲取到目標位置后,利用該分割heatmap來對結果進行進一步修正。
總的來說,這個分支的添加對任務提升不小:一方面多任務往往會帶來更好的效果;另一方面,利用分割圖增強特征確實可以增強回歸效果。
RepPoints v2工作有一定的可拓展性,它證明了在基于回歸的方法上加上這個模塊確實可以提升性能,后人要做的就是權衡精度和速度了。
總結
從DCN到RepPoints,本質上其實都是更精細的特征提取演變的過程。點集(RepPoints)方式只是顯式的表現了出來而已,不過其確實能在精度和速度上取得非常好的平衡。以RepPoints或者類似的思路如今已經活躍在目標檢測和實例分割任務中,推動著計算機視覺基礎任務的發展,,這是難能可貴的。而且,跳出bbox的范式也詮釋著,有時候跳出固有的范式做研究,會獲得意想不到的效果。
總結
以上是生活随笔為你收集整理的DCN RepPoints解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GraphSAGE节点分类
- 下一篇: CSTrack解读