CVPR17論文有感:A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection

A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection

還是那個老故事,即如何解決Deep檢測跟蹤器訓練時正樣本(尤其在occlusion和deformation情況下的hard positive)不足的問題。這個問題的緊迫性在於這樣樣本的缺失導致訓練所得網絡在occlusion、deformation等appearance variation情況下的魯棒性不足。

傳統解決此問題有兩個方向的思路:1. 儘可能收集和建立越來越大越來越全的數據庫,期待這個數據庫能夠把方方面面的variation都囊括(比如COCO超過10K的汽車樣本with variations)。可是,occlusion和deformation具有long-tail的特性,即便再大的dataset也很難得到一個足夠全的數據庫;2. Hard samples mining in Loss function,比如類似focal loss,這樣做僅僅是增加了在訓練時hard樣本的單體對loss的貢獻,但是依然不能解決有些很罕見樣本根本收集不到的問題。

在解決此問題上,本文與SINT++的思路完全一樣,即通過Adversarial的概念去直接學習從hard positive的long-tail distribution中學習採樣生成現實中不存在的hard positive樣本,學會如何去遮擋一些真的easy positive。注意,這裏的生成依舊不是輸入一張圖,輸出一張圖的傳統GAN模式。因爲這樣的傳統GAN模式依舊擺脫不了對樣本的需求。這裏做的是在CNN的feature map上進行遮擋,而不是pixel-wise的逐像素生成,這樣一來就對adversary訓練的樣本需求減少很多。 注意,A-Fast-RCNN和SINT++都是在feature map上遮擋而不是在原圖上遮擋。Adversary的概念體現在generator拼命生成discriminator(classifier、detector)無法識別的hard positive,而discriminator則拼命去識別generator扔過來的儘可能難的hard positive。

 

  • 論文梗概:

本文是自實現better data utilization and provide a new way of hard positive data enhancement的角度入手得到新detector的。換言之,本文的貢獻主要集中在如何用adversary的概念在已有sample基礎上對抗地(generator try to predict occlusion and deformation that will degrade the detector,while the detector learn to overcome it)學會遮擋,生成新hard樣本。而detector本身就是一個Fast-RCNN。

一個detector的核心能力體現在invariance to appearance variance(包括illumination,deformation,occlusion,intra-class variation,etc.)。爲了使得訓練得到檢測器獲得這種invariance的能力,最原始的思路是暴力收集建立儘可能大的dataset,使得這個dataset有豐富的hard樣本可以cover各種可能的variance。但是,deformation和occlusion等variance具有long-tail distribution的特性,即有大部分variance是極其罕見的,想要完全收集齊是不現實的。

那麼該怎麼辦呢?那麼就通過生成的方法,依據現有的easy樣本去創造hard正樣本。即通過adverary學習如何在easy sample上面進行遮擋以使其變成hard positive。

  • 深度檢測器背景調研

兩大陣營的發展:

  • One-stage (Spatially continuous: Sliding window):Overfeat à YOLO à SSD à DenseBox;
  • Two-stage (Spatially discrete: Region Proposal): R-CNN à Fast-RCNN(compute the conv features of the entire image once and share it among proposals) à Faster-RCNN(E2E with RPN) à R-FCN

新detector設計方向:

  • (網絡設計)Go Deeper on the CNN main body:ResNet, Inception-ResNet, ResNetXt;
  • (網絡設計)Contextual reasoning & top-down mechanism: segmentation first, CNN feature hierarchy skip connection, CNN feature hierarchy lateral connection;
  • (數據增強)Get better and more data: Hard-positive mining, etc.
  • 技術細節:

傳統的Faster-RCNN有兩部分輸出:分類類別和bbox位置。相對應地,在計算loss時也由兩部分組成:(F()是detector,X是一個proposal的feature)

那麼本文的工作,就是在訓練時在原網絡上增加一個adversarial network,此時訓練的loss變爲:

上述A(x)是將原proposal X的feature通過adversarial network生成的一個‘新’的feature。La loss的關鍵是前面的負號,這也是adversary對抗概念的關鍵:即,使得detector分類產生越大誤差的A()說明造假成功,則loss越小;而使得detector分類越準確的A()說明造價不力,則loss越大。也就是說,在adversarial訓練的過程中,使得A()越來越能夠產生破壞detector分類性能的新樣本,而在對抗下,detector越來越能適應A()帶來的新樣本。

           A()的造假是在原先真樣本上動兩種手腳:1 occlusion,2. Deformation(partial rotation),將其改造爲一個更challenge更rare的假樣本。產生occlusion的部分叫做Adversarial Spatial Dropout Network(ASDN);而產生partial rotation的部分叫做Adversarial Spatial Transform Network(ASTN)。兩個網絡串聯,ASTN在ASDN之後,流水線一樣地對一個輸入的真樣本進行改造,一次對其加之occlusion和rotation。

