paper: https://arxiv.org/pdf/1809.00219.pdf
Enhanced SRGAN,顧名思義,就是SRGAN的增加版
改進的地方包括網絡結構、對抗損失和感知損失
網絡結構
作者參考SRResNet結構作為整體的網絡結構,SRResNet的基本結構如下:
判別器和SRGAN一樣,多層卷積,最后得到一個patch
生成器有些區別,將residual blocks換成了RRDB
5個conv模塊拼成一個Dense block,3個Dense block拼成一個RRDB(密集的殘差中的殘差模塊),論文中連續使用了23個RRDB (/恐怖)
Dense Block加到主路徑上還有一個參數β
可以發現,與SRGAN相比,去掉了BN層
loss 改進
adversaial loss
借鑒Relativeistic GAN,然判別器預測圖像的真實性而不是“是否是fake圖片”
SRGAN中的判別器D用於估計輸入到判別器中的圖像是真實且自然圖像的概率,而Relativistic判別器則嘗試估計真實圖像相對來說比fake圖像更逼真的概率。
perceptual loss
感知loss,也就是vgg loss
激活前后的feature map,作者發現,隨着網絡的加深,激活之后的大部分features會變得inactive
因此,使用激活前的feature map來計算loss
SRGAN
self.vgg = vgg19(pretrained=True).features[:36].eval().to(config.DEVICE)
ESRGAN
self.vgg = vgg19(pretrained=True).features[:35].eval().to(config.DEVICE)
代碼上看就是少了一層,論文中還解釋了一大堆,自己可以去看一下。。。
Network Interpolation
作者說純的 GAN-based method產生銳利的邊緣和豐富的紋理,但是有一些unpleasant artifact;而純的PSNR-oriented method會輸出卡通風格的模糊圖片
通過使用網絡插值,unpleasant artifact會減少,而紋理會保留。對比起來,Image interpolation不能有效的去除artifact
實現起來也很簡單,將兩個網絡的權重線性相加(這網絡結構不就要一模一樣嗎?
一些思考
(1) 為什么要去掉BN?
論文有寫
ESRGAN不使用批量標准化。學習如何規范化層之間的數據分布是許多深度神經網絡中的一般做法。BN層通過在訓練中使用一批數據的均值和方差規范化特征並且在測試時通過使用在整個訓練集上預估后的均值和方差規范化測試數據。當訓練集和測試集的統計結果相差甚遠時,BN層常常趨向於引入一些不太爽的偽影並且限制了模型的泛化能力,刪除批量標准化可提高穩定性並降低計算成本(減少學習參數)
(2) VGG 如何選取
正如我在SRGAN中說得那樣,vgg需要是在同一數據集上訓練得到的嗎?如果不是,該怎么選
該論文作者說,他們使用了一個用於材料識別的VGG微調網絡,它關注紋理而不是對象。
雖然MINC loss帶來的感知指數的增益是微乎其微的,但我們仍然認為,探索專注於紋理的感知損失對SR任務至關重要
其他
一個訓練技巧
除了上述的改進,作者也使用了一些技巧來訓練深層網絡:1.對殘差信息進行scaling,即將殘差信息乘以一個0到1之間的數,用於防止不穩定;2.更小的初始化,作者發現當初始化參數的方差變小(x 0.1)時,有利於幫助網絡跳出局部極小值,殘差結構更容易進行訓練。
參考鏈接:
1. https://zhuanlan.zhihu.com/p/73395512
2. https://zhuanlan.zhihu.com/p/54473407