主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

深層学習を使用した単一イメージ超解像処理

この例では很深的超分辨率(VDSR)ニューラルネットワークに学習させる方法,VDSRネットワークを使用し,単一の低解像度イメージから高解像度イメージを推定する方法を示します。

この例では,vsdrネットワークに学习さをを明し,事前学习済みのvdsrネットワーク示します.vsネットワークの.vsネットワークネットワーク习.vsし场の习习选択た场习。计算能力3.0以上のcuda対応nvidia™gpuを使用することをします.GPUをを用するは并行计算工具箱™が必要です。

はじめに

超解像致理性は低解像度イメージ高解像度イメージをする高プロセスでははでははですですですですですですですですですですですですですですですですですでですですです考え考えで考え考え考え考え考え考え考え考え考え考え考え考え考えははははははは考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考え考えはははは考え考えは考え考え考えすることです.sisrが难しいのは,一般的にはイメージの高周波解度イメージ回复するないですですさらにすることができないではさらにさらにさらに解像ではでははさらにが,1つの低解像度イメージからの高解像度イメージのが生成さ可性がある,sisrは不成设定です。

深層学習アルゴリズムを含め,いくつかの手法がSISRを実行するために提案されています。この例では,很深的超分辨率(VDSR)と呼ばれるSISRのための深層学習アルゴリズムを扱います[1]。

VDSRネットワーク

VDSRは単一イメージ超解像処理を実行するために設計された,畳み込みニューラルネットワークアーキテクチャです[1]。VDSRネットワークは低解像度イメージと高解像度イメージとのマッピングを学習します。低解像度イメージと高解像度イメージは類似したイメージの内容をもち,異なるのは主に細かい高周波数成分であるため,このマッピングは可能です。

VDSRは残差学習法を使用しています。これはネットワークに残差イメージを推定するように学習させるものです。超解像処理のコンテキストでは,残差イメージは高解像度の参照イメージと参照イメージのサイズに一致するように双三次内挿を使用してアップスケーリングされた低解像度イメージとの差分です。残差イメージには,イメージの詳細な高周波数成分に関する情報が含まれます。

VDSRネットワークネットワーク,カラーイメージの辉度からイメージ検出します。yは,各ピクセルの明度を赤,绿および青ピクセル値の线形结合で表したものです。一方,イメージの2つの色差チャネルCB.およびCR.赤,は緑および青ピクセル値の異なる線形結合で,色差情報を表します。VDSRは輝度チャネルだけを使用して学習します。人間の知覚は色の変化よりも明度の変化に敏感であるからです。

y res. が高解像度イメージの辉度で, y lowres が双三次内挿を使用してアップスケーリングされた低解像度イメージの輝度である場合,VDSRネットワークへの入力は y lowres で,ネットワークは学习データから y 剩余的 = y 高分辨率 - y lowres を予測するために学習します。

VDSRネットワークに残差イメージを推定するように学習させた後,推定した残差イメージをアップサンプリングした低解像度イメージに追加し,イメージをRGB色空間に変換し直すことによって,高解像度イメージを再構築できます。

倍率は,参照イメージのサイズの低解像度イメージのサイズに対するものです。低解像度イメージでは,イメージの高周波数成分に関する情報が特に失われるため,倍率が高くなるほどSISRはさらに不良設定になります。VDSRは大規模受容野を使用して,この問題を解決します。この例では,複数の倍率でのスケーリングによる拡張を使用して,VDSRネットワークを学習させます。スケーリングによる拡張では,低倍率のイメージコンテキストをネットワークが活用できるため,高倍率での結果が改善されます。さらに,VDSRネットワークは整数でない倍率のイメージを受け入れることで一般化できます。

学習データとテストデータのダウンロード

20,000个の静止した自然イメージから成,iapr tc-12ベンチマークをダウンロードします2]。このデータセットには,人物,动物,都市などの写真が含まれます。データファイルのサイズは〜1.8 GBです。学习データセットをダウンロードしない场合,コマンドラインで负载(“trainedvdsr时代- 100 scalefactors - 234. -垫”);を入力して,事前学習済みのVDSRネットワークを読み込むことができます。それから,この例の”vdsrネットワークを使使用しし一単イメージ超解像の行」セクションに进みます。

