在計算機視覺(CV)任務里常常會碰到類別不平衡的問題, 例如:
1. 圖片分類任務,有的類別圖片多,有的類別圖片少
2. 檢測任務。現在的檢測方法如SSD和RCNN系列,都使用anchor機制。訓練時正負anchor的比例很懸殊。
3. 分割任務, 背景像素數量通常遠大于前景像素。
從實質上來講, 它們可以歸類成分類問題中的類別不平衡問題:對圖片/anchor/像素的分類。
再者,除了類不平衡問題, 還有easy sample overwhelming的問題。easy sample如果太多,可能會將有效梯度稀釋掉。
這兩個問題通常都會一起出現。如果不處理, 可能會對模型性能造成很大傷害。用Focal Loss里的話說,就是訓練不給力, 且會造成模型退化:
(1) training is inefficient as most locations are easy negatives…
(2) the easy negatives can overwhelming training and lead to degenerate models.
如果要處理,那么該怎么處理呢?在CV領域里, 若不考慮修改模型本身, 通常會在loss上做文章, 確切地說,是在樣本選擇或loss weight上做文章。
常見的解決辦法介紹
常見的方法有online的, 也有非online的;有只處理類間不平衡的,有只處理easy example的, 也有同時處理兩者的。
Hard Negative Mining, 非online的mining/boosting方法, 以‘古老’的RCNN(2014)為代表, 但在CV里現在應該沒有人使用了(吧?)。若感興趣,推薦去看看OHEM論文里的related work部分。
Mini-batch Sampling,以Fast R-CNN(2015)和Faster R-CNN(2016)為代表。Fast RCNN在訓練分類器, Faster R-CNN在訓練RPN時,都會從N = 1或2張圖片上隨機選取mini_batch_size/2個RoI或anchor, 使用正負樣本的比例為1:1。若正樣本數量不足就用負樣本填充。使用這種方法的人應該也很少了。從這個方法開始, 包括后面列出的都是online的方法。
Online Hard Example Mining, OHEM(2016)。將所有sample根據當前loss排序,選出loss最大的N個,其余的拋棄。這個方法就只處理了easy sample的問題。
Oline Hard Negative Mining, OHNM, SSD(2016)里使用的一個OHEM變種, 在Focal Loss里代號為OHEM 1:3。在計算loss時, 使用所有的positive anchor, 使用OHEM選擇3倍于positive anchor的negative anchor。同時考慮了類間平衡與easy sample。
Class Balanced Loss。計算loss時,正負樣本上的loss分別計算, 然后通過權重來平衡兩者。暫時沒找到是在哪提出來的,反正就這么被用起來了。它只考慮了類間平衡。
Focal Loss(2017), 最近提出來的。不會像OHEM那樣拋棄一部分樣本, 而是和Class Balance一樣考慮了每個樣本, 不同的是難易樣本上的loss權重是根據樣本難度計算出來的。
從更廣義的角度來看,這些方法都是在計算loss時通過給樣本加權重來解決不平衡與easy example的問題。不同的是,OHEM使用了hard weight(只有0或1),而Focal Loss使用了soft weight(0到1之間)。
現在依然常用的方法特性比較如下:
接下來, 通過修改過的Cifar數據集來比較這幾種方法在分類任務上的表現,當然, 主要還是期待Focal Loss的表現。
實驗數據
實驗數據集
Cifar-10, Cifar-100。使用Cifar的原因沒有別的, 就因為窮,畢竟要像Focal Loss論文里那樣跑那么多的大實驗對大部分學校和企業來說是不現實的。
處理數據得到類間不平衡
將多分類任務轉換成二分類:
new_label = label == 1
原始Cifar-10和100里有很多類別,每類圖片的數量基本一樣。按照這種方式轉變后,多分類變成了二分類, 且正負樣本比例相差懸殊:9倍和99倍。
實驗模型
一個5層的CNN,完成一個不平衡的二分類任務。使用Cross Entropy Loss,按照不同的方法使用不同的權值方案。以不加任何權重的CE Loss作為baseline。
衡量方式
在這種不平衡的二分類問題里, 準確率已經不適合用來衡量模型的好與壞了。此處使用F-Score作標準。
實現細節
CE(Cross Entroy Loss)
OHEM
分為以下三步:
1. 計算ce_loss, 同CE
2. 根據ce_loss排序, 選出top N 個sample:
Class Balance CE
形式多種多樣,我個人最喜歡使用:
優化方法
最簡單的SGD, 初始lr=0.1, 每200,000步衰減一次, 衰減系數為0.1。Cifar-100上focal_loss的初始lr=0.01。
batch_size = 128.
實驗結果
CIFAR-10:
Focal Loss的一個補丁
對于CIFAR-100,batch_size=128時, 一個batch內可能會一個positive sample都沒有, 即n_pos == 0, 這時,paper里用n_pos來normalize loss 的方式就不可行了。測試過兩種簡單的選擇:一是用所有weight之和來normalize, 二是直接不normalize。前者很難訓練甚至訓練不出來, 后者可用。所以上面的Focal loss計算代碼應該補充為:
經驗總結
Code Available On Github
https://github.com/dengdan/test_tf_models
Branch:focal_loss
References Focal Loss for Dense Object Detection, https://arxiv.org/pdf/1708.02002.pdf
RCNN, https://arxiv.org/abs/1311.2524
Fast RCNN, http://arxiv.org/abs/1504.08083
Faster-RCNN, http://arxiv.org/abs/1506.01497
Training Region-based Object Detectors with Online Hard Example Mining, https://arxiv.org/abs/1604.03540
審核編輯 :李倩
-
CV
+關注
關注
0文章
53瀏覽量
16879 -
計算機視覺
+關注
關注
8文章
1698瀏覽量
46042 -
檢測方法
+關注
關注
0文章
50瀏覽量
9789
原文標題:視覺分類任務中處理不平衡問題的loss比較
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論