
向AI轉型的程序員都關注了這個號??????
人工智能大數(shù)據(jù)與深度學習 ?公眾號:datayx
一.? 圖像超分辨率重建概述
1. 概念
圖像分辨率是一組用于評估圖像中蘊含細節(jié)信息豐富程度的性能參數(shù),包括時間分辨率、空間分辨率及色階分辨率等,體現(xiàn)了成像系統(tǒng)實際所能反映物體細節(jié)信息的能力。相較于低分辨率圖像,高分辨率圖像通常包含更大的像素密度、更豐富的紋理細節(jié)及更高的可信賴度。但在實際上情況中,受采集設備與環(huán)境、網絡傳輸介質與帶寬、圖像退化模型本身等諸多因素的約束,我們通常并不能直接得到具有邊緣銳化、無成塊模糊的理想高分辨率圖像。提升圖像分辨率的最直接的做法是對采集系統(tǒng)中的光學硬件進行改進,但是由于制造工藝難以大幅改進并且制造成本十分高昂,因此物理上解決圖像低分辨率問題往往代價太大。由此,從軟件和算法的角度著手,實現(xiàn)圖像超分辨率重建的技術成為了圖像處理和計算機視覺等多個領域的熱點研究課題。
圖像的超分辨率重建技術指的是將給定的低分辨率圖像通過特定的算法恢復成相應的高分辨率圖像。具體來說,圖像超分辨率重建技術指的是利用數(shù)字圖像處理、計算機視覺等領域的相關知識,借由特定的算法和處理流程,從給定的低分辨率圖像中重建出高分辨率圖像的過程。其旨在克服或補償由于圖像采集系統(tǒng)或采集環(huán)境本身的限制,導致的成像圖像模糊、質量低下、感興趣區(qū)域不顯著等問題。
簡單來理解超分辨率重建就是將小尺寸圖像變?yōu)榇蟪叽鐖D像,使圖像更加“清晰”。具體效果如下圖所示:

