主要内容

딥러닝을사용하여상해상도높이기

이예제에서는VDSR(很深的超分辨率)신경망을사용하여하나의저해상도영상에서고해상도영상을만드는방법을보여줍니다。

초고해상도기법은저해상도、상에서고해상도、초고해상도기법은저해상도、상을만드는방법입니다。이예제에서는단일이예제에서는단일상초고해상도(sisr)복원기법을다룹니다。여기서목` ` ` `는하나의저해상도` ` ` `상에서하나의고해상도` ` ` ` ` `상을복구하는것입니다。일반적으로저해상도영상에서는고주파영상콘텐츠를복구할수없기때문에SISR은까다롭습니다。고주파정보가없으면고해상도상의품질이제한됩니다。또한,하나의저해상도영상이여러개의가능한고해상도영상을산출할수있기때문에SISR은불량조건문제입니다。

Sisr을수행하기위해딥러닝알고리즘을비롯한몇가지기법이제되었습니다。이예제에서는SISR을위한딥러닝알고리즘의하나인VDSR(很深的超分辨率)(1]을살펴봅니다。

VDSR신경망

VDSR은단일영상초고해상도복원을수행하도록설계된컨벌루션신경망아키텍처입니다(1].VDSR신경망은저해상도상과고해상도상사이의매핑을학습합니다。이매핑은저해상도영상과고해상도영상이비슷한영상콘텐츠를가지고있고주로고주파세부정보만다르기때문에가능합니다。

Vdsr은잔차학습전략을사용합니다。즉,이신경망은잔차상을추정하도록학습합니다。초고해상도기법에서잔차영상이란참조영상의크기와일치하도록쌍삼차보간을사용하여업스케일링된저해상도영상과고해상도참조영상과사이의차이입니다。잔차、상은、잔차、상의고주파세부정보에대한정보를포함합니다。

VDSR신경망은컬러상의휘도로부터잔차상을검출합니다。상의휘도채널Y는빨간색,녹색,파란색픽셀값의일차결합을통해각픽셀의밝기를나타냅니다。이와반대로,@mail.상의두색차채널CbCr은빨간색,녹색,파란색픽셀값의다른일차결합으로색차정보를나타냅니다。인간의지각은색의변화보다밝기의변화에더민감하기때문에VDSR은휘도채널만사용하여훈련됩니다。

Y res 가고해상도상의휘도이고 Y lowres 가쌍삼차보간을사용하여업스케일링된저해상도영상의휘도라면VDSR신경망에대한입력값은 Y lowres 가되고신경망은훈련데이터로부터 Y 剩余 Y highres - Y lowres 를예측하도록학습합니다。

VDSR신경망이잔차영상을추정하도록학습한후에는업샘플링된저해상도영상에추정된잔차영상을더한다음영상을다시RGB컬러스페이스로변환하여고해상도영상을복원할수있습니다。

스케일링자가참조상의크기를저해상도상의크기와연결시킵니다。스케일링인자가커질수록저해상도영상에서고주파영상콘텐츠의정보가더많이손실되므로SISR은더욱불량한조건이됩니다。Vdsr은큰수용ymr역을사용함으로써이문제를해결합니다。이예제에서는스케일증대를사용하여여러개의스케일링인자로VDSR신경망을훈련시킵니다。스케일증대를사용하면신경망이작은스케일링인자를사용해서얻은영상컨텍스트를활용할수있기때문에더큰스케일링인자를사용했을때결과가개선됩니다。또한,VDSR신경망은정수가아닌스케일링인자를갖는영상을수용하도록일반화될수있습니다。

훈련데이터와테스트데이터다운로드하기

20000개의스틸자연영상으로이루어진IAPR TC-12基准를다운로드합니다(2].이데이터세트에는사람,동물,도시등의사진이포함되어있습니다。데이터파일의크기는최대1.8gb입니다。훈련데이터세트를다운로드하기를원치않는경우에는명령줄에负载(“trainedVDSRNet.mat”);를입력하여사전훈련된VDSR신경망을불러올수있습니다。그런다음이예제의VDSR신경망을사용하여단일상초고해상도복원수행하기섹션으로건너뜁니다。

