摘要
現代的檢測器很依賴矩形框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的方法一樣有效。
注:
它的方法,使用了9個點,通過這9個點找到一個外截框作爲bbox。原則上這9個點代表目標上的點,主要集中於邊緣,利用這9個點,使用deformable ROI pooling的方式取得特徵,這樣減小了背景的干擾。這9個點是學出來了,並沒有標註出來。從後面結果來看,實際中,9個點很多在邊緣,也有些在圖像內部。
引言
在目標檢測的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目標的位置和特徵佔有很重要的位置。
傳統中,網絡預測的迴歸量爲,映射到當前的bbox proposal,refined後爲
考慮到ground truth ,訓練的過程是讓與儘可能的靠攏。在訓練階段,使用smoth 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就確定了是落入到哪個金字塔層上。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個點,並沒有強太多
整體效果圖
注:從上面的結果來看,確實有很多是邊緣點,但也有些目標內的點,同時也不是代表典型的特徵,比如車那個,並沒有在車燈那裏