聊聊Focal Loss及其反向傳播

2021-08-15 12:14:50 字數 2723 閱讀 9606

我們都知道,當前的目標檢測(objece detection)演算法主要分為兩大類:two-stage detector和one-stage detector。two-stage detector主要包括rcnn、fast-rcnn、faster-rcnn和rfcn等,one-stage detector主要包括yolo和ssd等,前者精度高但檢測速度較慢,後者精度低些但速度很快。

對於two-stage detector而言,通常先由rpn生成proposals,再由rcnn對proposals進行classifcation和bounding box regression。這樣做的乙個好處是有利於樣本和模型之間的feature alignment,從而使classification和bounding box regression更容易些;此外,rpn和rcnn中存在正負樣本不均衡的問題,rpn直接限制正負樣本的比例為1:1,對於固定的rpn_batch_size,正樣本不足的情況下才用負樣本來填充,rcnn則是直接限制了正負樣本的比例為1:3或者採用ohem。

對於one-stage detector而言,樣本和模型之間的feature alignment只能通過reception field來實現,且直接通過回歸方式進行**,存在這嚴重的正負樣本資料不均衡(1:1000)的問題,負樣本的比例過高,佔據了loss的絕大部分,且大多數是容易分類的,這使得模型的訓練朝著不希望的方向前進。作者認為這種資料的嚴重不均衡是造成one-stage detector精度低的主要原因,因此提出focal loss來解決這一問題

通過人工控制正負樣本比例或者ohem能夠一定程度解決資料不均衡問題,但這兩種方法都比較粗暴,採用這種「一刀切」的方式有可能把一些hard examples忽略掉。因此,作者提出了一種新的損失函式focal loss,不忽略任何樣本,同時又能讓模型訓練時更加專注在hard examples上。簡單說明下focal loss的原理

focal loss是在標準的交叉熵損失的基礎上改進而來。以二分類為例,標準的交叉熵損失函式為

針對類別不均衡,針對對不同類別對loss的貢獻進行控制即可,也就是加乙個控制權重αt,那麼改進後的balanced cross entropy loss為

但是balanced cross entropy loss沒辦法讓訓練時專注在hard examples上。實際上,樣本的正確分類概率pt越大,那麼往往說明這個樣本越易分。所以,最終的focal loss為

focal loss存在這兩個超引數(hyperparameter),不同的αt和γ,對於的loss如figure 1所示。從figure 4, 我們可以看到γ的變化對正(forground)樣本的累積誤差的影響並不大,但是對於負(background)樣本的累積誤差的影響還是很大的(γ=2時,將近99%的background樣本的損失都非常小)。

接下來看下實驗結果,為了驗證focal loss,作者提出了一種新的one-stage detector架構retinanet,採用的是resnet_fpn,同時scales增加到15個,如figure 3所示

table 1給出了retinanet和focal loss的一些實驗結果,從中我們看出增加α-類別均衡,ap提高了0.9,再增加了γ控制,ap達到了37.8.focal local相比於ohem,ap提高了3.2。從table 2可以看出,增加訓練時間並採用scale jitter,ap最終那達到39.1。

focal loss的原理分析和實驗結果至此結束了,那麼,我們接下來看下focal loss的反向傳播。首先給出softmax activation的反向梯度傳播公式,為

有了softmax activation的反向梯度傳播公式,根據鏈式法則,focal loss的反向梯度傳播公式為

總結:focal loss主要用於解決資料不均衡問題,可以看做是ohem演算法的延伸。作者是將focal loss用於one-stage detector,但實際上這種解決資料不均衡的方法對於two-stage detector來講同樣有效。

focal loss

focal loss**閱讀筆記

手打例子一步一步帶你看懂softmax函式以及相關求導過程

如何評價kaiming的focal loss for dense object detection?

tensorflow reverse 反向傳播

1 tensorflow的反向傳播 import tensorflow as tf import numpy as np batch size 8 seed 23455 基於seed產生隨機數 rng np.random.randomstate seed 隨機數返回32行2列的矩陣 表示32組 體積...

理解back propagation反向傳播

首先需要明白back propagation的作用 深度學習的訓練是成本函式 cost function 最小化的過程,一般採取梯度下降法求解。那麼怎麼計算梯度呢?這就要用到back propagation了。計算乙個數學表示式的梯度是很直接的,但計算是昂貴的。而反向傳播演算法使用簡單的方法有效的減...

TensorFlow實現MNIST反向傳播

coding utf 8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data defsigmaprime x 用sigmoid函式的導數更新權重 param x return 更新後的權...