論文筆記:用於醫學圖像分割的卷積網絡(U-net)

摘要

  • 本文中提出了一種網絡結構的訓練策略,它依賴於充分利用數據增強技術來更高效的使用帶有標籤的數據。
    在U-Net結構中,包括一個捕獲上下文信息的收縮路徑和一個允許精確定位的對稱拓展路徑。這種方法可以使用非常少的數據完成端到端的訓練,並獲得最好的效果。

介紹

  • 卷積網絡的典型用途是分類任務,其中圖像的輸出是單個類別標籤。 然而,在許多視覺任務中,尤其是在生物醫學圖像處理中,期望的輸出應該包括定位,即,應該將類標籤分配給每個像素。(也就是分割)
  • Ciresan等人用滑動窗口取像素像素周圍的局部區域倆訓練網絡,訓練數據遠遠大於訓練圖像的數量。
  • 本文提出一種新的完全卷積網絡,即U-Net網,主要思想是在收縮網絡的後面補充一個與前面類似的網絡,其中池化運算符由上採樣運算符替換。因此,這些層增加了輸出的分辨率。為了定位,從收縮路徑的高分辨率特徵與上採樣輸出相結合。然後,連續卷積層可以學習基於該信息組裝更精確的輸出。
  • 作者提出U-Net的本意是將其用於醫學圖像分割,在以往的CNN中,想將其用於醫學圖像存在兩個困難:
  1. 通常CNN都是應用於分類,生物醫學圖像更關注的是分割以及定位的任務;
  2. CNN需要獲取大量的訓練數據,而醫學圖像很難獲得那麼大規模的數據。
  • 以往解決上面兩點困難的方法是使用滑窗的方法,為每一個待分類的像素點取周圍的一部分鄰域輸入。這樣的方法有兩點好處,首先它完成了定位的工作,其次因為每次取一個像素點周圍的鄰域,所以大大增加了訓練數據的數量。但是這樣的方法也有兩個缺點,首先通過滑窗所取的塊之間具有較大的重疊,所以會導致速度變慢;其次是網絡需要在局部準確性和獲取上下文之間進行取捨。因為更大的塊需要更多的池化層進而降低了定位的準確率,而小的塊使網絡只看到很小的一部分上下文。

U-Net

  • 在本文中,作者修改並擴展了FCN網絡結構,使它在使用少量的數據進行訓練的情況下獲得精確的分割結果,具體結構示意圖如下所示:
論文筆記:用於醫學圖像分割的卷積網絡(U-net)

  • 在上圖中,每一個藍色塊表示一個多通道特徵圖,特徵圖的通道數標記在頂部,X-Y尺寸設置在塊的左下邊緣。不同顏色的箭頭代表不同的操作。圖的左半部分是收縮路徑,右半部分是擴展路徑。
  • 其中需要注意的是,每經過一次上採樣都會將通道數減半,再與收縮路徑對應的特徵圖進行拼接。在拼接之前進行 crop 是必要的(例如在上圖中,6464大與5656,為了使這兩個特徵圖能夠順利拼接,取6464中間部分5454的大小,然後拼接),因為兩者的尺寸並不相同(主要是因為 valid conv 造成的)。最後一層使用1 X 1大小的卷積核,將通道數降低至特定的數量(如像素點的類別數量)。
  • 網絡對於輸入的大小也是有要求的。為了使得輸出的分割圖無縫拼接,重要的是選擇輸入塊的大小,以便所有的2 X 2的池化層都可以應用於偶數的 x 層和 y 層。一個比較好的方法是從最下的分辨率從反向推到,比如說在網絡結構中,最小的是32 X 32,沿著收縮路徑的反向進行推導可知,輸入圖像的尺寸應該為572×572。

FCN與U-net的區別

  • FCN的主要思想是使用連續的層補充通常的收縮網絡,在判別輸出的位置添加上採樣層,這些層增加了輸出層的分別率,為了定位。來自於收縮路徑的高分別率與上採樣輸出相結合,基於這個信息,一個連續的卷積層可以學習組裝更精確的輸出。(關於FCN詳細內容可以參考我的上一篇文章:論文筆記:用於語義分割的全卷積網絡 (fully convolutional networks for semantic segmentation))
  • 而U-net與FCN的不同在於,U-net的上採樣依然有大量的通道,這使得網絡將上下文信息向更高層分辨率傳播,作為結果,擴展路徑與收縮路徑對稱,形成一個U型的形狀(如上圖所示)。 網絡沒有全連接層並且只是用每一個卷積層的有效部分。