可以看到,通過特定的超分辨率重建算法,使得原本模糊的圖像變得清晰了。讀者可能會疑惑,直接對低分辨率圖像進行“拉伸”不就可以了嗎?答案是可以的,但是效果并不好。傳統(tǒng)的“拉伸”型算法主要采用近鄰搜索等方式,即對低分辨率圖像中的每個像素采用近鄰查找或近鄰插值的方式進行重建,這種手工設定的方式只考慮了局部并不能滿足每個像素的特殊情況,難以恢復出低分辨率圖像原本的細節(jié)信息。因此,一系列有效的超分辨率重建算法開始陸續(xù)被研究學者提出,重建能力不斷加強,直至今日,依托深度學習技術,圖像的超分辨率重建已經取得了非凡的成績,在效果上愈發(fā)真實和清晰。
2. 應用領域
1955年,Toraldo di Francia在光學成像領域首次明確定義了超分辨率這一概念,主要是指利用光學相關的知識,恢復出衍射極限以外的數(shù)據(jù)信息的過程。1964年左右,Harris和Goodman則首次提出了圖像超分辨率這一概念,主要是指利用外推頻譜的方法合成出細節(jié)信息更豐富的單幀圖像的過程。1984 年,在前人的基礎上,Tsai和 Huang 等首次提出使用多幀低分辨率圖像重建出高分辨率圖像的方法后, 超分辨率重建技術開始受到了學術界和工業(yè)界廣泛的關注和研究。
圖像超分辨率重建技術在多個領域都有著廣泛的應用范圍和研究意義。主要包括:
(1) 圖像壓縮領域
在視頻會議等實時性要求較高的場合,可以在傳輸前預先對圖片進行壓縮,等待傳輸完畢,再由接收端解碼后通過超分辨率重建技術復原出原始圖像序列,極大減少存儲所需的空間及傳輸所需的帶寬。
(2) 醫(yī)學成像領域
對醫(yī)學圖像進行超分辨率重建,可以在不增加高分辨率成像技術成本的基礎上,降低對成像環(huán)境的要求,通過復原出的清晰醫(yī)學影像,實現(xiàn)對病變細胞的精準探測,有助于醫(yī)生對患者病情做出更好的診斷。
(3) 遙感成像領域
高分辨率遙感衛(wèi)星的研制具有耗時長、價格高、流程復雜等特點,由此研究者將圖像超分辨率重建技術引入了該領域,試圖解決高分辨率的遙感成像難以獲取這一挑戰(zhàn),使得能夠在不改變探測系統(tǒng)本身的前提下提高觀測圖像的分辨率。
(4) 公共安防領域
公共場合的監(jiān)控設備采集到的視頻往往受到天氣、距離等因素的影響,存在圖像模糊、分辨率低等問題。通過對采集到的視頻進行超分辨率重建,可以為辦案人員恢復出車牌號碼、清晰人臉等重要信息,為案件偵破提供必要線索。
(5) 視頻感知領域
通過圖像超分辨率重建技術,可以起到增強視頻畫質、改善視頻的質量,提升用戶的視覺體驗的作用。
3. 研究進展
按照時間和效果進行分類,可以將超分辨率重建算法分為傳統(tǒng)算法和深度學習算法兩類。
3.1 傳統(tǒng)超分辨率重建算法
傳統(tǒng)的超分辨率重建算法主要依靠基本的數(shù)字圖像處理技術進行重建,常見的有如下幾類:
(1) 基于插值的超分辨率重建
基于插值的方法將圖像上每個像素都看做是圖像平面上的一個點,那么對超分辨率圖像的估計可以看做是利用已知的像素信息為平面上未知的像素信息進行擬合的過程,這通常由一個預定義的變換函數(shù)或者插值核來完成?;诓逯档姆椒ㄓ嬎愫唵?、易于理解,但是也存在著一些明顯的缺陷。
首先,它假設像素灰度值的變化是一個連續(xù)的、平滑的過程,但實際上這種假設并不完全成立。其次,在重建過程中,僅根據(jù)一個事先定義的轉換函數(shù)來計算超分辨率圖像,不考慮圖像的降質退化模型,往往會導致復原出的圖像出現(xiàn)模糊、鋸齒等現(xiàn)象。常見的基于插值的方法包括最近鄰插值法、雙線性插值法和雙立方插值法等。
(2) 基于退化模型的超分辨率重建
此類方法從圖像的降質退化模型出發(fā),假定高分辨率圖像是經過了適當?shù)倪\動變換、模糊及噪聲才得到低分辨率圖像。這種方法通過提取低分辨率圖像中的關鍵信息,并結合對未知的超分辨率圖像的先驗知識來約束超分辨率圖像的生成。常見的方法包括迭代反投影法、凸集投影法和最大后驗概率法等。
(3) 基于學習的超分辨率重建
基于學習的方法則是利用大量的訓練數(shù)據(jù),從中學習低分辨率圖像和高分辨率圖像之間某種對應關系,然后根據(jù)學習到的映射關系來預測低分辨率圖像所對應的高分辨率圖像,從而實現(xiàn)圖像的超分辨率重建過程。常見的基于學習的方法包括流形學習、稀疏編碼方法。
3.2 基于深度學習的超分辨率重建算法
機器學習是人工智能的一個重要分支,而深度學習則是機器學習中最主要的一個算法,其旨在通過多層非線性變換,提取數(shù)據(jù)的高層抽象特征,學習數(shù)據(jù)潛在的分布規(guī)律,從而獲取對新數(shù)據(jù)做出合理的判斷或者預測的能力。隨著人工智能和計算機硬件的不斷發(fā)展,Hinton等人在2006年提出了深度學習這一概念,其旨在利用多層非線性變換提取數(shù)據(jù)的高層抽象特征。憑借著強大的擬合能力,深度學習開始在各個領域嶄露頭角,特別是在圖像與視覺領域,卷積神經網絡大放異,這也使得越來越多的研究者開始嘗試將深度學習引入到超分辨率重建領域。
2014年,Dong等人首次將深度學習應用到圖像超分辨率重建領域,他們使用一個三層的卷積神經網絡學習低分辨率圖像與高分辨率圖像之間映射關系,自此,在超分辨率重建率領域掀起了深度學習的浪潮,他們的設計的網絡模型命名為SRCNN(Super-Resolution Convolutional Neural Network)。
SRCNN采用了插值的方式先將低分辨率圖像進行放大,再通過模型進行復原。Shi等人則認為這種預先采用近鄰插值的方式本身已經影響了性能,如果從源頭出發(fā),應該從樣本中去學習如何進行放大,他們基于這個原理提出了ESPCN (Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network)算法。該算法在將低分辨率圖像送入神經網絡之前,無需對給定的低分辨率圖像進行一個上采樣過程,而是引入一個亞像素卷積層(Sub-pixel convolution layer),來間接實現(xiàn)圖像的放大過程。這種做法極大降低了SRCNN的計算量,提高了重建效率。
這里需要注意到,不管是SRCNN還是ESPCN,它們均使用了MSE作為目標函數(shù)來訓練模型。2017年,Christian Ledig等人從照片感知角度出發(fā),通過對抗網絡來進行超分重建(論文題目:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)。他們認為,大部分深度學習超分算法采用的MSE損失函數(shù)會導致重建的圖像過于平滑,缺乏感官上的照片真實感。他們改用生成對抗網絡(Generative Adversarial Networks, GAN)來進行重建,并且定義了新的感知目標函數(shù),算法被命名為SRGAN,由一個生成器和一個判別器組成。生成器負責合成高分辨率圖像,判別器用于判斷給定的圖像是來自生成器還是真實樣本。通過一個博弈的對抗過程,使得生成器能夠將給定的低分辨率圖像重建為高分辨率圖像。在SRGAN這篇論文中,作者同時提出了一個對比算法,名為SRResNet。SRResNet依然采用了MSE作為最終的損失函數(shù),與以往不同的是,SRResNet采用了足夠深的殘差卷積網絡模型,相比于其它的殘差學習重建算法,SRResNet本身也能夠取得較好的效果。
由于SRGAN這篇論文同時提出了兩種當前主流模式的深度學習超分重建算法,因此,接下來將以SRGAN這篇論文為主線,依次講解SRResNet和SRGAN算法實現(xiàn)原理,并采用Pytorch深度學習框架完成上述兩個算法的復現(xiàn)。
二.? SRResNet算法原理和Pytorch實現(xiàn)
1. 超分重建基本處理流程
最早的采用深度學習進行超分重建的算法是SRCNN算法,其原理很簡單,對于輸入的一張低分辨率圖像,SRCNN首先使用雙立方插值將其放大至目標尺寸,然后利用一個三層的卷積神經網絡去擬合低分辨率圖像與高分辨率圖像之間的非線性映射,最后將網絡輸出的結果作為重建后的高分辨率圖像。盡管原理簡單,但是依托深度學習模型以及大樣本數(shù)據(jù)的學習,在性能上超過了當時一眾傳統(tǒng)的圖像處理算法,開啟了深度學習在超分辨率領域的研究征程。SRCNN的網絡結構如圖2所示。

