RepPoints: Point Set Representation for Object Detection解讀

摘要

現代的檢測器很依賴矩形框bbox,比如anchors,proposals和final predictions,呈現在不同的識別階段裏。bbox雖然很方便,但它只能提供粗糙的目標定位和特徵提取。

注:final predictions如何理解呢,在引言裏說了from anchors and proposals to final predictions,就很明白了,它的意思是最終的輸出結果。

爲什麼bbox只是提供粗糙的目標定位和特徵提取呢?文章的後面簡單的說明了,bbox只是提取了4個邊界點,並不能體現目標的形狀,因爲這個差異,導致提取到的特徵有很多背景圖或遮擋前景的圖。

我們的RepPoints,使用了新的目標表現形式,即採樣集合,它能夠用於定位和識別。RepPoints能夠自動化學習到bbox的空間位置和局部的有意義的語義特徵。它們是不需要anchors的,也是anchor-free的一種目標檢測的方法,也能夠和anchor-base的方法一樣有效。

注:

圖1

 

它的方法,使用了9個點,通過這9個點找到一個外截框作爲bbox。原則上這9個點代表目標上的點,主要集中於邊緣,利用這9個點,使用deformable ROI pooling的方式取得特徵,這樣減小了背景的干擾。這9個點是學出來了,並沒有標註出來。從後面結果來看,實際中,9個點很多在邊緣,也有些在圖像內部。

圖2

 

引言

在目標檢測的pipeline中,bbox作爲一個最基本的處理方式,它體現在檢測器的各個階段裏。一方面,bbox是評估檢測器性能的一個通用的測量方式。另一方面,它能夠方便的提取特徵。

雖然bbox方便了計算,但它只提供了粗糙的目標位置,沒有目標的形狀和方向。由於特徵是從bbox是提取的,所有其很受背景和遮擋物的影響,這樣就得到低質量的特徵,降低了分類的性能

注:道理是這麼講,但如何才能做到呢,有旋轉的bbox也是解決這類似的問題,這個論文他會怎麼解決呢?

本論文中,提供了一種新的表達形式,叫RepPoints,它提供了更加細顆粒的定位和分類。圖1中,RepPoints所表現形式,是由一堆點組成,能夠表達目標的空間內容和局部的語義信息,而這些點是自己學出來的,並沒有做標註。而且還不需要基於bbox的anchor了。

注:從圖1可以看到,點都在目標的邊緣,又是自已學出來的,那就有很強的語義感,由9個點,能形成一個外截僞框,通過這個僞框與groundtruth進行loss就能夠進行訓練。但是否能夠學習到邊緣信息,還是未知的。

RepPoints不同於現在的非矩形框的表現方式的目標檢測器。它們(像cornernet那樣的方法)是依賴於手工聚類,生成目標框。他們的表現形式,還是與座標軸對齊的bbox。相反,RepPoints是自頂向下的從圖像中學習到細顆粒的定位,還無需對點進行監督。

注:一直在強調細顆粒和自適應學習9個點。這個很好奇,是怎麼做到的。真會寫文章

在傳統bbox表現形式的兩階段檢測器,包括anchor,proposal和final localization targets,我們發展出一個簡潔高效無anchor的檢測器,沒有多尺度訓練和測試,就能夠達到42.8AP.

Related work

bbox是主流檢測器的表現形式,一方面方便標註,主流的benchmark也是這個表現形式。另一方面,bbox也是圖像特徵提取的主流形式,不管是現在的深度學習,還是以前傳統方法(使用bbox分塊提取特徵),很方便提取特徵。

雖然我們的RepPoints是一個無規則的形式,但我們也能夠方便的提取特徵。我們的系統結合形變卷積來從採集點是提取特徵。另外,使用僞框也能夠在benchmark上進行評估。

RepPoints將各個階段的bbox的形式都替代了。特別是使用中心點替代了anchor,可以在RepPoints中進行配製的。這裏我們是無anchor的,使用中心點集,來初始化目標的形式。

注 :它這裏說是無anchor,只是將anchor換了一種形式,以前的anchor有寬高比,scale,現在直接在中心鄰域內撒9個點,然後讓其學習到bbox的特性,也是一種anchor的思想。後面我還要將它的方法進一步的發展。

還有些行人檢測的橢圓形式,旋轉bbox。

注:旋轉bbox倒是很常見

另一些,自底向上的表示形式,比如DPM,Poselet,還有最近的cornernet,extremenet,它們都需要人工的後處理,得到bbox。

