0
本文作者: 黃善清 | 2018-09-30 23:46 |
雷鋒網(wǎng)AI研習社按:經(jīng)典的 Encoder-Decoder 結構在目標分割問題中展現(xiàn)出了舉足輕重的作用,然而這樣一個相對固定的框架使得模型在感受野大小和邊界分割精度兩方面很難達到兼顧。本次公開課,講者以 U-Net 為案例分析,總結現(xiàn)有的分割網(wǎng)絡創(chuàng)新,以及探討還有哪些有針對性的改進方向。
分享嘉賓:
周縱葦,亞利桑那州立大學生物信息學在讀博士,師從 Jianming Liang 教授,主要研究方向為醫(yī)學圖像分析,深度學習等。其研究工作曾在 CVPR , DLMIA ,EJNMMI Research 發(fā)表。
公開課回放地址:
分享主題:研習 U-Net ——現(xiàn)有的分割網(wǎng)絡創(chuàng)新
分享提綱:
肢解經(jīng)典的 U-Net 結構,反思其組成元素的必要性和優(yōu)缺點
解讀現(xiàn)有的對于 U-Net 結構性創(chuàng)新的改進思路
分享我們對其提出的一個改進方案—— UNet++
雷鋒網(wǎng)AI研習社將其分享內(nèi)容整理如下:
在計算機視覺領域,全卷積網(wǎng)絡 FCN 毫無疑問是最有人氣的圖像分割網(wǎng)絡,可一旦聚焦到醫(yī)學圖像處理領域,U-Net 網(wǎng)絡會是更熱門的選擇。這么說吧,幾乎所有的分割問題我們都會拿 U-Net 先看一下基本的結果,再進行「魔改」。
和 FCN 相比,U-Net 的第一個特點是完全對稱,也就是左邊和右邊是很類似的,而 FCN 的 decoder 相對簡單,只用了一個 deconvolution 的操作,之后并沒有跟上卷積結構;第二個區(qū)別就是 skip connection,F(xiàn)CN 用的是加操作(summation),U-Net 用的是疊操作(concatenation)。都是使用的「編碼-解碼」結構——需要強調的是,「編碼-解碼」結構一開始并非用于分割圖像,而是用在壓縮圖像和去除噪音上。
簡單的過一下這個網(wǎng)紅結構,我們先提取出它的拓撲結構,這樣會比較容易分析它的實質,排除很多細節(jié)的干擾。
輸入是一幅圖,輸出是目標的分割結果。繼續(xù)簡化就是,一幅圖,編碼,或者說降采樣,然后解碼,也就是升采樣,然后輸出一個分割結果。根據(jù)結果和真實分割的差異,反向傳播來訓練這個分割網(wǎng)絡。
我們可以說,U-Net 里面最精彩的部分就是這三部分:
下采樣
上采樣
skip connection
這就是在我眼中的大部分分割網(wǎng)絡的拓撲結構。對于這個拓撲結構,一個非常廣義的問題就是:
這個三年不動的拓撲結構真的一點兒毛病都沒有嗎?
在這三年中,U-Net 得到的超過 2500 次的引用,F(xiàn)CN 接近 6000 次的引用,大家都在做什么樣的改進呢?如果讓你在這個經(jīng)典的結構基礎上改進,你會去關注哪些點呢?
首先一個問題是:要多深合適?
這里我想強調的一點是,很多論文給出了他們建議的網(wǎng)絡結構,其中包括非常多的細節(jié),比如用什么卷積,用幾層,怎么降采樣,學習率多少,優(yōu)化器用什么,這些都是比較直觀的參數(shù),其實這些在論文中給出參數(shù)并不見得是最好的,所以關注這些的意義不大,一個網(wǎng)絡結構,我們真正值得關注的是它的設計傳達了什么信息。
好,我們回來繼續(xù)討論到底需要多深的問題。其實這個是非常靈活的,涉及到的一個點就是特征提取器,U-Net 和 FCN 為什么成功,因為它相當于給了一個網(wǎng)絡的框架,具體用什么特征提取器,隨便。
關于到底要多深這個問題,還有一個引申的問題就是,降采樣對于分割網(wǎng)絡到底是不是必須的?問這個問題的原因就是,既然輸入和輸出都是相同大小的圖,為什么要折騰去降采樣一下再升采樣呢?
比較直接的回答當然是降采樣的理論意義,我簡單朗讀一下,它可以增加對輸入圖像的一些小擾動的魯棒性,比如圖像平移,旋轉等,減少過擬合的風險,降低運算量,和增加感受野的大小。升采樣的最大的作用其實就是把抽象的特征再還原解碼到原圖的尺寸,最終得到分割結果。
這些理論的解釋都是有道理的,在我的理解中,對于特征提取階段,淺層結構可以抓取圖像的一些簡單的特征,比如邊界,顏色,而深層結構因為感受野大了,而且經(jīng)過的卷積操作多了,能抓取到圖像的一些說不清道不明的抽象特征。總之,淺有淺的側重,深有深的優(yōu)勢。
那么接下來是關鍵,我們心中的目標很明確了,就是使用淺層和深層的特征!但是總不能訓練這些個 U-Net 吧,未免也太多了。好,要你來,你怎么來利用這些不同深度的,各自能抓取不同層次的特征的 U-Net?
我把圖打出來就很簡單了。
我們來看一看,這樣是不是把 1~4 層的 U-Net 全給連一起了。我們來看它們的子集,包含 1 層 U-Net,2 層 U-Net,以此類推。這個結構的好處就是我不管你哪個深度的特征有效,我干脆都給你用上,讓網(wǎng)絡自己去學習不同深度的特征的重要性。第二個好處是它共享了一個特征提取器,也就是你不需要訓練一堆 U-Net,而是只訓練一個 encoder,它的不同層次的特征由不同的 decoder 路徑來還原。這個 encoder 依舊可以靈活的用各種不同的 backbone 來代替。
可惜的是,這個網(wǎng)絡結構是不能被訓練的,原因在于,不會由任何梯度會經(jīng)過這個紅色區(qū)域,因為它和算 loss function 的地方是在反向傳播時是斷開的。
關于解決方案,我主要想到了兩個:
第一個是用 deep supervision,強行加梯度是吧,關于這個,我待會兒展開來說。
第二個解決方案是把結構改成這樣子:
這個結構由 UC Berkeley 的團隊提出,發(fā)表在今年的 CVPR 上,是一個 oral 的論文,題目是"Deep Layer Aggregation"。現(xiàn)在我們和上面那個結構對比一下,不難發(fā)現(xiàn)這個結構強行去掉了 U-Net 本身自帶的長連接。取而代之的是一系列的短連接。
我們認為,U-Net 中的長連接是有必要的,它聯(lián)系了輸入圖像的很多信息,有助于還原降采樣所帶來的信息損失。
因此,我的建議是最好給出一個綜合長連接和短連接的方案,也就是我們提出的 UNet++。
對于這個主體結構,我們在論文中給出了一些點評,說白了就是把原來空心的 U-Net 填滿了,優(yōu)勢是可以抓取不同層次的特征,將它們通過特征疊加的方式整合,不同層次的特征,或者說不同大小的感受野,對于大小不一的目標對象的敏感度是不同的,比如,感受野大的特征,可以很容易的識別出大物體的,但是在實際分割中,大物體邊緣信息和小物體本身是很容易被深層網(wǎng)絡一次次的降采樣和一次次升采樣給弄丟的,這個時候就可能需要感受野小的特征來幫助。
另一個解讀就是如果你橫著看其中一層的特征疊加過程,就像一個去年很火的 DenseNet 的結構,非常的巧合,原先的 U-Net,橫著看就很像是 Residual 的結構,這個就很有意思了,UNet++對于 U-Net 分割效果提升可能和 DenseNet 對于 ResNet 分類效果的提升,原因如出一轍,因此,在解讀中我們也參考了 Dense Connection 的一些優(yōu)勢,比方說特征的再利用等等。
這些解讀都是很直觀的認識,其實在深度學習里面,某某結構效果優(yōu)于某某結構的理由,或者你加這個操作比不加操作要好,很多時候是有玄學的味道在里頭,也有大量的工作也在探索深度網(wǎng)絡的可解釋性。關于 UNet++的主體結構,我不想花時間贅述了。
接下來我要說的這部分,非常的有意思。剛剛在講這里的時候留了一個伏筆,說這個結構在反向傳播的時候中間部分會收不到過來的梯度,如果只用最右邊的一個 loss 來做的話。
剛才說了,一個非常直接的解決方案就是深監(jiān)督,也就是 deep supervision。當 UNet++配合上這樣一個填滿的 U-Net 結構時,會帶來其中一個非常棒的優(yōu)勢——剪枝。
這是因為,在測試的階段,由于輸入的圖像只會前向傳播,扔掉這部分對前面的輸出完全沒有影響的,而在訓練階段,因為既有前向,又有反向傳播,被剪掉的部分是會幫助其他部分做權重更新的。在深監(jiān)督的過程中,每個子網(wǎng)絡的輸出都其實已經(jīng)是圖像的分割結果了,所以如果小的子網(wǎng)絡的輸出結果已經(jīng)足夠好了,我們可以隨意的剪掉那些多余的部分了。
這里我想問兩個問題:
為什么要在測試的時候剪枝,而不是直接拿剪完的 L1,L2,L3 訓練?
怎么去決定剪多少?
【答案請回看視頻 00:34:10處, http://www.mooc.ai/open/course/549?=Leiphone】
讓我們看一組結果。
先看看 L1~L4 的網(wǎng)絡參數(shù)量,差了好多,L1 只有 0.1M,而 L4 有 9M,也就是理論上如果 L1 的結果我是滿意的,那么模型可以被剪掉的參數(shù)達到 98.8%。不過根據(jù)我們的四個數(shù)據(jù)集,L1 的效果并不會那么好,因為太淺了嘛。但是其中有三個數(shù)據(jù)集顯示 L2 的結果和 L4 已經(jīng)非常接近了,也就是說對于這三個數(shù)據(jù)集,在測試階段,我們不需要用 9M 的網(wǎng)絡,用半 M 的網(wǎng)絡足夠了。
回想一下一開始我提出的問題,網(wǎng)絡需要多深合適,這幅圖是不是就一目了然。網(wǎng)絡的深度和數(shù)據(jù)集的難度是有關系的,這四個數(shù)據(jù)集當中,第二個,也就是息肉分割是最難的,大家可以看到縱坐標,它代表分割的評價指標,越大越好,其他都能達到挺高的,但是唯獨息肉分割只有在 30 左右,對于比較難的數(shù)據(jù)集,可以看到網(wǎng)絡越深,它的分割結果是在不斷上升的。對于大多數(shù)比較簡單的分割問題,其實并不需要非常深,非常大的網(wǎng)絡就可以達到很不錯的精度了。
橫坐標代表的是在測試階段,單顯卡 12G 的 TITAN X (Pascal) 下,分割一萬張圖需要的時間。我們可以看到不同的模型大小,測試的時間差好多。如果比較 L2 和 L4 的話,就差了三倍之多。
對于測試的速度,用這一幅圖會更清晰。我們統(tǒng)計了用不同的模型,1 秒鐘可以分割多少的圖。如果用 L2 來代替 L4 的話,速度確實能提升三倍。
剪枝應用最多的就是在移動手機端了,根據(jù)模型的參數(shù)量,如果 L2 得到的效果和 L4 相近,模型的內(nèi)存可以省 18 倍。還是非??捎^的數(shù)目。
關于剪枝的這部分我認為是對原先的 U-Net 的一個很大的改觀,原來的結構過于刻板,并且沒有很好的利用不用層級的特征。
簡單的總結一下,UNet++的第一個優(yōu)勢就是精度的提升,這個應該它整合了不同層次的特征所帶來的,第二個是靈活的網(wǎng)絡結構配合深監(jiān)督,讓參數(shù)量巨大的深度網(wǎng)絡在可接受的精度范圍內(nèi)大幅度的縮減參數(shù)量。
最后給大家分享一下我們工作成果的網(wǎng)絡鏈接:
論文:https://arxiv.org/abs/1807.10165
代碼:https://github.com/MrGiovanni/Nested-UNet
微博:@MrGiovanni
我今天的分享就到此為止,謝謝大家!
以上就是本期嘉賓的全部分享內(nèi)容。更多公開課視頻請到雷鋒網(wǎng)AI研習社社區(qū)(https://club.leiphone.com/)觀看。關注微信公眾號:AI 研習社(okweiwu),可獲取最新公開課直播時間預告。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉載。詳情見轉載須知。