헬퍼 함수downloadIAPRTC12Data를사용하여데이터를다운로드합니다。이함수는예제에지원파일로첨부되어있습니다。dataDir을원하는데이터위치로지정합니다。

dataDir =tempdir;downloadIAPRTC12Data (dataDir);

이예제에서는IAPR TC-12基准데이터의작은서브셋을사용하여신경망을훈련시킵니다。imageCLEF훈련데이터를불러옵니다。모든상은32비트jpeg상입니다。

trainImagesDir = fullfile(dataDir,“iaprtc12”“图片”“2”);Exts = [“jpg”“bmp格式”“使用”];pristineImages = imageDatastore(trainImagesDir,FileExtensions=exts);

훈련상의개수를나열합니다。

元素个数(pristineImages.Files)
Ans = 616

훈련데이터준비하기

훈련데이터세트를만들려면업샘플링된영상과그에대응하는잔차영상으로구성된영상쌍을생성하십시오。

업샘플링된업샘플링된상은mat파일로디스크의upsampledDirName디렉터리에저장됩니다。신경망응답을나타내는계산된잔차신경망응답을나타내는계산된잔차상은mat파일로디스크의residualDirName디렉터리에저장됩니다。보다높은정밀도를위해mat파일은신경망을훈련시킬때데이터형으로저장됩니다。

upsampledDirName = trainImagesDir+filesep+“upsampledImages”;residualDirName = trainImagesDir+filesep+“residualImages”

헬퍼 함수createVDSRTrainingSet을사용하여훈련데이터를전처리합니다。이함수는예제에지원파일로첨부되어있습니다。

헬퍼함수는trainImages에있는원래그대로의상각각에다음작업을수행합니다。

  • 상을YCbCr컬러스페이스로변환합니다。

  • 샘플저해상도영상을만들기위해다양한스케일링인자로휘도(Y)채널의크기를줄인다음,쌍삼차보간을사용하여영상을원본크기로재조정합니다。

  • 원래그대로의、상과크기조정된、원래그대로의、상의차이를계산합니다。

  • 크기조정된、상및잔차、크기조정된、상을디스크에저장합니다。

scaleFactors = [2 3 4];createVDSRTrainingSet (pristineImages scaleFactors、upsampledDirName residualDirName);

훈련세트를위한전처리파이프라정의하기

이예제에서신경망입력값은쌍삼차보간을사용하여업샘플링된저해상도상입니다。원하는신경망응답은잔차상입니다。입력상파일모음에서upsampledImages라는상데이터저장소를만듭니다。계산된잔차상파일모음에서residualImages라는상데이터저장소를만듭니다。두데이터저장소모두、상파일에서、두데이터저장소모두、상데이터를읽어들이기위해헬퍼함수matRead가필합니다。이함수는예제에지원파일로첨부되어있습니다。

upsampledImages = imageDatastore(upsampledDirName,FileExtensions=“.mat”ReadFcn = @matRead);residualImages = imageDatastore(residualDirName,FileExtensions=“.mat”ReadFcn = @matRead);

데이터대의파라미터를지정하는imageDataAugmenter를만듭니다。훈련중에데이터대를사용하여훈련데이터를바꿉니다。이렇게하면사용가능한훈련데이터의양이늘어납니다。여기서대기는90도만큼무작위회전하고x방향으로무작위반사하도록지정합니다。

augmenter = imageDataAugmenter(...randi RandRotatio = @ () ([0, 1], 1) * 90,...RandXReflection = true);

