unet图像分割_UNet++解读 + 它是如何对UNet改进 + 作者的研究态度和方式
UNet++論文: 地址
UNet++論文翻譯:地址
UNet++源代碼: 地址
UNet++作者在知乎上進(jìn)行了解讀,里面還有視頻的講解,深入人心.里面有一句話令我印象深刻,我總結(jié)下: 很多論文給出了他們建議的網(wǎng)絡(luò)結(jié)構(gòu),其中包括非常多的細(xì)節(jié),比如用什么卷積,用幾層,怎么降采樣,學(xué)習(xí)率多少,優(yōu)化器用什么,這些都是比較直觀的參數(shù),其實(shí)這些在論文中給出參數(shù)并不見得是最好的,所以關(guān)注這些的意義不大,一個(gè)網(wǎng)絡(luò)結(jié)構(gòu),我們真正值得關(guān)注的是它的設(shè)計(jì)給我們傳達(dá)了什么信息,給我們引起了什么樣的思考,所以我們應(yīng)該要關(guān)注論文所傳遞的大方向,不要被論文中的細(xì)節(jié)局限了創(chuàng)造力, 而像這種細(xì)節(jié)參數(shù)的調(diào)整是屬于比較樸素的深度學(xué)習(xí)方法論,很容易花費(fèi)你很多時(shí)間,而最終并沒有自身科研水平的提升,。這很有感觸,很多時(shí)候急于發(fā)paper,改改里面參數(shù)啥的又發(fā)表,這樣真的可以提高科研水平嗎?我們應(yīng)該從一個(gè)大的方向思考,而不是把精力花在這些意義不大的事情上.作者在分析UNet時(shí)是從一個(gè)大的方向上分析,首先提出疑問,實(shí)踐驗(yàn)證,總結(jié)改進(jìn),重復(fù)上述過程...最后UNet++誕生了,雖然新的網(wǎng)絡(luò)很快代替它,但是作者的這種研究態(tài)度和方式是值得學(xué)習(xí)的!
(建議先看他的知乎和視頻,下面是我個(gè)人的學(xué)習(xí)筆記,總結(jié)作者的心路歷程)
1、網(wǎng)紅拓?fù)浣Y(jié)構(gòu)
編碼和解碼(encoder-decoder),早在2006年就被Hinton大神提出來發(fā)表在了nature上.當(dāng)時(shí)這個(gè)結(jié)構(gòu)提出的主要作用并不是分割,而是壓縮圖像和去噪聲.后來把這個(gè)思路被用在了圖像分割的問題上,也就是現(xiàn)在我們看到的FCN或者U-Net結(jié)構(gòu),在它被提出的三年中,有很多很多的論文去講如何改進(jìn)U-Net或者FCN,不過這個(gè)分割網(wǎng)絡(luò)的本質(zhì)的拓?fù)浣Y(jié)構(gòu)是沒有改動(dòng)的, 即下采樣、上采樣和skip connection.
這個(gè)結(jié)構(gòu)真的一點(diǎn)毛病都沒有嗎?顯然沒有, 大家都在這個(gè)經(jīng)典的結(jié)構(gòu)上不斷地去完善它. 在這三年中,U-Net得到的超過2500次的引用,FCN接近6000次的引用,大家都在做什么樣的改進(jìn)呢?如果讓你在這個(gè)經(jīng)典的結(jié)構(gòu)基礎(chǔ)上改進(jìn),你會(huì)去關(guān)注哪些點(diǎn)呢?
2、降采樣和升采樣
第一個(gè)問題: 降采樣對(duì)于分割網(wǎng)絡(luò)到底是不是必須的?問這個(gè)問題的原因就是,既然輸入和輸出都是相同大小的圖,為什么要折騰去降采樣一下再升采樣呢?
理論回答是這樣的: 降(下)采樣的理論意義,它可以增加對(duì)輸入圖像的一些小擾動(dòng)的魯棒性,比如圖像平移,旋轉(zhuǎn)等,減少過擬合的風(fēng)險(xiǎn),降低運(yùn)算量,和增加感受野的大小。升(上)采樣的最大的作用其實(shí)就是把抽象的特征再還原解碼到原圖的尺寸,最終得到分割結(jié)果。如下圖所示:
?作者認(rèn)為,對(duì)于特征提取階段,淺層結(jié)構(gòu)可以抓取圖像的一些簡單的特征,比如邊界,顏色,而深層結(jié)構(gòu)因?yàn)楦惺芤按罅?#xff0c;而且經(jīng)過的卷積操作多了,能抓取到圖像的一些說不清道不明的抽象特征,講的越來越玄學(xué)了,總之,淺有淺的側(cè)重,深有深的優(yōu)勢.然后他再次提出疑問:多深才好?U-Net為什么只在4層以后才返回去?問題實(shí)際是這樣的,下圖所示,既然 X1,0 、X2,0、 X3,0 、X4,0所抓取的特征都很重要,為什么我非要降到 X4,0 層了才開始上采樣回去呢?
3、網(wǎng)絡(luò)要多深
提出疑問后, 作者開始做實(shí)驗(yàn),為了驗(yàn)證多深才好,干脆每加一個(gè)深度(層次)就一個(gè)網(wǎng)絡(luò),然后測它們各自的分割表現(xiàn),如下圖所示,先不要看后兩個(gè)UNet++,就看這個(gè)不同深度的U-Net的表現(xiàn)(黃色條形圖),我們可以看出,不是越深越好吧,它背后的傳達(dá)的信息就是,不同層次特征的重要性對(duì)于不同的數(shù)據(jù)集是不一樣的,并不是說我設(shè)計(jì)一個(gè)4層的U-Net,就像原論文給出的那個(gè)結(jié)構(gòu),就一定對(duì)所有數(shù)據(jù)集的分割問題都最優(yōu)。(備注:作者分別用了兩個(gè)數(shù)據(jù)集:Electron Microscopy 和 Cell)
4、UNet++的萌芽
從上面的分析可見,不同數(shù)據(jù)集的最優(yōu)的深度是不一樣的, 但是總不能把所有不同深度的U-Net都訓(xùn)練一遍吧,這太耗時(shí)間了吧。如果給你一個(gè)數(shù)據(jù)集,訓(xùn)練你的網(wǎng)絡(luò),你并不知道網(wǎng)絡(luò)要多深才算最優(yōu),也就是你并不知道不同深度的特征的重要性,那有沒有辦法設(shè)計(jì)一個(gè)網(wǎng)絡(luò)使得它能夠?qū)W習(xí)不同深度的特征的重要性呢?
我把圖打出來就很簡單了。
我們來看一看, 在這個(gè)網(wǎng)絡(luò)里面你都可以找到1~4層的U-Net,它們?nèi)慷歼B在了一起. 這個(gè)結(jié)構(gòu)的好處就是我不管你哪個(gè)深度的特征有效,我干脆都給你用上,讓網(wǎng)絡(luò)自己去學(xué)習(xí)不同深度的特征的重要性。第二個(gè)好處是它共享了一個(gè)特征提取器(我認(rèn)為這說的是encoder),也就是你不需要訓(xùn)練一堆U-Net,而是只訓(xùn)練一個(gè)encoder,它的不同層次的特征由不同的decoder路徑來還原。這個(gè)encoder依舊可以靈活的用各種不同的backbone來代替。
5、無法訓(xùn)練
可惜的是,上面這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)是不能被訓(xùn)練的,原因在于,梯度不會(huì)經(jīng)過這個(gè)紅色的區(qū)域,由于這個(gè)區(qū)域和算loss function的地方(
)在反向傳播時(shí)的路途是斷開的。如下圖所示
如何解決無法訓(xùn)練這個(gè)問題?
- 第一個(gè)是用deep supervision,后面再說.
- 第二個(gè)解決方案是把結(jié)構(gòu)改成這樣子:
如果沒有我上面說的那一堆話來盤邏輯,這個(gè)結(jié)構(gòu)可能不那么容易想到,但是如果順著思路一步一步的走,這個(gè)結(jié)構(gòu)雖然不能說是顯而易見,也算是順理成章的.但是我提一句,這個(gè)結(jié)構(gòu)由UC Berkeley的團(tuán)隊(duì)提出,發(fā)表在今年的CVPR上,是一個(gè)oral的論文,題目是"Deep Layer Aggregation"。他們?cè)谡撐闹薪o出的關(guān)于分割網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn),他們還做了其他的工作,包括分類,和邊緣檢測。但是主要的思路就是剛剛盤的那些,目標(biāo)就是取整合各個(gè)不同層次的特征。
這只是一個(gè)題外話哦,我們繼續(xù)來看這個(gè)結(jié)構(gòu),請(qǐng)問,你覺得這個(gè)結(jié)構(gòu)又有什么問題?
為了回答這個(gè)問題,現(xiàn)在我們和UNet那個(gè)結(jié)構(gòu)對(duì)比一下,不難發(fā)現(xiàn)這個(gè)結(jié)構(gòu)強(qiáng)行去掉了U-Net本身自帶的長連接。取而代之的是一系列的短連接。那么我們來看看U-Net引以為傲的長連接到底有什么優(yōu)點(diǎn)。如下圖:
?作者認(rèn)為,U-Net中的長連接是有必要的,它聯(lián)系了輸入圖像的很多信息,有助于還原降采樣所帶來的信息損失.所以作者給出一個(gè)綜合長連接和短連接的方案.
6、UNet++模型誕生
這個(gè)綜合長連接和短連接的方案就是作者他們?cè)贛ICCAI中發(fā)表的UNet++,也就是說這里的短連接是為了使模型能夠得到訓(xùn)練,然后長連接是獲得更多信息.
(UNet++和剛剛說的那個(gè)CVPR的論文結(jié)構(gòu)也太像了吧,這個(gè)工作和UC Berkeley的研究是完全兩個(gè)獨(dú)立的工作,也算是一個(gè)美麗的巧合。UNet++在年初時(shí)思路就已經(jīng)成型了,CVPR那篇是我們七月份開會(huì)的時(shí)候看到的,當(dāng)時(shí)UNet++已經(jīng)被錄用了,所以相當(dāng)于同時(shí)提出。另外,和CVPR的那篇論文相比,作者還有一個(gè)更精彩的點(diǎn)埋在后面說,剛剛也留了一個(gè)伏筆)
7、參數(shù)多了是導(dǎo)致UNet++比UNet好嗎
UNet++的效果是比UNet好,從網(wǎng)絡(luò)結(jié)構(gòu)上看,說白了就是把原來空心的U-Net填滿了
所以有人會(huì)認(rèn)為是參數(shù)多了才導(dǎo)致效果好,而不是網(wǎng)絡(luò)結(jié)構(gòu)的增加.怎么反駁這個(gè)呢?
為了回答這個(gè)問題,同樣作者又去做實(shí)驗(yàn)驗(yàn)證
作者的做法是強(qiáng)行增加U-Net里面的參數(shù)量,讓它變寬,也就是增加它每個(gè)層的卷積核個(gè)數(shù)。由此,作者他們?cè)O(shè)計(jì)了一個(gè)叫wide U-Net的參考結(jié)構(gòu),先來看看UNet++的參數(shù)數(shù)量是9.04M,而U-Net是7.76M,多了差不多16%的參數(shù),所以wide U-Net我們?cè)谠O(shè)計(jì)時(shí)就讓它的參數(shù)比UNet++差不多,并且還稍微多一點(diǎn)點(diǎn),來證明效果好并不是無腦增加參數(shù)量帶來的
?顯然,這個(gè)實(shí)驗(yàn)用到了控制變量法,為了證明不是參數(shù)量影響了模型的表現(xiàn).所以增加U-Net參數(shù)使它變寬,即“wide” U-Net.這樣這個(gè)“wide” U-Net就和UNet++的參數(shù)差不多,甚至還多了點(diǎn).實(shí)驗(yàn)結(jié)果如下:
?實(shí)驗(yàn)證明,UNet++性能的提升和參數(shù)量無直接關(guān)系,和網(wǎng)絡(luò)結(jié)構(gòu)有關(guān).(不過這樣“無腦”增加參數(shù)的實(shí)驗(yàn),作者認(rèn)為有點(diǎn)敷衍,應(yīng)該還有更好的辦法來完善這個(gè)實(shí)驗(yàn),使它更有說服力,總之,作者這種研究思路和愛發(fā)現(xiàn)問題以及動(dòng)手實(shí)驗(yàn)值得我學(xué)習(xí))
另外,實(shí)驗(yàn)也證明了單純地把網(wǎng)絡(luò)變寬、把參數(shù)提上,對(duì)效果的提升并不大
8、簡單解讀UNet++
?從上面分析下來,我們可以解讀一下為什么UNet++好
解讀1:顯然它的優(yōu)勢是可以抓取不同層次的特征,將它們通過特征疊加的方式整合. 不同層次的特征,或者說不同大小的感受野,對(duì)于大小不一的目標(biāo)對(duì)象的敏感度是不同的,比如,感受野大的特征,可以很容易的識(shí)別出大物體的,但是在實(shí)際分割中,大物體邊緣信息和小物體本身是很容易被深層網(wǎng)絡(luò)一次次的降采樣和一次次升采樣給弄丟的,這個(gè)時(shí)候就可能需要感受野小的特征來幫助.而UNet++就是擁有不同大小的感受野,所以效果好.
解讀2:如果你橫著看其中一層的特征疊加過程,就像一個(gè)去年很火的DenseNet的結(jié)構(gòu),非常的巧合,原先的U-Net,橫著看就很像是Residual的結(jié)構(gòu),這個(gè)就很有意思了,UNet++對(duì)于U-Net分割效果提升可能和DenseNet對(duì)于ResNet分類效果的提升,原因如出一轍,因此,在解讀中作者他們也參考了Dense Connection的一些優(yōu)勢,比方說特征的再利用等等.
以上說法不一各有各的,這些解讀都是很直觀的認(rèn)識(shí),其實(shí)在深度學(xué)習(xí)里面,某某結(jié)構(gòu)效果優(yōu)于某某結(jié)構(gòu)的理由,或者你加這個(gè)操作比不加操作要好,很多時(shí)候是有玄學(xué)的味道在里頭,也有大量的工作也在探索深度網(wǎng)絡(luò)的可解釋性。
9、深監(jiān)督(Deep Supervision)
剛剛在講本篇的第5節(jié)的時(shí)候留了一個(gè)伏筆,說這個(gè)結(jié)構(gòu)在反向傳播的時(shí)候, 如果只用最右邊的一個(gè)loss來做的話, 中間部分會(huì)收不到過來的梯度,導(dǎo)致無法訓(xùn)練, 解決的辦法除了用短連接的那個(gè)結(jié)構(gòu)外,還有一個(gè)辦法就是用深監(jiān)督(deep supervision).如下圖所示,具體的實(shí)現(xiàn)操作就是在圖中 X0,1 、X0,2、 X0,3 、X0,4后面加一個(gè)1x1的卷積核,相當(dāng)于去監(jiān)督每個(gè)level,或者說監(jiān)督每個(gè)分支的U-Net的輸出。這樣可以解決那個(gè)結(jié)構(gòu)無法訓(xùn)練的問題.
雖然通過加入短連接解決了無法訓(xùn)練的問題,但是作者仍然把deep supervision加入到UNet++中,因?yàn)檫@會(huì)帶來一個(gè)非常棒的優(yōu)勢,就是剪枝
?10、剪枝
同時(shí)引出三個(gè)問題:
- 為什么UNet++可以被剪枝
- 如何剪枝
- 好處在哪里
?我們來看看為什么可以剪枝,這張圖特別的精彩。關(guān)注被剪掉的這部分,你會(huì)發(fā)現(xiàn),在測試的階段,由于輸入的圖像只會(huì)前向傳播,扔掉這部分對(duì)前面的輸出完全沒有影響的,而在訓(xùn)練階段,因?yàn)榧扔星跋?#xff0c;又有反向傳播,被剪掉的部分是會(huì)幫助其他部分做權(quán)重更新的。即測試時(shí),剪掉部分對(duì)剩余結(jié)構(gòu)不做影響,訓(xùn)練時(shí),剪掉部分對(duì)剩余部分有影響。這就是第一個(gè)問題的回答.
因?yàn)樵谏畋O(jiān)督的過程中,每個(gè)子網(wǎng)絡(luò)的輸出都其實(shí)已經(jīng)是圖像的分割結(jié)果了,所以如果小的子網(wǎng)絡(luò)的輸出結(jié)果已經(jīng)足夠好了,我們可以隨意的剪掉那些多余的部分
接著, 我們把每個(gè)剪完剩下的子網(wǎng)絡(luò)根據(jù)它們的深度命名為UNet++ L1,L2,L3,L4,后面會(huì)簡稱為L1~L4.
?第二個(gè)問題是如何去決定剪多少。因?yàn)樵谟?xùn)練模型的時(shí)候會(huì)把數(shù)據(jù)分為訓(xùn)練集,驗(yàn)證集和測試集,訓(xùn)練集上是一定擬合的很好的,測試集是我們不能碰的,所以我們會(huì)根據(jù)子網(wǎng)絡(luò)在驗(yàn)證集的結(jié)果來決定剪多少(所謂的驗(yàn)證集就是從訓(xùn)練集中分出來的數(shù)據(jù),用來監(jiān)測訓(xùn)練過程用的)。下面是監(jiān)督各個(gè)子網(wǎng)絡(luò)在驗(yàn)證集下運(yùn)行的效果:
?先看看L1~L4的網(wǎng)絡(luò)參數(shù)量,差了好多,L1只有0.1M,而L4有9M,也就是理論上如果L1的結(jié)果我是滿意的,那么模型可以被剪掉的參數(shù)達(dá)到98.8%。不過根據(jù)我們的四個(gè)數(shù)據(jù)集,L1的效果并不會(huì)那么好,因?yàn)樘珳\了嘛。但是其中有三個(gè)數(shù)據(jù)集顯示L2的結(jié)果和L4已經(jīng)非常接近了,也就是說對(duì)于這三個(gè)數(shù)據(jù)集,在測試階段,我們不需要用9M的L4網(wǎng)絡(luò),用0.5M的L2網(wǎng)絡(luò)就足夠了。
這也再一次回答了,網(wǎng)絡(luò)需要多深合適這個(gè)問題,這幅圖是不是就一目了然。網(wǎng)絡(luò)的深度和數(shù)據(jù)集的難度是有關(guān)系的,這四個(gè)數(shù)據(jù)集當(dāng)中,第二個(gè),也就是息肉分割是最難的,大家可以看到縱坐標(biāo),它代表分割的評(píng)價(jià)指標(biāo),越大越好,其他都能達(dá)到挺高的,但是唯獨(dú)息肉分割只有在30左右,對(duì)于比較難的數(shù)據(jù)集,可以看到網(wǎng)絡(luò)越深,它的分割結(jié)果是在不斷上升的。對(duì)于大多數(shù)比較簡單的分割問題,其實(shí)并不需要非常深,非常大的網(wǎng)絡(luò)就可以達(dá)到很不錯(cuò)的精度了。
那我們回答第三個(gè)問題,剪枝有什么好處?
橫坐標(biāo)代表的是在測試階段,單顯卡12G的TITAN X (Pascal)下,分割一萬張圖需要的時(shí)間。我們可以看到不同的模型大小,測試的時(shí)間差好多。如果比較L2和L4的話,就差了三倍之多。
?對(duì)于測試的速度,用這一幅圖會(huì)更清晰。我們統(tǒng)計(jì)了用不同的模型,1秒鐘可以分割多少的圖。如果用L2來代替L4的話,速度確實(shí)能提升三倍。
剪枝應(yīng)用最多的就是在移動(dòng)手機(jī)端了,根據(jù)模型的參數(shù)量,如果L2得到的效果和L4相近,模型的內(nèi)存可以省18倍。還是非??捎^的數(shù)目。
關(guān)于剪枝的這部分作者認(rèn)為是對(duì)原先的U-Net的一個(gè)很大的改觀,原來的結(jié)構(gòu)過于刻板,并且沒有很好的利用不用層級(jí)的特征。
11、總結(jié)
簡單的總結(jié)一下,UNet++的第一個(gè)優(yōu)勢就是精度的提升,這個(gè)應(yīng)該是它整合了不同層次的特征所帶來的,第二個(gè)是靈活的網(wǎng)絡(luò)結(jié)構(gòu)配合深監(jiān)督,讓參數(shù)量巨大的深度網(wǎng)絡(luò)在可接受的精度范圍內(nèi)大幅度的縮減參數(shù)量。
作者給我們帶來了非常飽滿的心路歷程, 這個(gè)過程我們學(xué)到了要想設(shè)計(jì)出更強(qiáng)的結(jié)構(gòu),你得首先明白這個(gè)結(jié)構(gòu),甚至它的原型(如U-Net)設(shè)計(jì)背后的心路歷程。
(從認(rèn)識(shí)原型,到分析它的組成,到批判性的解讀,再到改進(jìn)思路的形成,實(shí)驗(yàn)設(shè)計(jì),自問自答 ,這是我在這個(gè)作者身上學(xué)到的做研究的范式)
reference
1、UNet++作者批判UNet https://zhuanlan.zhihu.com/p/44958351
總結(jié)
以上是生活随笔為你收集整理的unet图像分割_UNet++解读 + 它是如何对UNet改进 + 作者的研究态度和方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux删除文件_Linux中删除特殊
- 下一篇: 5g虚拟技术旅游_5G造就文旅新时代,驴