【圖像分割】UNet網絡學習筆記

原論文:U-Net: Convolutional Networks for Biomedical Image Segmentation Olaf Ronneberger, Philipp Fischer, and Thomas Brox

一、研究背景

首先理解什麼是圖像分割。圖像分割是指把圖像分成各個具有相應特性的區域並提取出感興趣的目標的技術和過程。特性可以是灰度、顏色、紋理等;目標可以對應單個區域,也可以對應多個區域。如圖a爲原圖,圖b爲分割後的圖像。

CNN 用於生物醫學圖像存在着困難,因爲CNN常用於分類,並且訓練模型需要大規模的數據,但是生物醫學關注的是分割和定位任務,並且醫學圖像很難獲得大規模的數據。以往的解決方法是使用滑窗,滑窗滑過整個圖像,增大了訓練的數據量,並且完成了定位任務,但是前向傳播和反向傳播的速度會變慢,同時滑窗大小的選擇也會影響網絡的局部準確性和獲取上下文之間能力。FCN網絡通過卷積層的級聯,上層卷積得到的特徵圖用做下層卷積的輸入,感受野增大,獲取上下文的能力增強,提取到的特徵圖更好,再由反捲積層恢復得到分割圖,但得到的分割圖不夠精細,圖像過於模糊或平滑,沒有分割出目標圖像的細節。

UNet是爲解決生物醫學圖像方面的問題,對FCN的優化,它採用了Contracting-Expanding(Encoder-Decoder)的對稱結構,結構簡單有效。

U-Net利用了數據增強(Data Augmentation)的思想,最大限度的利用有限的數據集去訓練模型。

二、UNet網絡結構

1.整體結構

Unet網絡的典型特點是:

  • U型對稱結構。左側是下采樣層(編碼層),右側是上採樣層(解碼層)。原文的Unet結構中,編碼層有4層卷積池化層,解碼層有4層反捲積層。在實現的時,既可以從頭實現網絡,然後進行模型訓練;也可以借用現有網絡的卷積層結構(如VGG)和對應的已訓練好的權重文件,再加上後面的加碼層進行訓練計算,可以大大加快訓練的速度。
  • 每層編碼層與解碼層之間的級聯(concatenate)。上一層的特徵圖反捲積(特徵恢復)的結果,與同層編碼層的特徵圖連接,擴大圖像的通道數後,再對其進行卷積提取特徵,實現了編碼層和解碼層的特徵融合,有助於特徵恢復過程中保留圖像的更多細節。

2.下采樣層(編碼層)

編碼層由N個結構相同的卷積層L(i)級聯組成,L(i)包含兩個3x3卷積層和一個2x2最大池化層,經過L(i)後圖像通道數加倍。

其中卷積和池化的padding都是‘valid’(不補0),即只對圖像的有效部分進行窄卷積,得到圖像的有效特徵,因此得到的輸出圖像會比輸入圖像小。解決這個問題的方法是根據輸出圖像的大小應該等於原圖像大小(out_size=img_size),沿着網絡逆向計算出輸入圖像的大小in_size,對原圖像沿着四條邊進行鏡像擴大,作爲輸入圖像。圖中,輸出分割圖像的黃框與輸入圖像的黃框對應,輸入圖像中藍框的邊緣部分由於窄卷積丟失,最後的到輸出圖像中的黃框,因此輸出的分割圖像對應輸入圖像中原圖img的位置。

在編碼層與解碼層之間,用兩個3x3卷積層進行連接。

3.上採樣層(解碼層)

解碼層由N個結構相同的反捲積層L(i)級聯組成,L(i)包含一個2x2反捲積層和兩個3x3卷積層,經過L(i)後圖像通道減半。