Overlap-tile

  • 作者在文中介紹了一種Overlap-tile策略,使得任意大小的輸入圖像都可以獲得一個無縫分割,因為輸出的分割圖它包含的像素點,它們的周圍像素點(上下文)都出現在了輸入圖像中,因此使用Overlap-tile策略對數據進行預處理是有必要的。
  • Overlap-tile策略的過程具體如下所示:
論文筆記:用於醫學圖像分割的卷積網絡(U-net)

  • 上圖是針對任意大小的輸入圖像的無縫分割的 Overlap-tile 策略。如果我們要預測黃色框內區域(即對黃色的內的細胞進行分割,獲取它們的邊緣),需要將藍色框內部分作為輸入,如果換色區域在輸入圖像的邊緣的話,那麼缺失的數據使用鏡像進行補充。如上圖左邊圖像所示,輸入圖像周圍一圈都進行了鏡像補充。
  • 因為進行的是valid卷積,即上下文只取有效部分,可以理解為padding為0,卷積之後的圖像尺寸會改變,所以需要取比黃色框大的圖像來保證上下文的信息是有意義的,缺失的部分用鏡像的方法補充是填充上下文信息最好的方法了。這種方法通常需要將圖像進行分塊的時候才使用。
  • 那麼為什麼要對圖像分塊,不輸入整張圖像呢?因為內存限制,有的機器內存比較小,需要分塊輸入。但比之前的滑窗取塊要好很多,一方面不用取那麼多塊,另一方面塊之間也沒有那麼大的區域重疊。通過Overlap-tile 策略可以將圖像分塊輸入,否則的話就只能對圖像進行 resize 了,但是這樣會降低輸入圖像的分辨率。
  • 此外,如果數據不夠的話可以應用彈性形變,對數據進行增強,增加數據量,這允許網絡可以學習到這種形變的不變形,並且並不要求帶有原始預料庫進行到這樣的變化(指彈性形變)。

細胞分割

  • 進行細胞的分割,另一種挑戰是同一類物體的分類,如下圖所示:
論文筆記:用於醫學圖像分割的卷積網絡(U-net)

  • 上圖是用DIC(二次干涉對比)顯微技術記錄的玻璃上的 HeLa 細胞。其中圖 (a) 是原始圖像;圖 (b) 是基於 gt 的分割覆蓋。其中不同的顏色表示不同的 HeLa 細胞示例。圖 (c) 是生成的分割掩膜,其中白色部分是前景,黑色部分是後景;圖 (d) 是像素級損失權重圖,使得網絡強制學習邊緣像素。
  • + 為了解決這個問題,作者使用加權損失,對於位與細胞接觸部分的像素加大權重,如圖 (d) 中的紅色的部分。

Training(訓練)

  • 作者使用caffe框架,並採用帶動量的SGD方法,其中動量的值設為 momentum=0.99。動量設這麼大的原因是這樣可以使用大量先前看到的訓練樣本確定當前最優步驟的更新(因為動量的原理就是用先前很多步的狀態確定下一步的方向)。相比於大的batchsize,作者喜歡大的input tiles(指的是over-tile)中的那種圖像塊,因此我們可以將一個batch縮小為一個單張圖片的輸入。
  • 能量函數通過結合交叉熵損失函數的最後特徵圖上的像素級 soft-max 值來計算,通常多分類問題用soft-max函數作為輸出,二分類問題用sigmoid函數作為輸出,
    其中 soft-max 的計算方法如下:
論文筆記:用於醫學圖像分割的卷積網絡(U-net)

  • 其中 αk(x)代表在位置 x 處的像素在特徵圖中的第 k 層的激活值,其中 x∈Ω,,Ω⊂Z^2 ,即 x 屬於空間 Ω,而空間 Ω是整數集合Z^2的子集。K 是像素點的類別總數,p_k(x)是近似最大函數。這裡面的定義和我們平時使用的 sift-max 是一樣的。損失函數是交叉熵損失函數,或者也可以成為 log-likelihood,具體如下所示
論文筆記:用於醫學圖像分割的卷積網絡(U-net)

  • 其中需要注意的是這裡使用的是加權的損失函數,對於每一個像素點有著自己的權重,這點可以在上面的細胞圖中看到。
  • 我們通過預先計算權重圖來獲得每一個像素在損失函數中的權值,這種方法補償了訓練數據每類像素的不同頻率,並且使網絡更注重學習相互接觸的細胞的邊緣。
  • 分割邊界使用形態學運算,特徵圖的計算方法如下:
