# [論文筆記] MultiResUNet: Rethinking the U-Net architecteure for multimodal biomedical image segmentation ###### tags: `MultiResUNet` `Biomedical Image` `Segmentation` `UNet` 2018年的論文,來自UNet的變形,以tensorflow-keras框架呈現。 ## 摘要 **MultiResUNet**,被視作UNet的接班人! - 創新點 - 將較大的捲積層(5x5、7x7)以一連串更輕便的3x3捲積塊來分解,並引入1x1捲積層,添加residual connection,使model可學習到一些額外的空間訊息。 - 套用Res path取代原版UNet的skip connection。 ## 引言 電腦輔助醫學影像分析的主要任務為二: **切割、診斷**。 傳統且簡單的方法在遇到大量數據時無法保持強健性(Robustness),轉而使用深度學習的方法。 即便在電腦視覺領域已取得突破,但其需要大量的訓練資料, 而這是醫學影像所缺乏的,畢竟**取得不易且精確標註的成本過高**。 UNet架構類似FCN和SegNet,呈對稱結構,具有: **可以萃取影像的空間訊息的Encoder和建構segmentation map的Decoder**, 最重要的部分則是**skip connection**,使得network可以**取回在pooling時遺失的空間訊息**。 --- **MultiResUNet 優點**: 1. 可以在較少epochs得到更好的結果 2. 更好地勾畫出隱約的邊界(delineate faint boundaries) 3. 對擾動(perturbations)更免疫 4. 在異常值上更可靠 --- ## 架構 先分別放上傳統UNet和改良過後的MultiResUNet ![](https://i.imgur.com/lW5vJOO.png) ![](https://i.imgur.com/9ahDdMR.png) 經由比較,可以看到主要的差異就**在MultiRes Blocks**和**Res Path**。 - **MultiRes Blocks** ![](https://i.imgur.com/U3gwtgp.png) - 由(a)可得知用多重分辨率分析功能增強U-Net的最簡單方法是將3×3和7×7卷積運算與5×5卷積運算並行地合併(效仿Inception Network) - 由(b)可看見另一種替代方案是使用步距卷積(Strided convolution)(Wang等人,2018),但在本文的實驗中,儘管有更佳的表現,但卻因並行引入額外的捲積層,而增加了過大的內存需求。 - 於是藉由(b)的概念,作者將較大的捲積層(5x5、7x7)以一連串更輕便的3x3捲積塊來分解,並引入1x1捲積層,添加residual connection,使model可學習到一些額外的空間訊息,得到(c )。 $W = \alpha * U$ :要傳送到下一個block前之input layer的filter 個數 $U$: number of filters $\alpha$: scalar coefficient ```python=135 W = alpha * U shortcut = inp shortcut = conv2d_bn(shortcut, int(W*0.167) + int(W*0.333) + int(W*0.5), 1, 1, activation=None, padding='same') conv3x3 = conv2d_bn(inp, int(W*0.167), 3, 3, activation='relu', padding='same') conv5x5 = conv2d_bn(conv3x3, int(W*0.333), 3, 3, activation='relu', padding='same') conv7x7 = conv2d_bn(conv5x5, int(W*0.5), 3, 3, activation='relu', padding='same') out = concatenate([conv3x3, conv5x5, conv7x7], axis=3) out = BatchNormalization(axis=3)(out) out = add([shortcut, out]) out = Activation('relu')(out) out = BatchNormalization(axis=3)(out) ``` - **Res Path** ![](https://i.imgur.com/QNKhCeB.png) - 引入殘差連接,用3x3的filter於捲積層,並附帶1x1filter的residual connections 這些額外的非線性運算是為了消除Encoder和Decoder間的語意鴻溝。 ```python=175 shortcut = inp shortcut = conv2d_bn(shortcut, filters, 1, 1, activation=None, padding='same') out = conv2d_bn(inp, filters, 3, 3, activation='relu', padding='same') out = add([shortcut, out]) out = Activation('relu')(out) out = BatchNormalization(axis=3)(out) ``` ## 訓練 做了一般以下四種比較,來凸顯創新點的好壞: - UNet - UNet + ResPath - UNet + ResBlocks - MultiResUNet ![](https://i.imgur.com/l6ehqWt.jpg) *由圖d、j:* **Unet + ResBlocks** 會有切割不連續的現象。(進而推測ResPath可讓連續且同質的區域更相同) *由圖e、k:* **Unet + ResPath** 雖然可以減緩切割不連續的現象,但對於邊緣檢測來說效果不彰。(推測ResBlocks有改善整體邊緣檢測的效果) ## 實作 ![](https://i.imgur.com/Ew2ZBaD.png) ![](https://i.imgur.com/3dWvv0x.png) ![](https://i.imgur.com/P1jRcy8.png)