【Semantic Segmentation】U-Net: Convolutional Networks for Biomedical Image Segmentation 論文解析(轉)


0. 前言

  今天讀了U-Net覺得很不錯,同時網上很多很好很詳細的講解,因此就不再自己寫一個overview了,互聯網的意義就是給了我們相互學習,相互借鑒的黃金機會(懶惰完美的接口)。

1. 第一篇

1. 按論文章節回顧具體內容

1. Abstract

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

1. Introduction

  CNN 存在很久了,但是一直受限於過大的數據量和神經網絡的規模,並沒有獲得很大的成功,直至 Krizhevsky 才開始爆發。但是將 CNN 用於生物醫學圖像存在着兩點困難,首先CNN常用於分類,但是生物醫學往往關注的是分割之類的定位任務;其次醫學圖像很難獲得那么大規模的數據。

  以往解決上面兩點困難的方法是使用滑窗的方法,為每一個待分類的像素點取周圍的一部分鄰域輸入。這樣的方法有兩點好處,首先它完成了定位的工作,其次因為每次取一個像素點周圍的鄰域,所以大大增加了訓練數據的數量。但是這樣的方法也有兩個缺點,首先通過滑窗所取的塊之間具有較大的重疊,所以會導致速度變慢(由FCN的論文分析可知,前向傳播和反向傳播的速度都會變慢);其次是網絡需要在局部准確性和獲取上下文之間進行取舍。因為更大的塊需要更多的池化層進而降低了定位的准確率,但是小的塊使網絡只看到很小的一部分上下文。現在一種常見的作法是將多個層放在一起進行考慮(比如說FCN)。

  我們修改並延展了 FCN 的網絡結構,使之在僅使用少量的數據進行訓練的情況下獲得精確的分割結果,具體結構如下圖所示
在這里插入圖片描述
              圖 1 U-net 網絡結構圖

如上圖所示,這里我們假設U- net 的最低分辨率為 32*32。每一個藍色的塊代表一個多通道的特征圖。特征圖的通道數被標注在塊的頂部。X-Y尺寸設置在塊的左下邊緣。箭頭代表着不同的操作。其中左半部分是收縮路徑,右半部分擴展路徑

  FCN的主要思想是使用連續的層補充通常的收縮網絡,其中的池化層被上采樣層取代。因此這些曾增加了輸出層的分辨率。為了定位,來自收縮路徑的高分辨率與上采樣輸出相結合。基於這個信息,一個連續的卷積層可以學習組裝(集成)更精確的輸出。

  U-net 與 FCN 的不同在於,U-net 的上采樣依然有大量的通道,這使得網絡將上下文信息向更高層分辨率傳播。作為結果,擴展路徑多多少少與收縮路徑對稱,形成一個U的形狀。網絡沒有全連接層並且只是用每一個卷積層的有效部分,例如分割圖(指圖像的輸出)只包含這樣的一些像素點,它們的上下文(它周圍的像素點)都出現在了輸入圖像中。這種策略使得我們通過一個 Overlap-tile 策略可以使得任意大小的輸入圖像都可以獲得一個無縫分割。

  Overlap-tile 策略如下圖所示
在這里插入圖片描述
                圖2 Overlap-tile 策略示意圖

上圖是針對任意大小的輸入圖像的無縫分割的 Overlap-tile 策略。如果我們要預測黃色框內區域(即對黃色的內的細胞進行分割,獲取它們的邊緣),需要將藍色框內部分作為輸入。缺失的數據使用鏡像進行補充。因為進行的是 valid 卷積(即上文講的只取有效部分,可以理解為 0 padding),所以需要取比黃色框大的圖像來保證上下文的信息是有意義的,缺失的部分用鏡像的方法補充是填充上下文信息最好的方法了~

  或許你會有一個問題,為什么作為一種全卷積神經網絡不直接輸入整張圖像,還在做分塊呢?答案是因為內存限制,需要分塊輸入。雖然還是要分塊處理,但比之前的滑窗取塊要好很多,一方面不用取那么多塊,另一方面塊之間也沒有那么大的區域重疊。通過Overlap-tile 策略可以將圖像分塊輸入,否則的話就只能對圖像進行 resize 了,但是這樣會降低輸入圖像的分辨率。

  應用彈性形變進行大量的數據增強。這允許網絡可以學習到這種形變的不變性,並且並不要求在帶有標簽的原始語料庫進到這樣的變化(指彈性形變)。

  進行細胞的分割,另一種挑戰是同一類物體的分類,如下圖所示
在這里插入圖片描述
                  圖3 .像素點分類權重示意圖

