---
# System prepended metadata

title: '[論文筆記] MultiResUNet: Rethinking the U-Net architecteure for multimodal biomedical image segmentation'
tags: [Segmentation, MultiResUNet, UNet, Biomedical Image]

---

# [論文筆記] 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)