值得注意的是:

  • ASDN和ASTN都是feature-level operation而不是image level operation,即不是像GAN一樣輸入一個圖,pixel-wise地generate並輸出一個圖;
  • Adversarial network只是作爲generator在訓練的時候存在於網絡中,在訓練過程中對抗地提高detector的性能,而在測試時將被去掉,僅剩下原本的Faster-RCNN進行測試,只不過這樣訓練得到的detector比普通訓練下得到的更難強壯;
  • ASDN從概念到implements和2018 CVPR VITAL一文的設計都太像了。。。。。。不得不說,後來者VITAL需要避嫌啊。。。不過VITAL裏面提到的feature level的masking是爲了篩選出robust的feature,去掉discriminative的feature,而這裏是說要用同樣1D的mask(掩碼)來給原feature map加權上遮擋。Anyway,都是一個masking+drop-out的過程。。。太像了。。。

 

  1. ASDN for Occlusion

ASDN就是輸入原某個proposal在roi pooling之後的feature輸入兩層FC(IMageNet pretrained Fc6 and FC7)生成一個二值掩碼圖mask,這個掩碼圖標識着feature map中哪些部分應當被遮擋掉(對應位置清零)。再將這個mask與原輸入feature map(FM)相乘(dropout)得到一個masked FM。

  • 網絡訓練

如上圖可見ASDN的網絡結構非常簡單,但是訓練過程非常複雜。採用stage-wise分階段的訓練,即先訓Fast-RCNN不加ASDN for 10K;然後fix Fast-RCNN的所有參數,單獨訓練ASDN for 10k;最終將兩者全部上線串聯起來E2E訓練。

  • 單獨訓練Fast-RCNN:去掉ASDN,訓練10K。
  • 單獨訓練ASDN:fix Fast-RCNN所有參數,單獨訓練ASDN。

       Training Sample Generation for ASDN

ASDN的訓練樣本應當是(X,M)對兒,一個input proposal feature map X對應一個best occlusion mask M。所謂best,就是遮擋以至於迷惑detector效果最好的一個mask。這個M是9選一選出來的。如何選的呢?假設X是d*d spatial dimension,那麼用一個d/3 * d/3的window在X上有9個實力丁window位置,將這個9個mask apply到X上得到9個masked feature map,run 9次Fast-RCNN的forward pass,選出classification分數最低的哪一個mask作爲這個X的最好mask M,構成一個(X,M)對兒。

           將這些(X,M)對兒作爲樣本,按照如下BCE loss訓練ASDN:

易見就是一個加負號的BCE loss。A(X)是ASDN輸出的mask,M是GT最優mask,計算這兩個mask之間的BCE loss。

     Binarization of ASDN Output Mask

ASDN訓練如上得到的輸出mask是一個連續值的heat-map,不是我們期待的如GT的binary mask。那麼就需要單獨對map進行二值化。這個二值化是通過importance sampling實現的,而不是通過硬thresholding,這樣做是爲了二值化過程的stochasticity和diversity。

           具體做法是選擇原mask中值最大的1/2個element,將這些element中隨機1/3的值變爲1,其餘2/3變爲0;其餘的小的1/2全爲1。注意,這個binarization的操作是不可導的!無法BP

    Joint Training of Fast-RCNN & ASDN

如上圖,進行一個FP:Fast-RCNN conv層提特徵,做ROI pooling,再把每一個pool出來的roi的特徵圖經過ASDN進行masking,再講mask之後的occluded feature輸入分類器。

           在反傳的時候,gradient在dropout即矩陣乘的那一步分流,一部分順着流回conv layers,另一支無法流入ASDNFC裏,因爲binarization不可導!這時對ASDN的訓練採用了類似REINFORCE的DRL訓練方法,具體沒細講。

2. ASTN for deformation(rotation):

基於A. Zisserman大神的STN(全網絡可導),本文提出ASTN,其實就是完全的照搬STN的三個components,而adversary得概念體現在訓練loss加負號,即原先STN是爲了經過deformation讓樣本更容易被分類loss更小,而現在ASTN的implementation目的是爲了把樣本變得更難於分類,loss更大。

如上圖,ASTN同STN一樣由localisation network,grid generator,sampler三個component組成。其中localisation network的輸入時roi pooling之後一個roi的feature map,然後經過localisation network的三個FC(前兩個是Imagenet pre-trained的Fc6和Fc7)生成三個參數:1. Rotation degree2. Translation Distance3. Scaling factor。在ASTN中,我們只關注對原feature進行rotation帶來的deformation。這三個參數輸入到Grid Generator和Sampler中得到一個mask,使其與原FM相乘即可。在ASTN中,訓練的就是Localisation Network(三個FC的參數)

網絡訓練

ASTN因爲STN全面可導,所以訓練可以和Fast-RCNN一起joint train。但是應當也是stage-wise的(作者沒詳述),即先10K訓練Faster-RCNN without ASTN,再fix Fast-RCNN訓ASTN(loss加負號) 10K,然後E2E train 10K。

值得注意的有兩點(關於如何rotate的限制):

  • 只允許正負10度的rotation degree:太大的rotation導致目標倒立完全不能分類,這個generator造假矯枉過正了;
  • 在roi pooled FM的channel維上4等分,每一等分的channels FM單獨rotate:因爲FM channel-wise的每一層是一個filter刷出來的結果,刻畫着某一種特徵。把這些特徵按照不同角度rotate,帶來的deformation效果更好

 

3. Adversarial Fusion

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