上圖是用DIC(二次干涉對比)顯微技術記錄的玻璃上的 HeLa 細胞。其中圖 (a) 是原始圖像;圖 (b) 是基於 gt 的分割覆蓋。其中不同的顏色表示不同的 HeLa 細胞示例。圖 © 是生成的分割掩膜,其中白色部分是前景,黑色部分是后景;圖 (d) 是像素級損失權重圖,使得網絡強制學習邊緣像素。

  為了解決這個問題,作者使用加權損失,對於位與細胞接觸部分的像素加大權重,如圖 (d) 中的紅色的部分。

2. Network Architecture

  網絡結構就是最上面的那張圖,其中需要注意的是,每經過一次上采樣都會將通道數減半,再與收縮路徑對應的特征圖進行拼接。在拼接之前進行 crop 是必要的,因為兩者的尺寸並不相同(主要是因為 valid conv 造成的)。最后一層使用 1 × 1 1\times1 大小的卷積核,將通道數降低至特定的數量(如像素點的類別數量)。

  網絡對於輸入的大小也是有要求的。為了使得輸出的分割圖無縫拼接,重要的是選擇輸入塊的大小,以便所有的 2 × 2 2\times2 的池化層都可以應用於偶數的 x 層和 y 層。一個比較好的方法是從最下的分辨率從反向推到,比如說在網絡結構中,最小的是 32 × 32 32\times32 ,沿着收縮路徑的反向進行推導可知,輸入圖像的尺寸應該為 572 × 572 572\times572

3. Training

  作者使用 caffe 框架,並且采用帶動量的SGD方法,其中動量的值設為 m o m e n t u m = 0.99 momentum=0.99 。動量設這么大的原因是這樣可以使用大量先前看到的訓練樣本確定當前最優步驟中的更新。相比於大的 batchsize,作者喜歡大的 input tiles (指的是 oveelap-tile)中的那種圖像塊,因此我們可以將一個 batch 縮小為一個當張圖片的輸入。

  能量函數通過結合交叉熵損失函數的最后特征圖上的像素級 soft-max 值來計算。其中 soft-max 的計算方法如下

其中 α k ( x ) \alpha_k(x) 代表在位置 x 處的像素在特征圖中的第 k 層的激活值,其中 x Ω Ω Z 2 x\in\Omega,\Omega\subset Z^2 ,即 x 屬於空間 Ω \Omega ,而空間 Ω \Omega 是整數集合 Z 2 Z^2 的子集。K 是像素點的類別總數, p k ( x ) p_k(x) 是近似最大函數。這里面的定義和我們平時使用的 sift-max 是一樣的。損失函數是交叉熵損失函數,或者也可以成為 log-likelihood,具體如下所示

其中需要注意的是這里使用的是加權的損失函數,對於每一個像素點有着自己的權重,這點可以在圖 3 中看到。

  我們通過預先計算權重圖的來獲得每一個像素在損失函數中的權值,這種方法補償了訓練數據每類像素的不同頻率,並且使網絡更注重學習相互接觸的細胞間的邊緣。

  分割邊界使用形態學運算,特征圖的計算方法如下

其中的 w c w_c 是用於平衡類別頻率的權重圖, d 1 d_1 是該像素點到最近的細胞邊界的距離; d 2 d_2 是該像素點到第二近的細胞邊界的距離。在我們的實驗中,將 w 0 w_0 設置為10,將 σ \sigma s設置為大約 5 個像素。

  初始化對於模型的正確訓練起着很大的作用,一個好的初始化應該保證網絡中的每一個特征圖有近似的單位方差。在這里使用服從標准差為 2 / N \sqrt{2/N} 的高斯分布來進行初始化(實際上就是 He normal),其中的 N 代表着一個神經元的傳入節點的數目,比如說某一個卷積層,他的卷積核的大小為 3 × 3 3\times3 ,通道數是 64,那么 N = 9 × 64 = 576 N = 9\times64=576

3.1 Data Augmentation

  當只有少量的訓練樣本,對於讓網絡學習到所需的不變性和魯棒性來講,數據增強是必要的。這里尤其需要注意的是,這里指的少量數據樣本究竟少到一種什么樣的程度,就 IBSI 2012 數據集來講,它僅僅有 30 張 512 × 512 512 \times512 的圖像作為訓練集!

  顯微圖像一般需要旋轉平移不變性,彈性形變和灰度值變化魯棒性。訓練樣本的隨機彈性形變似乎是訓練之后少量標注圖像的分割網絡的關鍵。

  此外在收縮路徑的最后加入了 Drop-out,隱式地加強了數據增強。

