UNet 簡介
UNet 論文:Convolutional Networks for Biomedical Image Segmentation
這篇論文主要是針對生物醫(yī)學(xué)影像這個領(lǐng)域提出的,所以一提到UNet一般都會聯(lián)想到醫(yī)學(xué)影像。
UNet 網(wǎng)絡(luò)結(jié)構(gòu)
UNet它是一個encoder - decoder的結(jié)構(gòu),那么encoder對應(yīng)就是這個u型網(wǎng)絡(luò)左邊這半部分,也就是我們特征提取及下采樣這部分。decoder解碼就是右邊部分通過一系列上采樣,我們得到最終的一個分割圖。 對于網(wǎng)絡(luò)結(jié)構(gòu)左邊這一側(cè),作者叫做contracting path
,對于右邊這一側(cè)作者稱為expansive path
。
在上圖的網(wǎng)絡(luò)結(jié)構(gòu)中,每一個長條的矩形對應(yīng)的都是一個特征層,其中箭頭表示是一種操作。圖中右下角列出了每一種箭頭它所對應(yīng)的操作類型。下面詳細的介紹網(wǎng)絡(luò)的搭建過程:
U型網(wǎng)絡(luò)的左半部分
- 這里輸入是以
572x572
的單通道的圖像為例的,首先通過一個卷積層,它的卷積核大小為3x3
的,并且后面跟一個Relu
激活函數(shù)。注意對于這個卷積層它的步距是等于1的,其次是沒有padding
操作的,所以你會發(fā)現(xiàn)通過這個卷積層,它的高和寬都會減少。比如這里通過第一個3x3
的卷積,它的高和寬從572
變?yōu)?code>570,再通過一個3x3
卷積層又變?yōu)?68.由于這篇論文是2015
年發(fā)表的,當(dāng)時BN(batch normalization)
還沒火起來,所以按時還沒有使用BN這個模塊。 - 接下來,通過一個
max pooling
下采樣,池化核大小為2x2
,步距為2
,那么經(jīng)過下采樣特征層的高和寬就會減半。由568
變成這里的284,channel是沒有發(fā)生變化的還是64.再通過兩個3x3的卷積核,這里注意每個下采樣后,通過卷積層都會對channel進行翻倍。比如這里下采樣后的channel為64,通過3x3卷積后channel變?yōu)?28 - 接下來,通過下采樣max-pooling,將特征層的高和寬由280變?yōu)?40,然后再通過兩個3x3的卷積層,將通道由128調(diào)整為256.
- 接下來,再通過下采樣max-pooling,將特征層的高和寬由136變?yōu)?8,然后再通過兩個3x3的卷積層,將channel由256調(diào)整為512.
- 然后,再通過下采樣max-pooling,將特征層的高和寬由64變?yōu)?2,然后再通過兩個3x3的卷積層,將channel由512調(diào)整為1024.
U型網(wǎng)絡(luò)的右半部分
- 接下來這一部分需要注意了,首先對于綠色箭頭部分,這里有寫是一個上采樣(
up conv
),這里上采樣采用的是轉(zhuǎn)置卷積,通過轉(zhuǎn)置卷積后它將特征層的寬和高變?yōu)樵瓉淼膬杀?,比如這里由28變成56,然后channel會減半,由這里的1024變?yōu)?12.對應(yīng)圖中的藍色部分。
注意這里旁邊有個灰色的箭頭(copy and crop
),比如灰色箭頭左側(cè)對應(yīng)64x64大小的特征層,但箭頭右側(cè)藍色部分的特征圖為56x56,沒法直接將他們進行拼接。那么就需要對左側(cè)64x64大小的特征層進行一個中心裁剪,就是將中間56x56部分裁剪過來和右側(cè)藍色部分進行channel 方向的concat拼接,拼接后channel就變?yōu)?024了。然后再通過2個3x3的卷積核將channel調(diào)整成512 - 然后再通過上采樣將特征圖的高和寬由52調(diào)整到這里的104,然后channel減半為256.然后將灰色箭頭右側(cè)的特征層通過中心裁剪的方式,將中間104x104的區(qū)域裁剪過來與箭頭右側(cè)藍色部分進行concat拼接,通道由256變?yōu)?12。然后再通過兩個3x3的卷積進一步融合,并且通道由512變?yōu)?56
- 然后再通過上采樣將特征圖的高和寬由100調(diào)整到這里的200,然后channel減半為128.然后將灰色箭頭右側(cè)的特征層通過中心裁剪的方式,將中間200x200的區(qū)域裁剪過來與箭頭右側(cè)藍色部分進行concat拼接,通道由128變?yōu)?56。然后再通過兩個3x3的卷積進一步融合,并且通道由256變?yōu)?28
- 然后再通過上采樣將特征圖的高和寬由196調(diào)整到這里的392,然后channel減半為64.然后將灰色箭頭右側(cè)的特征層通過中心裁剪的方式,將中間392x392的區(qū)域裁剪過來與箭頭右側(cè)藍色部分進行concat拼接,通道由64變?yōu)?28。然后再通過兩個3x3的卷積進一步融合,得到388x388,通道為64的特征層。
- 再通過一個1x1的卷積核,將channel調(diào)整為我們的分類個數(shù)。論文中是為2表示只有兩個類別,前景和背景。最終輸出的特征圖大小為388x388x2,注意最后一個1x1卷積是沒有relu激活函數(shù)的。
注意我們輸入的圖片大小為572x572,但是我們得到的分割圖是388x388的,所以我們這里得到分割圖并不是針對我們原圖的一個分割圖,而是只有中間388x388那個區(qū)域的分割圖。
但是現(xiàn)在比較主流的實驗方式
,github
所實現(xiàn)的一系列源碼當(dāng)中,大家并不是嚴格按照原論文給的方式去實現(xiàn)的,現(xiàn)在主流的實現(xiàn)方式是將3x3
的卷積加上一個padding
,就是說我們每次通過3x3
的卷積層不會改變特征層的高和寬。并且我們在卷積核Relu
之間會加上一個Bn
層。這樣做會給我們帶來一個怎樣的變化呢,由于卷積后不改變特征層大小,兩個特征圖可以直接拼接,就不需要中心裁剪了,并且最終得到的卷積層高和寬與輸入的卷積層高和寬是保持一致的。所以后面要實現(xiàn)可以按照當(dāng)前主流的方式。
假設(shè)我們要用原論文提出的UNet的話,其實是有一定的問題的,比如我們要得到上圖中黃色區(qū)域的分割圖片,其實我們需要更大的輸入圖片如藍色部分才可以得到中間黃色區(qū)域的分割圖片。文章來源:http://www.zghlxwxcb.cn/news/detail-464833.html
但對于邊緣區(qū)域,邊緣之外的像素我們是沒有的,為了應(yīng)對這個問題作者說對于那些缺失的數(shù)據(jù),它就直接采用鏡像的策略,通過沿邊框進行鏡像得到。但如果按照目前主流的實現(xiàn)方式,輸出的分割圖與原圖保持一致的話,其實我們根本不用考慮邊緣缺失數(shù)據(jù)這個情況。文章來源地址http://www.zghlxwxcb.cn/news/detail-464833.html
到了這里,關(guān)于圖像分割UNet (1) : 網(wǎng)絡(luò)結(jié)構(gòu)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!