1.什麼是“類別不平衡”呢?
詳細來說,檢測算法在早期會生成一大波的bbox。而一幅常規的圖片中,頂多就那麼幾個object。這意味着,絕大多數的bbox屬於background。
2.“類別不平衡”又如何會導致檢測精度低呢?
因爲bbox數量爆炸。
正是因爲bbox中屬於background的bbox太多了,所以如果分類器無腦地把所有bbox統一歸類爲background,accuracy也可以刷得很高。於是乎,分類器的訓練就失敗了。分類器訓練失敗,檢測精度自然就低了。
3.那爲什麼two-stage系就可以避免這個問題呢?
因爲two-stage繫有RPN罩着。
第一個stage的RPN會對anchor進行簡單的二分類(只是簡單地區分是前景還是背景,並不區別究竟屬於哪個細類)。經過該輪初篩,屬於background的bbox被大幅砍削。雖然其數量依然遠大於前景類bbox,但是至少數量差距已經不像最初生成的anchor那樣誇張了。就等於是 從 “類別 極 不平衡” 變成了 “類別 較 不平衡” 。
不過,其實two-stage系的detector也不能完全避免這個問題,只能說是在很大程度上減輕了“類別不平衡”對檢測精度所造成的影響。
接着到了第二個stage時,分類器登場,在初篩過後的bbox上進行難度小得多的第二波分類(這次是細分類)。這樣一來,分類器得到了較好的訓練,最終的檢測精度自然就高啦。但是經過這麼兩個stage一倒騰,操作複雜,檢測速度就被嚴重拖慢了。
4.那爲什麼one-stage系無法避免該問題呢?
因爲one stage系的detector直接在首波生成的“類別極不平衡”的bbox中就進行難度極大的細分類,意圖直接輸出bbox和標籤(分類結果)。而原有交叉熵損失(CE)作爲分類任務的損失函數,無法抗衡“類別極不平衡”,容易導致分類器訓練失敗。因此,one-stage detector雖然保住了檢測速度,卻喪失了檢測精度。