2. 論文歸納總結

  與其說這是一篇論文,我更認為這一篇很實用的打怪升級刷比賽的指南。里面提出的很多技巧是令我眼前一亮,並且具有較強的使用價值的。

2.1 本文的創新點

  我認為本文主要有四個創新點

   (1) 提出了 U-net 這種網絡結構。它同時具有捕捉上下文信息的收縮路徑和允許精確定位的對稱擴展路徑;並且與 FCN 相比,U-net 的上采樣依然有大量的通道,這使得網絡將上下文信息向更高層分辨率傳播。

   (2) Overlap-tile 策略。這種方法用於補全輸入圖像的上下文信息,可以解決由於現存不足造成的圖像分塊輸入的問題。

   (3) 使用隨機彈性形變進行數據增強。

   (4) 使用加權損失。預先計算權重圖,一方面補償了訓練數據每類像素的不同頻率,另一方面使網絡更注重學習相互接觸的細胞間的邊緣。

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

2.2 實踐中需要注意的技巧

  (1) 因為使用了 valid conv ,所以采用 Overlap - tile 策略補充圖像,其中空白的部分用鏡像的方法進行補充。

   (2) 因為有池化層,因此要保證輸入的圖像在經過每一次池化的時候都要是邊長偶數。這點與與一般的卷積神經網絡不同,因為一般的網絡會使用 padding ,這樣會保證卷積前后的大小不變,但是 valid conv 會使卷積后的尺寸變小,所以要特別注意輸入圖像的尺寸。一個比較好的方法是從最小分辨率出發沿收縮路徑的反方向進行計算,得到輸入圖像的尺寸。

   (3) 預先計算權重圖,以此計算后面的加權損失函數

   (4) 加權損失的權重中有一部分是經驗值,因此對於不同的任務可以進行調整(只是理論上可以進行調整,並沒有試驗過)

   (5) 使用標准差為 2 / N \sqrt{2/N} 的高斯分布來進行初始化,其中需要注意的是,對於不同的卷積層,N 的大小也是不同的。

   (6) 在收縮路徑的最后部加入了 dropout ,隱式地加強了數據增強。

        </div>

2. 第二篇

論文題目:U-Net: Convolutional Networks for Biomedical Image Segmentation

論文地址:https://arxiv.org/pdf/1505.04597v1.pdf

本論文主要亮點:

(1)改進了FCN,把擴展路徑完善了很多,多通道卷積與類似FPN(特征金字塔網絡)的結構相結合。

(2)利用少量數據集進行訓練測試,為醫學圖像分割做出很大貢獻。

由於文章比較短,我在這里先貼出主要翻譯:

 

摘要

訓練DNN需要很多數據,這是業內公認。本文提出了一種網絡結構和一種訓練策略,訓練策略基於對數據增強方法的使用,以便對有限的標記樣本進行充分利用。

1、 簡介

該結構包含一個用於捕捉語義的收縮路徑和一個用於精准定位的對稱擴展路徑。該網絡只使用少量數據,就可以訓練出一個端對端(圖像入,圖像出)網絡,並且性能很好(跑贏使用滑窗法的CNN方法,該方法之前是基於)。我們的結構在透射光顯微鏡圖像數據集上獲得了ISBI2015關鍵。我們的結構速度也非常快,處理一副512*512的圖像,在最新的GPU上不到1s。

CNN之前一直面臨的困境有兩方面的原因,一是沒有足夠的標記數據,二是人們使用的網絡規模一直很小。

Krizhevsky在ImageNet數據集上使用了8層CNN和百萬級別的參數數量,同時他使用的訓練集規模也在百萬。他之后CNN的網絡規模越來越大。

過去在CNN用於分類任務時,人們只能圖像輸入,標簽輸出,但是在許多視覺任務中,比如生物醫學圖像處理中,人們希望得到針對每個像素的分類結果,還有,獲取大量的醫學圖像數據用於訓練是不可能的。

因此,Ciresan訓練了一種滑窗網絡用來預測每個像素的標簽,該網絡的輸入是以像素為中心的一個區域。

該網絡的優點有: 
1、網絡具有局部感知能力 
2、用於訓練的樣本數量遠大於訓練圖像的數量 
該網絡獲得了EM分割挑戰 ISBI2012冠軍。

該網絡的缺點有: 
1、對於每個patch(以像素為中心的區域)都要運行一次檢測,所以速度很慢,並且由於patch的重疊,所以有很多運行都是多余的 
2、必須在局部標記准確性和語義的確定之間進行權衡,大的patch需要更多的池化層,但是池化層降低了局部標記的准確性,而小的patch無法獲得充分的語義信息

