超實(shí)用的圖像超分辨率重建技術(shù)原理與應(yīng)用
原創(chuàng)【51CTO.com原創(chuàng)稿件】不知道大家有沒有過這種煩惱:在電腦上看到有趣的地方,想要截個(gè)圖,奈何分辨率太小,放大后看不清?保存了有趣的圖片/表情包,想要用的時(shí)候竟變得模糊?每每遇到這種情況,就像一個(gè)800度近視的人,摘下眼鏡,便是恐慌,有木有!Don't worry!今天就來幫你解決這一難題,還您一個(gè)高清無碼的世界!
一,什么是圖像超分辨率重建技術(shù)
簡(jiǎn)單的說,就是將一張(或多張)分辨率較低的圖像,通過一定的技術(shù)手段,生成一張分辨率高的圖像。
比如這樣一張表情圖片:
(圖1)
分辨率是 125 x 75,圖片的細(xì)節(jié),包括***行字,從遠(yuǎn)處看,都容易看不清,如果想看的清楚,我們想到的***個(gè)辦法是放大圖片。
我們按像素放大這張圖片:
如果我們?cè)诋媹D軟件/word/瀏覽器里面調(diào)節(jié)顯示比例,去看這幅圖片把每個(gè)像素都放大,到400%的尺寸,但是不增加像素?cái)?shù)目(也就是說,把一個(gè)像素 從原來1x1的寬高,顯示到4x4的寬高下),顯示一張圖片得到的效果是這樣:
(圖2)
如果我們把放大400%后的圖像截圖,生成了一張寬高值都x4的新圖,里面相應(yīng)的4x4 = 16個(gè)像素,代表原來小圖的一個(gè)像素,從圖1生成圖2(圖像分辨率寬高變?yōu)?倍),就是做了一次超分辨率重建。但是,效果極差!
其實(shí)我們期待,圖片放大后,圖像細(xì)節(jié)(圖形的邊緣輪廓,字體等)能夠清晰,比如下面這個(gè)樣子:
(圖3)
如果能從圖1 生成 圖3(圖像分辨率寬高變?yōu)?倍),就是一次非常理想的超分辨率重建了。
二,圖像超分辨率重建技術(shù)的應(yīng)用
我們上面說到了一個(gè)例子,把一個(gè)分辨率低的表情圖片,經(jīng)過處理,變成了原始4倍寬高的新圖片,這里并沒有看到什么意義,但是在實(shí)際中,圖像超分辨率重建技術(shù)是非常有用的。
在監(jiān)控領(lǐng)域
我們經(jīng)??吹揭恍┯耙曌髌分校煸诒O(jiān)控畫面上,拉近放大看犯罪嫌疑人的臉。這個(gè)放大過程,其實(shí)并沒有那么簡(jiǎn)單,很多攝像頭是不具備光學(xué)變焦能力的,即使攝像頭帶有光學(xué)變焦能力,但是監(jiān)控畫面很多情況下是去看之前的錄像,所以光學(xué)變焦也沒用,這時(shí)通過超分辨率重建技術(shù)放大有限區(qū)域內(nèi)的像素,形成清晰的圖像,是非常有意義的
衛(wèi)星圖像等遙感領(lǐng)域
衛(wèi)星一般離地幾百km采集地面的各種圖像,圖像上面兩個(gè)像素點(diǎn),在地球上的實(shí)際距離,可能是1km(已經(jīng)算是比較高分辨率)到幾百km(低分辨率),將衛(wèi)星圖像,做超分辨率重建,將大大提升后續(xù)的處理精度
醫(yī)學(xué)圖像領(lǐng)域
醫(yī)學(xué)圖像的分辨率,受限于X光機(jī)、核磁共振掃描儀等設(shè)備的物理能力,通過超分辨率重建技術(shù),增加醫(yī)學(xué)圖像的分辨率,將給醫(yī)生診斷提供更大幫助
其它通用圖像處理領(lǐng)域
- (低分辨率)老照片,老圖像重建
- 低分辨率)視頻重建
- 圖像壓縮傳輸
傳輸時(shí)采取低分辨率視頻,顯示時(shí)通過超分辨率重建顯示原始分辨率
三,傳統(tǒng)的圖像超分辨率重建技術(shù)簡(jiǎn)介
基于插值的技術(shù)
什么是插值?給個(gè)小白版本的解釋,我們用一張非常小的圖來說明:一張圖像的分辨率 3 x 2,我們要把它變成 6 x 4
原圖每個(gè)像素點(diǎn)的亮度值是:
我們建立一個(gè)6 x 4的圖像,把這6個(gè)已經(jīng)知道的點(diǎn),放在他們大概應(yīng)該在新圖的位置:
已經(jīng)知道6x4新圖中6個(gè)已知的點(diǎn)(綠色),下面需要求剩余18個(gè)點(diǎn)(藍(lán)色)的值。
通過某個(gè)點(diǎn)周圍若干個(gè)已知點(diǎn)的值,以及周圍點(diǎn)和此點(diǎn)的位置關(guān)系,根據(jù)一定的公式,算出此點(diǎn)的值,就是插值法。
如何把原圖像的點(diǎn)擺放在新圖中(確定具體坐標(biāo));未知的點(diǎn)計(jì)算時(shí),需要周圍多少個(gè)點(diǎn)參與,公式如何。不同的方案選擇,就是不同的插值算法。圖像處理中,常用的插值算法有:最鄰近元法,雙線性內(nèi)插法,三次內(nèi)插法等等。
但是實(shí)際上,通過這些插值算法,提升的圖像細(xì)節(jié)有限,所以使用較少。通常,通過多幅圖像之間的插值算法來重建是一個(gè)手段。另外,在視頻超分辨重建中,通過在兩個(gè)相鄰幀間插值添加新幀的手段,可以提升視頻幀率,減少畫面頓挫感。
基于重建的方法
以下都是一些傳統(tǒng)的基于重建超分辨率算法,涉及到概率論,集合論等相關(guān)領(lǐng)域,這里只列出,不做介紹:
- 凸集投影法(POCS)
- 貝葉斯分析方法
- 迭代反投影法(IBP)
- ***后驗(yàn)概率方法
- 正規(guī)化法
- 混合方法
基于重建的方法通常基于多幀圖像,需要結(jié)合先驗(yàn)知識(shí)(通常為平滑性)。
基于學(xué)習(xí)的方法(非深度學(xué)習(xí))
以下為傳統(tǒng)的基于學(xué)習(xí)的超分辨率方法,這里只列出,不做介紹:
- Example-based方法
- 鄰域嵌入方法
- 支持向量回歸方法
- 虛幻臉
- 稀疏表示法
這些方法,都屬于機(jī)器學(xué)習(xí)領(lǐng)域,但是沒有使用深度學(xué)習(xí)方法。
四,基于深度學(xué)習(xí)的圖像超分辨率重建技術(shù)
深度學(xué)習(xí)介紹
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個(gè)分支,所以首先介紹下機(jī)器學(xué)習(xí):
我們給機(jī)器(計(jì)算機(jī)上的程序)已知的輸入、輸出,讓它去找規(guī)律出來(知識(shí)發(fā)現(xiàn)),然后我們讓它根據(jù)找到的規(guī)律,用新的輸入算出新的輸出來,并對(duì)這個(gè)輸出結(jié)果做評(píng)價(jià),如果合適就正向鼓勵(lì),如果結(jié)果不合適,就告訴機(jī)器這樣不對(duì),讓它重新找規(guī)律。
其實(shí)這個(gè)過程在模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為,以獲取新的知識(shí)或技能,重新組織已有的知識(shí)結(jié)構(gòu)使之不斷改善自身的性能。機(jī)器學(xué)習(xí)的本質(zhì)就是讓機(jī)器根據(jù)已有的數(shù)據(jù),去分析出一個(gè)模型來表示隱藏在這些數(shù)據(jù)背后的規(guī)律(函數(shù))。深度學(xué)習(xí)就是利用人工神經(jīng)網(wǎng)絡(luò)模型進(jìn)行機(jī)器學(xué)習(xí)的方法。
人工神經(jīng)網(wǎng)絡(luò)是,人為的構(gòu)造出一些處理節(jié)點(diǎn)(模擬腦神經(jīng)元),每個(gè)節(jié)點(diǎn)有個(gè)函數(shù),處理幾個(gè)輸入,生成若干輸出,每個(gè)節(jié)點(diǎn)與其它節(jié)點(diǎn)組合,綜合成一個(gè)模型(函數(shù))。
從左到右分別是輸出層, 隱藏層,輸出層。輸入層負(fù)責(zé)接受輸入,輸出層負(fù)責(zé)輸出結(jié)果,隱藏層負(fù)責(zé)中間的計(jì)算過程。
隱藏層的每一個(gè)節(jié)點(diǎn),就是一個(gè)處理函數(shù)。隱藏層的結(jié)構(gòu),也就是層數(shù),節(jié)點(diǎn)數(shù),還有每個(gè)節(jié)點(diǎn)的函數(shù)將決定整個(gè)神經(jīng)網(wǎng)絡(luò)的處理結(jié)果。
通過深度學(xué)習(xí)進(jìn)行圖像超分辨率重建的原理
既然深度學(xué)習(xí)可以通過數(shù)據(jù)加訓(xùn)練找到一個(gè)模型,去描述其背后的規(guī)律,那么我們就把它應(yīng)用在圖像超分辨率重建領(lǐng)域來。
過程如下:
- 首先我們找到一組原始圖像P1;
- 將這組圖片降低分辨率為一組圖像P2;
- 通過人工神經(jīng)網(wǎng)絡(luò),將P2超分辨率重建為P3(P3和P1分辨率一樣)
- 通過PSNR等方法比較P1與P3,驗(yàn)證超分辨率重建的效果,根據(jù)效果調(diào)節(jié)人工神經(jīng)網(wǎng)絡(luò)中的節(jié)點(diǎn)模型和參數(shù)
- 反復(fù)執(zhí)行,直到第四步比較的結(jié)果滿意
過程如下圖:
對(duì)于神經(jīng)網(wǎng)絡(luò)模型選擇、參數(shù)選擇的不同,形成不同的方案,下面將分別進(jìn)行簡(jiǎn)單介紹。
基于深度學(xué)習(xí)進(jìn)行圖像超分辨率重建的方案
基于深度學(xué)習(xí)的方案目前有很多種,這里列出部分,并對(duì)其中***個(gè)和***一個(gè)稍作介紹,感興趣的同學(xué)可以自行搜索詳細(xì)介紹、代碼、相關(guān)訓(xùn)練集,也可使用自己生成的訓(xùn)練集。
SRCNN
(Learning a Deep Convolutional Network for Image Super-Resolution, ECCV2014)
SRCNN是深度學(xué)習(xí)用在超分辨率重建上的開山之作。SRCNN的網(wǎng)絡(luò)結(jié)構(gòu)非常簡(jiǎn)單,僅僅用了三個(gè)卷積層,網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。
SRCNN首先使用雙三次(bicubic)插值將低分辨率圖像放大成目標(biāo)尺寸,接著通過三層卷積網(wǎng)絡(luò)擬合非線性映射,***輸出高分辨率圖像結(jié)果。作者將三層卷積的結(jié)構(gòu)解釋成三個(gè)步驟:圖像塊的提取和特征表示,特征非線性映射和最終的重建。
三個(gè)卷積層使用的卷積核的大小分為為9x9,,1x1和5x5,前兩個(gè)的輸出特征個(gè)數(shù)分別為64和32。用Timofte數(shù)據(jù)集(包含91幅圖像)和ImageNet大數(shù)據(jù)集進(jìn)行訓(xùn)練。使用均方誤差(Mean Squared Error, MSE)作為損失函數(shù),有利于獲得較高的PSNR。
FSRCNN
(Accelerating the Super-Resolution Convolutional Neural Network, ECCV2016)
ESPCN
(Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network, CVPR2016)
VDSR
(Accurate Image Super-Resolution Using Very Deep Convolutional Networks, CVPR2016)
DRCN
(Deeply-Recursive Convolutional Network for Image Super-Resolution, CVPR2016)
RED
(Image Restoration Using Convolutional Auto-encoders with Symmetric Skip Connections, NIPS2016)
DRRN
(Image Super-Resolution via Deep Recursive Residual Network, CVPR2017)
LapSRN
(Deep Laplacian Pyramid Networks for Fast and Accurate Super-Resolution, CVPR2017)
SRDenseNet
(Image Super-Resolution Using Dense Skip Connections, ICCV2017)
DenseNet是CVPR2017的best papaer獲獎(jiǎng)?wù)撐?/p>
SRGAN(SRResNet)
(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, CVPR2017)
在這篇文章中,將生成對(duì)抗網(wǎng)絡(luò)(Generative Adversarial Network, GAN)用在了解決超分辨率問題上
EDSR
(Enhanced Deep Residual Networks for Single Image Super-Resolution, CVPRW2017)
EDSR是NTIRE2017超分辨率挑戰(zhàn)賽上獲得冠軍的方案。如論文中所說,EDSR最有意義的模型性能提升是去除掉了SRResNet多余的模塊,從而可以擴(kuò)大模型的尺寸來提升結(jié)果質(zhì)量。EDSR的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示。
可以看到,EDSR在結(jié)構(gòu)上與SRResNet相比,就是把批規(guī)范化處理(batch normalization, BN)操作給去掉了。文章中說,原始的ResNet最一開始是被提出來解決高層的計(jì)算機(jī)視覺問題,比如分類和檢測(cè),直接把ResNet的結(jié)構(gòu)應(yīng)用到像超分辨率這樣的低層計(jì)算機(jī)視覺問題,顯然不是***的。由于批規(guī)范化層消耗了與它前面的卷積層相同大小的內(nèi)存,在去掉這一步操作后,相同的計(jì)算資源下,EDSR就可以堆疊更多的網(wǎng)絡(luò)層或者使每層提取更多的特征,從而得到更好的性能表現(xiàn)。EDSR用L1范數(shù)樣式的損失函數(shù)來優(yōu)化網(wǎng)絡(luò)模型。在訓(xùn)練時(shí)先訓(xùn)練低倍數(shù)的上采樣模型,接著用訓(xùn)練低倍數(shù)上采樣模型得到的參數(shù)來初始化高倍數(shù)的上采樣模型,這樣能減少高倍數(shù)上采樣模型的訓(xùn)練時(shí)間,同時(shí)訓(xùn)練結(jié)果也更好。
【作者簡(jiǎn)介】曾小偉,現(xiàn)任PP云技術(shù)副總監(jiān),圖像編解碼、高性能計(jì)算出身,輔修AI(NLP方向),10年以上流媒體服務(wù)端開發(fā)及架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】






































