CV | SRGAN論文筆記:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

 

題外話

時隔一年多,距離第一篇SRCNN 超分系列的文章再更新 >.< 隨着22個月的過去,超分在工業界的落地趨勢逐漸明朗,讓我們一起來回顧超分辨率這個領域又一經典里程碑式的方法——基於生成式對抗網絡的超分辨率網絡 SRGAN。

 

研究背景介紹

超分辨率(super resolution)任務的目標是將輸入的低分辨率圖像,例如256×256的圖像,等比例放大若干倍後(如放大4倍),輸出尺寸爲1024×1024的圖像。嚴格來說,現在PS裏使用的等比例縮放(拉住圖像對角線),也屬於超分辨率的一種。在SRCNN中也有討論過,隨着CNN對圖像處理領域的衝擊,將CNN應用到超分辨率方向已成爲主要趨勢。與傳統的縮放算法,例如基於線性插值、稀疏編碼的縮放算法,結合CNN的超分算法可以學習出更具有細節性更符合人眼觀測效果的圖像結果。在PSNR的數值指標上,CNN的方法相比傳統的方法更具魯棒性。

 

算法概述

本文介紹的方法是twitter團隊於2017年CVPR上發表的Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network,中文翻譯理解上是基於生成對抗網絡的單幀圖像超分辨率方法,該方法可以生成近似照片真實性的放大效果,在學術界上人們都將該方法簡稱爲SRGAN。

在SRCNN提出之後,後續的超分算法主要是依照它的算法框架來進行改進:1)增加更深的卷積層;2)使用更復雜的卷積結構;3)改進損失函數。儘管在PSNR值和表達能力上,這些方法推進了發展,一方面仍沒能在整體框架上進行突破。另一方面,儘管PSNR的值有所提高,但在生成細節上會傾向於抹去一些複雜的紋理。如上圖所示,SRResNet的生成結果是按照SRCNN的基本框架進行訓練,相比SRGAN取得了更高的PSNR值,但是在細節上來看SRGAN的結果更好。

 

SRGAN的作者將GAN與超分辨率任務相結合,這是第一個將對抗生成網絡引入超分任務的工作,對後續的超分工作奠定了一個新的方向。而且SRGAN也是第一個支持放大×4倍的方法,並且效果喜人。爲了更好地捕捉紋理和細節,該文作者對應設計出改進的損失函數,包含內容損失(content loss) 和對抗損失(adversarial loss)。除此之外,MOS的評價標準也被引入,MOS是mean opinion score的簡稱,通過培訓專業的圖像質量評價員,來對隨機的圖像打分,以此評價合成的圖像質量。

 

模型結構

如之前介紹過的生成對抗網絡GAN提及的,SRGAN也由兩個子網絡構成:生成模型Generator(縮寫爲G)和判別模型Discriminator(縮寫爲D),整體結構如下所示。

對於生成模型G:

模型的結構設計主要受ResNet啓發,由B個殘差block網絡結構級聯構成。每個殘差block中包含層順序爲 卷積conv--歸一化BN--激活層PReLU--卷積conv--歸一化BN--點加操作。值得注意的是,生成模型的大部分卷積操作都是保留圖像的原尺寸的,也就是低分辨率的W、H尺寸,只在C維度上加深。框圖裏靠近輸出的兩個綠框,大家可以看到一個PixelShuffler操作,它的作用等同於upsampling放大操作,兩個綠框分別對W和H維度進行兩倍的放大,到輸出的時候W和H就變爲目標的×4大小了。

 

對於判別模型D:

判別模型的結構就相對簡單,值得注意的是輸入部分,將生成的SR圖像和HR圖像隨機混合輸入到判別模型中進行判斷。不過我看了一些具體的實現,大家會把兩張圖像級聯起來或者拼接起來進行處理。這個輸入的具體做法可以看看哪種的效果更好。判別模型的後續處理都比較好理解,卷積--BN--激活,最後全連接爲1024維度輸出最終的判別概率,靠近1則爲HR,靠近0則爲SR。判別模型輸出接近0.5的時候,理論上是GAN訓練停止的標誌。這裏爲何是理論上在下一部分具體討論。

 

損失函數

引入GAN的機制後,對應的損失函數就得加上對抗損失項。整體的損失loss函數定義如下。

損失函數由兩個項構成,content loss和adversarial loss,分別對應生成圖像的質量(內容)和對抗網絡的判別而定義。在判別模型的收斂標準裏,理論上l_{Gen}的值趨近於0.5說明GAN訓練好了,但是看SRGAN的這個定義,l_{Gen}前有一個10^{-3}的係數,當然這個係數作者在後面的實驗部分應該說明是在多種條件訓練結果裏,選出的最佳的值。不過就我個人訓練了幾個網上SRGAN的實現代碼來看,即使l_{Gen}的值訓飛了,最終模型的生成效果也還不錯,只是可能與原文的PSNR有一些差距,但差距是可容忍的。關於GAN的訓練,有很多人總結過很多技巧性的細節,這個之後可以多多關注一下。

 

內容損失

內容損失content loss由兩部分組成,一部分和SRCNN的定義類似,主要基於MSE基於定義。對生成的圖像G(I)和目標圖像I進行點對點的方差值求和求平均。

另一部分也是作者提出的創新點之一,取名爲l_{VGG},具體定義如下。顧名思義,是利用VGG網絡分別對生成的圖像G(I)和目標高清圖像I分別進行特徵提取,在同一層卷積後池化之前,取特徵向量值進行點對點差值。這麼做是爲了進一步保證合成的圖像與目標圖像接近,更好地學習圖像的內容和紋理。

爲何使用基於GAN的生成效果會更好呢?作者給出分析如下圖。基於MSE的方法,也就是在SRGAN之前的方法,主要是基於MSE定義損失函數,傾向於對所有生成的圖像求均值,這個是根據MSE的基本定義來分析的。而基於GAN的方法,雖然生成的圖像,不能靠近所有樣本的分佈,但是會距離某些圖像內容很近,從而使得人眼感官提升。這可能也是SRGAN的PSNR雖然沒有SRResNet高,但是人眼看起來更逼真的原因。

 

實驗結果

作者給出了很詳細的實驗內容,還有很多分析。感興趣的同學們可以移步原文看看。下表是取自原文的一組實驗結果,和SRResNet相比,SRGAN的PSNR值並不出彩,但是在MOS這個人眼主觀評測指標下,SRGAN領先很多。

 

模型的落地和優化

因爲SRGAN是全卷積網絡,在推理階段用GPU加速會取得一定的收益,不過因爲超分的目標是生成高清的圖像,這部分想要達到實時則需要對模型進行剪裁或者更多地並行化設計。

 

歡迎大家評論區指正和討論!即將迎來四月啦!

 

 

後記:

宅在家的第60多++++天,已經數不出來了= = 工作加油!紀念奮鬥一週年啦!

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章