加权框融合 WBF(Weighted Boxes Fusion: combining boxes for object detection models)
最近閱讀目標檢測論文,看到一位博主對論文總結不錯,通俗易懂,特轉載
————————————————
版權聲明:本文為CSDN博主「Yemiekai」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Yemiekai/article/details/117839686
文章標題:《Weighted Boxes Fusion: combining boxes for object detection models》
文章PDF地址:https://arxiv.org/abs/1910.13302
GitHub地址:https://github.com/ZFTurbo/Weighted-Boxes-Fusion
簡介
作者認為,在目標檢測任務中,當實時性要求不強時,集成多個推理模型有助于我們得到更好的結果。
于是作者在文中提出了一種方法,可以把多個目標檢測模型的預測結果結合起來。
這個方法稱為 weighted boxes fusion,簡稱 WBF 。
在篩選預測框的過程中,常用的方法是非極大值抑制(non-maximum, NMS),還有一種 soft-NMS 方法也被用于改進篩選性能。這些方法在單個模型上效果不錯,但只能簡單地從預測框中,“篩選” 框框。不能有效地結合多個模型的預測結果來產生一個平均的框框。與單一模型相比,結合多個模型的預測會得到更好更準確的效果,這樣做在打比賽中通常名列前茅。
NMS、soft-NMS等方法只是簡單地刪除部分預測框。
與之不同,作者提出的 WBF 方法用上了所有預測框的置信度(得分),來構造出融合的框框。
在實際應用中,還有一種技術也經常被用到,叫做測試時增強(test-time augmentation, TTA),它類似于訓練時的數據增強。舉個例來說,測試的時候使用一個訓練好的模型,對原始圖片推理、又把圖像做垂直/水平反轉等變換,分別推理,把這幾個結果平均,作為一次最終的結果。這種有多個結果的情況也可以用 WBF。
WBF 的過程
關于NMS和soft-NMS資料網上很多,這里主要介紹WBF的過程。
為了便于理解,我對這些框進行了分類,相同顏色的框表示它們選中了同一個目標。
這里有 3 朵花,每朵花上應該只保留 1 個框,這是我們本次任務的目標。
先透露一下,用WBF處理過后,可以得到這樣的結果:
顯然我們也可以用 NMS 直接干掉那些重疊的框,最后得到 3 個干凈的框,效果也差不多。
但 WBF 不是這么做的。它不是直接干掉這些框,而是對現有的框進行融合,生成新的框。
這個例子里,它把 3 個藍色的框融合成 1 個框;2 個黃色的框融合成1個框;4 個紅色的框融合成 1 個框。
WBF首先對這些框做一個預處理,把這些框按照得分從高到低進行排序,放在一個數組里:
上面的圖示中,對 9 個框(3個藍框,4個紅框,2個黃框)進行了排序,右邊那一列是排序的結果。數組的每個元素里面記錄了該框框的得分和坐標。然后從最高分的開始,一個一個取出來,進行加權融合。
先說一下:
??在我們的程序里面,每個框的數據只有坐標和分數,并不知道哪個框屬于哪朵花。
??所以哪個框要和哪個框融合?首先要這些框進行聚類:把同一朵花上面的框歸到一起。
??這可以通過IOU(交并比)做到,我們一步一步來。(只能把這些框歸到一起,但仍然不知道是哪朵花)
可以看到,這里用框的得分作為權值,把兩個框的坐標進行融合,得到一個新的框。
??所以得分越高的框,權值越大,在生成新框的過程中,它的貢獻更大。
??新框的形狀和位置更偏向于權值大的框。
??對于 2 個以上的框,也是按照這個公式往后面加就行了。
??論文提供的源碼里還有一種計算方式,是直接求平均的,沒有把得分作為權值來用。具體可以看代碼。
回到 WBF 的處理流程,對這 9 個框排序完成之后,再維護 2 種容器(可以用數組之類的東西):
其中一種容器叫做 clusters,是聚類的結果,用于存放同一朵花上面的所有框。
在這個例子中,有 3 個聚類:clusterA,clusterB,clusterC,分別代表這 3 朵花上面的框。
另外一種容器叫做 fusions,一個 fusion 對應一簇 cluster。
把某 cluster 中所有的框用融合框公式算出一個新的框,記錄在fusion 里。
同理這里也有 3 個:fusionA,fusionB,fusionC,是與其對應的 3 種 cluster 各自融合的結果。
為了快速描述 WBF 的處理流程,假設現在已經按照排序順序,處理完數組里的前 6 個數據了:
處理完前面 6 個數據后,已經得到 2 組cluster和 2 個fusion了。
它們是怎么來的呢? 再看第 7 個數據是怎么處理的就知道了。
現在從 preDatas 中取出第 7 個數據(黃色的框),首先對它做聚類,聚類的方法是:
把這個新來的 7 號框,與現有 fusions 中的所有 fusion 做 IOU,如果 IOU 結果大于指定閾值,則聚類成功,把這個框放到該 fusion 對應的 cluster 中。
按照上述說法,我們分別把 7 號框與 fusionA 和 fusionB 的框做 IOU,發現都小于閾值。
顯然 7 號框不屬于 clusterA,也不屬于clusterB,應該給它新建一個 cluster。聚類完畢。
姑且把這個新的 cluster 命名為 clusterC,把 7 號框放到 clusterC 里面。
同時對 clusterC 里所有的框做 加權融合(用上面講的融合框公式),得到 fusionC。
由于 clusterC 里只有一個框,所以融合的結果 (fusionC) 就是它自己。
現在已經處理完第 7 個框了,接下來第 8 個也同樣處理。
第 8 個是紅色的框,經過聚類(算IOU) 后,它被分到clusterB里了。
分配完后,對clusterB里的所有框(此時共有4個)做加權融合,得到新的clusterB。
結果如圖:
可以看到現在clusterB里有 4 個框, 這 4 個框就是下面那朵花上的 4 個框。
第 9 個框的處理方式也一樣,我就不畫了。
所有數據處理完畢后,得到 3 個fusion,這 3 個框就是WBF算法的結果。
把這個 3 個框畫到圖片上,就得到文章開頭展示的結果:
總結
這個 WBF 算法可以直接用來代替 NMS,不過計算量可能會大一點。
對于一張圖片,可以用多個不同的模型來做預測,然后對所有預測結果運用 WBF 算法,得到 1 個結果。作者說這個結果可能好過單個模型的預測結果。作者提出 WBF 算法也是主要應用于這種場景。
如果只有 1 個模型,也可以用 WBF 算法。方法就是把得分閾值設低一點,讓網絡輸出一堆框框,然后對這些框做 WBF。如果網絡判別能力強,得分低的框往往是一些垃圾框,它在融合過程中也沒什么權重,所以直接做 WBF 應該沒有問題。
在一些情況下,WBF 還能用于改善漏檢、誤檢等問題。
不過WBF的能力有限,畢竟它還得依賴于網絡輸出結果,并不能顛覆這個結果。
另外,WBF和NMS選哪個,還要看具體應用和具體情況。
REF:WBF:繼NMS和Soft-NMS后的過濾候選框新方法 - 知乎 (zhihu.com)
總結
以上是生活随笔為你收集整理的加权框融合 WBF(Weighted Boxes Fusion: combining boxes for object detection models)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP Spartacus develo
- 下一篇: 什么是前端开发中的 mobile fir