主要内容

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

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

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

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

はじめに

超解像処理は低解像度イメージから高解像度イメージを作成するプロセスです。この例では,单一的图像超分辨率(SISR)について考えます。目標は1つの低解像度イメージから1つの高解像度イメージを復元することです。SISRが難しいのは,一般的にはイメージの高周波数成分を低解像度イメージから回復することができないためです。高周波数情報なしでは,高解像度イメージの画質には限界があります。さらに1つの低解像度イメージから複数の高解像度イメージの候補が生成される可能性があるため,SISRは不良設定問題です。

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

VDSRネットワーク

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

vdsrは残差学习法ををネットワークにいますをようにに习さものものですですですですですですです。サイズサイズイメージアップはとののですですイメージにははは三イメージにははは三三解像にははの差三三アップスケーリングとのれ三三てアップスケーリングされれ三三アップスケーリングさされ双三三次スケーリングスケーリングされ三三三次次次内插れに双三次次さされ使三三三次次次され使使三三次次次さ使使三三て次次内插さ使使三三てアップ次次使使使三三てアップ次次を使三三三三ににに使使三三

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

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

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

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

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

20000年個の静止した自然イメージから成る,IAPR TC-12ベンチマークをダウンロードします[2]。このデータセットには,人物,動物,都市などの写真が含まれます。データファイルのサイズは~ 1.8 GBです。学習データセットをダウンロードしない場合,コマンドラインで负载('trousovdsr-epoch-100-scalefactors-234.mat');を入力して,事前学習済みの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'“图片”“2”);ext = {“jpg”'.bmp''.png'};pristineImages = imageDatastore (trainImagesDir,“FileExtensions”ext);

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

numel(pristineimages.files)
ans = 616.

学習データの準備

学科データセットを作物作物するに,アップサンプリングされたイメージ対応する残差イメージで构构さイメージのペアををををしししイメージイメージのペアをををしし

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

upsampledDirName = [trainImagesDir filesep .'UpsampledImages'];ResidualDirName = [TrainimagesDir FileSEP“residualImages”];

补助关节createVDSRTrainingSetをを使しててしををを。

この补助关节,训练仿真の初期状态の各イメージに対して以下の操作を実行します。

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

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

  • サイズ変更されたイメージと残差イメージをディスクに保存します。

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

学習セット用の前処理パイプラインの定義

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

upsampledImages = imageDatastore (upsampledDirName,“FileExtensions”'。垫'“ReadFcn”, @matRead);residualImages = imageDatastore (residualDirName,“FileExtensions”'。垫'“ReadFcn”, @matRead);

データ拡张のパラメーターを指定するimageDataAugmenter(深度学习工具箱)を作成します。学習中にデータ拡張を使用して学習データを変化させることによって,使用可能な学習データの量が効果的に増加します。ここで,拡張により,90度のランダムな回転,およびx方向のランダムな鏡映を指定します。

upmenter = imagedataAugmenter(......'randroatation',@()randi([0,1],1)* 90,......“RandXReflection”,真的);

アップアップサンプリングされれたイメージデータストアと残差イメージのデータストアからのランダムささたパッチ抽出抽出を行randomPatchExtractionDatastoreを作成します。パッチ抽出は,小さなイメージパッチ,すなわちタイルを,より大きな1つのイメージから抽出するプロセスです。このタイプのデータ拡張は,非常に小さなサイズの入力イメージで多くのネットワークアーキテクチャに学習させることができるimage-to-image回帰問題でよく使用されます。これは,元の学習セットに含まれるフルサイズの各イメージから多くのパッチを抽出することができ,学習セットのサイズが大幅に大きくなることを意味します。