每層解碼層會將反捲積恢復的特徵,與同層編碼層提取的特徵連接(concatenate),再進行卷積,實現了編碼層和解碼層的特徵融合,有助於特徵恢復過程中保留圖像的更多細節,使得到的分割圖像輪廓更清晰。如圖,在訓練左心室內外膜分割的UNet網絡時,c得到的特徵比b更接近標籤。

最後,解碼層連接一個1x1全卷積網絡,逐像素二分類,得到2個通道的輸出圖像。

三、關鍵技術

1.數據增強(Data Augmentation

本文的核心思想之一是數據增強。對於只有少量訓練樣本的問題,數據增強可以讓網絡學習到所需的不變性和魯棒性。

就作者文中用到的顯微圖像而言,需要旋轉和平移不變性,彈性形變和灰度值變化魯棒性。爲此作者的解決思路是使用變形模型對圖像進行空間變形,以獲取更多的原始數據。

  • 本文在3x3的網格上,使用符合高斯分佈的10像素變形向量來進行變形,使用雙三次插值來計算每個像素的位移;
  • 在下采樣路徑的最後加入了Drop-Out方法,進一步隱式的擴充數據集。

DropOut的意思是, 在訓練過程中, 每次隨機選擇一部分節點不要去"學習" 。這樣做的原理是什麼呢?

從樣本數據的分析來看,數據本身是不可能很純淨的,即任何一個模型不能100%把數據完全分開, 在某一類中一定會有一些異常數據, 過擬合的問題恰恰是把這些異常數據當成規律來學習了。對於模型來講,我們希望它能夠有一定的“智商”,把異常數據過濾掉, 只關心有用的規律數據。

異常數據的特點是,它與主流樣本中的規律都不同, 但是量非常少,相當於在一個樣本中出現的概率比主流數據出現的概率低很多。我們就是利用這個特性, 通過在每次模型中忽略一些節點的數據學習,將小概率的異常數據獲得學習的機會降低, 這樣這些異常數據對模型的影響就會更小了。

2.無縫拼接(seamless tiling)

爲了使得輸出的分割圖無縫拼接重要的是選擇輸入塊的大小,使編碼層中所有的 2×2 的池化層都可以應用於長寬(x_size,y_size)是偶數的特徵圖。一個比較好的方法是從最底層的分辨率從反向推到,例如原文網絡中最小的是32×32,沿着編碼路徑的反向進行推導可知,輸入圖像的尺寸應該爲 572×572。這樣在處理輸入圖像時同樣用到上文提到的鏡像操作。

3.預計算網絡權重(weight initialization

權值的初始化好壞程度會影響模型的效果以及訓練時間,因爲隨着網絡層數的增加,訓練過程中會出現梯度消失的問題,這導致深層的網絡參數無法被有效地訓練。理想的權值初始化是使得網絡中的每一個特徵圖方差都接近1。

在U-Net中,可以通過高斯分佈隨機生成網絡權值,高斯分佈的均方差爲\sqrt{\tfrac{2}{N}},其中N爲前一神經層的輸入節點數,例如。 上一層是3x3卷積和64個特徵通道,N = 9·64 = 576

4.損失函數加權(weight map)

損失函數是交叉熵損失函數,其中需要注意的是這裏的損失函數有加權w(x),對於每一個像素點有着自己的權重。

每一個像素在損失函數中的權值w(x)需要預先計算,這種方法補償了訓練數據中每類像素出現的頻率差異,並且使網絡更注重學習分割的邊緣。

w(x)使用形態學運算,特徵圖的計算方法如下:

其中的w_{c}(x)是用於平衡類別頻率的權重圖,d_{1}是該像素點到最近的細胞邊界的距離;d_{2}是該像素點到第二近的細胞邊界的距離。作者的實驗中,w_{0}=10,將 \sigma \approx 5 pixels

如圖a是顯微圖原圖,c是細胞分割的標籤,d是計算得到的特徵圖w(x)。可以看到,w(x)在細胞分割邊界的值更大,使網絡更注重學習分割的邊緣。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章