本文中我們的設計基於一種更加優雅的結構,FCN,我們對這種結構進行了一定的修改和拓展,以使其使用更少的訓練圖像,產生更高精度的分割。

FCN的主要思想是對常規的收縮網絡進行補充,補充的內容是連續的layer,在這些層中,池化操作被上采樣操作代替。因此,這些層提高了輸出的解析度(resolution)。為了局部化(圖像局部像素的label一樣),將從收縮網絡得到的高維特征與上采樣的結果相結合,這樣連續的卷積層就能從這種結合中匯聚更加准確的輸出。

我們對FCN的重要改進之一是在上采樣部分,我們也有大量的feature channels,這些feature channel允許網絡將范圍信息(context)傳播到高分辨率層擴展層或多或少對稱於收縮層產生了一個U型的結構。該網絡不包含任何全連接層,只使用每次卷積的有效部分,如,分割映射只包含像素,后面的高維特征包含全部語義信息。該方法允許任意大小的圖像通過overlap-tile策略進行無縫分割。overlap-tile策略就是,要預測一個batch的標簽,你必須輸入比之大的一個框的圖像,輸入圖像沒有的部分,用鏡像法外推。這種策略對於將網絡應用於大型圖像是有非常重要的意義的,否則可能會受到GPU內存的限制。

我們的任務中訓練數據非常少,所以我們對僅有的數據進行彈性形變操作,以獲得更多的數據。這樣使得網絡可以學習到形變特征。生物醫學圖像形變非常常見。【他們的這種方法等於加入了額外特征】數據增強的的學習不變性數據已經發表在Dosovitskiy的論文中,在非監督特征學習那部分。

另一個挑戰是分割開連在一起的同種細胞,最終,我們提出使用加權損失,這樣分離*連在一起的細胞的label功能*獲得更大的權重。

我們的方法在比賽中拿了頭籌。

2、 網絡結構

收縮路徑就是常規的卷積網絡,它包含重復的2個3x3卷積,緊接着是一個RELU,一個max pooling(步長為2),用來降采樣,每次降采樣我們都將feature channel減半。擴展路徑包含一個上采樣(2x2上卷積),這樣會減半feature channel,接着是一個對應的收縮路徑的feature map,然后是2個3x3卷積,每個卷積后面跟一個RELU,因為每次卷積會丟失圖像邊緣,所以裁剪是有必要的,最后來一個1x1的卷積,用來將有64個元素的feature vector映射到一個類標簽,整個網絡一共有23個卷積層。

為了允許對最終的分割map**無縫tile**,選擇輸入tilesize非常重要因為這樣所有的2x2的max池化操作應用到偶數x和y

3、訓練

輸入圖像和他們對應的分割map用來訓練網絡,用得方法是SGD,框架是caffe。由於unpadded卷積,輸入圖像大於輸出圖像,大一個border width常數。為了降低系統消耗,並且最大利用GPU memory,我們對大batch使用了大的輸入tiles,因此降低了單圖像的batch。對應地,我們使用了一個高的momentum(0.99),這樣大量的訓練數據決定當前優化步驟的更新。

能量函數是用softmax函數計算最后一步算出的feature map,該feature map用交叉熵損失函數處理,再用softmax。 
softmax公式如下: 


ak(x)表示每一像素點(x)對應特征通道(k)的得分 
K是類的數量 ,pk(x)是類k的對像素點x的分類結果 
然后交叉熵對於每個像素點的進行懲罰,懲罰所用的公式為: 


是每個像素的真實標簽 
是之前介紹的權重圖,用來讓某些像素更加重要

 

我們預先計算每個真實樣本的權重圖,以補償訓練數據集中某個類的像素的不同頻率,並強制網絡學習我們在接觸的細胞之間引入的小分離邊界。

分離邊界是用形態學operation計算的,然后使用以下公式計算權重圖:

 

 

ωc:Ω→R是用來平衡類頻率的權重圖 
d1:Ω→R表示到背景的某個像素點到最近細胞邊界的距離 
d2:Ω→R表示到背景的某個像素點到第二近的細胞邊界的距離 
經過實驗,我們將的設置為ω0=10,σ≈5個像素

權重初始化相當重要,我們使用高斯分布初始化權重,標准差為,其中N表示一個神經元的輸入節點是的數量,如,對於一個3x3的卷積,前一層有64個feature channel,那么N=3∗3∗64=576

