# Upsampling Methods: Comparison and Pitfalls
## 🌱 簡短結論
* **Transposed Convolution (Deconv)**:想讓網路學會上採樣 → 精細但容易 checkerboard artifact。
* **Bilinear / Nearest Interpolation**:快速、平滑,但無法學習,只是固定插值。
* **Unpooling + Convolution**:能利用 pooling indices 恢復結構,特別適合語意分割(如 SegNet),比 transposed conv 穩定。
## 🔍 詳細比較
### 1. Transposed Convolution
* **原理**:在 feature map 上插 0,再做卷積,等效於「學習的上採樣」。
* **優點**:上採樣過程可學習 → 更靈活。
* **缺點**:容易出現 **棋盤格 (checkerboard) artifact**,需要設計 kernel/stride 避免。
* **適用**:GAN、超解析度,或需要高表達力的 decoder。
### 2. Bilinear / Nearest Interpolation
* **原理**:直接用插值公式放大(例如 bilinear = 周邊 4 像素加權平均)。
* **優點**:計算快,無參數,效果穩定。
* **缺點**:固定映射,不能學習,細節恢復有限。
* **適用**:影像分割的 baseline FCN,或當 decoder 不需要太多表達力時。
### 3. Unpooling + Convolution
* **原理**:上採樣時根據 max pooling 保存的 index 把值放回原位,再用卷積學習細節。
* **優點**:結合「結構性上採樣 (unpooling) + 學習能力 (conv)」,能保留更多幾何資訊。
* **缺點**:需要在 forward 時保存 pooling indices,記憶體消耗較大。
* **適用**:語意分割(SegNet)、需要結構還原的任務。
## 📊 選擇指南
| 方法 | 學習能力 | 成本 | 特點 | 適合場景 |
| --------------- | ----- | -- | ------------- | ------------------- |
| Transposed Conv | ✅ 可學習 | 中等 | 可能有 artifact | GAN, SR, 分割 |
| Bilinear Interp | ❌ 固定 | 最低 | 平滑、穩定 | baseline 分割, 上游特徵對齊 |
| Unpool + Conv | ✅ 可學習 | 較高 | 保留 pooling 結構 | SegNet, 高精度分割 |
## Unpooling + Convolution 使用情境
SegNet 與高精度分割
### SegNet
* 發表於 2015 年,用於語意分割。
* **Encoder**:卷積 + Max Pooling 壓縮特徵。
* **Decoder**:使用 **Max Unpooling**(依據 pooling indices 還原位置)+ Conv,避免隨機插值模糊。
* **優點**:對邊界恢復更好,避免棋盤格。
* **應用**:自駕車道路、室內場景、醫療影像。
### 高精度分割
* 指需要像素級別準確性的任務,特別是邊界或小物體:
* 醫療影像(腫瘤邊界)
* 自駕車(車道線、路緣)
* 遙測(建築物、農田區域)
* SegNet 專為此類需求設計。
## 棋盤格 Artifact 的解釋
### 原因
* Transposed Conv = 插 0 + 卷積。
* 輸出像素被覆蓋次數不均勻,有些多次、有些少次 → 亮暗格子。
### 結果
* 模型輸出呈現「格子狀」明暗紋路 → 棋盤格 artifact。
### 解決方法
1. 使用 kernel size 可被 stride 整除(例 stride=2, kernel=2)。
2. 改用插值 (bilinear/nearest) + Conv。
3. 使用 Sub-pixel Convolution / PixelShuffle。
### 視覺化舉例


✨ **總結**
* **快又穩定** → Bilinear Interpolation。
* **學習細節** → Transposed Convolution(注意 artifact)。
* **還原結構** → Unpooling + Convolution(SegNet 等高精度分割)。