而RepPoints無需這些,能夠自動學習到極限點和語義關鍵點,通過對groundtruth bbox進行學習。而不像extremenet那樣,需要mask監督。

注:看到這裏,非常好奇,它是怎麼做到的,如果要學習到邊緣信息,那麼我們是不是應該學習到向目標靠攏的行爲,不然它怎麼知道朝哪個方向去優化。沒有mask,怎麼知道哪個地方是目標呢?

視覺學習中的一個挑戰是識別到目標的幾何變量。爲了高效的學習到這些東西,一個可能的解決辦法是充分利用low-level的部分。比較典型的是DPM和poselet。

RepPoints受到這些工作的inspire,我們發展了一個靈活的目標檢測形式,能夠精確到幾何定位和特徵提取。這樣,形變卷積和deformable ROI Pooling能夠利用上,達到我們的目標。

注:它的意思是,通過9個點,能夠學習到目標的外邊緣和主要語義關鍵點,同時提取特徵時,像deformable ROI Pooling那樣,只要取出落入9個點的塊,通過offset組合成特徵。

看下面的圖,很快就明白了

 

3. The RepPoints Representation

我們先看看檢測器中的多階段中的bbox的情況,然後引出RepPoints的描述

3.1. Bounding Box Representation

bbox由(x,y,w,h)4維組成,其中x,y爲中心點,w,h爲寬和高。由於它的簡化和方便,它拿到在檢測pipeline中的各個地方。

多階段的檢測器的pipeline:

注:這個圖是多階段的,每個階段都會生成bbox,只是輸送到下一個階段的質量越來越高,三階段有cascade RCNN。

在剛開始,anchor是建立在bbox的尺度和寬高比能夠覆蓋到目標的假設。一般來講,高覆蓋意味着是把高稠密的anchors,比如RetinaNet在每個位置有45個anchor。

注:更多的anchor,意味着樣本不均衡越嚴重,反而影響訓練。針對anchor分析的文章很多

對於一個anchor,在中心點的圖像特徵,能夠作爲目標的特徵,用來作爲分類的分數,來判斷是否有目標,同時也能迴歸位置。這個bbox,被稱爲“bbox proposals)

在第二階段,經過挑選出來的bbox,通過RoI pooling或RoI Align來提取目標的特徵。對於二階段,這裏輸出最終的bbox。對於多階段,繼續生成bbox proposals,經過多次,得到最終的bbox。

在這種框架中,bbox迴歸在不斷的refine目標的位置和特徵佔有很重要的位置。

傳統中,網絡預測的迴歸量爲(\Delta x_p,\Delta y_p, \Delta w_p,\Delta h_p),映射到當前的bbox proposalB_p=(x_p, y_p, w_p, h_p),refined後爲

B_r=(x_p+w\Delta x_p, y_p+h_p\Delta y_p, w_pe^{\Delta w_p},h_p e^{\Delta h_p})

考慮到ground truth B_t,訓練的過程是讓B_rB_t儘可能的靠攏。在訓練階段,使用smoth l_1 loss:

這種bbox的處理方式,廣泛地用在目前的檢測方法中。在實踐中,當兩者初始值距離比較小時,性能會很好,但當兩者的初始距離更大時,性能會大大減弱。另一個因素是它們之間的scale差異導致效果不好。

注:想起我們人臉檢測,由於大小和位置相對固定,那麼初始值和scale纔可以做的非常好,其性能應該可以優化到非常棒。同時把模型可以做的更小。

3.2. RepPoints

根據前面的分析,4-d的bbox,對目標的位置是一個粗糙的表達形式。bbox只考慮了目標的空間矩形範圍,沒有考慮形狀、姿態和一些局部重要的語義位置信息,這些會更好定位和特徵提取。

注:怎麼樣才能考慮形狀,姿態呢,這個可以由形變卷積做到,姿態用旋轉的bbox可以做到,而局部的語義特徵的位置,這個只有傳統的角點檢測了。角點檢測要引入到目標檢測當中嗎?

爲了克服上面的限制,RepPoints採用一堆自適應的點集:

其中n爲點集中點的個數,在我們的工作中,默認值爲9。

注:這裏寫了bbox的表現形式,就是一堆點組成。那麼一堆點如何表示bbox,如果去學習訓練,初始值應該是多少呢?

爲了更好的迴歸bbox的位置和特徵提取,RepPoints使用如下形式,進行refine

其中的變化量爲相對老點的offset。注意,我們不會面臨scale問題

注:從它的表達的意思上看,是要學習每個點的offset,根據前面的意思,讓點向目標邊緣去學,如何才能學習呢?

