論文連接:arxiv.org/abs/1902.09…html
代碼連接:github.com/generalized…git
這篇論文出自CVPR2019,算是目前已被錄用且公佈的爲數很少的目標檢測相關論文了。這篇論文提出了一種優化邊界框的新方式——GIoU(generalized IoU,廣義IoU)。目前關於IOU的新用法真是層出不窮,從Cascade R-CNN到IOU Net再到現在的GIoU,GIoU的方法是這些論文中相對簡單的,相信不少朋友瞭解了這篇文章的原理後,心裏的OS都是「總以爲損失函數能夠優化,這麼簡單我怎麼沒想到呢?」,哈哈,反正我是這樣想的了。下面來看看這篇文章所提出的方法吧。github
目前目標檢測中主流的邊界框優化採用的都是BBox的迴歸損失(MSE loss, L1-smooth loss等),這些方式計算損失值得方式都是檢測框得「代理屬性」——距離,而忽略了檢測框自己最顯著的性質——IoU。以下圖所示,在L1及L2範數取到相同的值時,實際上檢測效果倒是差別巨大的,直接表現就是預測和真實檢測框的IoU值變化較大,這說明L1和L2範數不能很好的反映檢測效果。算法
除了能反映預測檢測框與真實檢測框的檢測效果外,IoU還具備尺度不變性。但是既然IOU這麼好,爲何以前不直接用IoU呢,這是因爲IoU有兩個缺點,致使其不太適合作損失函數:網絡
基於IoU的優良特性和其做爲損失函數時的致命缺點,做者提出了一個新的概念——GIoU函數
GIoU的定義以下圖所示,post
根據定義,GIoU具備以下性質:優化
GIoU做爲損失函數時計算方式以下的算法2代理
從算法中能夠看到和GIoU的計算方式和IoU的步驟基本保持一致,在獲得IoU的值後在根據上面的算法1計算GIoU的值。這裏還不太清楚方向傳播時,梯度是怎麼計算的。等我看看源碼再來更新吧cdn
做者分別在幾種主流的目標檢測算法上作了實驗,分別是YoLo、Faster R-CNN和Mask R-CNN。這裏貼上在Pascal Voc數據集上的實驗結果,以下
實驗結果中在YoLo v3上能夠看到GIoU相比IoU的損失函數有較大幅度的提高,而在faster r-cnn中GIoU和IoU做爲損失函數的區別不大,這裏做者給出的解釋是faster rcnn的anchor更密集,致使不易出現與gt不重疊的檢測框。其實我的認爲,anchor多的情形與gt不重疊的檢測框纔多,更根本的緣由應該是RPN網絡進行了一次粗檢後,濾去了大部分跟gt沒有重合的檢測框。致使GIoU相比IoU的損失函數提高不明顯吧
GIoU的方法很簡單,巧妙的是優化的點。經過廣義IoU做爲損失函數替代bbox迴歸仍是頗有趣的。不過疑惑的是實驗結果中的檢測AP值都很是低,原生的faster rcnn在pascal voc上的檢測效果都不會這麼差。從實驗對比上GIoU的損失函數相比原始的損失函數在準確率不到40%的效果上來講確實有較大幅度的提高。然而要是換到準確率較高的baseline上呢?這一點還須要實驗驗證。 另外總感受這篇論文有點點到即止,沒有更多的實驗驗證bbox做爲損失函數存在缺陷的緣由。