업샘플링된영상의데이터저장소와잔차영상의데이터저장소로부터무작위패치추출을수행하는randomPatchExtractionDatastore(图像处理工具箱)를만듭니다。패치추출은하나의큰、상에서작은、패치추출은하나의큰、상패치들로이루어진대규모세트를추출합니다。이러한유형의데이터증대는image-to-image회귀문제에서자주사용되는데,아주작은크기의입력영상에대해여러신경망아키텍처를훈련시킬수있습니다。이는원래의훈련세트에들어있는전체크기의영상각각으로부터많은수의패치를추출할수있음을의미하며,이로인해훈련세트의크기가대폭늘어나게됩니다。

patchSize = [41 41];patchesPerImage = 64;dsTrain = randompatchextracactiondatastore (upsampledImages,residualImages,patchSize,...DataAugmentation =增压器,PatchesPerImage = PatchesPerImage);

결과로생성되는데이터저장소dsTrain은纪元가반복될때마다신경망으로데이터의미니배치를제공합니다。데이터저장소에서읽어들결과를미리봅니다。

inputBatch =预览(dsTrain);disp (inputBatch)
InputImage ResponseImage  ______________ ______________ { 41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}{41×41双}

VDSR계층설정하기

이예제에서는深度学习工具箱™에서제공하는41개의개별계층을사용하여VSDR신경망을정의합니다。여기에는다음이포함됩니다。

첫번째계층imageInputLayer는상패치에대해연산을수행합니다。패치크기는신경망수용역을기반으로합니다。신경망수용、역은신경망의최상단계층의응답에、신경망수용、향을주는공간、상、、。이상적인경우에신경망수용영역은크기가영상크기와같으므로필드에서영상에포함된모든하이레벨특징을볼수있습니다。이경우컨벌루션계층이D개芝加芝加市:芝加芝加市:芝加芝加市:芝加芝加市:芝加芝加市:芝加芝加市D+ 1)×(2D+1)입니다。

VDSR에는20개의컨벌루션계층이있으므로수용영역및영상패치크기는41×41이됩니다。VDSR은휘도채널만사용하여훈련되므로영상입력계층은채널이1개인영상을받습니다。

networkDepth = 20;firstLayer = imageInputLayer([41 41 1],Name=“InputLayer”归一化=“没有”);

영상입력계층뒤에는크기가3×3인필터64개를포함하는2차원컨벌루션계층이옵니다。미니배치크기가필터의개수를결정합니다。각컨벌루션후에도특징맵의크기가입력값의크기와같은상태로유지되도록각컨벌루션계층에대한입력값을0으로채웁니다。他의방법[3.]은뉴런학습에비대칭성이존재하도록가중치를난수값으로초기화합니다。각컨벌루션계층뒤에는신경망에비선형성을발생시키는ReLU계층이옵니다。

卷积层=卷积2dlayer(3,64,填充=1,...WeightsInitializer =“他”BiasInitializer =“零”、名称=“Conv1”);

ReLU계층을지정합니다。

relLayer = reluLayer(Name=“ReLU1”);

중간계층에는컨벌루션계층과ReLU계층18개가번갈아가며포함되어있습니다。각컨벌루션계층은크기가3×3×64인필터64개를포함하는데,여기서하나의필터는64개의채널에서3×3공간영역에대해연산을수행합니다。앞에서와마찬가지로,각컨벌루션계층뒤에는ReLU계층이옵니다。

middleLayers = [convLayer relLayer];layerNumber = 2:networkDepth-1 convLayer =卷积2dlayer (3,64,Padding=[1 1],...WeightsInitializer =“他”BiasInitializer =“零”...Name =“Conv”+ num2str (layerNumber));relLayer = reluLayer(Name=“ReLU”+ num2str (layerNumber));middleLayers = [middleLayers convLayer relLayer];结束

끝에서두번째계층은크기가3×3×64인필터를한개가지는컨벌루션계층이며영상을복원합니다。

卷积层=卷积2dlayer(3,1,填充=[1 1],...WeightsInitializer =“他”BiasInitializer =“零”...NumChannels = 64,名字=“Conv”+ num2str (networkDepth));

