论文阅读:Softer-NMS: Rethinking Bounding Box Regression for Accurate Object Detection
Softer-NMS
文章
??和之前同樣出自Megvii的一篇論文IoU-Net一樣,這篇論文的出發點也是,two-stage detector進行NMS時用到的score僅僅是classification score,不能反映bounding box的定位精準度,因此引入了一個反映其定位精準度的因變量。本文的這個因變量就是bounding box的4個坐標的方差。
可以看到,除了預測box的location外,網絡還預測了一個Box std,相當于預測了一個location的高斯分布:
??而這個方差std就是用來度量對位置估計的不確定性的量。AbsVal就是取絕對值,不使用relu的原因很簡單,避免很多std直接變為0,不能反映位置的不確定性。用分布的形式表示bounding box,ground truth也可以這樣表示,不過方差為0就是了:
上式是一個Dirac函數。 因此為了準確定位bounding box,優化的目標之一就是使得兩個分布接近,即最小化上面兩個分布的KL散度。
因此使用KL散度作為bounding box regression的損失函數,計算可以得到
??當方差為1的時候,該損失函數變成了標準的平方誤差函數。該損失函數是可以對x_e和方差求導的,因此可以用梯度下降。但是由于方差在分母(求導會產生平方),訓練開始的時候容易產生梯度爆炸。因此網絡用另一個變量代替方差:
損失函數也就變成了:
??此外,為了充分發揮paper提出的loss的能力,paper采用角點的形式而不是中心點+長寬對bounding box進行定位。
??既然加入了方差,那么顯然就要用這個來進行NMS,只需要在原本的NMS過程中加入兩行代碼,當然也可以和soft-NMS一起使用,因為soft-NMS只是對score的改變而已。原始NMS會將某個與某個大score的box的IoU較大而又score比它小的box全部suppress掉,但是softer-NMS中不會將這些boxsuppress掉,而是與大score的box按方差的倒數加權求和得到新的box。但我不明白的是,為什么求和完了不將這些box剔除掉。偽代碼如下:
??其中M包含了一個box對應的坐標b,分數s和方差c。
??訓練時,作者發現加入了KLloss之后從scratch開始訓練網絡不穩定。作者猜測這可能是因為損失函數中的二次項引起的。作者于是先不加方差,用普通的faster R-CNN訓練350k輪,然后加入方差訓練490k輪。
??我認為這篇paper一個有趣的地方是object location這塊兒的損失函數的設計,我們一般設計神經網絡時想的都是會把輸出訓練到某個值,去擬合一個什么函數,但是這篇paper直接從需求(想讓兩個分布相同)出發,以KL散度作為損失函數,以minimize這個損失函數為目標。如果按照我na?ve的想法,為了得到想要的高斯分布,直接就以ground truth的期望和方差為label,然后用個差的平方作為損失函數。
??按照這個思路的話,這個損失函數也可以用在one-stage detector里,取代對IoU的學習。
總結
以上是生活随笔為你收集整理的论文阅读:Softer-NMS: Rethinking Bounding Box Regression for Accurate Object Detection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity游戏开发——向量运算(点乘和叉
- 下一篇: Docker初级学习指南