SRCNN作為早期開創(chuàng)性的研究論文,也為后面的工作奠定了處理超分問題的基本流程:
(1) 尋找大量真實場景下圖像樣本;
(2) 對每張圖像進行下采樣處理降低圖像分辨率,一般有2倍下采樣、3倍下采樣、4倍下采樣等。如果是2倍下采樣,則圖像長寬均變成原來的1/2.。下采樣前的圖像作為高分辨率圖像H,下采樣后的圖像作為低分辨率圖像L,L和H構成一個有效的圖像對用于后期模型訓練;
(3) 訓練模型時,對低分辨率圖像L進行放大還原為高分辨率圖像SR,然后與原始的高分辨率圖像H進行比較,其差異用來調整模型的參數(shù),通過迭代訓練,使得差異最小。實際情況下,研究學者提出了多種損失函數(shù)用來定義這種差異,不同的定義方式也會直接影響最終的重建效果;
(4) 訓練完的模型可以用來對新的低分辨率圖像進行重建,得到高分辨率圖像。
從實際操作上來看,整個超分重建分為兩步:圖像放大和修復。所謂放大就是采用某種方式(SRCNN采用了插值上采樣)將圖像放大到指定倍數(shù),然后再根據(jù)圖像修復原理,將放大后的圖像映射為目標圖像。超分辨率重建不僅能夠放大圖像尺寸,在某種意義上具備了圖像修復的作用,可以在一定程度上削弱圖像中的噪聲、模糊等。因此,超分辨率重建的很多算法也被學者遷移到圖像修復領域中,完成一些諸如jpep壓縮去燥、去模糊等任務。