마지막계층에ReLU계층대신회귀계층이옵니다。회귀계층은잔차상과신경망예측사이의평균제곱오차를계산합니다。

finalllayers = [convLayer regressionLayer(Name=“FinalRegressionLayer”)];

모든계층을결합하여VDSR신경망을형성합니다。

layers = [firstLayer middleLayers finalLayers];

훈련옵션지정하기

个(随机梯度下降势头:모멘텀을사용한확률적경사하강법)을사용하여신경망을훈련시킵니다。trainingOptions함수를사용하여sgdm의하이퍼파라미터설정을지정합니다。학습률은초기에0.1로설정되고,纪元10회가지날때마다10배만큼줄어듭니다。훈련을纪元100회수행합니다。

심층신경망을훈련시키는데는상당한시간이소됩니다。학습률을높게지정하여훈련시간을줄일수있습니다。그러나이렇게하면신경망의기울기가통제할수없을만큼증가하여신경망이성공적으로훈련되지않을수있습니다。기울기를유의미한범위내로유지하기위해”GradientThreshold”의 값을0.01로지정하고”GradientThresholdMethod”가기울기의l2 -노름을사용하도록지정하여기울기제한을활성화합니다。

maxEpochs = 100;epochIntervals = 1;initLearningRate = 0.1;learningRateFactor = 0.1;L2reg = 0.0001;miniBatchSize = 64;选项= trainingOptions(“个”...动量= 0.9,...InitialLearnRate = initLearningRate,...LearnRateSchedule =“分段”...LearnRateDropPeriod = 10,...LearnRateDropFactor = learningRateFactor,...L2Regularization = l2reg,...MaxEpochs = MaxEpochs,...MiniBatchSize = MiniBatchSize,...GradientThresholdMethod =“l2norm”...GradientThreshold = 0.01,...情节=“训练进步”...Verbose = false);

신경망훈련시키기

기본적으로이예제에서는스케일링인자2、3、4에대해영상에초해상도기법을적용하도록훈련된VDSR신경망의사전훈련된버전을불러옵니다。사전훈련된신경망을사용하면훈련이완료될때까지기다리지않고테스트영상의초고해상도복원을수행할수있습니다。

VDSR신경망을훈련시키려면다음코드에서doTraining변수를真正的로설정하십시오。trainNetwork함수를사용하여신경망을훈련시킵니다。

사용가능한gpu가있으면gpu에서훈련시킵니다。GPU를사용하려면并行计算工具箱™와CUDA®지원NVIDIA®GPU가필합니다。자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。훈련은NVIDIA Titan X에서6시간정도걸립니다。

doTraining =如果doTraining net = trainNetwork(dsTrain,layers,options);modelDateTime = string(datetime(“现在”格式=“yyyy-MM-dd-HH-mm-ss”));保存(“trainedVDSR——”+ modelDateTime +“.mat”“净”);其他的负载(“trainedVDSRNet.mat”);结束

VDSR신경망을사용하여단일상초고해상도복원수행하기

VDSR신경망을사용하여단일영상초고해상도(SISR)복원을수행하려면이예제의나머지단계를따르십시오。

  • 고해상도참조、상에서샘플저해상도、고해상도참조、상만들기。

  • 딥러닝에의존하지않는기존의영상처리솔루션인쌍삼차보간을사용하여저해상도영상에서SISR복원。

  • VDSR심층망을사용하여저해상도상에서sisr복원。

  • 쌍삼차보간과vdsr을사용하여복원된고해상도상을시각적으로비교。

  • 초고해상도복원、상과고해상도참조、상의유사도를수치화하여해당、상의품질평가。

샘플저해상도상만들기

테스트데이터세트testImages는图像处理工具箱™에서제공하는20개의왜곡되지않은영상을포함합니다。상을imageDatastore로불러오고몽타주에@ @시합니다。

fileNames = [“sherlock.jpg”“peacock.jpg”“fabric.png”“greens.jpg”...“hands1.jpg”“kobi.png”“lighthouse.png”“office_4.jpg”...“onion.png”“pears.png”“yellowlily.jpg”“indiancorn.jpg”...“flamingos.jpg”“sevilla.jpg”“llama.jpg”“parkavenue.jpg”...“strawberries.jpg”“trailer.jpg”“wagon.jpg”“football.jpg”];filePath = fullfile(matlabroot,“工具箱”“图片”“imdata”) + filesep;filePathNames = strcat(filePath,文件名);testImages = imageDatastore(filePathNames);

테스트상을몽타주형태로시합니다。

蒙太奇(testImages)

초고해상도신경망을테스트하는데사용할테스트상을하나선택합니다。

testImage =“sherlock.jpg”;Ireference = imread(testImage);Ireference = im2double(Ireference);imshow (Ireference)标题(“高分辨率参考图像”

imresize를스케일링인자0.25와함께사용하여고해상도참조영상의저해상도버전을만듭니다。다운스케일링과정에서상의고주파성분이손실됩니다。

scaleFactor = 0.25;Ilowres = imresize(Ireference,scaleFactor,“双三次的”);imshow (Ilowres)标题(“低分辨率图像”

쌍삼차보간을사용하여상해상도개선하기

딥러닝없이상해상도를높이는준방법은쌍삼차보간을사용하는것입니다。결과로생성되는고해상도영상이참조영상과크기가같아지도록쌍삼차보간을사용하여저해상도영상을업스케일링합니다。

[nrows,ncols,np] = size(Ireference);Ibicubic = imresize(Ilowres,[nrows ncols],“双三次的”);imshow (Ibicubic)标题(双三次插值获得高分辨率图像

사전훈련된VDSR신경망을사용하여상해상도개선하기

인간의지각은색의변화보다밝기의변화에더민감하기때문에VDSR은영상의휘도채널만사용하여훈련된다는사실을기억하십시오。

rgb2ycbcr(图像处理工具箱)함수를사용하여저해상도rm상을RGB컬러스페이스에서휘도(Iy)채널과색차(银行独立委员会只有几)채널로변환합니다。

Iycbcr = rgb2ycbcr(Ilowres);Iy = Iycbcr(:,:,1);Icb = Iycbcr(:,:,2);Icr = Iycbcr(:,:,3);

쌍삼차보간을사용하여휘도채널과두색차채널을업스케일링합니다。업샘플링된색차채널Icb_bicubicIcr_bicubic에는추가처리가필하지않습니다。

Iy_bicubic = imresize(Iy,[nrows ncols],“双三次的”);Icb_bicubic = imresize(Icb,[nrows ncols],“双三次的”);Icr_bicubic = imresize(Icr,[nrows ncols],“双三次的”);

업스케일링된휘도성분Iy_bicubic을훈련된VDSR신경망에전달하여통과시킵니다。마지막계층(회귀계층)에서激活를관찰합니다。신경망의출력값이원하는잔차상입니다。

Iresidual = activation (net,Iy_bicubic,41);Iresidual = double(Iresidual);imshow (Iresidual[])标题(VDSR残留图像

업스케일링된휘도성분에잔차상을더하여고해상도VDSR휘도성분을얻습니다。

Isr = Iy_bicubic + Iresidual;

고해상도VDSR휘도성분에업스케일링된색성분을결합합니다。ycbcr2rgb(图像处理工具箱)함수를사용하여함수를사용하여상을RGB컬러스페이스로변환합니다。결과로생성된상이vdsr을사용한최종고해상도컬러상입니다。

Ivdsr = ycbcr2rgb(cat(3,Isr,Icb_bicubic,Icr_bicubic));imshow (Ivdsr)标题(“使用VDSR获得的高分辨率图像”

시각적및정량적비교

고해상도、상을시각적으로더잘이해하려면각、상내부의작은、역을살펴보십시오。벡터roi를(xy너비높이형식으로사용하여관심역(roi)을지정합니다。跪拜跪拜소는ROI의왼쪽위코너x, y좌跪拜跪拜와너비및높이를정의합니다。

ROI = [360 50 400 350];

고해상도상을이roi로자른다음결과를몽타주형태로시합니다。VDSR영상이쌍삼차보간을사용하여만든고해상도영상보다세부묘사가더뚜렷하고경계가더분명한것을볼수있습니다。

蒙太奇({imcrop (Ibicubic roi), imcrop (Ivdsr roi)})标题(使用双三次插值的高分辨率结果(左)vs. VDSR(右));

영상품질메트릭을사용하여쌍삼차보간을사용한고해상도영상과VDSR영상을정량적으로비교합니다。참조、상은샘플저해상도、상을준비하기전의원본고해상도、상Ireference입니다。

참조상대비각상의피크신호대잡음비(psnr)를측정합니다。일반적으로PSNR값이클수록더나은상품질을나타냅니다。이메트릭에대한자세한내용은psnr值(图像处理工具箱)항목을참조하십시오。

bicubicPSNR = psnr(Ibicubic,Ireference)
bicubicPSNR = 38.4747
vdsrPSNR = psnr(Ivdsr,Ireference)
vdsrPSNR = 39.2346

각각상의구조적유사도지수(ssim)를측정합니다。SSIM은참조영상을기준으로영상의3가지특성인휘도,대비,구조의시각적영향을평가합니다。Ssim의값이1에가까울수록테스트상이참조상에더잘합치합니다。이메트릭에대한자세한내용은ssim(图像处理工具箱)항목을참조하십시오。

bicubicSSIM = ssim(Ibicubic,Ireference)
bicubicSSIM = 0.9861
vdsr = ssim(Ivdsr,Ireference)
vdsrSSIM = 0.9874

NIQE(自然图像质量评估者)를사용하여지각영상품질을측정합니다。Niqe점수가낮을수록더나은지각품질을나타냅니다。이메트릭에대한자세한내용은niqe(图像处理工具箱)항목을참조하십시오。

bicubicNIQE = niqe(bicicubic)
bicubicNIQE = 5.1721
vdsrNIQE = niqe(Ivdsr)
vdsrNIQE = 4.7612

스케일링인자2、3、4인경우에대해테스트영상전체세트의평균PSNR및SSIM을계산합니다。문제를단순화하기위해헬퍼함수vdsrMetrics를사용하여평균메트릭을계산할수있습니다。이함수는예제에지원파일로첨부되어있습니다。

scaleFactors = [2 3 4];vdsrMetrics(净testImages scaleFactors);
结果比例因子2双三次的平均PSNR值= 31.467070平均PSNR VDSR = 31.481973平均SSIM双三次的= 0.935820平均SSIM VDSR = 0.947057结果比例因子3双三次的平均PSNR值= 28.107057平均PSNR VDSR = 28.430546平均SSIM双三次的= 0.883927平均SSIM VDSR = 0.894634结果比例因子4双三次的平均PSNR值= 27.066129平均PSNR VDSR = 27.846590平均SSIM双三次的= 0.863270平均SSIM VDSR = 0.878101

각스케일링svr자에대해vdsr이쌍삼차보간보다메트릭점수가높습니다。

참고 문헌

[1] Kim, J., J. K. Lee, K. M. Lee。“使用非常深度卷积网络的精确图像超分辨率。”IEEE论文集®计算机视觉与模式识别会议“,.2016,第1646-1654页。

[2]格鲁宾格,M. P.克拉夫,H. Müller和T.迪塞勒。IAPR TC-12基准:视觉信息系统的新评估资源基于内容的图像检索语言资源文集.意大利热那亚。第五卷,2006年5月,第10页

[3]何K,张旭光,任淑娟,孙杰。“深入研究整流器:在ImageNet分类上超越人类水平的性能。”IEEE计算机视觉国际会议论文集, 2015, pp. 1026-1034。

참고 항목

||||||

관련 항목