1. 程式人生 > 其它 >加權框融合 WBF(Weighted Boxes Fusion: combining boxes for object detection models)

加權框融合 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)