データをダウンロードするために補助関数downloadIAPRTC12Dataを使用します。この関数は,この例にサポートファイルとして添付されています。

imagesDir = tempdir;url =“http://www-i6.informatik.rwth-aachen.de/imageclef/resources/iaprtc12.tgz”;downloadiaprtc12data(URL,ImagesDir);

この例ではネットワークをIAPR TC-12ベンチマークデータの小さなサブセットで学习させます.imageCLEF学习データを読み込みます。すべてのイメージは32ビットJPEGカラーイメージです。

trainImagesDir = fullfile (imagesDir,“iaprtc12”'图片''02');ext = {'.jpg'bmp格式的“使用”};pristineImages = imageDatastore (trainImagesDir,'FileExtensions',exts);

学习イメージイメージ数を表示します。

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

学習データの準備

学習データセットを作成するには,アップサンプリングされたイメージと対応する残差イメージで構成されるイメージのペアを生成します。

アップアップサンプリングされたイメージイメージ,ディレクトリupsampledDirNameの垫ファイルとしてディスクに格納されます。ネットワーク応答を表す計算された残差イメージは,ディレクトリresidualDirNameの垫ファイルとしてディスクに格納されます。ネットワークの学习時に精度を向上させるため、MAT ファイルはデータ型として格纳されます。

upsampledDirName = [trainImagesDir filesep .“upsampledImages”];residualDirName = [trainImagesDir filesep .'reasualualimages'];

補助関数createVDSRTrainingSetを使用して学習データを前処理します。この関数は,この例にサポートファイルとして添付されています。

この補助関数は,trainImagesの初期状態の各イメージに対して以下の操作を実行します。

  • イメージをYCbCr色空間に変換します。

  • 輝度(Y)チャネルを異なる倍率で縮小することによってサンプルの低解像度イメージを作成してから,双三次内挿を使用してイメージのサイズを元のサイズに変更します。

  • 初期状態のイメージとサイズ変更されたイメージの差を計算します。

  • 

scalefactors = [2 3 4];createVDSRTrainingSet(pristineImages,比例因子,upsampledDirName,residualDirName);

学习セット用ののの前パイプライン定义

この例では,ネットワーク入力は,双三次内挿を使用してアップサンプリングされた低解像度イメージです。目的のネットワーク応答は,残差イメージです。入力イメージファイルのコレクションからupsampledimagesというイメージデータストアを作成します。計算された残差イメージファイルのコレクションからresidualImagesというイメージデータストアを作成します。いずれのデータストアでも,イメージファイルからイメージデータを読み取るには補助関数基质が必要です。この関数は,この例にサポートファイルとして添付されています。

Upsampledimages = imagedataStore(UpsampledDirname,'FileExtensions'“.mat”'readfcn', @matRead);residualImages = imageDatastore (residualDirName,'FileExtensions'“.mat”'readfcn', @matRead);

データ拡張のパラメーターを指定するImagedataAugmenter.を作物しし。学习中にデータ拡拡使使し习习データを変ささせることによってががでなな习しが的でででここますます的でででによりによりしますがで的的によりますし。およびX方向のランダムな镜映指定します。

增量= imageDataAugmenter (...“RandRotation”@()兰迪([0,1],1)* 90,...'RandXReflection',真正的);

アップサンプリングされたイメージのデータストアと残差イメージのデータストアからのランダム化されたパッチ抽出を実行するrandomPatchExtractionDatastore(图像处理工具箱)ことができる图像到映像回帰问题でよく使使れます。これこれ,元元学习セットにれるフルサイズ各各イメージ含まのを抽出することができことができ,学校セットのサイズが大厦幅大大なることを意味します。

patchsize = [41 41];patchesperimage = 64;dstrain = randompatchExtractionDataStore(Upsampledimages,ResidualImages,PatchSize,...“dataaugmentation”,增强者,“patchesperimage”, patchesPerImage);

結果のデータストアdsTrainでは,データのミニバッチが,エポックの各反復でネットワークに渡されます。データストアからの読み取りの結果をプレビューします。

inputBatch =预览(dsTrain);DISP(inputBatch)
InputImage ErneyImage ______________ _______________double} {41×41 double} {41×41 double} {41×41 double} {41×41 double} {41×41 double} {41×41 double} {41×41 double} {41×41 double}

VDSR层のセットアップ

この例では,以下を含む深度学习工具箱™の41の個別の層を使用してVDSRネットワークを定義します。

第 1 層imageInputLayerはイメージパッチに対して作用します。パッチサイズは,ネットワークの最上位層の応答に影響する空間イメージ領域であるネットワーク受容野に基づきます。ネットワーク受容野がイメージ内の高レベルの特徴をすべて確認できるように,受容野のサイズはイメージのサイズと同じであるのが理想的です。この場合,畳み込み層D.をもつネットワークに対して,受容野は(2D.+1) 行 (2D.+ 1)列です。

VDSRには20個の畳み込み層があるため,受容野とイメージパッチのサイズは41行41列です。イメージ入力層は1チャネルのイメージを受け入れます。VDSRが輝度チャネルだけを使用して学習しているからです。

networkDepth = 20;firstLayer = imageInputLayer([41 41 1],'姓名'“InputLayer”“归一化”'没有任何');

イメージイメージ力量层続いて,サイズが3行3列の64个のフィルターがあるミニバッチ畳み込み层があります。ミニバッチのサイズによりフィルターが决まり。それぞれの畳み込みの后で。サイズサイズと同じになるなるよう,各各畳み込み层の入入をゼロしし.heの手法[3.]は,ニューロン学习が非になるようようななに层のにます各各层のに,ネットワークネットワークに非形形性ををもたらすに非形形性を

convLayer = convolution2dLayer (64,“填充”, 1...“WeightsInitializer”“他”“BiasInitializer”'zeros''姓名''conv1');

relu层を指定します。

relLayer = reluLayer ('姓名'“ReLU1”);

中間層は18個あり,畳み込み層と正規化線形ユニット層が交互に配置されています。各畳み込み層はサイズ3 x 64 x 64の個のフィルターを含みます。1つのフィルターは 64 チャネルにわたって 3 行 3 列の空間領域に作用します。前述のとおり、ReLU 層はすべての畳み込み層に続きます。

middlelayer = [convLayer relLayer];为了layerNumber = 2:networkDepth-1 convLayer =卷积2dlayer (3,64,“填充”[1],...“WeightsInitializer”“他”“BiasInitializer”'zeros'...'姓名',[“Conv”num2str (layerNumber)]);relLayer = reluLayer ('姓名',['RELU'num2str (layerNumber)]);middlayers = [Middlayers Convlayer Rellayer];结尾

最后から2番目の层は,イメージを再构成するサイズ3 x 3 x 64の単のフィルター备た,畳み込み层です。

convLayer = convolution2dLayer(3,1,“填充”[1],...“WeightsInitializer”“他”“BiasInitializer”'zeros'...“NumChannels”, 64,'姓名',[“Conv”num2str(NetworkDepth)]);

最後の層はReLU層ではなく回帰層です。回帰層は,残差イメージとネットワーク予測との平均二乗誤差を計算します。

finalLayers = [convLayer regressionLayer('姓名''finallegressionlayer'));

すべての层を连结してVDSRネットワークを构筑します。

层= [firstLayer middleLayers finalllayers];

あるいは,補助関数vdsrLayersを使用してVDSR层を作成します。この关数は,この例にサポートファイルとして添付されています。

层= vdsrLayers;

学習オプションの指定

モーメンタム项付き确率的勾配降下(SGDM)最最化ををしてネットワーク学问trainingOptionsを使用して个用ハイパーパラメーター設定を指定します。最初の学習率は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,...'italllearnrate'initLearningRate,...“LearnRateSchedule”“分段”...“LearnRateDropPeriod”10...'学习ropfactor'learningRateFactor,...“L2Regularization”l2reg,...“MaxEpochs”maxEpochs,...“MiniBatchSize”miniBatchSize,...“GradientThresholdMethod”'l2norm'...'gradientthreshold', 0.01,...'plots'“训练进步”...“详细”、假);

ネットワークの学习

学习オプションとランダムパッチ抽出データストアを构成した后,关数Trainnetwork.を使用してvdsrネットワークネットワーク学习习せますます。ネットワークを学习させるに,以下のコードで用圆形パラメーターを真正的に设定します。学习能力,计算能力3.0以上のの対応nvidia™gpuをを用することを强くします。

次のコードで用圆形パラメーターを错误的のままにすると,この例は超解像処理イメージを倍率2、3および4で学習させた事前学習済みのVDSRネットワークを返します。

メモ:英伟达™泰坦Xでの学習には約6時間を要します。ご使用のGPUハードウェアによっては,さらに長い時間がかかる可能性もあります。

doTraining = false;如果doTraining modelDateTime = datestr'DD-MMM-YYYY-HH-MM-SS');净= trainNetwork(dsTrain,层,选项);节省([“trainedVDSR -”modeldateTem.'-时代-'num2str(maxEpochs * epochIntervals)“-ScaleFactors -”num2str(234)“.mat”],'网''选项');别的负载(“trainedvdsr时代- 100 scalefactors - 234. -垫”);结尾

vdsrネットワークを使使用しし一単イメージ超解像の行

VDSRネットワークを使用して单一图像超分辨率(SISR)を実行するには,この例の残りのステップを実行します。この例の残りでは,次の処理を実行する方法を示します。

  • 高解像度の参照イメージからサンプルの低解像度イメージを作成します。

  • 深層学習に依存しない従来型のイメージ処理ソリューションである双三次内挿を使用したSISRを,低解像度イメージで実行します。

  • vdsrニューラルニューラルを使使,低解像度イメージのsisrを実行。

  • 双三次内挿とVDSRを使用して再構成した高解像度イメージを視覚的に比較します。

  • 超解像処理イメージと高解像度の参照イメージとの類似度を定量化することで,このイメージの画質を評価します。

低解像度サンプルイメージの作成

深层学习を使使を用しし超解像定理の结果双双三次内插の従のイメージ手手使したを比较するためする低度イメージをを。testimages.にに,图像处理工具箱™に付属する21个の歪みのないが含まれています。imageDatastoreににます。

ext = {'.jpg'“使用”};文件名= {“sherlock.jpg”“car2.jpg”“fabric.png”“greens.jpg”'hands1.jpg'“kobi.png”...'lighthouse.png''micromarket.jpg'“office_4.jpg”“onion.png”'pears.png''yellowlily.jpg'...'indiancorn.jpg'“flamingos.jpg”“sevilla.jpg”'llama.jpg''Parkvenue.jpg'...'peacock.jpg'“car1.jpg”“strawberries.jpg”'wagage.jpg'};filePath = [fullfile matlabroot,“工具箱”'图片''imdata') filesep);filePathNames = strcat (filePath,文件名);testImages = imageDatastore (filePathNames,'FileExtensions',exts);

テストイメージをモンタージュとして表示します。

蒙太奇(testImages)

イメージを1つ选択し,超解像超解像原理用の参照イメージとしてします。参照参照イメージとして独高高度度ををををををををできできできできできできできできできできできできできできでき

indx = 1;%要从测试映像数据存储中读取的映像索引Ireference = ReadImage(testimages,Indx);Ireference = im2double(Ireference);imshow(启发)标题('高分辨率参考图像'

imresize(图像处理工具箱)を0.25の倍率で使て,高解像度参照イメージの低度ををします。

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

双三次内插を使使たイメージ解像度のの上

深層学習を使用しない場合,イメージの解像度を高める標準的な方法は,双三次内挿を使うことです。結果の高解像度イメージが参照イメージと同じサイズになるように,双三次内挿を使用して低解像度イメージをアップスケーリングします。

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

事前学習済みのVDSRネットワークを使用したイメージ解像度の向上

vdsrはイメージの辉度チャネルをををして习させるせるせるください注意くださいくださいくださいください。人间の知覚知覚色変変変もももからからからからからからからからからからから

关节rgb2ycbcr(图像处理工具箱)を使用して,低解像度イメージをRGB色空間から輝度(Iy)および色差(银行独立委员会只有几)チャネルに変換します。

Iycbcr = rgb2ycbcr(Ilowres);IY = Iycbcr(:,:,1);ICB = Iycbcr(:,:,2);ICR为Iycbcr(:,:,3);

双三次内插を使て,辉度辉度2つの色差をアップします。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 =激活(净、Iy_bicubic 41);Iresidual =双(Iresidual);imshow (Iresidual[])标题('VDSR'的剩余图像

残差イメージをアップスケーリングれた辉度コンポーネントにて,高度度のvdsr辉度コンポーネントを取得しますますますます。

ISR = IY_BICUBIC + IRESIV;

高解像度のVDSR輝度成分をアップスケーリングした色成分と連結します。关节ycbcr2rgb(图像处理工具箱)ををrgb色空间にし,vdsrを使した最终のの最终のですですイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージイメージ

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

視覚的な比較と定量的比較

高解像度イメージを視覚的によく把握するために,それぞれのイメージ内の小領域を調べます。関心領域(ROI)をベクトルroiを使って[Xy宽度高度]の形式で指定します。各要素は,roiのの上隅x yy座标,幅と高度さ定义れます。

ROI = [320 30 480 400];

高解像度イメージをこのROIにトリミングして,结果をモンタージュとして表示します.VDSRイメージは,双三次内插を使用して作成された高解像度イメージと比べ,细部がより鲜明で,鋭いエッジがあります。

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

画質メトリクスを使用して,双三次内挿による高解像度イメージとVDSRイメージを定量的に比較します。参照イメージは元の高解像度イメージ启动で,サンプルの低解像度イメージを作成する前のものです。

参照イメージに対する各イメージのs / n比(psnr)を测定します.psnnrの値が大声ほど,一般にはが高度ことを示します。psnr值(图像处理工具箱)を参照してください。

bicubicPSNR = psnr (Ibicubic Ireference)
bicubicPSNR = 38.4747
VDSRPSNR = PSNR(IVDSR,IREREFERGE)
vdsrPSNR = 39.2346

各イメージの構造的類似性(SSIM)指数を測定します。SSIMは参照イメージに対してイメージの3つの特性である輝度,コントラスト,構造の視覚的影響を評価します。SSIM値が1に近いほど,テストイメージは参照イメージに近づきます。このメトリクスの詳細については,SSIM(图像处理工具箱)を参照してください。

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

自然图像质量评估者(NIQE)を使用して,知覚的画質を測定します。NIQEスコアが小さいほど知覚的画質が良好なことを示します。このメトリクスの詳細については,niqe(图像处理工具箱)を参照してください。

Bicubicniqe = Niqe(Ibicubic)
Bicubicniqe = 5.1721
vdsrNIQE = niqe (Ivdsr)
vdsrNIQE = 4.7611

テストイメージのセット全体に対して,倍率2、3および4で平均PSNRおよびSSIMを計算します。簡単にするため,補助関数superResolutionMetricsを使用して平均メトリクスを算出できます。この关数は,この例にサポートファイルとして添付されています。

scalefactors = [2 3 4];SuperResolutionMetrics(网络,测试,Scalefactors);
结果比例因子2双三次的平均PSNR值= 31.809683平均PSNR VDSR = 31.921784平均SSIM双三次的= 0.938194平均SSIM VDSR = 0.949404结果比例因子3双三次的平均PSNR值= 28.170441平均PSNR VDSR = 28.563952平均SSIM双三次的= 0.884381平均SSIM VDSR = 0.895830的结果标度因子4 Bicubic的平均PSNR = 27.010839 VDSR的平均PSNR = 27.837260 Bicubic的平均SSIM = 0.861604 VDSR的平均SSIM = 0.877132

双三次内挿と比較すると,各倍率でVDSRのほうが良いメトリクススコアを示しています。

参考文献

[1] Kim, J., J. K. Lee和K. M. Lee。“使用深度卷积网络的精确图像超分辨率。”IEEE的诉讼程序®计算机视觉和模式识别会议.2016年,页1646 - 1654。

[2] Grubinger,M.,P. Clough,H.Müller和T. Deselaers。“IAPR TC-12基准测试:用于视觉信息系统的新评估资源。”2006年OntoImage语言资源的法律程序基于内容的图像检索.意大利热那亚。第五卷,2006年5月,第10页。

何凯,张旭东,任舜,孙杰。深入研究整流器:在图像网分类上超越人类水平的表现。IEEE计算机视觉国际会议论文集,2015,pp。1026-1034。

参考

||||||

関連するトピック