侯開紀,葉海洋,張莆林,劉 哲
(江漢大學人工智能學院,武漢 430056)
隨著當代智能計算機技術和信息技術以及視覺傳遞交互技術的日益成熟,我們已迎來高度信息化的新時代。正因如此,就要求我們對信息處理相關技術進行深入的研究,從而提供更加多元化的選擇。而圖像的處理及其相關分析技術是不可或缺的一環,在日益信息化的場景中應用廣泛[1]。
圖像超分辨率在國防軍事、醫療影像、人臉識別等領域具有廣泛的應用。本文研究基于SRGAN[2]模型的圖像超分辨率技術,通過百度飛槳paddlepaddle[3]訓練了SRGAN 網絡并進行了部署,并根據部署的SRGAN 網絡構建了基于Django技術的圖像超分辨率系統。
本文計劃對神經網絡模型[4]、超分辨率算法等內容進行復現,并且針對存在的問題展開深入研究,對已有模型的不足之處提出改進和優化,最終得到一個理想的超分辨率神經網絡模型。
SRGAN 是一種基于GAN 模型來對圖像進行超分辨率重建的算法模型,由生成網絡(generator)和判別網絡(discriminator)構成[2]。通過輸入低分辨率的像素圖來輸出其對應的超分辨率像素圖像,將原始分辨率像素圖像和生成的超分辨率像素圖像依次輸入判別網絡,當判別網絡D無法區分二者時,最終達到平衡狀態。SRGAN 就實現了重構超分辨率像素圖像。
訓練SRGAN 模型的過程如下:首先將高分辨率圖像(IHR)進行降采樣得到其對應的低分辨率圖像(ILR),生成網絡將低分辨率圖像經由一個卷積層的處理,獲得該像素圖像的特征及其參數;其次調用激活函數,再通過卷積層獲得該像素圖像的主要特征參數;然后調用殘差模型;再調用批量歸一化(BN)層,殘差模塊重新導入激活函數;最后經過兩次池化層操作,使用亞像素來提高分辨率,獲得對應的超分辨率圖像(ISR)。
生成器使用SRResNet。其輸入為一張低分辨率圖像(ILR),將卷積層和prelu 函數作為激活函數的激活層來提取淺層的特征參數。將提取到的淺層特征參數傳入殘差塊來提取深層特征參數。最后經由一個上采樣層,生成較高分辨率的像素圖像。如圖1 所示,k表示卷積核尺寸、n表示輸出通道數、s為卷積步長[5]。

圖1 生成網絡結構
1.2.1 殘差塊
殘差塊(如圖2所示)由Conv2D卷積層、Batch-Norm2D函數、prelu函數以及跳過連接(skip connection)組成,其優點是可以避免梯度消失,較為穩定地通過加深層數來提高模型。

圖2 殘差塊
1.2.2 上采樣塊
上采樣層有兩個上采樣塊。上采樣塊包括Conv2D、upscale_factor為2的pixelshuffle和prelu函數。其作用是放大原圖像,獲得更高的分辨率。如圖3所示。

圖3 上采樣塊
判別器用于估計輸入到判別器的是真實的圖像的概率。判別器含有8 個卷積層,從第2 個卷積層開始,每個卷積層后面加一個Batch-Norm 層來歸一化中間層。如圖4所示,k表示卷積核尺寸、n表示輸出通道數、s為卷積步長[5]。

圖4 判別器整體結構
SRGAN 生成的網絡損失函數為感知損失,由兩部分組成:內容損失和對抗損失[5]。
對抗損失方面的計算方法:
其中,DθD表示原始像素圖像的分辨率被成功提升的概率(實現超分辨率),GθD(ILR)表示生成的高清分辨率像素圖像。
本文調用的內容損失函數有兩個:MSEloss[5],表示像素層面的誤差;VGGloss[5]表示激活函數的損失。MSEloss計算方法如下:
VGGloss的計算方法如下:
本文使用CelebA 數據集進行模型的訓練和實驗效果測試,CelebA 是由香港中文大學建立并且開放使用的數據集,其中涵蓋了10177個名人及其相關的202599 張高清圖片,并且全部的像素圖都做好了相關特征標記,從而方便進行模型訓練以及使用,這對圖像超分相關的訓練是非常好用的數據集。本文使用的切塊大小為44 × 44。
本文使用的Linux系統版為4.15.0-140-generic,使用的開發語言是Python 3.7.4,并使用Paddlepaddle 2.0.2框架作為核心深度學習框架。
為了與SRGAN 作比較,本文同時訓練一個SRResNet 網絡。SRResNet 和SRGAN 的 生 成器進行相同初始化。此外,在卷積層進行卷積操作時,將padding 的大小設置為0,減少卷積運算量。將原圖(IHR)進行壓縮來獲得其對應的低分辨率(ILR)圖。如圖5所示。

圖5 左圖為ILR,右圖為IHR
訓練過程中將batchsize 設置為16,并使用Adam 優化器對梯度的一階矩估計(first moment estimation)和二階矩估計(second moment estimation)進行綜合考慮,計算出更新步長。本文將學習率設置為10-4,β 設置為0.9 進行105迭代后,將學習率調整為10-5繼續迭代。使用損失函數通過反向傳播更新參數,更新整個網絡卷積層的權重。并且為進一步增強數據,本文將測試圖進行隨機旋轉、翻轉和去噪[6]。
訓練過程中關于低分辨率圖、SRResNet、SRGAN以及原圖對比如圖6所示。

圖6 低分辨率圖、SRResNet、SRGAN、原圖對比
對于SRGAN 的模型訓練,本文在原基礎上對SRGAN 實現了優化:將原數據進行了數據增強、圖像去噪;在進行卷積操作時,減小padding 的值從而減少卷積運算量;在訓練過程中動態調整學習率。在本文中,按照SRGAN 模型的框架結構:從生成網絡模型到判別網絡模型來實現對應的操作。首先準備好了一定量未結果處理的原始圖像集,將原始像素圖導入到生成器當中,經過多層的卷積、多層的池化處理以后,再次將數據傳輸進入判別器中,得到的相較于原始圖像有更高像素以及清晰度的結果圖像。與原始像素圖和結果圖像進行對比,最終發現結果圖像在像素數增多的同時還不破壞原始像素圖的風格,保證了一定的真實性。[5]