十二月快樂鴨!21世紀10年代的最后一個12月 也要加油鴨!
又是拖了一周才來寫…真的不能這么懶啦!
今天記錄的內(nèi)容來自于@一只大南瓜 之前讓我看的Unet網(wǎng)絡(luò)。
————————
Unet網(wǎng)絡(luò)
對于一個網(wǎng)絡(luò)模型來說,我個人認為,主要看的是:網(wǎng)絡(luò)模型提出的背景、網(wǎng)絡(luò)模型的結(jié)構(gòu)、網(wǎng)絡(luò)模型的訓練以及結(jié)果、網(wǎng)絡(luò)模型的應(yīng)用和缺陷不足。
背景
先引入涉及的處理問題以建立的基礎(chǔ):圖像分割
圖像分割,簡單來說就是給出一張圖像,分割出圖像的中所需物體的一個完整準確的輪廓,其實也就相當于現(xiàn)實中的“摳圖”。如下圖,就是圖像的分割。實現(xiàn)圖像分割的方法有很多,這邊只敘述一下unet的建立基礎(chǔ)
FCN(全卷積網(wǎng)絡(luò))
先上圖,如下所示:網(wǎng)絡(luò)的整體結(jié)構(gòu)分為:全卷積部分和反卷積部分。
全卷積部分:借用了一些經(jīng)典的CNN網(wǎng)絡(luò)并把最后的全連接層換成卷積,用于提取特征,形成熱點圖;
反卷積部分:將小尺寸的熱點圖上采樣得到原尺寸的語義分割圖像。
簡單來說,就是將原本CNN過程中最后的 Fully Connected 換成了卷積,直接輸出目標物體所屬的像素范圍。
FCN的主要技術(shù)
1.卷積化(Convolutional)
全連接層(6,7,8)都變成卷積層,適應(yīng)任意尺寸輸入,輸出低分辨率的分割圖片。為什么要把全連接層變?yōu)榫矸e層?【當我們輸入的圖片大小和卷積核大小一致時,其實等價于建立全連接,但是還是有區(qū)別。全連接的結(jié)構(gòu)是固定的,當我們訓練完時每個連接都是有權(quán)重的。而卷積過程我們其實為訓練連接結(jié)構(gòu),學習了目標和那些像素之間有關(guān)系,權(quán)重較弱的像素我們可以忽略。連接不會學習過濾,會給每個連接分權(quán)重并不會修改連接關(guān)系。卷積則是會學習有用的關(guān)系,沒用得到關(guān)系它會弱化或者直接 dropout。這樣卷積塊可以共用一套權(quán)重,減少重復(fù)計算,還可以降低模型復(fù)雜度。】
2.上采樣(Upsample)
上采樣指的是任何可以讓圖像變成更高分辨率的技術(shù)。最簡單的方式是重采樣和插值:將輸入圖片進行rescale到一個想要的尺寸,而且計算每個點的像素點,使用如雙線性插值等插值方法對其余點進行插值來完成上采樣過程。
3.跳躍結(jié)構(gòu)(Skip Layer)
如果利用之前提到的上采樣技巧對最后一層的特征圖進行上采樣的到原圖大小的分割,由于最后一層的特征圖太小,我們會損失很多細節(jié)。因而作者提出增加Skips結(jié)構(gòu)將最后一層的預(yù)測(有更富的全局信息)和更淺層(有更多的局部細節(jié))的預(yù)測結(jié)合起來,這樣可以在遵守全局預(yù)測的同時進行局部預(yù)測。三個技術(shù)都已構(gòu)建模型之中,通過一定標記數(shù)據(jù)的訓練后,模型已經(jīng)學會了如何識別類別,并且能反卷積得到對應(yīng)類別所在的像素區(qū)域。輸出的效果如下:
總的來說:FCN對圖像進行像素級的分類,從而解決了語義級別的圖像分割問題。與經(jīng)典的CNN在卷積層之后使用全連接層得到固定長度的特征向量進行分類(全聯(lián)接層+softmax輸出)不同,F(xiàn)CN可以接受任意尺寸的輸入圖像,采用反卷積層對最后一個卷積層的feature map進行上采樣, 使它恢復(fù)到輸入圖像相同的尺寸,從而可以對每個像素都產(chǎn)生了一個預(yù)測, 同時保留了原始輸入圖像中的空間信息, 最后在上采樣的特征圖上進行逐像素分類。
這部分可參考:全卷積網(wǎng)絡(luò) FCN 詳解
這里不詳細展開
重點看看在FCN基礎(chǔ)上改進的unet
網(wǎng)絡(luò)結(jié)構(gòu)如下:
詳解:
1.輸入是572x572的,但是輸出變成了388x388,這說明經(jīng)過網(wǎng)絡(luò)以后,輸出的結(jié)果和原圖不是完全對應(yīng)的,這在計算loss和輸出結(jié)果都可以得到體現(xiàn)。
2.藍色箭頭代表3x3的卷積操作,并且stride是1,padding策略是vaild,因此,每個該操作以后,featuremap的大小會減2。
3.紅色箭頭代表2x2的maxpooling操作,需要注意的是,此時的padding策略也是vaild(same 策略會在邊緣填充0,保證featuremap的每個值都會被取到,vaild會忽略掉不能進行下去的pooling操作,而不是進行填充),這就會導致如果pooling之前featuremap的大小是奇數(shù),那么就會損失一些信息 。
4.綠色箭頭代表2x2的反卷積操作,這個只要理解了反卷積操作,就沒什么問題,操作會將featuremap的大小乘2。
5.灰色箭頭表示復(fù)制和剪切操作,可以發(fā)現(xiàn),在同一層左邊的最后一層要比右邊的第一層要大一些,這就導致了,想要利用淺層的feature,就要進行一些剪切,也導致了最終的輸出是輸入的中心某個區(qū)域。
6.輸出的最后一層,使用了1x1的卷積層做了分類。U-net網(wǎng)絡(luò)比較簡單,前半部分也就是圖中左邊部分的作用是特征提取,后半部分也就是圖中的右邊部分是上采樣。
在一些文獻中也把這樣的結(jié)構(gòu)叫做編碼器-解碼器結(jié)構(gòu)。由于此網(wǎng)絡(luò)整體結(jié)構(gòu)類似于大寫的英文字母U,故得名U-net。
U-net與其他常見的分割網(wǎng)絡(luò)有一點非常不同的地方:U-net采用了完全不同的特征融合方式:拼接,U-net采用將特征在channel維度拼接在一起,形成更厚的特征。而FCN融合時使用的對應(yīng)點相加,并不形成更厚的特征。
總結(jié)一下:U-net建立在FCN的網(wǎng)絡(luò)架構(gòu)上,作者修改并擴大了這個網(wǎng)絡(luò)框架,使其能夠使用很少的訓練圖像就得到很 精確的分割結(jié)果。添加上采樣階段,并且添加了很多的特征通道,允許更多的原圖像紋理的信息在高分辨率的layers中進行傳播。U-net沒有FC層,且全程使用valid來進行卷積,這樣的話可以保證分割的結(jié)果都是基于沒有缺失的上下文特征得到的,因此輸入輸出的圖像尺寸不太一樣Unet可以較好地應(yīng)用在醫(yī)學圖像領(lǐng)域,具體可參考如下:
Unet神經(jīng)網(wǎng)絡(luò)為什么會在醫(yī)學圖像分割表現(xiàn)好?
其余應(yīng)用:
————————
搬運參考:Unet學習筆記
【深度學習論文】:U-Net