爲了充分利用好bbox的標註,同時也能評價我們的檢測器,我們將點集轉換成bbox,這裏有三種形式:

1)最小最大。就是找出點集左右上下的邊界值,作爲bbox。

2)局部的最小最大。選擇子集,以1)方式得到bbox

3)沒看懂。

這些函數是可微的,能夠插入到目標檢測器中,端到端的學習。作者通過實驗發現,他們都能夠正常工作。

注:

大概是將點集生成僞框,作爲bbox與ground truth進行loss學習吧。這裏的結果顯示,第三種效果要好。

通過目標的位置loss和識別loss,來學習。對於位置的學習,將點集轉換爲僞框後,那一般的基於bbox的檢測器的方法是一樣的。

注:通過這個,就能夠學習到邊緣信息,就能夠學習到局部語義信息強的點?那9個點的初始值怎麼設置呢?

4. RPDet: an Anchor Free Detector

我們的方法,也是可以做多階段的pipeline的,如下

在yolo和densebox使用中心點進行初始化目標的表現形式,它的一個重要的好處是,它相對anchor對,有更加緊湊的假設空間。當anchor需要大量的寬高比和尺度,導致了稠密的候選框。而基於中心點的,只有2-d的空間,同時所有的目標都有中心點。

注:這裏的center points是有複數的。所以這裏的9個點,指的是在中心點一定的鄰域內撒點。

然而,中心點也要面臨識別模糊的問題,當兩個不同的目標在同一個位置,這個普遍限制了現代檢測器。在之前的工作,主要是通過在同一個地方產生多個目標來解決,但它面臨更大的問題。

在RPDet裏,我們顯示通過FPN結果,極大的解決這個問題。首先,目標有不同的尺度,能夠分配到不同的feature level裏,這樣能夠解決不同的尺度和在相同中心點位置的問題了。第二,FPN對小目標有高分辨率的feature map,這樣減小了兩個不同的目標,在同一個featuremap上同一個位置的可能性。實際中,使用FPN後,coco只有1.1%的目標在featuremap的同一位置上。

值得注意的是,中心點表示可以看作是一種特殊的RepPoints配置,其中只有一個固定的採樣點被使用,從而在整個檢測框架中保持一致的表示。

下面是網絡:

從上圖可以看到,從center points開始,通過相對中心點的offset,來回歸出最終的9個點。其loss包括兩個,一個是僞框,一個識別的loss。這樣就能夠自動化學習關鍵點了。第二組點,生成最終的目標的位置。

RepPoints是一個幾何表達,能夠更加精確的反應語義定位,同時deformable RoI pooling能夠學習到更強的目標特徵。然而在實際中,deformable RoI pooling不能夠學習到精確的目標定位。

注:看上面網絡,第一個改變的是對於每一個形變卷積,都會單獨拉一個loss。另外有個疑問,在黃色的offset field和class score map的通道維度不一致。前面又沒有卷積,實際上,使用藍色的offset作爲卷積後,兩個通道維度應該一樣纔對,所以後面一定還有卷積的,從後面的表示也證明了這點。

我們的FPN backbone,有選擇3-7階段的5個feature pyramid層(下采樣128)。網絡有兩個分支,一個是定位,一個是分類。其結構如下:

在兩個分支中,共享第一個deformable conv layer。

對於位置分支,它有兩階段,它們都只有在正樣本時,纔會參與訓練。同時目標尺度與feature level有關,當gt的scale滿足

s(B)=\left \lfloor log_2(sqrt(w_B h_B)/4) \right \rfloor,s就確定了是落入到哪個金字塔層上。IoU大於等於0.5才認爲爲正樣本。

分類中,IoU小於0.4爲負樣本,使用分類的loss進行訓練。

5. 實驗

我們的檢測器,是使用4個GPU,batchsize=8(每個gpu只有2張圖)來進行同步SGD(這裏的同步意思是多卡訓練)。使用imageNet進行初始化。

5.2消融實驗

從上表可以看到使用點集,性能近有2個點提升。說明它是有效的。

從上面的表格,可以看出對於bbox任務,分類對位置沒有影響。但對於RepPoints中,分類對bbox有較大的提升。

不清楚,上面的bbox box的center point是什麼方法,從結果上看,center point都有很大提升,但RepPoints有更大的提升。

 

注:從上面的結果來看,在沒有做多尺度訓練和測試,它僅比CornerNet要高0.5個點,並沒有強太多

整體效果圖

注:從上面的結果來看,確實有很多是邊緣點,但也有些目標內的點,同時也不是代表典型的特徵,比如車那個,並沒有在車燈那裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章