簡化版的超分重建處理流程如圖3所示,當然,圖像放大和修復兩個步驟的順序可以任意互換。
2. 構建深度網絡模型提高超分重建性能
SRCNN只采用了3個卷積層來實現(xiàn)超分重建,有文獻指出如果采用更深的網絡結構模型,那么可以重建出更高質量的圖像,因為更深的網絡模型可以抽取出更高級的圖像特征,這種深層模型對圖像可以更好的進行表達。在SRCNN之后,有不少研究人員嘗試加深網絡結構以期取得更佳的重建性能,但是越深的模型越不能很好的收斂,無法得到期望的結果。部分研究學者通過遷移學習來逐步的增加模型深度,但這種方式加深程度有限。因此,亟需一種有效的模型,使得構建深層網絡模型變得容易并且有效。這個問題直到2015年由何凱明團隊提出ResNet網絡才得以有效解決。
ResNet中文名字叫作深度殘差網絡,主要作用是圖像分類。現(xiàn)在在圖像分割、目標檢測等領域都有很廣泛的運用。ResNet在傳統(tǒng)卷積神經網絡中加入了殘差學習(residual learning),解決了深層網絡中梯度彌散和精度下降(訓練集)的問題,使網絡能夠越來越深,既保證了精度,又控制了速度。
ResNet可以直觀的來理解其背后的意義。以往的神經網絡模型每一層學習的是一個 y = f(x) 的映射,可以想象的到,隨著層數(shù)不斷加深,每個函數(shù)映射出來的y誤差逐漸累計,誤差越來越大,梯度在反向傳播的過程中越來越發(fā)散。這時候,如果改變一下每層的映射關系,改為 y = f(x) + x,也就是在每層的結束加上原始輸入,此時輸入是x,輸出是f(x)+x,那么自然的f(x)趨向于0,或者說f(x)是一個相對較小的值,這樣,即便層數(shù)不斷加大,這個誤差f(x)依然控制在一個較小值,整個模型訓練時不容易發(fā)散。

上圖為殘差網絡的原理圖,可以看到一根線直接跨越兩層網絡(跳鏈),將原始數(shù)據(jù)x帶入到了輸出中,此時F(x)預測的是一個差值。有了殘差學習這種強大的網絡結構,就可以按照SRCNN的思路構建用于超分重建的深度神經網絡。SRResNet算法主干部分就采用了這種網絡結構,如下圖所示:

上述模型采用了多個深度殘差模塊進行圖像的特征抽取,多次運用跳鏈技術將輸入連接到網絡輸出,這種結構能夠保證整個網絡的穩(wěn)定性。由于采用了深度模型,相比淺層模型能夠更有效的挖掘圖像特征,在性能上可以超越淺層模型算法(SRResNet使用了16個殘差模塊)。注意到,上述模型每層僅僅改變了圖像的通道數(shù),并沒有改變圖像的尺寸大小,從這個意義上來說這個網絡可以認為是前面提到的修復模型。下面會介紹如何在這個模型基礎上再增加一個子模塊用來放大圖像,從而構建一個完整的超分重建模型。
3.? 基于子像素卷積放大圖像尺寸
子像素卷積(Sub-pixel convolution)是一種巧妙的圖像及特征圖放大方法,又叫做pixel shuffle(像素清洗)。在深度學習超分辨率重建中,常見的擴尺度方法有直接上采樣,雙線性插值,反卷積等等。ESPCN算法中提出了一種超分辨率擴尺度方法,即為子像素卷積方法,該方法后續(xù)也被應用在了SRResNet和SRGAN算法中。因此,這里需要先介紹子像素卷積的原理及實現(xiàn)方式。
采用CNN對特征圖進行放大一般會采用deconvolution等方法,這種方法通常會帶入過多人工因素,而子像素卷積會大大降低這個風險。因為子像素卷積放大使用的參數(shù)是需要學習的,相比那些手工設定的方式,這種通過樣本學習的方式其放大性能更加準確。
具體實現(xiàn)原理如下圖所示:

