語義分割之dice loss深度分析(梯度可視化)

2021-02-10 極市平臺
dice loss 定義

dice loss 來自 dice coefficient,是一種用於評估兩個樣本的相似性的度量函數,取值範圍在0到1之間,取值越大表示越相似。dice coefficient定義如下:

其中其中 

因此dice loss可以寫為:

對於二分類問題,一般預測值分為以下幾種:

TP: true positive,真陽性,預測是陽性,預測對了,實際也是正例。TN: true negative,真陰性,預測是陰性,預測對了,實際也是負例。FP: false positive,假陽性,預測是陽性,預測錯了,實際是負例。FN: false negative,假陰性,預測是陰性,預測錯了,實際是正例。

這裡dice coefficient可以寫成如下形式:

而我們知道:

可見dice coefficient是等同F1 score,直觀上dice coefficient是計算F1 score

這裡考慮通用的實現方式來表達,定義:

其中 

dice loss 有以下幾種形式:

形式1:

形式2(原論文形式):

形式3:

防止分母預測為0。值得說明的是,一般分割網絡輸出經過sigmoid 或 softmax,是不存在輸出為絕對0的情況。這裡加平滑係數主要防止一些極端情況,輸出位數太小而導致編譯器丟失數位的情況。

不同實現形式計算不同,但本質並無太大區別,本文主要討論形式1。下面為pytorch的實現方式:

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函數定義如下:

求導:

單點輸出的形式

單點輸出的情況是網絡輸出的是一個數值而不是一個map,單點輸出的dice loss公式如下:

繪製曲線圖如下,其中藍色的為ce loss,橙色的為dice loss。

當 

計算梯度:

繪圖如下:

梯度正負符號代表梯度的方向,網絡採用梯度下降法更新參數,當梯度為正時,參數更新變小,當梯度為負時參數更新變大。這裡為了討論正負樣本的梯度關係,所以取了絕對值操作。

當 

一般神經網絡訓練之前都會採取權重初始化,不管是Xavier初始化還是Kaiming初始化(或者其他初始化的方法), 輸出 

多點情況分析

dice loss 是應用於語義分割而不是分類任務,並且是一個區域相關的loss,因此更適合針對多點的情況進行分析。由於多點輸出的情況比較難用曲線呈現,這裡使用模擬預測值的形式觀察梯度的變化。

下圖為原始圖片和對應的label:

為了便於梯度可視化,這裡對梯度求絕對值操作,因為我們關注的是梯度的大小而非方向。另外梯度值都乘以 

首先定義如下熱圖,值越大,顏色越亮,反之亦然:

