代碼地址:https://github.com/FishYuLi/BalancedGroupSoftmax
視頻講解地址:https://www.youtube.com/watch?v=ikdVuadfUo8
使用基於深度學習的模型來解決長尾 large vocabulary目標檢測是一項具有挑戰性而艱巨的任務,然而,這項工作尚未得到充分研究。在本文的工作中,首先對針對長尾分布問題所提出SOTA模型的性能進行了系統分析,找出其不足之處。發現當數據集極度偏斜時,現有的檢測方法無法對few-shot類別進行建模,這可能導致分類器在參數大小上的不平衡。由於檢測和分類之間的內在差異,將長尾分類模型直接應用於檢測框架無法解決此問題。因此,在這項工作中,提出了一個新穎的balanced group softmax (BAGS)模塊,用於通過逐組訓練來平衡檢測框架內的分類器。它隱式地調整了頭和尾類的訓練過程,並確保它們都得到了充分的訓練,而無需對來自尾類的instance進行任何額外採樣。
在最近的長尾large vocabulary目標識別任務數據集 LVIS上的大量實驗表明,本文提出的BAGS大大提高了具有各種主幹和框架的檢測器在目標檢測和實例分割上的性能。它擊敗了從長尾圖像分類中轉移過來的所有最新方法,並建立了新的方法。
LVIS 是由facebook AI研究院的研究人員們發布的一個大規模的詞彙實例分割數據集(Large Vocabulary Instance Segmentation ),包含了164k圖像,並針對超過1000類物體進行了約200萬個高質量的實例分割標註。數據集中包含自然圖像中的物體分布天然具有長尾屬性。
受《Decou-pling representation and classifier for long-tailed recognition》的啟發,首先將檢測框架中的representation 和分類模塊解耦,發現不同類別相對應的proposal 分類器的weight norm嚴重失衡,因為low-shot類別被激活的機會很少。通過分析,這是長尾檢測器性能差的直接原因,而長尾檢測器性能本質上是由數據不平衡引起的。
如圖1所示,分別根據訓練集中實例的數量對在COCO和LVIS上訓練的模型的類別分類器權重範數進行排序。對於COCO,除了背景類(類別ID = 0)以外,相對平衡的數據分布導致所有類別的weight norm相對平衡。而對於LVIS,很明顯類別weigh norm是不平衡的,並且與訓練實例的數量呈正相關。這種不平衡將使low-shot 類別(尾類)的分類分數比many-shot 類別(頭部類)的分類分數小得多。在標準softmax函數之後,這種不平衡會被進一步放大,因此分類器錯誤地抑制了預測為low-shot 類別的proposal 。
圖1. COCO和LVIS訓練集中類別的訓練實例(#ins)的排序數量,以及在COCO和LVIS上訓練的Faster R-CNN模型的相應分類器權重範數「 w」。x軸表示COCO和LVIS的分類索引。將80類COCO與1230類LVIS對齊,以獲得更好的可視化效果。類別0表示背景。
在實際的視覺相關任務中,數據都存在如上圖所示的長尾分布,少量類別佔據了絕大多少樣本,如圖中Head部分,大量的類別僅有少量的樣本,如圖中Tail部分。解決長尾問題的方案一般分為4種:
1、Re-sampling:主要是在訓練集上實現樣本平衡,如對tail中的類別樣本進行過採樣,或者對head類別樣本進行欠採樣。基於重採樣的解決方案適用於檢測框架,但可能會導致訓練時間增加以及對tail類別的過度擬合風險。
2、Re-weighting:主要在訓練loss中,給不同的類別的loss設置不同的權重,對tail類別loss設置更大的權重。但是這種方法對超參數選擇非常敏感,並且由於難以處理特殊背景類(非常多的類別)而不適用於檢測框架。
3、Learning strategy:有專門為解決少樣本問題涉及的學習方法可以借鑑,如:meta-learning、metric learning、transfer learing。另外,還可以調整訓練策略,將訓練過程分為兩步:第一步不區分head樣本和tail樣本,對模型正常訓練;第二步,設置小的學習率,對第一步的模型使用各種樣本平衡的策略進行finetune。
4、綜合使用以上策略
在本文中,為了解決分類器的不平衡問題,將一個簡單而有效的balanced group softmax(BAGS)模塊引入到檢測框架的分類head中。本文建議將訓練實例數量相似的目標對象類別放在同一組中,並分別計算分組的softmax交叉熵損失。分別處理具有不同實例編號的類別可以有效地減輕head類對tail類的控制。但是,由於每次小組訓練都缺乏不同的負樣本,結果模型會有太多的誤報。因此,BAGS還在每個組中添加了一個其他類別,並將背景類別作為一個單獨的組引入,這可以通過減輕head類對tail類的壓制來保持分類器的類別平衡,同時防止分類背景和其他類別的false positives。
實驗發現BAGS的效果非常好。在長尾目標識別任務數據集LVIS上,使用各種框架包括Faster R-CNN、CascadeR-CNN、Mask R-CNN和HTC與ResNet-50-FPN和ResNeXt-101-x64x4d-FPN,其tail類性能提升了9%-19%,整體mAP提升了約3%-6%。
當訓練集遵循長尾分布時,當前表現良好的檢測模型通常無法識別尾巴類別。本文通過對代表性示例(COCO和LVIS)進行對比實驗,嘗試研究從均衡數據集到長尾數據集這種性能下降的背後機制。
通過所設計的對比實驗發現(具體的實驗細節可以參考論文原文),tail類的預測得分會先天性地低於head類,tail類的proposals 在softmax計算中與head類的proposals 競爭後,被選中的可能性會降低。這就解釋了為什麼目前的檢測模型經常在tail類上失效。由於head類的訓練實例遠多於tail類的訓練實例(例如,在某些極端情況下,10000:1),tail類的分類器權重更容易(頻繁)被head類的權重所壓制,導致訓練後的weight norm不平衡。
因此,可以看出為什麼重採樣方法能夠在長尾目標分類和分割任務中的使得tail類受益。它只是在訓練過程中增加了tail類proposals 的採樣頻率,從而可以平等地激活或抑制不同類別的權重,從而在一定程度上平衡tail類和head類。同樣,損失重新加權方法也可以通過類似的方式生效。儘管重採樣策略可以減輕數據不平衡的影響,但實際上會帶來新的風險,例如過度擬合tail類和額外的計算開銷。同時,損失重新加權對每個類別的損失加權設計很敏感,通常在不同的框架,backbone和數據集之間會有所不同,因此很難在實際應用中進行部署。而且,基於重新加權的方法不能很好地處理檢測問題中的背景類。因此,本文提出了一種簡單而有效的解決方案,無需繁重的超參數工程即可平衡分類器weight norm。
圖2.Balanced Group softmax模塊的框架。(a)訓練:將包含類似訓練實例的類別分組在一起。類別 others被添加到每個組。G0表示背景組。Softmax交叉熵損失函數(CE)損失分別應用於每個組。(b)測試:使用新的預測z,將softmax應用於每個組,並按其原始類別ID的概率排序,並用前景概率重新縮放,從而為後續的後期處理環節生成新的概率向量。
1、Group softmax
如前所述,weight norm與訓練樣本數之間的正相關關係損害了檢測器的性能。為了解決這個問題,本文將類別劃分為幾個不相交的組,並分別執行softmax操作,以使只有具有相似訓練實例數量的類在每個組中彼此競爭。這樣,可以在訓練期間將包含大量不同實例的類彼此隔離。head類將基本上不抑制tail類的分類器權重。
根據訓練實例數量將所有類別分為N組:
其中N(j)是訓練集中類別J的標籤中邊界框的數量,而sl和sh是確定每組的最小和最大實例數的超參數。文中,分為四組N = 4,sl1 = 0,sl2 = 10,sl3 = 102,sl4 = 103,sh4 = +∞。
此外,手動將G0設置為僅包含背景的類別,因為它擁有最多的訓練實例(通常比目標類別多10-100倍)。對G0採用sigmoid cross entropy損失,因為它僅包含一個預測,而對於其他組採用softmax cross entropy,選擇softmax的原因是softmax函數具有將每個類彼此抑制的能力,並且很少會產生大量的誤報。
2、Calibration via category 「others」
但是,發現上述group softmax設計存在以下問題:在測試過程中,對於一個proposal,由於其類別未知將使用所有組進行預測,因此,每個組至少有一個類別將獲得較高的預測分數,並且很難決定我們應該採用哪種分組預測,從而導致大量誤報。為了解決這個問題,在每個組中添加了一個類別,以校準組之間的預測並抑制誤報。此類別包含當前組中未包含的類別,可以是其他組中的背景類別或前景類別。
3、Balancing training samples in groups
在以上處理中,新添加的類別others將通過抑制眾多實例,再次成為佔主導地位的outlier 。為了平衡每組的訓練樣本數,僅對一定數量的others proposals進行訓練,由採樣率β控制。
在包含標籤真值的類別組中,將根據mini-batch of K proposals來按比例採樣others實例。如果一組中沒有激活正常類別,則所有others實例都不會激活,該組則被忽略。這樣,每個組都可以保持平衡,且誤報率低。添加others類別會使baseline提高2.7%。
4、Inference
在推理過程中,首先使用訓練好的模型生成z,然後在每個組中應用softmax。 除G0外,其他所有節點均被忽略,所有類別的概率均按原始類別ID排序。G0中的p0可被視為前景proposals的概率。最後,使用重新縮放正常類別的所有概率。這個新的概率向量將被送到後續的後處理步驟(如NMS),以產生最終的檢測結果。應該注意的是,從概念上來說不是真正的概率向量,因為它的總和不等於1,但它起著原始概率向量的作用,該向量通過選擇最終boxes框來指導模型。
數據集:LVIS,根據訓練實例數量將LVIS驗證集中的類別劃分為4個等級,以更清楚地評估頭和尾類的模型性能。
評價指標:mAP,APr(APfor rare classes), APc(AP for common classes), APf(AP for frequent classes)
1、Main results on LVIS
將長尾分類的多種最新方法轉移至Faster R-CNN框架,包括對tail類進行微調,重複因子採樣(RFS),類別損失重新加權,Focal Loss,NCM 和τ歸一化。
採用以ResNet-50-FPN為主幹網絡的FasterR-CNN作為baseline(表中的模型(1)),可達到20.98%的mAP但0%的AP1。baseline模型由於其他類別的支配而錯過了大多數tail類別。針對tail訓練樣本對模型(1)微調後得到的模型(3)僅將AP2顯著增加,而將AP4減少2.5%,並且AP1保持為0。這表明當訓練次數增加時,原始softmax分類器不能很好地適應於實例數量太小的情況。
為了進一步驗證方法的通用性,將FasterR-CNN主幹更改為ResNeXt-101-64x4d,結果展示於表2。在這個更強大的主幹上,本文的方法仍然獲得了3.2%的改進。然後,將本文的方法應用於最新的Cascade R-CNN框架,並在3個階段將所有3個softmax分類器更改為BAGS模塊。總體mAP顯著提高了5.6%。
2、Results for instance segmentation
更多實驗細節,可以參考原文。
參考:
https://zhuanlan.zhihu.com/p/127791648