上圖很直觀得表達了子像素卷積的流程。假設,如果想對原圖放大3倍,那么需要生成出3^2=9個同等大小的特征圖,也就是通道數(shù)擴充了9倍(這個通過普通的卷積操作即可實現(xiàn))。然后將九個同等大小的特征圖拼成一個放大3倍的大圖,這就是子像素卷積操作了。
實現(xiàn)時先將原始特征圖通過卷積擴展其通道數(shù),如果是想放大4倍,那么就需要將通道數(shù)擴展為原來的16倍。特征圖做完卷積后再按照特定的格式進行排列,即可得到一張大圖,這就是所謂的像素清洗。通過像素清洗,特征的通道數(shù)重新恢復為原來輸入時的大小,但是每個特征圖的尺寸變大了。這里注意到每個像素的擴展方式由對應的卷積來決定,此時卷積的參數(shù)是需要學習的,因此,相比于手工設計的放大方式,這種基于學習的放大方式能夠更好的去擬合像素之間的關系。
SRResNet模型也利用子像素卷積來放大圖像,具體的,在圖5所示模型后面添加兩個子像素卷積模塊,每個子像素卷積模塊使得輸入圖像放大2倍,因此這個模型最終可以將圖像放大4倍,如下圖所示:

4.? SRResNet結構剖析
SRResNet使用深度殘差網絡來構建超分重建模型,主要包含兩部分:深度殘差模型、子像素卷積模型。深度殘差模型用來進行高效的特征提取,可以在一定程度上削弱圖像噪點。子像素卷積模型主要用來放大圖像尺寸。完整的SRResNet網絡結果如下圖所示:

上圖中,k表示卷積核大小,n表示輸出通道數(shù),s表示步長。除了深度殘差模塊和子像素卷積模塊以外,在整個模型輸入和輸出部分均添加了一個卷積模塊用于數(shù)據(jù)調整和增強。
需要注意的是,SRResNet模型使用MSE作為目標函數(shù),也就是通過模型還原出來的高分辨率圖像與原始高分辨率圖像的均方誤差,公式如下:

MSE也是目前大部分超分重建算法采用的目標函數(shù)。后面我們會看到,使用該目標函數(shù)重建的超分圖像并不能很好的符合人眼主觀感受,SRGAN算法正是基于此進行的改進。
5. Pytorch實現(xiàn)
本節(jié)將從源碼出發(fā),完成SRResNet算法的建模、訓練和推理。本文基于深度學習框架Pytorch來完成所有的編碼工作,讀者在閱讀本文代碼前需要熟悉Pytorch基本操作命令。
代碼,模型,數(shù)據(jù)集獲取方式
關注微信公眾號 datayx? 然后回復?超分?即可獲取。
AI項目體驗地址?https://loveai.tech
該工程比較大,主要是包含了用于訓練的COCO2014數(shù)據(jù)集。提供這樣一個完整的工程包是為了方便讀者只需要下載和解壓就可以直接運行,而不需要再去額外的尋找數(shù)據(jù)集和測試集。代碼里也提供了已經訓練好的.pth模型文件。
訓練結果
訓練共用時5小時19分6秒(2塊GTX 1080Ti顯卡),訓練完成后保存的模型共17.8M。下圖展示了訓練過程中的損失函數(shù)變化??梢钥吹剑S著訓練的進行,損失函數(shù)逐漸開始收斂,在結束的時候基本處在收斂平穩(wěn)點。

下圖展示了訓練過程中訓練數(shù)據(jù)超分重建的效果圖,依次展示epoch=1、60和130時的效果,每張圖像共三行,第一行為低分辨率圖像,第二行為當前模型重建出的超分圖像,第三行為實際的真實原始清晰圖像??梢钥吹剑S著迭代次數(shù)的增加,超分還原的效果越來越好,到了第99個epoch的時候還原出來的圖像已經大幅削弱了塊狀噪點的影響,圖像更加的平滑和清晰。



三.? SRGAN算法原理和Pytorch實現(xiàn)
SRResNet算法是一個單模型算法,從圖像輸入到圖像輸出中間通過各個卷積模塊的操作完成,整個結構比較清晰。但是SRResNet也有不可避免的缺陷,就是它采用了MSE作為最終的目標函數(shù),而這個MSE是直接通過衡量模型輸出和真值的像素差異來計算的,SRGAN算法指出,這種目標函數(shù)會使得超分重建出的圖像過于平滑,盡管PSNR和SSIM值會比較高,但是重建出來的圖像并不能夠很好的符合人眼主觀感受,丟失了細節(jié)紋理信息。下面給出一張圖來說明SRResNet算法和SRGAN算法超分重建效果的不同之處:

從圖上可以看到,原圖因為分辨率較低,產生了模糊并且丟失了大量的細節(jié)信息,雙線性插值無法有效的去模糊,而SRResNet算法盡管能夠一定程度上去除模糊,但是其紋理細節(jié)不清晰。最后會發(fā)現(xiàn),SRGAN算法不僅去除了模糊,而且還逼真的重建出了水面上的紋理細節(jié),使得重建的圖片視覺上與真值圖非常吻合。
那怎么讓模型在紋理細節(jié)丟失的情況下“無中生有”的重建出這些信息呢?答案就是生成對抗網絡(Generative Adversarial
Network, GAN)。
1. 生成對抗網絡(GAN)
?GAN的主要靈感來源于博弈論中博弈的思想,應用到深度學習上來說,就是構造兩個深度學習模型:生成網絡G(Generator)和判別網絡D(Discriminator),然后兩個模型不斷博弈,進而使G生成逼真的圖像,而D具有非常強的判斷圖像真?zhèn)蔚哪芰?。生成網絡和判別網絡的主要功能是:
G的作用就是盡可能的生成逼真的圖像來迷惑D,使得D判斷失?。欢鳧的作用就是盡可能的挖掘G的破綻,來判斷圖像到底是不是由G生成的“假冒偽劣”。整個過程就好比兩個新手下棋博弈,隨著對弈盤數(shù)的增加,一個迷惑手段越來越高明,而另一個甄別本領也越來越強大,最后,兩個新手都變成了高手。這個時候再讓G去和其它的人下棋,可以想到G迷惑的本領已經超越了一眾普通棋手。
以上就是GAN算法的原理。運用在圖像領域,例如風格遷移,超分重建,圖像補全,去噪等,運用GAN可以避免損失函數(shù)設計的困難,不管三七二十一,只要有一個基準,直接加上判別器,剩下的就交給對抗訓練。相比其他所有模型, GAN可以產生更加清晰,真實的樣本。
2. 感知損失
為了防止重建圖像過度平滑,SRGAN重新定義了損失函數(shù),并將其命名為感知損失(Perceptual loss)。感知損失有兩部分構成:
感知損失=內容損失+對抗損失
對抗損失就是重建出來的圖片被判別器正確判斷的損失,這部分內容跟一般的GAN定義相同。SRGAN的一大創(chuàng)新點就是提出了內容損失,SRGAN希望讓整個網絡在學習的過程中更加關注重建圖片和原始圖片的語義特征差異,而不是逐個像素之間的顏色亮度差異。以往我們在計算超分重建圖像和原始高清圖像差異的時候是直接在像素圖像上進行比較的,用的MSE準則。SRGAN算法提出者認為這種方式只會過度的讓模型去學習這些像素差異,而忽略了重建圖像的固有特征。實際的差異計算應該在圖像的固有特征上計算。但是這種固有特征怎么表示呢?其實很簡單,已經有很多模型專門提出來提取圖像固有特征然后進行分類等任務。我們只需要把這些模型中的特征提取模塊截取出來,然后去計算重建圖像和原始圖像的特征,這些特征就是語義特征了,然后再在特征層上進行兩幅圖像的MSE計算。在眾多模型中,SRGAN選用了VGG19模型,其截取的模型命名為truncated_vgg19。所謂模型截斷,也就是只提取原始模型的一部分,然后作為一個新的單獨的模型進行使用。
至此重新整理下內容損失計算方式:
從上述計算方式上看出,原來的計算方式是直接計算H和SR的MSE值,而改用新的內容損失后只需要利用truncated_vgg19模型對圖像多作一次推理得到特征圖,再在特征圖上進行計算。
3. SRGAN結構剖析
SRGAN分為兩部分:生成器模型(Generator)和判別器模型(Discriminator)。
生成器模型采用了SRResNet完全一樣的結構,只是在計算損失函數(shù)時需要利用截斷的VGG19模型進行計算。這里注意,截斷的VGG19模型只是用來計算圖像特征,其本身并不作為一個子模塊加在生成器后面??梢詫⒋颂幍腣GG19模型理解為靜止的(梯度不更新的),只是用它來計算一下特征而已,其使用與一般的圖像濾波器sobel、canny算子等類似。
判別器模型結構如下所示:

