def dice_loss(target,predictive,ep=1e-8): intersection = 2 * torch.sum(predictive * target) + ep union = torch。sum(predictive) + torch.sum(target) + ep loss = 1 - intersection / union return loss 梯度分析
從dice loss的定義可以看出,dice loss 是一種區域相關的loss。意味著某像素點的loss以及梯度值不僅和該點的label以及預測值相關,和其他點的label以及預測值也相關,這點和ce (交叉熵cross entropy) loss 不同。因此分析起來比較複雜,這裡我們簡化一下,首先從loss曲線和求導曲線對單點輸出方式分析。然後對於多點輸出的情況,利用模擬預測輸出來分析其梯度。而多分類softmax是sigmoid的一種推廣,本質一樣,所以這裡只考慮sigmoid輸出的二分類問題,首先sigmoid函數定義如下:
一般情況下,dice loss 正樣本的梯度大於背景樣本的; 尤其是剛開始網絡預測接近0.5的時候,這點和單點輸出的現象一致。說明 dice loss 更具有指向性,更加偏向於正樣本,保證有較低的FN。極端情況下,網絡預測接近0或1時,對應點梯度值極小,dice loss 存在梯度飽和現象。此時預測失敗(FN,FP)的情況很難扭轉回來。不過該情況出現的概率較低,因為網絡初始化輸出接近0.5,此時具有較大的梯度值。而網絡通過梯度下降的方式更新參數,只會逐漸削弱預測失敗的像素點。對於ce loss,當前的點的梯度僅和當前預測值與label的距離相關,預測越接近label,梯度越小。當網絡預測接近0或1時,梯度依然保持該特性。對比發現, 訓練前中期,dice loss下正樣本的梯度值相對於ce loss,顏色更亮,值更大。說明dice loss 對挖掘正樣本更加有優勢。
dice loss為何能夠解決正負樣本不平衡問題?
因為dice loss是一個區域相關的loss。區域相關的意思就是,當前像素的loss不光和當前像素的預測值相關,和其他點的值也相關。dice loss的求交的形式可以理解為mask掩碼操作,因此不管圖片有多大,固定大小的正樣本的區域計算的loss是一樣的,對網絡起到的監督貢獻不會隨著圖片的大小而變化。從上圖可視化也發現,訓練更傾向於挖掘前景區域,正負樣本不平衡的情況就是前景佔比較小。而ce loss 會公平處理正負樣本,當出現正樣本佔比較小時,就會被更多的負樣本淹沒。
通過梯度上升獲得可視化卷積圖假設人工合成的可視化卷積核圖為 x,我們希望這張合成圖 x 能夠使其對應的神經元(卷積核)具有最高的激活值。所得到的這張合成圖像就是該卷基層的卷積核「想要看到的」或者「正在尋找的紋理特徵」。也就是說我們希望找到一張圖像經過CNN網絡,傳播到指定的卷積核的時候,這張圖片可以使得該卷積核的得分最高。
of a Deep Convolutional Network for Semantic Image Segmentation (用於語義分割的弱監督和半監督的深度神經網絡)Fully Convolutional Networks for Semantic Segmentation (用於語義分割的全卷積神經網絡)