【圖像分割】Unet 深度講解
1. 介紹
1.1 背景介紹:
-
自2015年以來,在生物醫(yī)學圖像分割領域,U-Net得到了廣泛的應用,目前已達到四千多次引用。至今,U-Net已經(jīng)有了很多變體。目前已有許多新的卷積神經(jīng)網(wǎng)絡設計方式,但很多仍延續(xù)了U-Net的核心思想,加入了新的模塊或者融入其他設計理念。
-
編碼和解碼,早在2006年就發(fā)表在了nature上.當時這個結構提出的主要作用并不是分割,而是壓縮圖像和去噪聲,后來把這個思路被用在了圖像分割的問題上,也就是現(xiàn)在我們看到的FCN或者U-Net結構,在它被提出的三年中,有很多很多的論文去講如何改進U-Net或者FCN,不過這個分割網(wǎng)絡的本質的結構是沒有改動的, 即下采樣、上采樣和跳躍連接。
1.2 醫(yī)學圖像特點
-
圖像語義較為簡單、結構較為固定。我們做腦的,就用腦CT和腦MRI,做胸片的只用胸片CT,做眼底的只用眼底OCT,都是一個固定的器官的成像,而不是全身的。由于器官本身結構固定和語義信息沒有特別豐富,所以高級語義信息和低級特征都顯得很重要。
-
數(shù)據(jù)量少。醫(yī)學影像的數(shù)據(jù)獲取相對難一些,很多比賽只提供不到100例數(shù)據(jù)。所以我們設計的模型不宜多大,參數(shù)過多,很容易導致過擬合。
-
原始UNet的參數(shù)量在28M左右、上采樣帶轉置卷積的UNet參數(shù)量在31M左右,而如果把channel數(shù)成倍縮小,模型可以更小??s小兩倍后,UNet參數(shù)量在7.75M??s小四倍,可以把模型參數(shù)量縮小至2M以內(nèi))非常輕量。個人嘗試過使用Deeplab v3+和DRN等自然圖像語義分割的SOTA網(wǎng)絡在自己的項目上,發(fā)現(xiàn)效果和UNet差不多,但是參數(shù)量會大很多。
-
多模態(tài)。相比自然影像,醫(yī)療影像是具有多種模態(tài)的。以ISLES腦梗競賽為例,其官方提供了CBF,MTT,CBV,TMAX,CTP等多種模態(tài)的數(shù)據(jù)。比如CBF是腦血流量,CBV用于檢測巨細胞病毒的。
1.3 圖像分割是什么
簡單的來講就是給一張圖像,圖像分割出一個物體的準確輪廓。也這樣考慮,給出一張圖像 I,這個問題就是求一個函數(shù),從I映射到Mask。求這個函數(shù)有很多方法,但是第一次將深度學習結合起來的是全卷積網(wǎng)絡(FCN),利用深度學習求這個函數(shù)。
2. Unet發(fā)展歷程(FCN、Unet、Unet++)
2.1 全卷積網(wǎng)絡-FCN
很多分割網(wǎng)絡都是基于FCN做改進,我們先介紹FCN的內(nèi)容。
2.1.1 FCN介紹:
FCN是深度學習在圖像分割的開山之作。
- 在此之前深度學習一般用在分類和檢測問題上。
- 由于用到CNN,所以最后提取的特征的尺度是變小的。和我們分割任務要求的函數(shù)不一樣,我們要求的函數(shù)是輸入多大,輸出有多大。
- 經(jīng)典的CNN在卷積層之后使用全連接層得到固定長度的特征向量進行分類(全聯(lián)接層+softmax輸出)。
基于此,F(xiàn)CN的設計使得可以接受任意尺寸的輸入圖像,采用反卷積層對最后一個卷積層的feature map進行上采樣, 使它恢復到輸入圖像相同的尺寸,最后在上采樣的特征圖上進行逐像素分類。解決了語義級別的圖像分割問題。由于網(wǎng)絡中只有卷積沒有全連接,所以這個網(wǎng)絡又叫全卷積網(wǎng)絡。
2.1.2 FCN框架
- 輸入原圖,得到五次池化后的特征圖,然后將特征map上采樣回去。
- 再將預測結果和ground truth每個像素一一對應分類,做像素級別分類。也就是說將分割問題變成分類問題,而分類問題正好是深度學習的強項。
- 如果只將特征map直接上采樣或者反卷積,明顯會丟失很多信息。FCN采取解決方法是將pool4、pool3、和特征map融合起來,由于pool3、pool4、特征圖大小尺寸是不一樣的,所以融合前應該上采樣到同一尺寸。這里的融合對應元素相加。
2.1.3 反卷積層
反卷積層也是卷積層。乍看一下好像反卷積和卷積的工作過程差不多,主要的區(qū)別在于反卷積輸出圖片的尺寸會大于輸入圖片的尺寸,通過增加padding來實現(xiàn)這一操作。這里可以參考:
- 卷積和逆卷積(轉置卷積)詳解
- 卷積和逆卷積-nn.Conv2d與nn.ConvTranspose2d參數(shù)理解
2.1.4 輸入圖像大小
FCN的輸入圖片大小任意。
首先,我們來看傳統(tǒng)CNN為什么需要固定輸入圖片大小。
- 對于CNN,一幅輸入圖片在經(jīng)過卷積和 pooling 層時,這些層是不關心圖片大小的。比如對于一個卷積層,它并不關心inputsize多大,pooling層同理。
- 但是在進入全連接層時,feature map(假設大小為n×n)要拉成一條向量,而向量中每個元素(共n×n個)作為一個結點都要與下一個層的所有結點(假設4096個)全連接,這里的權值個數(shù)是4096×n×n,而我們知道神經(jīng)網(wǎng)絡結構一旦確定,它的權值個數(shù)都是固定的,所以這個n不能變化,n是conv5的outputsize,所以層層向回看,每個outputsize都要固定,因此輸入圖片大小要固定。
而FCN的全卷積是沒有全連接層的,所以不要求輸入圖片大小固定。
2.1.5 分割效果
FCN優(yōu)點是實現(xiàn)端到端分割。
- 輸入是原始數(shù)據(jù)輸出是最終結果,缺點是分割結果細節(jié)不夠好,可以看到FCN8s是上面講的pool4、pool3和特征圖融合,F(xiàn)CN16s是pool4和特征map融合,F(xiàn)CN32s是只有特征map,得出結果都是細節(jié)不夠好,具體可以看自行車。
此外,作者還嘗試了結合pool2發(fā)現(xiàn)效果并沒有提升。
2.2 UNET
2.2.1 網(wǎng)絡架構
Unet包括兩部分:
- 第一部分,特征提取,VGG類似。
- 第二部分,上采樣部分。由于網(wǎng)絡結構像U型,所以叫Unet網(wǎng)絡。
- 特征提取部分,每經(jīng)過一個池化層就一個尺度,包括原圖尺度一共有5個尺度。
- 上采樣部分,每上采樣一次,就和特征提取部分對應的通道數(shù)相同尺度融合,但是融合之前要將其crop。這里的融合是拼接??梢钥吹?,輸入是572x572的,但是輸出變成了388x388,這說明經(jīng)過網(wǎng)絡以后,輸出的結果和原圖不是完全對應的。
圖中,
- 藍色箭頭代表3x3的卷積操作,并且stride是1,padding策略是vaild,因此,每個該操作以后,featuremap的大小會減2。
- 紅色箭頭代表2x2的maxpooling操作,需要注意的是,此時的padding策略也是vaild,這就會導致如果pooling之前featuremap的大小是奇數(shù),會損失一些信息 。所以要選取合適的輸入大小,因為2*2的max-pooling算子適用于偶數(shù)像素點的圖像長寬。
- 綠色箭頭代表2x2的反卷積操作,這個只要理解了反卷積操作,就沒什么問題,操作會將featuremap的大小乘2。- 卷積和逆卷積(轉置卷積)詳解、 卷積和逆卷積-nn.Conv2d與nn.ConvTranspose2d參數(shù)理解
- 灰色箭頭表示復制和剪切操作,可以發(fā)現(xiàn),在同一層左邊的最后一層要比右邊的第一層要大一些,這就導致了,想要利用淺層的feature,就要進行一些剪切。
輸出的最后一層,使用了1x1的卷積層做了分類。最后輸出了兩層是前景和背景。
2.2.2 valid卷積
這三種不同模式是對卷積核移動范圍的不同限制。
-
full mode,橙色部分為image,藍色部分為filter。full模式的意思是,從filter和image剛相交開始做卷積,白色部分為填0。
-
same mode,當filter的中心(K)與image的邊角重合時,開始做卷積運算,可見filter的運動范圍比full模式小了一圈。注意:這里的same還有一個意思,卷積之后輸出的feature map尺寸保持不變(相對于輸入圖片)。當然,same模式不代表完全輸入輸出尺寸一樣,也跟卷積核的步長有關系。same模式也是最常見的模式,因為這種模式可以在前向傳播的過程中讓特征圖的大小保持不變,調(diào)參不需要精準計算其尺寸變化(因為尺寸根本就沒變化)。
-
valid mode,當filter全部在image里面的時候,進行卷積運算,可見filter的移動范圍較same更小了。
2.2.3 overlap-tile策略
醫(yī)學圖像是一般相當大,分割時候不可能將原圖直接輸入網(wǎng)絡。所以需要用一個滑動窗口把原圖掃一遍,使用原圖的切片進行訓練或測試。如下圖,
- 紅框是要分割區(qū)域。但是在切圖時要包含周圍區(qū)域,overlap另一個重要原因是周圍overlap部分可以為分割區(qū)域邊緣部分提供紋理等信息。
- 這樣的策略會帶來一個問題,圖像邊界的圖像塊沒有周圍像素,卷積會使圖像邊緣處的信息丟失。因此作者對周圍像素采用了鏡像擴充。下圖中紅框部分為原始圖片,其周圍擴充的像素點均由原圖沿白線對稱得到。這樣,邊界圖像塊也能得到準確的預測。
- 另一個問題是,這樣的操作會帶來圖像重疊問題,即第一塊圖像周圍的部分會和第二塊圖像重疊。因此作者在卷積時只使用有效部分。可能的解釋是使用valid卷積和crop裁剪,最終傳到下一層的只有中間原先圖像塊(黃色框內(nèi))的部分。
2.2.4 彈性變換
由于深度神經(jīng)網(wǎng)絡具有非常強的學習能力,如果沒有大量的訓練數(shù)據(jù),會造成過擬合,訓練出的模型難以應用。因此對于一些沒有足夠樣本數(shù)量的問題,可以通過已有的樣本,對其進行變換,人工增加訓練樣本。常用的增加訓練樣本的方法主要有對圖像進行旋轉、位移等仿射變換,也可以使用鏡像變換。
這里介紹彈性變換。
- 該算法最開始應用在mnist手寫體數(shù)字識別數(shù)據(jù)集中,發(fā)現(xiàn)對原圖像進行彈性變換的操作擴充樣本以后,對于手寫體數(shù)字的識別效果有明顯的提升。
- 因為unet論文的數(shù)據(jù)集是細胞組織的圖像,細胞組織的邊界每時每刻都會發(fā)生不規(guī)則的畸變,所以采用彈性變形的增廣是非常有效的。
- 下面來詳細介紹一下算法流程:
- 彈性變化是對像素點各個維度產(chǎn)生(-1,1)區(qū)間的隨機標準偏差,用高斯濾波對各維度的偏差矩陣進行濾波,最后用放大系數(shù)控制偏差范圍。
- 因而由A(x,y)得到的A’(x+delta_x,y+delta_y)。A‘的值通過在原圖像差值得到,A’的值充當原來A位置上的值。
- 下圖顯示的是在固定的n下不同高斯標準差的結果,第二個圖的形變效果是最合適的。
2.4.5 損失函數(shù)
損失函數(shù)首先是用了個pixel-wise softmax,就是每個像素對應的輸出單獨做softmax,也就是做了w*h個softmax。
- 其中,x可以看作是某一個像素點, l(x)表示x這個點對應的類別label,pk?(x)表示在x這個點的輸出在類別k的softmax的激活值。
- 那么pl(x)?(x)代表什么呢?根據(jù)前面的說明就可以推斷出來:點x在對應的label給出的那個類別的輸出的激活值。
正常的交叉熵定義如第一個公式,可以發(fā)現(xiàn)兩個公式的意義其實是相同的,后面的公式在外面把非label對應的結果乘0了。
然后是w(x)定義的式子,
- d1,d2分別是像素點最近和第二近的細胞的距離。這個權重可以調(diào)整圖像中某個區(qū)域的重要程度。
- 細胞組織圖像的一大特點是,多個同類的細胞會緊緊貼合在一起,其中只有細胞壁或膜組織分割。
因此,作者在計算損失的過程中,給兩個細胞重合的邊緣部分增加了損失的權重,以此讓網(wǎng)絡更加注重這類重合的邊緣信息。實際情況中,是需要自己根據(jù)應用情況來設計或調(diào)整這個權重的。
下圖中的a是raw image,b是ground truth segmentation,c 是生成的分割掩碼,白色是前景,黑色是背景。d是增加了像素級的loss權重后,讓網(wǎng)絡對邊界像素進行了更好的學習的結果。
2.3 UNET++
2.3.1 存在的問題
- 第一個問題:既然輸入和輸出都是相同大小的圖,為什么要折騰去降采樣一下再上采樣呢?
降采樣的理論意義是,它可以增加對輸入圖像的一些小擾動的魯棒性,比如圖像平移,旋轉等,減少過擬合的風險,降低運算量,增加感受野的大小。上采樣的最大的作用其實就是把抽象的特征再還原解碼到原圖的尺寸,最終得到分割結果。
對于特征提取階段,淺層結構可以抓取圖像的一些簡單的特征,比如邊界,顏色,而深層結構因為感受野大了,而且經(jīng)過的卷積操作多了,能抓取到圖像的一些抽象特征。
- 第二個問題:既然unet每一層抓取的特征都很重要,為什么非要降四次之后才開始上采樣回去呢?
2.3.2 網(wǎng)絡深度
提出疑問后, 為了驗證多深才好,每加一個深度就訓練一個網(wǎng)絡,
- 分別用了兩個數(shù)據(jù)集:Electron Microscopy 和 Cell
- 然后測它們各自的分割表現(xiàn),先不要看后兩個UNet++,就看這個不同深度的U-Net的表現(xiàn)(黃色條形圖)。
我們可以看出,不是越深越好,它背后的傳達的信息就是,不同層次特征的重要性對于不同的數(shù)據(jù)集是不一樣的,并不是說設計一個原論文給出的那個結構,就一定對所有數(shù)據(jù)集的分割問題都最優(yōu)。
最終得出的結論是,不同數(shù)據(jù)集的最優(yōu)的深度是不一樣的, 但是總不能把所有不同深度的U-Net都訓練一遍,太耗時間了,于是提出unet++ 。
2.3.3 模型架構
這個綜合長連接和短連接的架構就是UNet++。
- UNet++的優(yōu)勢是可以抓取不同層次的特征,將它們通過特征疊加的方式整合,加入更淺的U-Net結構,使得融合時的特征圖尺度差異更小。
- UNet++同時也引進了很多參數(shù),占用內(nèi)存也變大。
文章來源:http://www.zghlxwxcb.cn/news/detail-775854.html
3. 參考
【1】https://blog.csdn.net/a8039974/article/details/109645616文章來源地址http://www.zghlxwxcb.cn/news/detail-775854.html
到了這里,關于【圖像分割】Unet系列深度講解(FCN、UNET、UNET++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!