patchSize = [41 41];patchesPerImage = 64;dsTrain = randomPatchExtractionDatastore (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の個別の層を使用してVDSRネットワークを定義します。

  • imageInputlayer.(深度学习工具箱)——イメージ入力層

  • Convolution2Dlayer.(深度学习工具箱)——畳み込みニューラルネットワーク用の2次元畳み込み層

  • reluLayer(深度学习工具箱)——正規化線形ユニット層(ReLU)

  • regressionLayer(深度学习工具箱)——ニューラルネットワーク用の回帰出力層

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

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

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

イメージ入力層に続いて,サイズが3行3列の64個のフィルターがある2次元畳み込み層があります。ミニバッチのサイズによりフィルター数が決まります。それぞれの畳み込みの後で,特徴マップのサイズが入力サイズと同じになるように,各畳み込み層の入力をゼロパディングします。他の手法(3.]はニューロン学習が非対称になるようにランダムな値に重みを初期化します。各畳み込み層の後に,ネットワークに非線形性をもたらすReLU層が続きます。

convLayer = convolution2dLayer (64,“填充”, 1......'掌控itializer''他''偏见的人'“零”“名字”“Conv1”);

ReLU層を指定します。

relLayer = reluLayer (“名字”'relu1');

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

middlelayer = [convLayer relLayer];LayerNumber = 2:NetworkDepth-1 Convlayer = Convolution2Dlayer(3,64,“填充”[1],......'掌控itializer''他''偏见的人'“零”......“名字”,['conv'num2str (layerNumber)]);relLayer = reluLayer (“名字”,[“ReLU”num2str (layerNumber)]);= [middleLayers convLayer relLayer];结束

最後から2番目の層は,イメージを再構成するサイズ3 x 3 x 64の単一のフィルターを備えた,畳み込み層です。

convLayer = convolution2dLayer(3、1、“填充”[1],......'掌控itializer''他''偏见的人'“零”......“NumChannels”,64,“名字”,['conv'num2str (networkDepth)]);

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

finAllayers = [convrayer回归层(“名字”“FinalRegressionLayer”)];

すべての層を連結してVDSRネットワークを構築します。

图层= [FirstLayer Middlayers FinAllayers];

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

层= Vdsrlayers;

学习オプションの指定

モーメンタム項付き確率的勾配降下最个適化を使用してネットワークに学習させます。関数培训选项(深度学习工具箱)をを用して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”'分段'......'学习ropperiod',10,......“LearnRateDropFactor”,学习活动,......“L2Regularization”,l2reg,......'maxepochs',maxepochs,......“MiniBatchSize”miniBatchSize,......“GradientThresholdMethod”“l2norm”......“GradientThreshold”, 0.01,......“阴谋”'培训 - 进步'......“详细”,错误的);

ネットワークの学習

学習オプションとランダムパッチ抽出データストアを構成した後,関数trainNetwork(深度学习工具箱)を使用してVDSRネットワークに学習させます。ネットワークを学習させるには,以下のコードでdoTrainingパラメーターを真的に設定します。3.0以学習には、计算能力上のCUDA対応NVIDIA GPU™を使用することを強く推奨します。

次のコードでdoTrainingパラメーターをのままにすると,この例はは解像解像定理イメージを倍率2,3および4

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

dotraining = false;如果doTraining modelDateTime = datestr“dd-mmm-yyyy-HH-MM-SS”);网= trainNetwork (dsTrain层,选项);保存(['trousovdsr-'modelDateTime的时代,num2str (maxEpochs * epochIntervals)'-scalefactors-'num2str (234)'。垫'],“净”“选项”);其他的加载('trousovdsr-epoch-100-scalefactors-234.mat');结束

VDSRネットワークを使用した単一イメージ超解像処理の実行

vdsrネットワークネットワーク使使使单图像超分辨率(sisr)を実行するは,この例の残りステップステップしますます。

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

  • 深层学习にに依存ししない型型のイメージイメージをソリューションである三次内插を用したsisrを,低解像度イメージで行。

  • VDSRニューラルネットワークを使用した,低解像度イメージでのSISRを実行します。

  • 〖图库以来“

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

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

深層学習を使用した超解像処理の結果と双三次内挿などの従来のイメージ処理手法を使用した結果を比較するために使用する低解像度イメージを作成します。テストデータセットtestImagesには、图像处理工具箱™に付属する21個の歪みのないイメージが含まれています。イメージをimageDatastoreに読み込みます。

ext = {“jpg”'.png'};filenames = {'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”“parkavenue.jpg”......“peacock.jpg”'car1.jpg'“strawberries.jpg”“wagon.jpg”};filePath = [fullfile matlabroot,'工具箱'“图片”“imdata”) filesep);filePathNames = strcat (filePath,文件名);testImages = imageDatastore (filePathNames,“FileExtensions”ext);

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

蒙太奇(Testimages)

イメージを1つ選択して,超解像処理用の参照イメージとして使用します。参照イメージとして独自の高解像度イメージを使用することもできます。

indx = 1;%要从测试映像数据存储中读取的映像索引Ireference = readimage (testImages indx);Ireference = im2double (Ireference);imshow (Ireference)标题(高分辨率的参考图像的

imresize0.25をの倍率で使用して,高解像度参照イメージの低解像度バージョンを作成します。ダウンスケーリング中にイメージの高周波数成分は失われます。

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

双三次内挿を使用したイメージ解像度の向上

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

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

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

VDSRはイメージの輝度チャネルだけを使用して学習させることに注意してください。人間の知覚は色の変化よりも明度の変化に敏感であるからです。

関数RGB2YCBCR.を使用して,低解像度イメージをRGB色空間から輝度(IY.)および色差(ICB.ICR.)チャネルに変換します。

Iycbcr = rgb2ycbcr (Ilowres);Iy = Iycbcr (:: 1);银行独立委员会= Iycbcr (:: 2);Icr = Iycbcr (:: 3);

双三次内挿を使用して,輝度と2つの色差チャネルをアップスケーリングします。アップサンプリングされた色差チャネルICB_BICUBIC.ICR_BICUBIC.では,それ以上の処理は必要ありません。

iy_bicubic = imresize(iy,[nrows ncols],“双三次的”);ICB_BICUBIC = IMRESIZE(ICB,[NROWS NCOL],“双三次的”);ICR_BICUBIC = IMRESIZE(ICR,[NROWS NCOL],“双三次的”);

アップアップスケーリングした辉度コンポーネントIY_BICUBIC.を事前学习済みのvdsrネットワークを通じて渡します(回帰层)から激活(深度学习工具箱)を観測します。ネットワークの出力は目的の残差イメージです。

Iresidual =激活(净、Iy_bicubic 41);Iresidual =双(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)をベクトルROI.を使って[xy宽度高度]の形式で指定します。各要素は,ROIの左上隅のxとy座標,幅と高さで定義されます。

ROI = [320 30 480 400];

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

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

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

参照イメージに対する各イメージのピークS / N比(PSNR)を測定します。PSNRの値が大きいほど,一般には画質が高いことを示します。このメトリクスの詳細については,psnr值を参照してください。

BICUBICPSNR = PSNR(IBICUBIC,IREREFICE)
bicubicPSNR = 38.4747
vdsrPSNR = psnr (Ivdsr Ireference)
vdsrPSNR = 39.2346

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

BICUBICSSIM = SSIM(IBICUBIC,IREREFICE)
bicubicSSIM = 0.9861
VDSRSSIM = SSIM(IVDSR,IREREFUER)
VDSRSSIM = 0.9874.

自然图像质量评估器(NIQE)を使使て,知覚的画质を测定ます。nこのスコアがさいな的示しが良良良示し示しが详细については示し示しが良についてについて.Niqe.を参照してください。

bicubicNIQE = niqe (Ibicubic)
bicubicNIQE = 5.1721
vdsrNIQE = niqe (Ivdsr)
vdsrNIQE = 4.7611

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

scaleFactors = [2 3 4];superResolutionMetrics(净testImages scaleFactors);
结果对于平均值的平均PSNR = 31.809683用于VDSR = 31.921784平均SSIM的平均SSIM对于VDSR = 0.949404的平均SSSIM对于BICUBIC的平均PSNR的平均PSNR = 28.563952平均SSIM用于BICUBIC = 28.563952平均SSIM= 0.884381 VDSR = 0.895830的平均SSIM = 0.895830结果,用于双方的平均PSNR = 27.010839平均PSNR用于VDSR = 27.837260平均SSIM用于VDSR = 0.861604平均SSIM = 0.877132

〖图库“

参考文献

[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基准:一种新的视觉信息系统评估资源。基于内容的图像检索语言资源.热那亚,意大利。卷。5,2006年5月,p。10。

[3]他,K.,X. Zhang,S. Ren和J. Sun.“深入研究整流器:超越了在想象中分类上的人力水平表现。”IEEE计算机愿景国际会议的诉讼程序, 2015, pp. 1026-1034。

参考

|||(深度学习工具箱)|(深度学习工具箱)||

关键词する