論文筆記:用於醫學圖像分割的卷積網絡(U-net)

  • 其中的 w_c是用於平衡類別頻率的權重圖,d_1是該像素點到最近的細胞邊界的距離;d_2是該像素點到第二近的細胞邊界的距離。在我們的實驗中,將 w0設置為10,將σs設置為大約 5 個像素。
  • 權值的初始化對於模型的正確訓練起著很大的作用,一個好的初始化應該保證網絡中的每一個特徵圖有近似的單位方差。在這裡使用服從標準差為√2/N 的高斯分佈來進行初始化(實際上就是 He normal),其中的 N 代表著一個神經元的傳入節點的數目,比如說某一個卷積層,他的卷積核的大小為 3×3,通道數是 64,那麼 N=9×64=576。
  • Data Augmentation(數據增強/擴充)
  • 當只有少量訓練樣本的時候,對於讓網絡學習到所需的不變形和魯棒性來說,數據增強是必要的。
  • 顯微鏡圖像一般需要旋轉平移不變性,彈性形變和灰度值變化魯棒性。訓練樣本的隨機性變形似乎是訓練之後少量標註圖像的分割網絡的關鍵。
  • 此外在本文中,早收縮路徑的最後加入了Drop-out,隱式的加強了數據增強。

總結

  • 本文提出了很多數據預處理的技巧,有較強的實用性。

本文的創新點

  1. 提出了U-net這種網絡結構。它同時具備捕捉上下文信息的收縮路徑和允許精確定位的對稱擴展路徑,並且與FCN相比,U-net的上採樣過程依然有大量的通道,這使得網絡將上下文信息向更高層分辨率傳播。
  2. Overlap-tile 策略,這種方法用於補全輸入圖像的上下信息,可以解決由於現存不足造成的圖像輸入的問題。
  3. 使用隨機彈性變形進行數據增強。
  4. 使用加權損失。預先計算權重圖,一方面補償了訓練數據每類像素的不同頻率,另一方面是網絡更注重學習相互接觸的細胞間邊緣。

但是上面的這些創新點並不適合所有任務,比如說對剛體進行分割,那麼久很難通過彈性變形對數據進行增強。

本文學到的一些實用的技巧

  1. 因為使用了 valid conv ,所以採用 Overlap - tile 策略補充圖像,其中空白的部分用鏡像的方法進行補充;
  2. 因為有池化層,因此要保證輸入的圖像在經過每一次池化的時候都要是邊長偶數。這點與一般的卷積神經網絡不同,因為一般的網絡會使用 padding ,這樣會保證卷積前後的大小不變,但是 valid conv 會使卷積後的尺寸變小,所以要特別注意輸入圖像的尺寸。一個比較好的方法是從最小分辨率出發沿收縮路徑的反方向進行計算,得到輸入圖像的尺寸。
  3. 預先計算權重圖,以此計算後面的加權損失函數;
  4. 加權損失的權重中有一部分是經驗值,因此對於不同的任務可以進行調整(只是理論上可以進行調整,並沒有試驗過);
  5. 使用標準差為√2/N的高斯分佈來進行權值初始化,其中需要注意的是,對於不同的卷積層,N 的大小也是不同的。
  6. 在收縮路徑的最後部加入了 dropout ,隱式地加強了數據增強。

一些疑惑

  • 為什麼加入 dropout 後可以對數據進行增強?
  • 反捲積(上採樣)的具體過程是怎麼樣的?
  • 彈性形變數據增強具體是如何對數據增強的?

參考

  • 論文原文:U-Net: Convolutional Networks for Biomedical Image Segmentation
  • CSDN-獨孤呆博:論文精讀及分析:U-Net: Convolutional Networks for Biomedical Image Segmentation

微信搜索公眾號:輪子工廠。機器學習 | 數據結構與算法 | 源碼分析 | 資源與工具分享

後臺回覆關鍵字:

1.回覆【圖書】:獲取15本新手自學編程,零基礎入門經典學習教材;

2.回覆【我要造輪子】:獲取100多本我根據知乎上面關於計算機問題的高贊回答裡面的介紹整理出來的書籍;

3.回覆【開發工具】:獲取幾大主流編程語言的開發工具~

4.回覆【ps教程】:獲取ps視頻免費教程;

5.回覆【內推】:可幫你內推到大廠工作。


分享到:


相關文章: