获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像
超分辨率(SR)是一種提高圖像分辨率的技術(shù)。
這些方法是從低分辨率(LR)圖像中獲得高分辨率(HR)輸出。執(zhí)行單圖像超分辨率(SISR)的目的是在增加圖像尺寸的同時(shí)使其質(zhì)量下降的最小。應(yīng)用范圍很廣,如醫(yī)學(xué)成像,壓縮,農(nóng)業(yè)分析,自動(dòng)駕駛到衛(wèi)星圖像、偵察等等。
超分辨率領(lǐng)域正在經(jīng)歷一段復(fù)興時(shí)期。卷積神經(jīng)網(wǎng)絡(luò)和生成性對(duì)抗網(wǎng)絡(luò)等深度學(xué)習(xí)模型的最新進(jìn)展引發(fā)了各種新方法,并為基于特征工程的經(jīng)典方法無(wú)法解決的問(wèn)題帶來(lái)了最新的研究成果。
在本文中,我們將討論該領(lǐng)域的主要方法,并將深入探討一種名為Zero Shot Super Resolution的特殊方法。
圖1. ZSSR VS EDSR性能比較
目前,在深度學(xué)習(xí)領(lǐng)域SR主要有兩種方法。
第一種方法:使用各種卷積神經(jīng)網(wǎng)絡(luò),最好使用跳過(guò)連接(深度神經(jīng)網(wǎng)絡(luò)),并嘗試將L1或L2損失最小化,從低分辨率對(duì)重建高分辨率圖像。
第二種方法:生成性對(duì)抗神經(jīng)網(wǎng)絡(luò),也稱為GAN。
可以訓(xùn)練GAN架構(gòu)以生成類似于特定數(shù)據(jù)集的分布。GAN擁有兩個(gè)主要部分:生成器和判別器。
生成器學(xué)習(xí)如何從隨機(jī)噪聲中創(chuàng)建數(shù)據(jù)集分布,判別器學(xué)習(xí)如何區(qū)分?jǐn)?shù)據(jù)集中的實(shí)際樣本與從生成器合成創(chuàng)建的樣本。通過(guò)以對(duì)抗性方式將它們一起訓(xùn)練,每個(gè)部分都經(jīng)過(guò)迭代改進(jìn),最終的結(jié)果是得到一個(gè)強(qiáng)大的樣本生成器和一個(gè)用于真實(shí)與合成樣本的強(qiáng)大的判別器。
例如:通過(guò)向GAN提供MNIST數(shù)據(jù)集,其生成器學(xué)習(xí)如何創(chuàng)建手寫數(shù)字,并且其判別器學(xué)習(xí)如何區(qū)分真實(shí)和合成數(shù)字。
圖2.手寫數(shù)字(MNIST)的GAN示意圖
我們采用這種架構(gòu)并將GAN/對(duì)抗性損失降至最低。
SR的GAN模型的生成器部分通常使用L2損失(也稱為MSE或均方誤差)或更現(xiàn)代的感知損失,即均方誤差(MSE),但是其來(lái)自于預(yù)先在Imagenet上訓(xùn)練的更深層的模型(通常是VGG-16或VGG-19)作為重構(gòu)損失。預(yù)訓(xùn)練模型的輸出為我們提供了高質(zhì)量的特征,而無(wú)需任何耗時(shí)的特征工程。我們比較了網(wǎng)絡(luò)輸出的特征圖和HR圖像。
所有這些都?xì)w結(jié)為這樣一個(gè)事實(shí),即大多數(shù)超分辨率系統(tǒng)的核心都有L1或L2指標(biāo)。這是有道理的,因?yàn)閳D像重建的標(biāo)準(zhǔn)指標(biāo)是PSNR(峰值信噪比)具有內(nèi)置的MSE(L2損失):
PSNR = 10 * log10((data_range ** 2)/ mse),在sci-kit圖像中所定義。
Data_range是數(shù)據(jù)類型中的像素范圍。通常為255或1。
MSE的值越低意味著誤差越小,從MSE和PSNR之間的反比關(guān)系可以看出,MSE的值越小,PSNR值越大。從邏輯上講,PSNR值越高越好,因?yàn)樗馕吨旁氡雀摺?/p>
圖3.創(chuàng)建高分辨率圖像
限制
在Technion研究員Yochai Blau 最近的一篇論文中,經(jīng)研究證據(jù)被證實(shí)表明這兩種方法都受到內(nèi)在權(quán)衡特性的約束。它的效果是顯而易見(jiàn)的,因?yàn)楝F(xiàn)有的許多SR方法難以同時(shí)提高噪聲(失真)和感知(質(zhì)量)指標(biāo)的性能。簡(jiǎn)單來(lái)說(shuō),超分辨率圖像出現(xiàn)得越真實(shí),它所具有的人造噪聲或偽影越多,并且超分辨率圖像中的失真和噪聲越少,圖像看起來(lái)就越模糊。
圖4.失真和感知權(quán)衡
目前的超分辨率(SR)方法的問(wèn)題在于它們中的大多數(shù)都受到監(jiān)督。這意味著通過(guò)對(duì)成對(duì)數(shù)據(jù)集的優(yōu)化來(lái)學(xué)習(xí)算法參數(shù)。通過(guò)將低分辨率圖像重建為其高分辨率圖像時(shí)的損失函數(shù)最小化。
雖然已經(jīng)有人進(jìn)行了一些嘗試來(lái)生成具有本質(zhì)上不同分辨率特征的數(shù)碼相機(jī)拍攝的數(shù)據(jù)集,但大多數(shù)數(shù)據(jù)集是通過(guò)使用插值方法(通常是雙三次)對(duì)圖像進(jìn)行下采樣而生成的。這可能是非常有效且經(jīng)濟(jì)的,但這也意味著大多數(shù)數(shù)據(jù)集不包括室外LR圖像。這具有非常深刻的含義,綜合創(chuàng)建的數(shù)據(jù)集并不代表真正的偽影和常見(jiàn)的低級(jí)圖像現(xiàn)象。這導(dǎo)致SR模型無(wú)法學(xué)習(xí)如何對(duì)抗源于光學(xué)或數(shù)字問(wèn)題的缺陷,而主要是通過(guò)綜合創(chuàng)建低分辨率(LR)圖像而生成的偽影。最麻煩的是模型可能只學(xué)會(huì)逆轉(zhuǎn)下采樣機(jī)制本身。
要學(xué)習(xí)圖像的超分辨率,首先要使用GAN學(xué)習(xí)如何進(jìn)行圖像退化來(lái)試圖解決這種成對(duì)數(shù)據(jù)創(chuàng)建的錯(cuò)誤方法。
圖5.低質(zhì)量圖像放大
Zero Shot Super-Resolution(Zssr)
在Weizmann研究所的Assaf Shocher撰寫的論文中,我們發(fā)現(xiàn)了一種新穎,簡(jiǎn)單而優(yōu)雅的方法來(lái)實(shí)現(xiàn)單圖像超分辨率。他們使用小型(~100K可訓(xùn)練參數(shù))全卷積神經(jīng)網(wǎng)絡(luò)(FCN ),而不是在大型數(shù)據(jù)集上訓(xùn)練大型網(wǎng)絡(luò)(EDSR ~43M參數(shù)),并對(duì)目標(biāo)數(shù)據(jù)本身及其許多擴(kuò)展進(jìn)行訓(xùn)練。以生成最終更高分辨率輸出。它們通過(guò)先創(chuàng)建原始圖像的縮小副本,并對(duì)其進(jìn)行裁剪、翻轉(zhuǎn)和旋轉(zhuǎn),從而動(dòng)態(tài)生成數(shù)據(jù)增強(qiáng),并生成LR-HR對(duì)。然后,他們模擬一個(gè)特定的預(yù)定義的超分辨率比例,通過(guò)先向下采樣,然后向上采樣,將增強(qiáng)效果模糊到原來(lái)的大小(等于其父級(jí)HR的大小)。導(dǎo)致模糊和非模糊的一對(duì)增強(qiáng),兩者都從原始圖像按相同的隨機(jī)因素縮小比例,子級(jí)LR模糊的方式模擬預(yù)先確定的比例。
圖6是我們的ZSSR版本。子級(jí)LR圖像經(jīng)過(guò)FCNN并最終添加到其未更改的副本(輸出= LR + FCN(LR))。然后我們計(jì)算關(guān)于父級(jí)HR輸出的L1損失:
然后將這些對(duì)輸入到FCN網(wǎng)絡(luò)進(jìn)行訓(xùn)練,目的是將LR圖像重建的L1損失降到最小,使其與HR匹配。使用具有ReLU激活函數(shù),深度為8層和64個(gè)濾波器的神經(jīng)網(wǎng)絡(luò)的簡(jiǎn)單架構(gòu)(對(duì)于所有層,只有最后一個(gè)是線性的)。設(shè)置從輸入到輸出的skip connection,因此我們只需要學(xué)習(xí)從模糊LR到HR源的殘差圖像。
圖6. ZSSR算法的圖示。
原始圖像I被許多不同的比例因子下采樣。每一個(gè)縮小的副本都是通過(guò)先縮小再放大來(lái)模糊的。通過(guò)比較網(wǎng)絡(luò)輸出的f(LR)和匹配的HR,我們可以訓(xùn)練出一個(gè)LR-HR對(duì)。
最后,我們?cè)谠紙D像上進(jìn)行測(cè)試(model.predict)以生成超分辨率輸出。
存在真實(shí)高質(zhì)量圖像的情況下,可以使用PSNR和SSIM指標(biāo)將其與網(wǎng)絡(luò)輸出進(jìn)行比較。
關(guān)于這種架構(gòu)的事實(shí)是,我們?cè)跊](méi)有驗(yàn)證集的情況下進(jìn)行訓(xùn)練,并且只在原始樣本上進(jìn)行測(cè)試。雖然一開始這可能有點(diǎn)違反直覺(jué),但它符合我們的目標(biāo),并明顯減少了運(yùn)行時(shí)間。
神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)重新縮放(或映射)函數(shù):
關(guān)于全卷積神經(jīng)網(wǎng)絡(luò)(FCN)的另一個(gè)重要事實(shí)是我們可以使用不同的輸入大小。因此,每組樣本具有不同的大小。通過(guò)仔細(xì)選擇正確地超參數(shù):內(nèi)核大小為3 * 3,步幅為1和填充'same',我們得到了與輸入大小完全相同的輸出大小,使我們能夠計(jì)算它們的相對(duì)誤差。我們只通過(guò)改變雙三次插值來(lái)改進(jìn)這個(gè)體系結(jié)構(gòu),調(diào)整大小的因素本身就是一個(gè)預(yù)定義的參數(shù)。
對(duì)這種架構(gòu)的科學(xué)解釋是在圖像中存在重復(fù)的內(nèi)部特征。在Weizmann研究所的同一組研究中顯示,尺寸為5 * 5和7 * 7的小圖像塊在不同的位置(在一張圖像中)重復(fù)它們的原始大小和跨尺度。在同一組的另一項(xiàng)工作中研究顯示,單個(gè)圖像與大圖像數(shù)據(jù)集相比具有較低的內(nèi)部熵。這與內(nèi)部圖像塊和自相似性原則是一致的。針對(duì)所討論的特定圖像的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,然后在其上進(jìn)行測(cè)試。
圖7. CSI 提高SOTA。
盡管神經(jīng)網(wǎng)絡(luò)接受域小,但神經(jīng)網(wǎng)絡(luò)能夠捕獲圖像中對(duì)象的非局部遞歸。這源于特定圖像的訓(xùn)練過(guò)程。通過(guò)使學(xué)習(xí)獨(dú)立于圖像大小來(lái)進(jìn)一步加速學(xué)習(xí)。這是通過(guò)合并裁剪機(jī)制實(shí)現(xiàn)的。只從每個(gè)圖像對(duì)中獲取固定大小的裁剪,不過(guò)這個(gè)超參數(shù)會(huì)對(duì)運(yùn)行時(shí)間和性能產(chǎn)生很大影響。
特定于圖像的神經(jīng)網(wǎng)絡(luò)可能聽(tīng)起來(lái)是一個(gè)笨拙的解決方案,但現(xiàn)實(shí)是,盡管監(jiān)督SISR方法可以得到令人印象深刻的結(jié)果,它們的性能在現(xiàn)實(shí)生活中的低質(zhì)量圖像上大大減少。學(xué)習(xí)如何對(duì)抗真實(shí)的噪聲和人為干預(yù)需要?jiǎng)?chuàng)建一個(gè)非常深的神經(jīng)網(wǎng)絡(luò),每個(gè)神經(jīng)網(wǎng)絡(luò)都經(jīng)過(guò)訓(xùn)練并專門針對(duì)特定的問(wèn)題進(jìn)行處理,并且針對(duì)該特定任務(wù)需要數(shù)天甚至數(shù)周的處理。
Zero Shot Super resolution確實(shí)優(yōu)于大型監(jiān)督SISR模型,在具有噪聲,壓縮、偽影等影響較大的低分辨率圖像。諸如降尺度內(nèi)核,比例因子附加,噪聲水平及其在訓(xùn)練增強(qiáng)上的類型等參數(shù)可供選擇,從而能夠更好地適應(yīng)圖像的特征(添加噪聲有助于改善低質(zhì)量LR圖像的效果)。選擇這些參數(shù)需要重新訓(xùn)練,因此不適合大型架構(gòu)。
現(xiàn)在,我們看一下代碼,討論它是如何工作的,并強(qiáng)調(diào)修改它以供將來(lái)實(shí)驗(yàn)的方法。我們將突出強(qiáng)調(diào)main.py文件中的特定代碼塊,以更好地解釋底層的內(nèi)容。我們將深入研究代碼實(shí)現(xiàn)并解釋主要函數(shù)和評(píng)估指標(biāo)。
導(dǎo)入必要的庫(kù)
import argparseimport numpy as npimport cv2import osimport kerasfrom keras.callbacks import LearningRateScheduler, ModelCheckpointfrom keras.models import Modelfrom keras.layers import Conv2D, Inputfrom skimage.measure import compare_ssim as ssimfrom skimage.measure import compare_psnrimport globimport missinglink這里我么還使用了包括NumPy,cv2,Keras和MissingLink , MissingLink.ai SDK,它是深度學(xué)習(xí)工作流程自動(dòng)化的平臺(tái),SDK通過(guò)消除管理大量實(shí)驗(yàn),大型數(shù)據(jù)集,本地和外部機(jī)器以及代碼版本控制的痛苦,實(shí)現(xiàn)了復(fù)雜深度學(xué)習(xí)模型的快速高效開發(fā)。我們將利用它來(lái)跟蹤我們實(shí)驗(yàn)的實(shí)時(shí)值,然后,對(duì)于更高級(jí)的用戶,我們將深入研究MissingLink的數(shù)據(jù)管理功能。
主程序編譯
在主程序內(nèi)部,我們?cè)O(shè)置了一個(gè)參數(shù)解析器,用于從CLI配置參數(shù),獲取輸出目錄和目標(biāo)映像的路徑,然后加載它。我們還將TensorFlow定義為后端,并將圖像維度排序?yàn)橥ǖ雷詈蟆2煌腒eras后端庫(kù)(TensorFlow,Theano)以相反的方式設(shè)置這些,即通道首先分別對(duì)應(yīng)于通道。通過(guò)確保設(shè)置是這樣的,我們可以避免錯(cuò)誤來(lái)為我們的神經(jīng)網(wǎng)絡(luò)提供錯(cuò)誤的數(shù)據(jù)形狀。
# mainif __name__ == '__main__': np.random.seed(0) if keras.backend == 'tensorflow': keras.backend.set_image_dim_ordering('tf') # Provide an alternative to provide MissingLinkAI credential parser = argparse.ArgumentParser() parser.add_argument('--srFactor', type=int) parser.add_argument('--epochs', type=int, default=EPOCHS) #parser.add_argument('--filepath', type=str) parser.add_argument('--subdir', type=str, default='067') parser.add_argument('--filters', type=int, default=FILTERS) parser.add_argument('--activation', default=ACTIVATION) parser.add_argument('--shuffle', default=SHUFFLE) parser.add_argument('--batch', type=int, default=BATCH_SIZE) parser.add_argument('--layers', type=int, default=LAYERS_NUM) parser.add_argument('--sortOrder', default=SORT_ORDER) parser.add_argument('--scalingSteps', type=int, default=NB_SCALING_STEPS) parser.add_argument('--groundTruth', default=GROUND_TRUTH) parser.add_argument('--baseline', default=BASELINE) parser.add_argument('--flip', default=FLIP_FLAG) parser.add_argument('--noiseFlag', default=False) parser.add_argument('--noiseSTD', type = int, default=30) parser.add_argument('--project') # Override credential values if provided as arguments args = parser.parse_args() #file_name = args.filepath or file_name subdir = args.subdir SR_FACTOR = args.srFactor or SR_FACTOR FILTERS = args.filters or FILTERS EPOCHS = args.epochs or EPOCHS ACTIVATION = args.activation or ACTIVATION SHUFFLE = args.shuffle or SHUFFLE BATCH_SIZE = args.batch or BATCH_SIZE LAYERS_NUM = args.layers or LAYERS_NUM SORT_ORDER = args.sortOrder or SORT_ORDER NB_SCALING_STEPS = args.scalingSteps or NB_SCALING_STEPS GROUND_TRUTH = args.groundTruth or GROUND_TRUTH BASELINE = args.baseline or BASELINE FLIP_FLAG = args.flip or FLIP_FLAG NOISE_FLAG = args.noiseFlag or NOISE_FLAG NOISY_PIXELS_STD = args.noiseSTD or NOISY_PIXELS_STD # We're making sure These parameters are equal, in case of an update from the parser. NB_PAIRS = EPOCHS EPOCHS_DROP = np.ceil((NB_STEPS * EPOCHS) / NB_SCALING_STEPS) psnr_score = None ssim_score = None metrics_ratio = None # Path for Data and Output directories on Docker # save to disk if os.environ.get('ML'): output_paths = '/output' else: output_paths = os.path.join(os.getcwd(), 'output') if not os.path.exists(output_paths): os.makedirs(output_paths) print (output_paths) # output_paths = select_first_dir('/output', './output') # if (output_paths == './output'): # mk_dir(dir_name='./output') file_name = select_file(ORIGIN_IMAGE, subdir) print(file_name) # Load image from data volumes image = load_img(file_name) cv2.imwrite(output_paths + '/' + 'image.png', cv2.cvtColor(image, cv2.COLOR_RGB2BGR), params=[CV_IMWRITE_PNG_COMPRESSION])構(gòu)建模型
我們使用Keras函數(shù)模型API創(chuàng)建模型。這使我們能夠創(chuàng)建比常見(jiàn)的Sequential模型更復(fù)雜的架構(gòu)。
build_model()
build_model() 函數(shù)是我們定義和編譯模型的地方。
def build_model(): # model filters = FILTERS # 64 kernel_size = 3 # Highly important to keep image size the same through layer strides = 1 # Highly important to keep image size the same through layer padding = "same" # Highly important to keep image size the same through layer inp = Input(shape=(None, None, NB_CHANNELS)) # seq_model = Sequential() z = (Conv2D( filters=NB_CHANNELS, kernel_size=kernel_size, activation="relu總結(jié)
以上是生活随笔為你收集整理的获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vb6实现union数据结构_数据结构与
- 下一篇: 微软已暂时停用你的账户_微软小冰公众号因