3.1、數據增強

當只有一點點訓練數據的時候,數據增強就是必要的,它可以教給網絡什么是任務所需的不變的東西,什么是需要學習的屬性,例如顯微鏡圖像,我們初期要做平移、旋轉不變性的復制,還有變形的健壯性,以及灰度值差異(亮度)。尤其是對訓練數據進行隨機形變,感覺這是在用少量訓練數據做數據增強時的核心方法。我們使用隨機位移矢量在粗糙的3×3網格上生成平滑變形。位移矢量是從標准差為10的高斯分布中采樣的。然后使用雙三次方插值計算每個像素位移。 收縮路徑末端的dropout層執行進一步的隱式數據增強。

4、實驗

實驗部分就是一些表格,對比了不同算法在一些數據集上的表現,這里就不一一列出了。

5、結論

u-net架構在不同的生物醫學分割應用中實現了非常好的性能。 由於具有彈性變形的數據增強功能,它只需要很少的注釋圖像,並且在NVidia Titan GPU(6 GB)上的訓練時間非常短,只需要10個小時。 我們提供完整的Caffe 實現和訓練好的網絡。 我們相信,u-net架構可以輕松應用於更多的任務。

 

這里做出幾點解析:

(1)文中所說的Ciresan訓練了一種滑窗網絡的定位准確性和上下文間不可兼得問題:

       因為大的patches需要更多的max-pooling層這樣減小了定位准確性(為什么?因為你是對以這個像素為中心的點進行分類,如果patch太大,最后經過全連接層的前一層大小肯定是不變的,如果你patch大就需要更多的pooling達到這個大小),因為Pooling層會降低分辨率,丟失信息),而小的patches只能看到很小的局部信息,包含的背景信息不夠。許多現在的方法使用不同層的特征來同時兼容定位和利用context。

 

(2)網絡結構中的一些問題:

      右邊的網絡expansive path:使用上采樣與左側contracting path ,pooling層的featuremap相結合,然后逐層上采樣到392X392的大小heatmap。(pooling層會丟失圖像信息和降低圖像分辨率且是不可逆的操作,對圖像分割任務有一些影響,對圖像分類任務的影響不大,為什么要做上采樣?:因為上采樣可以補足一些圖片的信息,但是信息補充的肯 定不完全,所以還需要與左邊的分辨率比較高的圖片相連接起來(直接復制過來再裁剪到與上采樣圖片一樣大小),這就相當於在高分辨率和更抽象特征當中做一個折中,因為隨着卷積次數增多,提取的特征也更加有效,更加抽象,上采樣的圖片是經歷多次卷積后的圖片,肯定是比較高效和抽象的圖片,然后把它與左邊不怎么抽象但更高分辨率的特征圖片進行連接),我在這里有一個想法,可不可不做串聯(concat),將左邊復制裁剪后的特征與右邊相對於的特征做elementwise操作會怎么樣? 

 

(3)網絡輸出與Loss問題


       網絡在擴張路徑最后經過了兩次卷積,達到最后的heatmap,再用一個1X1的卷積做分類,有沒有發現這里最終輸出的是兩個通道的特征圖這里是分成兩類,背景和前景,因為這個是對醫學圖像做的處理,只分背景和前景,所以用的是兩個神經元做卷積,得到最后的兩張heatmap,例如第一張表示的是第一類的得分(即每個像素點對應第一類都有一個得分),第二張表示相同位置的像素點的第二類的得分heatmap,然后作為softmax函數的輸入,算出概率比較大的softmax類,選擇它作為輸入給交叉熵進行反向傳播訓練。

      在這里有一個權重的分配問題:

這個是怎么理解的呢,你先看看要分割的圖和金標准:

       這是給像素分配權重然后進行加權,d1(x)表示圖中某一背景像素點到離這個點最近的細胞邊界的距離,d2(x)表示離這個像素點第二近的細胞的距離,你們可以舉一下特例算一下這個權重公式會發現(距離越遠,后面那一塊越小,幾乎為0,所以你看到的遠離細胞的地方,基本上權值都是一樣的,接近於Wc),即在細胞邊界附近的像素點給的權重會大一些,離細胞比較遠的像素點的權重會小一些,為什么這么做呢?因為,如果同類細胞貼的比較近,可能就會增大訓練的難度,減少准確率,畢竟卷積會考慮該像素點周圍的一些特征,而兩個相同的類的細胞貼在一起,就容易誤判,所以對這種兩個相同類貼在一起的細胞邊界,給予較大的權重,使的訓練之后分類分割更准確 。

