之前介紹了第一篇超分辨率模型在深度學習中的實現——SRCNN模型,具體的介紹請參看我這一篇博客:https://www.cnblogs.com/Robin-tao/p/12942977.html
SRCNN的缺點是:(1) 是依賴於圖像區域的context;(2)是訓練收斂速度太慢;(3)是網絡只適用於單一尺度。這些缺點在基於殘差網絡的SR應用中解決了,簡稱為VDSR模型。
今天來介紹ESPCN網絡模型
1 ESPCN模型介紹
圖1-SRCNN 模型圖
圖1是SRCNN的網絡模型,對於左端網絡輸入來說,已經是雙三次插值的高分辨率圖像(注:在SRCNN中,網絡的輸入是經過雙三次插值方法到HR圖像相同尺寸的圖像,這個輸入圖像算是“粗糙”的高分辨率圖像)。這已經是在高分辨率空間了。也就是說剩下的Patch extraction 和Non-Linear mapping 和 Reconstruction都是在高分辨率空間中完成的操作。
但ESPCN指出,由於SRCNN是在最后一步是重構高分辨率圖像塊,作為輸入是經過雙三次插值的,已經高分辨率圖像(圖像尺寸和HR圖像一樣),在中間的2個網絡相當於在高分辨率空間中進行處理,這增加了運算的復雜度。
后面有文獻總結了不同上采樣模型的策略,如圖2所示:
圖2-4種上采樣網絡結構
ESPCN就是圖2上面4種上采樣網絡結構(b),也就是Post-upsampling SR結構。SRCNN是采用了(a):Pre-upsampling SR結構。至於剩下2種網絡結構后面的模型會采用,咱以后繼續說。
ESPCN的網絡結構:
圖3 ESPCN模型結構圖
網絡模型的pytorch代碼:
圖4 ESPCN 網絡代碼
ESPCN提出在網絡的最末端實現LR到HR的分辨率,並從LR特征圖中獲得高分辨率的HR數據。這樣就不需要在更大的HR分辨率下執行大部分SR操作。也就是輸入是低分辨率圖像(未經過插值處理,尺寸和HR圖像不一樣),在隱藏層中都是低分辨率圖像進行處理,也就是在隱藏層沒有添加任何關於高分辨率的先驗信息。到了亞像素卷積層,才映射到高分辨率空間。
將$\boldsymbol{r}^2\times \boldsymbol{H}\times \boldsymbol{W} $的特征圖像,重新排列成的$1\times \boldsymbol{rH}\times \boldsymbol{rW}$ 高分辨率圖像。亞像素卷積層如圖5所示
圖5 亞像素卷積層
亞像素卷積層,並沒有做卷積操作,而是直接將$\boldsymbol{r}^2$ 個通道的特征圖,重新進行排列,這樣就完成了LR到HR的恢復。主要學習映射的步驟已經隱含在之前的隱藏層網絡中。
亞像素卷積層能夠將LR數據映射到HR空間中,與傳統的卷積層相比,所需的計算量很小。
pytorch中的API即完成了網絡中的最后一層,亞像素卷積層,
nn.PixelShuffle()
功能是:
Pixelshuffle會將shape為 ( _ , r * r * C , H , W) 的Tensor reshape成( _ , C , r * H , r * W) 的Tensor。
輸入輸出的shape如下:
- Input: (N,C∗upscale_factor2,H,W)
- Output: (N,C,H∗upscale_factor,W∗upscale_factor)
2 總結
ESPCN的創新點:
(1)采用亞像素對高分辨率信息進行恢復。
(2)采用Post-upsampling SR上采樣模型。
(3)選擇tanh而不是relu作為激活函數。
3 結果(摘自原論文)
對幾種方法的PSNR比較:
結果圖: