在現實情況下,SR模型通常會由於實際得blur kernel與預先假設的不一致而造成嚴重的performance drop。blind SR問題就是要嘗試解決blur kernel未知情況下的SR問題。本文就針對blind SR提出,預測每張照片blur kernel的方法,再將blur kernel的信息結合到SR網絡中。
文中提出的預測blur kernel的方法稱為Iterative kernel correction(IKC)。這個方法基於一個發現:由於kernel不匹配而造成的artifacts存在一定的pattern,因此作者提出用一個網絡對kernel進行預測。但是這個問題是一個不適定性問題,對kernel $k$的准確預測是不可能的。因此加入了一個corrector對kernel進行糾正,作者發現如果只進行一次糾正,效果並不好。因此提出了迭代式糾正的方法。
算法的具體流程如下。
predicator首先預測一個初始的kernel $h_0$,訓練時的優化函數為$||k_P(I^{LR};\theta_P||^2_2$,其結構如下
當kernel預測完成后,需要將kernel信息整合入SR模型中。在此之前針對不同的kernel進行SR的方法為SRMD,他是將LR圖像和kernel maps拼接成一個$(b+C)\times H\times W$的輸入。作者指出這樣做並不是最好的方法,由於kernel maps不存在圖像信息,同時對kernel maps和圖像進行卷積會引入與圖片不相關的interference。並且kernel信息只影響了第一層,網絡的深層很難受到影響。因此作者提出了應用spatial feature transform(SFT)層的方法,構建SFTMD。
取SRResNet作為主干網絡,在residual模塊的所有conv層和global residual connection之后都加入SFT層。SRT層對每一個中間層的特征圖都進行仿射變換(進行縮放和平移)。這個變換可以定義為$SFT(F, H)=\gamma\odot F+\beta$,其中兩個變換參數$\gamma,\beta$是由CNN得到的。這個CNN取特征圖$(C_f\times H\times W)$與kernel maps(b\times H \times W)進行拼接作為輸入。
由這個網絡$F$得到的SR結果$I^{SR}$會和該輪的kernel maps一起輸入到corrector中,用於修正並產生新一輪的kernel($h_i=h_{i-1}+\Delta h_i$)。corrector的優化目標為$||k-(C(I^{SR};\theta_C)+k')||^2_2$,網絡結構如下。
blur kernel首先都使用PCA方法進行降維以減小computation。並且由於PCA為kernel提供了一個特征表示,使得模型學習到的是SR圖像與這些特征而不是kernel width之間的關系,從而使IKC不易受到kernel width的影響。在真實圖像數據集中IKC表現很好,並且將IKC與 SRMD+手工選擇的kernel進行比較,IKC雖然對比度相對較低,但也同樣有清晰的邊界和更自然的效果。
作者還指出,雖然本文中是針對各向同性的模糊核進行討論,而實際情況還存在一定的motion blur。但是輕微的motion blur情況下,IKC的基礎即這種kernel mismatch的現象仍然存在。因此通過employing such asymmetry of the kernel mismatch in each direction,IKC可以應用於更實際的場景。
個人感覺本文中提出的方法最后測試時需要運行多次,時間可能會比較慢?【待實驗】和之前讀到的MZSR相比,MZSR的表現要比這個有提升。本質上IKC是不是一個去模糊與超分的結合?