?Pytorch實現(xiàn)
Pytorch實現(xiàn)沿用前面SRResNet的設計框架。由于SRGAN算法的生成器部分采用的是與SRResNet模型完全一樣的結構,因此我們在訓練時就可以直接使用前面訓練好的SRResNet模型對生成器進行初始化以加快整個算法的收斂。
代碼,模型,數(shù)據(jù)集獲取方式
關注微信公眾號 datayx? 然后回復?超分?即可獲取。
AI項目體驗地址?https://loveai.tech
下圖分別展示了整個訓練過程中內容損失、生成損失和判別損失的變化曲線。



從上圖中可以看到,相對SRResNet的收斂曲線,SRGAN非常不平穩(wěn),判別損失和生成損失此消彼長,這說明判別器和生成器正在做著激烈的對抗。一般來說,生成對抗網絡相比普通的網絡其訓練難度更大,我們無法通過查看loss來說明gan訓練得怎么樣。目前也有不少文獻開始嘗試解決整個問題,使得GAN算法的訓練進程可以更加明顯。
盡管不能從loss損失函數(shù)變化曲線上看出訓練進程,我們還可以從每次epoch的訓練樣本重建效果上進行查看。下圖分別顯示了epoch=1、25和50 部分訓練樣本重建效果圖,第一行為低分辨率圖,第二行為超分重建圖,第三行為原始高清圖。



從訓練圖上可以看到,在epoch=50即訓練結束的時候,其生成到的超分圖已經非常接近原始高清圖,重建出的圖像視覺感受更加突出,細節(jié)較豐富,相比SRResNet的過度平滑,其生成的圖像更符合真實場景效果。
測試效果如下:


低分辨率證件照測試效果圖,從左到右從上到下依次為:原圖、bicubic上采樣、SRResNet超分重建、SRGAN超分重建
閱讀過本文的人還看了以下文章:
TensorFlow 2.0深度學習案例實戰(zhàn)
基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測
《基于深度學習的自然語言處理》中/英PDF
Deep Learning 中文版初版-周志華團隊
【全套視頻課】最全的目標檢測算法系列講解,通俗易懂!
《美團機器學習實踐》_美團算法團隊.pdf
《深度學習入門:基于Python的理論與實現(xiàn)》高清中文PDF+源碼
特征提取與圖像處理(第二版).pdf
python就業(yè)班學習視頻,從入門到實戰(zhàn)項目
2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
《21個項目玩轉深度學習:基于TensorFlow的實踐詳解》完整版PDF+附書代碼
《深度學習之pytorch》pdf+附書源碼
PyTorch深度學習快速實戰(zhàn)入門《pytorch-handbook》
【下載】豆瓣評分8.1,《機器學習實戰(zhàn):基于Scikit-Learn和TensorFlow》
《Python數(shù)據(jù)分析與挖掘實戰(zhàn)》PDF+完整源碼
汽車行業(yè)完整知識圖譜項目實戰(zhàn)視頻(全23課)
李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019春)教材
筆記、代碼清晰易懂!李航《統(tǒng)計學習方法》最新資源全套!
《神經網絡與深度學習》最新2018版中英PDF+源碼
將機器學習模型部署為REST API
FashionAI服裝屬性標簽圖像識別Top1-5方案分享
重要開源!CNN-RNN-CTC 實現(xiàn)手寫漢字識別
yolo3 檢測出圖像中的不規(guī)則漢字
同樣是機器學習算法工程師,你的面試為什么過不了?
前海征信大數(shù)據(jù)算法:風險概率預測
【Keras】完整實現(xiàn)‘交通標志’分類、‘票據(jù)’分類兩個項目,讓你掌握深度學習圖像分類
VGG16遷移學習,實現(xiàn)醫(yī)學圖像識別分類工程項目
特征工程(一)
特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊
特征工程(三):特征縮放,從詞袋到 TF-IDF
特征工程(四): 類別特征
特征工程(五): PCA 降維
特征工程(六): 非線性特征提取和模型堆疊
特征工程(七):圖像特征提取和深度學習
如何利用全新的決策樹集成級聯(lián)結構gcForest做特征工程并打分?
Machine Learning Yearning 中文翻譯稿
螞蟻金服2018秋招-算法工程師(共四面)通過
全球AI挑戰(zhàn)-場景分類的比賽源碼(多模型融合)
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在線識別手寫中文網站
中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特征工程
不斷更新資源
深度學習、機器學習、數(shù)據(jù)分析、python
?搜索公眾號添加:?datayx??
機大數(shù)據(jù)技術與機器學習工程
?搜索公眾號添加:?datanlp
長按圖片,識別二維碼