(4)圖像輸入與輸出不一樣大的問題:  

      有沒有發現網絡的輸入與輸出的圖像不一樣大,對的,那是因為在網絡做卷積的過程中沒有進行pad,導致每次卷積都會有些損失,到最后導致輸出小於輸入,其實在進行Loss回歸的過程中,是用金標准上的每個點與輸出的圖像的每個點進行對比,然后得到Loss,但是這個不一樣大怎么進行每個像素點的對比,這個時候作者是這樣做的,他把輸入圖像先擴大,怎么擴大呢,就是對圖像做鏡像操作,四個邊做鏡像往外翻一下就擴大了圖像,你看看下圖就知道了,然后把擴大后的圖像輸入網絡,然后輸出后剛好和金標准的圖像大小是一樣的,這樣就可以進行Loss回歸了。

(5)關於數據增強:

   其實數據增強在現在來看已經很普遍了,很容易理解了,就是為了防止過擬合,讓網絡不易學習到數據的細節方面,在本文中,醫學圖像是怎么做數據增強的呢,這個時候就是把輸入圖像與金標准做同等的變化,輸入圖像怎么辦,金標准怎么變,說起來比較好弄,但是做起來比較難,有一個比較巧妙的方法就是,把輸入圖像看做一個通道,金標准看做一個通道,兩個通道合成一個圖像,用Keras里的數據增強函數就可以一步完成了兩種圖像的增強。

     總結

U-net網絡是在眾多網絡中比較簡單的一個網絡,容易應用和改進,有很大的改進空間,我在想能不能用U-net做自然圖像分割,估計已經有人做出來了。

                                                        謝謝大家,我叫馮爽朗!

 

3. 第三篇keras實現

最近在研究全卷積神經網絡在圖像分割方面的應用,因為自己是做醫學圖像處理方面的工作,所以就把一個基於FCN(全卷積神經網絡)的神經網絡用 keras 實現了,並且用了一個醫學圖像的數據集進行了圖像分割。

全卷積神經網絡

大名鼎鼎的FCN就不多做介紹了,這里有一篇很好的博文 http://www.cnblogs.com/gujianhan/p/6030639.html
不過還是建議把論文讀一下,這樣才能加深理解。

醫學圖像分割框架

醫學圖像分割主要有兩種框架,一個是基於CNN的,另一個就是基於FCN的。

基於CNN 的框架

這個想法也很簡單,就是對圖像的每一個像素點進行分類,在每一個像素點上取一個patch,當做一幅圖像,輸入神經網絡進行訓練,舉個例子:

cnnbased

這是一篇發表在NIPS上的論文Ciresan D, Giusti A, Gambardella L M, et al. Deep neural networks segment neuronal membranes in electron microscopy images[C]//Advances in neural information processing systems. 2012: 2843-2851.

這是一個二分類問題,把圖像中所有label為0的點作為負樣本,所有label為1的點作為正樣本。

這種網絡顯然有兩個缺點:
1. 冗余太大,由於每個像素點都需要取一個patch,那么相鄰的兩個像素點的patch相似度是非常高的,這就導致了非常多的冗余,導致網絡訓練很慢。
2. 感受野和定位精度不可兼得,當感受野選取比較大的時候,后面對應的pooling層的降維倍數就會增大,這樣就會導致定位精度降低,但是如果感受野比較小,那么分類精度就會降低。

基於FCN框架

在醫學圖像處理領域,有一個應用很廣泛的網絡結構—-U-net ,網絡結構如下:

這里寫圖片描述

可以看出來,就是一個全卷積神經網絡,輸入和輸出都是圖像,沒有全連接層。較淺的高分辨率層用來解決像素定位的問題,較深的層用來解決像素分類的問題。

問題分析

我采用的數據集是一個isbi挑戰的數據集,網址為: http://brainiac2.mit.edu/isbi_challenge/

數據集需要注冊下載,我的GitHub上也有下載好的數據集。

這個挑戰就是提取出細胞邊緣,屬於一個二分類問題,問題不算難,可以當做一個練手。

這里寫圖片描述

這里最大的挑戰就是數據集很小,只有30張512*512的訓練圖像,所以進行圖像增強是非常有必要的。

在這里,我參考了一篇做圖像扭曲的論文,http://faculty.cs.tamu.edu/schaefer/research/mls.pdf

實現的效果如下:

這是扭曲之前:

這里寫圖片描述

這是扭曲之后:

這里寫圖片描述

這是我進行圖像增強的代碼: http://download.csdn.net/detail/u012931582/9817058

keras 實現