預測值變化( 

dice loss 對應 

ce loss 對應 

可以看出:

一般情況下,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 會公平處理正負樣本,當出現正樣本佔比較小時,就會被更多的負樣本淹沒。

dice loss背景區域能否起到監督作用?

可以的,但是會小於前景區域。和直觀理解不同的是,隨著訓練的進行,背景區域也能產生較為可觀的梯度。這點和單點的情況分析不同。這裡求偏導,當 

可以看出, 背景區域的梯度是存在的,只有預測值命中的區域極小時, 背景梯度才會很小.

dice loss 為何訓練會很不穩定?

在使用dice loss時,一般正樣本為小目標時會產生嚴重的震蕩。因為在只有前景和背景的情況下,小目標一旦有部分像素預測錯誤,那麼就會導致loss值大幅度的變動,從而導致梯度變化劇烈。可以假設極端情況,只有一個像素為正樣本,如果該像素預測正確了,不管其他像素預測如何,loss 就接近0,預測錯誤了,loss 接近1。而對於ce loss,loss的值是總體求平均的,更多會依賴負樣本的地方。

總結

dice loss 對正負樣本嚴重不平衡的場景有著不錯的性能,訓練過程中更側重對前景區域的挖掘。但訓練loss容易不穩定,尤其是小目標的情況下。另外極端情況會導致梯度飽和現象。因此有一些改進操作,主要是結合ce loss等改進,比如: dice+ce loss,dice + focal loss等,本文不再論述。

相關焦點

  • 梯度上升可視化卷積神經網絡
    通過梯度上升獲得可視化卷積圖假設人工合成的可視化卷積核圖為 x,我們希望這張合成圖 x 能夠使其對應的神經元(卷積核)具有最高的激活值。所得到的這張合成圖像就是該卷基層的卷積核「想要看到的」或者「正在尋找的紋理特徵」。也就是說我們希望找到一張圖像經過CNN網絡,傳播到指定的卷積核的時候,這張圖片可以使得該卷積核的得分最高。
  • 2019 語義分割指南
    of a Deep Convolutional Network for Semantic Image Segmentation (用於語義分割的弱監督和半監督的深度神經網絡)Fully Convolutional Networks for Semantic Segmentation (用於語義分割的全卷積神經網絡)
  • 語義分割領域開山之作:Google提出用神經網絡搜索實現語義分割
    Google 儼然已是圖像語義分割領域的高產霸主,Liang-Chieh 從 Deeplabv1- Deeplabv3+ 持續發力,還是 MobileNetV2 共同作者,如今在 NAS 領域開發處女地:基於 NAS 的語義分割模型,性能超過之前的基於 MobileNetV2 的 Network Backbone。2.
  • 圖像分割系列<->語義分割
    這期我們就來講講語義分割(Semantic Segmantation), 語義分割是指將圖像中的每一個像素都賦予一個類別標籤,用不同的顏色表示。 二、語義分割SegNet的來源 Segnet模型由Vijat Badrinarayanan, Alex Kendall, Roberto Cipolla在2015年發表, 在FCN的語義分割任務基礎上,搭建編碼器-解碼器對稱結構,實現端到端的像素級別圖像分割。
  • 從全卷積網絡到大型卷積核:深度學習的語義分割全指南
    By路雪 2017年7月14日  語義分割一直是計算機視覺中十分重要的領域,隨著深度學習的流行,語義分割任務也得到了大量的進步。本文首先闡釋何為語義分割,然後再從論文出發概述多種解決方案。本文由淺層模型到深度模型,簡要介紹了語義分割各種技術,雖然本文並沒有深入講解語義分割的具體實現,但本文簡要地概述了每一篇重要論文的精要和亮點,希望能給讀者一些指南。
  • 谷歌通過深度度量學習,提出新的語義實例分割方法
    它與目標檢測不同之處在於,輸出是表示每個對象的形狀的掩碼,而不僅僅是一個邊界框。而它與語義分割的不同之處在於,研究目標不僅僅是使用標籤(或背景)對每個像素進行分類,而且還要區分同一類別的各個實例。因此,標籤空間是沒有大小限制的(例如,假設有兩個人和一輛車,可能會標記「人-1」,「人-2」和「車-1」)。這個問題在諸如無人駕車、機器人、照片編輯等領域有許多實際應用。
  • 圖像語義分割之特徵整合和結構預測
    餘昌黔華中科技大學碩士研究方向為圖像語義分割知乎專欄https://zhuanlan.zhihu.com/semantic-segmentation前言近來閱讀了 PASCAL VOC 2012 排行榜上前幾的文章,包括 PSPNet 和林國省老師的幾篇論文,覺得現在在 semantic segmentation 領域對於 Multi-scale Features
  • CVPR 2019 Oral 論文解讀 | 無監督域適應語義分割
    該論文提出了一種從「虛擬域」泛化到「現實域」的無監督語義分割算法,旨在利用易獲取的虛擬場景標註數據來完成對標註成本高昂的現實場景數據的語義分割,大大減少了人工標註成本。 本文是論文作者之一羅亞威為雷鋒網 AI 科技評論提供的論文解讀。
  • 語義分割概念及應用介紹
    近年來,以深度學習為中心的機器學習技術引起了人們的關注。比如自動駕駛汽車已經逐漸成為可能,但在整個深度學習過程,需要算法識別和學習作為原始數據提供的圖像,在這一過程中,應用到了語義分割技術。下面讓我們來看看語義分割的需求是如何演變的。早期,計算機視覺的初始應用需求只是識別基本元素,例如邊緣(線和曲線)或漸變。
  • 語義分割中的深度學習方法全解:從FCN、SegNet到各版本DeepLab
    原標題:語義分割中的深度學習方法全解:從FCN、SegNet到各版本DeepLab 王小新 編譯自 Qure.ai Blog 量子位 出品 | 公眾號 QbitAI 圖像語義分割就是機器自動從圖像中分割出對象區域,並識別其中的內容
  • 2020入坑圖像分割,我該從哪兒入手?
    初識圖像分割顧名思義,圖像分割就是指將圖像分割成多個部分。在這個過程中,圖像的每個像素點都和目標的種類相關聯。圖像分割方法主要可分為兩種類型:語義分割和實例分割。語義分割會使用相同的類標籤標註同一類目標(下圖左),而在實例分割中,相似的目標也會使用不同標籤進行標註(下圖右)。
  • 人工智慧黑盒揭秘:深度神經網絡可視化技術
    雲腦科技自主研發的 Deepro 深度學習平臺利用可視化技術,集成了最前沿的各類深度神經網絡可視化組件,分析與顯化內部隱藏結構與模型輸出的關係,解決「黑盒」難題。深度神經網絡的可視化作為理解人工智慧系統的主要技術,模型可視化是一個由來已久而且寬泛的話題。模型可視化與數據可視化屬於不同的範疇,數據可視化通過降維,主成分分析等技術來分析數據的結構,模型可視化針對的是對機器學習模型本身的理解。
  • 如何用PyTorch進行語義分割?一個教程教會你
    正值PyTorch 1.7更新,那麼我們這次便給大家帶來一個PyTorch簡單實用的教程資源:用PyTorch進行語義分割。△圖源:stanford該教程是基於2020年ECCV Vipriors Chalange Start Code實現了語義分割,並且添加了一些技巧。
  • 入門| 一文了解什麼是語義分割及常用的語義分割方法有哪些
    我們已經開始發展自動駕駛汽車和智慧機器人,這些都需要深入理解周圍環境,因此精確分割實體變得越來越重要。什麼是語義分割?語義分割是計算機視覺中的基本任務,在語義分割中我們需要將視覺輸入分為不同的語義可解釋類別,「語義的可解釋性」即分類類別在真實世界中是有意義的。
  • 深度圖像識別-深層網絡的隱式語義數據擴增 ISDA 方法
    我們對幾種有競爭力的圖像分類基準進行了大量的實證分析,結果表明,ISDA 能夠有效地提高常用深度網絡的泛化性能,特別是在訓練數據較少和傳統增強技術的情況下。近年來,人們提出了幾種用於深度學習的魯棒損失函數。例如,Lqloss[16]是由負 Box-Cox 變換導出的交叉熵(CE)損失和平均絕對誤差(MAE)損失的一種平衡噪聲魯棒形。focus loss[17]將高權重附加到稀疏的硬示例集上,以防止大量簡單樣本主導網絡的訓練。在[18,19,20]中提出了引入較大的 CE 損耗裕度的想法。
  • 百度飛槳發布工業級圖像分割利器PaddleSeg
    機器之心發布機器之心編輯部近日,飛槳官方發布了工業級圖像分割模型庫 PaddleSeg,給開發者帶來誠意滿滿的三重超值驚喜:①一次性開源 15 個官方支持的圖像分割領域主流模型,大禮包帶來大滿足。②多卡訓練速度比對標產品快兩倍,工業級部署能力,時間節省超痛快。
  • ConvCRF:一種結合條件隨機場與CNN的高效語義分割方法 - 機器之心Pro
    語義分割等結構化預測任務可以從條件隨機場等概率圖模型獲取很多優勢,但由於條件隨機場的訓練速度及訓練難度,目前研究者基本上都僅使用卷積網絡進行處理。本文提出了一種卷積條件隨機場,它能以卷積運算的方式解決 CRF 的兩個大問題,並結合 CNN 實現更好的語義分割效果。語義圖像分割旨在為圖像中的每個像素生成分類標籤,是視覺感知中的一個重要任務。
  • 「計算機視覺必讀乾貨」圖像分類、檢測,語義分割等方法梳理
    新智元專欄 作者:張皓【新智元導讀】本文作者來自南京大學計算機系機器學習與數據挖掘所(LAMDA),本文直觀系統地梳理了深度學習在計算機視覺領域四大基本任務中的應用,包括圖像分類、定位、檢測、語義分割和實例分割。
  • 9102年了,語義分割的入坑指南和最新進展都是什麼樣的
    選自Medium作者:Derrick Mwiti機器之心編譯參與:Nurhachu Null,Geek AI語義分割指的是將圖像中的每一個像素關聯到一個類別標籤上的過程,這些標籤可能包括一個人、一輛車、一朵花、一件家具等等。
  • ECCV 2020 Oral | 蘇黎世聯邦理工學院提出:弱監督語義分割新網絡
    一、簡介如果閱讀過我之前關於弱監督語義分割(WSSS)的論文閱讀筆記的讀者,就一定知道弱監督語義分割從開始到現在的發展大致分為兩個階段。這兩個階段以CAM [1] 的出現為劃分節點。在CAM這個方法出現之前,WSSS的研究呈現百花齊放的狀態。這種狀態體現在兩個方面:弱監督標籤的多樣性:這一階段大家選擇的弱監督標籤是多樣化的。