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