keras是一個非常簡單地深度學習框架,可以很方便的搭建自己的網絡,這是我的keras實現: https://github.com/zhixuhao/unet

效果

最后在測試集上的精度可以達到95.7。

效果如下所示:

這里寫圖片描述

這里寫圖片描述

4. 一篇關於U-Net的改進



代碼地址(包含預訓練權重):https://github.com/ternaus/TernausNet


隨着處理密集計算的計算機硬件的發展和平民化,研究者能夠處理擁有數百萬參數的模型。卷積神經網絡在圖像分類、目標識別、場景理解等領域都取得了極大的成功。對幾乎所有的計算機視覺問題,基於 CNN 的方法都優於其他技術,在很多情況下甚至超越了人類專家。目前,幾乎所有的計算機視覺應用嘗試使用深度學習技術來改進傳統方法。它們影響到我們的日常生活,且這些技術的潛在應用場景似乎也很驚人。


可靠的圖像分割是計算機視覺領域的重要任務之一。該問題對醫療圖像領域極為重要,可以提高診斷能力,在場景理解領域中有助於創造安全的自動駕駛汽車。密集圖像分割本質上是把圖像分為有意義的區域,可看作是像素級別的分類任務。處理此類問題最直接(也緩慢)的方法是手動分割圖像。然而,這種方法極為耗時,而且人類數據管理員不可避免地會出錯、存在不一致問題。自動化該過程能提供盡可能快的、系統性的圖像分割。該過程需要達到一定的准確率,以在生產環境中使用。


在過去幾年中,研究者提出了不同的方法來解決該問題:創造一種 CNN,為一整張輸入圖像在單個前向傳遞中生成分割圖。其中,最成功的最優方法基於全卷積網絡(FCN)[2]。其核心思想是將 CNN 中的全連接層替換成卷積層,成為強大的特征提取器,直接輸出空間特征圖,而不是全連接層輸出的分類分數。然后,上采樣這些圖,生成密集的逐像素輸出。該方法以端到端的方式訓練 CNN,分割任意大小的輸入圖像。此外,在 PASCAL VOC 等標准數據集上,該方法極大地改進了分割的准確率。


后來,這一方法進一步被改進為 U-Net 神經網絡 [4],U-Net 架構使用跳過連接(skip connection)將低層特征圖與高層特征圖結合起來,帶來精確的像素級定位。在上采樣部分,大量的特征通道向更高的分辨率層傳播上下文信息。在衛星圖像分析、醫療圖像分析等二值圖像分割競賽中,這種類型的網絡架構已經證明了自己。


在此論文中,作者展示了如何使用預訓練權重輕松改進 U-Net 的性能。作者還將它應用到航空圖像標注數據集 [8] 中,該數據集包含多個城市的高清航空圖像。這些圖像的每個像素都被標注為「建築」或「非建築」類別。該架構另一個成功應用案例與初始化方案是 Kaggle Carvana 圖像分割競賽 [9],本論文作者之一使用它作為解決方案的一部分,獲得了第一名。


II. 網絡架構


通常,U-Net 架構包含一個收縮路徑來捕捉上下文信息,以及一個對稱的擴張路徑以進行精准的定位(見圖 1)。收縮路徑遵循典型的卷積網絡架構,即交替卷積和池化運算,並逐步下采樣特征圖,同時逐層增加特征圖的數量。擴張路徑的每個階段由一個特征圖上采樣和緊隨的卷積構成。



圖 1:編碼器-解碼器神經網絡架構,亦稱為 U-Net,使用無全連接層的 VGG11 作為編碼器。每個藍色的矩形塊代表一個經過一系列變換的多通道特征圖。矩形的長度代表相對的圖尺寸(像素級),其寬度和通道數量成正比。左邊編碼器部分的通道數逐漸增加,而右邊解碼器部分的通道數逐漸減少。頂部的箭頭表示每個編碼層的信息遷移,並傳輸至對應的解碼層。


因此,擴張分支可以提高輸出的分辨率。為了進行定位,擴張路徑通過跳過連接將上采樣特征和來自收縮路徑的高分辨率特征結合起來 [4]。模型的輸出是一個逐像素掩碼,展示了每個像素的類別。該架構被證明對有限數據的分割問題很有用,示例參見 [5]。


U-Net 可以從相對較小的訓練集中學習。多數情況下,圖像分割的數據集由至多幾千張圖像構成,因為手動標記掩碼是非常繁重的工作。通常 U-Net 以隨機初始化權重開始訓練。眾所周知,要使網絡訓練避免過擬合,數據集應該足夠大,包含數百萬張圖像。在 ImageNet [10] 數據集上訓練的網絡被廣泛地用於其它任務的網絡初始化。用這種方法,可以讓網絡非預訓練的幾層(有時僅僅是最后一層)利用數據集的特征進行學習。


