# 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。 ### 視覺化舉例 ![illustration of Transposed Conv.](https://hackmd.io/_uploads/rJP2SgL6le.png) ![checkboard effect example - Odena et al. 2016 (Deconvolution and Checkerboard Artifacts)](https://distill.pub/2016/deconv-checkerboard/thumbnail.jpg) ✨ **總結** * **快又穩定** → Bilinear Interpolation。 * **學習細節** → Transposed Convolution(注意 artifact)。 * **還原結構** → Unpooling + Convolution(SegNet 等高精度分割)。