【文章解讀】FreeAnchor: Learning to Match Anchors for Visual Object Detection

一、簡介

     這些年已經有不少基於深度學習的目標檢測的文章了,從最開始的Anchor based 到後來的 Anchor Free。但是解讀這篇文章,主要是由於他的出發點比較新穎---Free Anchor。

     雖然叫Free Anchor,但是依然是Anchor based的方法,只不過他打破了一直以來的Anchor分配機制。

二、回顧Anchor分配機制

    

       上圖是來自於SSD的分析,對於不同尺度大小的feature map,每個pixel都會負責預測k個框,這個k就是預先設置好的Anchor數量,圖中的虛線框也就是anchor。

        以前,在進行對於所有預測出來的結果box,進行loss計算的時候,會將anchor+偏移=結構box,與groundtruth進行比對,這個比對的過程就是利用IoU,只要預測框與目標物體的框IoU達到了一定閾值,那麼這個框就算是正樣本,當然如果一個anchor與多個目標物體都達到了閾值怎麼辦?直接選IoU最大的就好了!

        其他的都是負樣本~~~,當然訓練過程中會設置正負樣本的比例,因爲通常負樣本會很多!

        這個方式,看似非常的合理,並且一直沿用至今,實際應用中也是非常有效的!但是這個方式畢竟也是經驗式的

        大家可以看下面這例子

                          

        看完這兩張圖,想必大家不說也懂我想說什麼了!!!!!嗯~~~~,詞窮~~~~!因爲現實世界中很多的目標物體,並不是規則,比如月亮,他們是偏心的!這也就導致了越是中心的點的feature 越是背景!無法代表這個目標,紅色框與綠色框雖然IoU很高,如果按照傳統方式判定爲正樣本!顯然不好!

三、回到文章中來

       在文章中,把傳統的Anchor分配方式稱之爲“IoU restriction”!文章對於傳統方式給出了兩方面的評價:1、並不是所有的目標物體都是規則的,很多時候物體是偏心的,瘦長的!或者說物體會被遮擋,比如圖像中貓擋住了筆記本電腦,導致了筆記本電腦屬於偏心的目標!2、On the other hand, it is infeasible to match proper anchors/features for objects using IoU when multiple objects come together.我感覺這句話有點重複吧,總之就是說傳統的方式不靈活!畢竟對於不靈活,不智能的點進行優化,基本上都能提升效果!

     文章提出了自己的方法,並且把這個方式和損失函數聯繫起來,從而可以優化!和損失函數聯繫起來的方式叫“極大似然估計”,添加上負號和log,就得到了可以最小化的損失!

 

        上圖中,上半部分是傳統的anchor分配方式,基於這種方式無論這個pixel位置是否包含了“有效特徵”,只要IoU達到了就是正樣本!在計算損失函數的時候,就比必須帶上它!這個時候,基本上我們也就發現問題了:引入了基於背景特徵的正樣本!強行讓背景信息預測!

       這個公式就是傳統的訓練損失,A是anchor的集合,A_代表餓了沒有配上正樣本的那些,因此就是負樣本。B代表了label中的目標全體,Cij則是0,1值,用於表示第i個目標和第j個anchor配上了。分類用BCE損失,迴歸用SoomthL1.

      在本文中,利用極大似然的想法來建立損失函數:因此上面的損失函數就可以轉換爲如下公式:

 四、文章核心       

     上面的公式中,“類別”和“迴歸”這兩部分是分開計算的!本文的以思想就是,一個pixel位置是否能夠預測box,應該具有兩個特點:“能夠擁有高的分類置信度” 以及 “框的IoU也高”。

        引入這兩個公式,對應了常會用到的:召回率 與 精度,兩個指標。對於召回率而言,需要爲每個目標都能提供至少一個anchor,並且基於這個anchor的兩類特性都應該接近對應的label。對於精度而言,“classify the anchors of poor localization into the background class”

        

       這個部分代表了,第j個anchor與所有的目標b都沒有配對上的概率,這個概率的計算來自以上的計算方式,1-能配上的最大概率。當然,想要在網絡模型中計算,就要建立一些公式來實現:

                                          

到這裏,也就基本上知道這個網絡需要優化的目標函數的計算方式了:

五、最最最核心部分到了

      損失函數,需要把極大似然換成最小化的形式。

      那麼如果只是簡單的使用max來完成,Free Anchor,顯然大家會覺得有點敷衍!!!而且效果肯定也不太行,原因如下:訓練初期,所有的anchor置信度都很低,那麼這個時候選一個max的?有沒有意義?(我覺得這應該也是可以的,現實一種隨機,或者平均?有沒有大佬說一說?)

       處於上面這個原因,作者提出了一種替代直接使用max的方法:

                 

     這個函數,一開始會是一種平均策略,隨着訓練的加深,anchor們的,置信度開始出現差異,最終是一個max。因此進一步優化後的損失函數如下,加入了兩個權重和focal loss:

   Ai怎麼來的呢?就是對於bi這個目標,利用IoU,從anchor們中選擇top n個,就形成了一個A i 子集。文中原話如下

六、效果對比

 

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