我們使用 VGG 族 [11] 中非常簡單的 CNN 作為 U-Net 網絡的編碼器,它由 11 個順序層構成,稱為 VGG11,參見圖 2。VGG11 包含 7 個卷積層,每個緊隨着一個 ReLU 激活函數和 5 個最大池化運算,每個運算之后將特征圖減半。所有卷積層都有 3x3 的卷積核,通道數如圖 2 所示。第一個卷積層有 64 個通道,然后網絡加深,每個卷積層和最大池化運算之后通道數會加倍,直到通道數變為 512。在之后的卷積層中,通道數不變。



圖 2:VGG11 網絡架構。在這張圖中,每個卷積層之后是 ReLU 激活函數。每個框中的數字表示對應特征圖的通道數量。


為了構建解碼器,我們移除所有的全連接層,並用包含 512 個通道的單一卷積層來替換它們,該層是網絡的瓶頸中間部分,分離編碼器與解碼器。為了構建解碼器,我們使用兩倍於特征圖大小的轉置卷積層,同時把通道數量減少一半。轉置卷積的輸出接着被連接到解碼器對應部分的輸出。由此得到的特征圖通過卷積運算來處理,以保持通道數量與對稱編碼器項相同。上采樣步驟被重復 5 次以配對 5 個最大池化層,如圖 1 所示。嚴格來說全連接層可以采用任何大小的輸入,但是由於我們有 5 個最大池化層,每個層下采樣圖像兩次,只有可被 32(2^5)整除的圖像可以用作當前網絡實現的輸入。



圖 3:三種以不同權重初始化的 U-Net 模型的 Jaccard 指標隨訓練 epoch 的變化。藍線表示隨機初始化權重的模型,橙線表示編碼器以在 ImageNet 上預訓練的 VGG11 網絡權重初始化的模型,綠線表示整個網絡在 Carvana 數據集上預訓練的模型。


圖 4:綠色像素的二進制掩膜表示分類族群(建築)。圖 A 展示初始圖像和疊加的真實掩膜。圖 B 到圖 D 表示使用三種權重初始化方案並訓練了 100 個 epoch 后得到的預測結果。圖 B 表示隨機初始化權重的模型,圖 C 中的模型使用隨機初始化權重,編碼器以在 ImageNet 上預訓練的 VGG11 網絡權重進行初始化,圖 D 中的模型使用在 Carvana 數據集上預訓練的權重。


在本論文中,通過使用微調(fine-tuning)技術初始化網絡編碼器的權重,我們展示了如何提升 U-Net 的性能。這種神經網絡被廣泛用於圖像分割任務,並在許多二值圖像分割、競賽中取得了當前最優結果。微調已廣泛用於圖像分類任務,但是就我們所知還未用於 U-Net 類型的架構。對於圖像分割問題,微調應該是更自然的選擇,因為收集大量數據集(尤其是醫療圖像)並進行很好地標注是很困難的。此外,預訓練網絡可以大幅減少訓練時間,同時有助於防止過擬合。考慮到存在更多先進的預訓練編碼器比如 VGG16 [11] 或任何預訓練的 ResNet 網絡,我們的方法還可進一步提升。有了這些改進的編碼器,解碼器可以像我們使用的一樣簡單。


論文:TernausNet: U-Net with VGG11 Encoder Pre-Trained on ImageNet for Image Segmentation


論文鏈接:https://arxiv.org/abs/1801.05746


摘要:像素級的圖像分割是計算機視覺中的艱巨任務。由編碼器和解碼器構成的經典 U-Net 架構經常用於分割醫學影像、衛星影像等。通常,神經網絡使用在大型數據集(例如 ImageNet)上預訓練的網絡權重進行初始化,相比用小型數據集從零開始訓練的網絡能獲得更好的性能。在某些特定的應用中,特別是醫學和交通安全,模型的准確率至關重要。在本文中,我們展示了 U-Net 類型的架構如何利用預訓練的編碼器提升性能。我們的代碼和相關的預訓練權重已開源。我們比較了三種權重初始化方案:LeCun uniform、取自 VGG11 權重的編碼器和在 Carvana 數據集上訓練的完整網絡。該網絡架構是 Kaggle 競賽(Carvana Image Masking Challenge)中獲勝解決方案(在 735 名參賽者中排名第一)的一部分。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM