鋪墊
在圖像分割領域,全卷積網絡 FCN 是非常經典的網絡,而 U-Net 在醫學圖像分割方面表現的更加突出;
FCN vs U-Nnet
相同點:二者都采用了 encode 和 decode 的經典思路,也就是 AutoEncode 的思路;
這種思路起初被用於 圖像壓縮和去噪,后來被用到圖像分割,是不是很厲害呢?所以別看他簡單,重要的是思想;
不同點:
1. U-Net 是一種完全對稱的結構,網絡的 decode 部分仍然是卷積結構,而 FCN 的 decode 相對簡單,只是 deconvolution 反卷積操作;
2. skip connection 的使用,U-Net 是疊操作,FCN 是加操作;
疊操作:1,2 ==> [1, 2]
加操作:1, 2 ==> 3
一個 decode 被玩出這么多花,是不是很厲害?所以,別覺得簡單;
學習 U-Net 的重點是掌握 網絡結構的思想,而非 U-Net 本身;
FCN 和 U-Net 都是非常經典的基礎網絡結構,事實上,他們已經被多次引用,擴展后的網絡屢次發表頂會;
U-Net
下面我們認識一下主角
看起來稍微有些亂;
我們把它的 拓撲結構 抽取出來,這樣更接近它的實質,排除細節的干擾;
這就是 大部分 分割網絡 的拓撲結構;
分為三部分:
下采樣:增加 對輸入微小噪聲 的魯棒性,也就是關注主要矛盾,提取特征,增加感受野大小;
上采樣:對特征進行還原;
skip connection:把淺層特征 疊加到 深層特征上,同時關注了淺層和深層特征;
擴展
思考一下,U-Nnet 把這個拓撲結構擴展成它的模樣,如果讓你去擴展,你會如何?
思考-網絡深度
這是網絡設計時必須要考慮的問題;
首先,我要明確的告訴你,模型的深淺 並不是 作者設計多少就是多少;
U-Net 的重點就是 同時利用了 深淺層特征,那為什么 它 4 層就最深了呢?
有人在 他自己的數據集上 訓練了不同深度 的 U-Net 並測試,結果如下
實驗證明,並不是越深越好,也不是 4 層最好;
實驗折射出這樣的結論:不同層次(深淺)的特征的重要性 在不同數據集上 表現不同;U-Net 作者設計 4 層,只能說 4 層適合他的數據集;
靈魂之問:到底要多深?
最笨的辦法是 挨個試,訓練不同深度的模型,看看測試效果,顯然不是很高大上;
回到 U-Net 網絡的思想,即 同時使用淺層和深層特征,在這個思想的前提下探討網絡深度,腦洞開一下;
把 4 種不同深度的網絡強行疊加起來;
這么做的思想是,我不管哪個層次的特征最重要,都給你算上,讓模型自己去學習;
可惜的是這個網絡中的紅色區域無法進行反向傳播,因為網絡是斷開的;
怎么解決呢?這才是本文的核心,即如何設計一個網絡;
網絡設計
針對上面的問題,給出幾套方案
1. 修改網絡結構
把長連接全部改成短連接;
這樣做雖然可反向傳播,但是長連接的作用是更好的利用淺層特征,改成短連接后,淺層特征被反卷積后的特征代替,顯然信息丟失很多;
雖然說這個設計不是很完美,但注意,這個設計也發表在 CVPR 上了哦,所以搞起來吧;
2. U-Net++
很簡單,把長連接全部加上,這就 CVPR 了
3. deep supervision,深監督
深監督是一種思想,它把 不同深度的 模型 的 輸出 用一定的方法 統計起來,這樣可以觀測到不同 深度 的輸出,從而更好的設計網絡的深度;
再次強調,它只是一種思想,沒有具體形式;
下圖就是 把 深監督 套到了 U-Net++ 上;
深監督最大的意義在於 剪枝
剪枝在移動端的作用十分明顯;
在訓練時 我們訓練不同深度融合的網絡,如果 淺層網絡的結果已經滿足需求,那么深層網絡的權重將置零,也就等於沒了,在測試時,速度會大大提升;
參考資料:
https://zhuanlan.zhihu.com/p/44958351 大神之作,堅決只看這一篇