Main Content

randomPatchExtractionDatastore

イメージまたはピクセル ラベル イメージから 2 次元または 3 次元のランダム パッチを抽出するためのデータストア

説明

randomPatchExtractionDatastore オブジェクトは、2 つのイメージベースのデータストアから、対応するランダムに配置されたパッチを抽出します。たとえば、入力データストアには、image-to-image 回帰ネットワークの学習用のネットワーク入力と目的のネットワーク応答、またはセマンティック セグメンテーション ネットワークの学習用のグラウンド トゥルース イメージとピクセル ラベル データを含む 2 つのイメージ データストアを指定できます。

このオブジェクトを使用するには、Deep Learning Toolbox™ が必要です。

メモ

randomPatchExtractionDatastore を学習データのソースとして使用する場合、データストアがエポックごとに各イメージから複数のランダム パッチを抽出するため、エポックごとに若干異なるデータ セットが使用されます。エポックごとの学習パッチの実際の数は、学習イメージの数の PatchesPerImage 倍です。イメージ パッチはメモリに格納されません。

作成

説明

patchds = randomPatchExtractionDatastore(ds1,ds2,PatchSize) は、データストア ds1 内の入力データとデータストア ds2 内の応答データからサイズが PatchSize のランダムに配置されたパッチを抽出するデータストアを作成します。

patchds = randomPatchExtractionDatastore(ds1,ds2,PatchSize,Name,Value) は、名前と値の引数を使用して PatchesPerImageDataAugmentation および DispatchInBackground プロパティを設定します。複数の名前と値の引数を指定できます。

たとえば、randomPatchExtractionDatastore(imds1,imds2,50,"PatchesPerImage",40) は、イメージ データストア imds1imds2 内の各イメージから 50×50 ピクセルの 40 個のパッチを無作為に生成するデータストアを作成します。

入力引数

すべて展開する

ネットワークへの学習用の入力を含む入力データ。ImageDatastorePixelLabelDatastore (Computer Vision Toolbox)、または TransformedDatastore として指定します。

PixelLabelDatastore を指定する場合、Computer Vision Toolbox™ が必要です。

メモ

ImageDatastore を使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができます。イメージの読み取りにカスタム関数を使用する場合、事前取得は行われません。

目的のネットワーク応答を表す応答データ。ImageDatastorePixelLabelDatastore (Computer Vision Toolbox)、または TransformedDatastore として指定します。TransformedDatastore を指定した場合、基になるデータストアは ImageDatastore または PixelLabelDatastore でなければなりません。

PixelLabelDatastore を指定する場合、Computer Vision Toolbox が必要です。

メモ

ImageDatastore を使用すると、事前取得を使用して JPG または PNG イメージ ファイルのバッチ読み取りを行うことができます。イメージの読み取りにカスタム関数を使用する場合、事前取得は行われません。

プロパティ

すべて展開する

この プロパティ は読み取り専用です。

パッチのサイズ。次のいずれかを指定します。

  • 2 次元パッチの正の整数の 2 要素ベクトル。PatchSize の形式は [r c] であり、r はパッチ内の行数を指定し、c は列数を指定します。

  • 3 次元パッチの正の整数の 3 要素ベクトル。PatchSize の形式は [r c p] であり、r はパッチ内の行数、c は列数、p は平面の数を指定します。

イメージあたりのランダム パッチの数。正の整数として指定します。

入力イメージに適用される前処理。imageDataAugmenter (Deep Learning Toolbox) オブジェクトまたは "none" として指定します。DataAugmentation"none" である場合、入力イメージには前処理が適用されません。

サイズ変更、回転および鏡映などのランダムな変換によってデータを拡張します。ネットワークで過適合が発生したり、学習データの正確な詳細が記憶されたりすることを防止するのに役立ちます。randomPatchExtractionDatastore は各ペアの両方のパッチに同じランダムな変換を適用します。データストアのデータは学習中にリアルタイムで拡張されます。

DataAugmentation プロパティは 3 次元データではサポートされていません。3 次元データを前処理するには、関数 transform を使用します。

学習、予測、または分類中のバックグラウンドにおける観測値の送信。false または true として指定します。バックグラウンド ディスパッチを使用するには、Parallel Computing Toolbox™ が必要です。

各バッチで返される観測値の数。データストアの作成後にのみ MiniBatchSize の値を変更できます。学習、予測、および分類では、MiniBatchSize プロパティは trainingOptions (Deep Learning Toolbox) で定義されたミニバッチ サイズに設定されます。

この プロパティ は読み取り専用です。

randomPatchExtractionDatastore に含まれている観測値の合計数。観測値の数は 1 つの学習エポックの長さです。

オブジェクト関数

combine複数のデータストアのデータを統合
hasdataデータが読み取り可能かどうかを判別
numpartitionsデータストアの区画数
partitionデータストアを分割する
partitionByIndexインデックスに応じた randomPatchExtractionDatastore の分割
previewデータストア内のデータのサブセットをプレビュー
readrandomPatchExtractionDatastore からデータを読み取る
readallデータストアのすべてのデータの読み取り
readByIndexrandomPatchExtractionDatastore からインデックスで指定されたデータを読み取る
resetデータストアの初期状態へのリセット
shuffleデータストア内のデータのシャッフル
transformデータストアの変換
isPartitionableデータストアが分割可能かどうかを判別
isShuffleableデータストアがシャッフル可能かどうかを判別

すべて折りたたむ

学習イメージを含むイメージ データストアを作成します。この例のデータストアには JPEG カラー イメージが含まれています。

imageDir = fullfile(toolboxdir('images'),'imdata');
imds1 = imageDatastore(imageDir,'FileExtensions','.jpg');

ガウスぼかしを適用することによって imds1 内のイメージを変換する 2 番目のデータストアを作成します。

imds2 = transform(imds1,@(x)imgaussfilt(x,2));

[0, 90] 度の範囲のランダムな角度でイメージを回転させ、イメージ データを水平にランダムに反転させる imageDataAugmenter を作成します。

augmenter = imageDataAugmenter('RandRotation',[0 90],'RandXReflection',true)
augmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 1
     RandYReflection: 0
        RandRotation: [0 90]
           RandScale: [1 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [0 0]
    RandYTranslation: [0 0]

未処理の学習イメージと対応する平滑化された応答イメージから、サイズが 100 行 100 列のランダム パッチを抽出する randomPatchExtractionDatastore オブジェクトを作成します。DataAugmentation プロパティを設定して拡張オプションを指定します。

patchds = randomPatchExtractionDatastore(imds1,imds2,[100 100], ...
    'DataAugmentation',augmenter)
patchds = 
  randomPatchExtractionDatastore with properties:

         PatchesPerImage: 128
               PatchSize: [100 100]
        DataAugmentation: [1×1 imageDataAugmenter]
           MiniBatchSize: 128
         NumObservations: []
    DispatchInBackground: 0

一連の拡張されたイメージ パッチと対応する平滑化されたイメージ パッチをプレビューします。

minibatch = preview(patchds);
inputs = minibatch.InputImage;
responses = minibatch.ResponseImage;
test = cat(2,inputs,responses);
montage(test','Size',[8 2])
title('Inputs (Left) and Responses (Right)')

学習イメージを含むイメージ データストアを作成します。

dataDir = fullfile(toolboxdir("vision"),"visiondata","triangleImages");
imageDir = fullfile(dataDir,"trainingImages");
imds = imageDatastore(imageDir);

クラス名と関連するラベル ID を定義します。次に、学習イメージのグラウンド トゥルース ピクセル ラベルを含むピクセル ラベル データストアを作成します。

classNames = ["triangle" "background"];
labelIDs = [255 0];
labelDir = fullfile(dataDir,"trainingLabels");
pxds = pixelLabelDatastore(labelDir,classNames,labelIDs);

イメージと対応するピクセル ラベルから 32 行 32 列ピクセルのランダム パッチを抽出するために、ランダム パッチ抽出データストアを作成します。PatchesPerImage プロパティを設定して、イメージとピクセル ラベルの各ペアから 512 個のランダム パッチを抽出します。

patchds = randomPatchExtractionDatastore(imds,pxds,32, ...
     PatchesPerImage=512);

セマンティック セグメンテーションのネットワークを作成します。

layers = [
    imageInputLayer([32 32 1])
    convolution2dLayer(3,64,Padding=1)
    reluLayer()
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,64,Padding=1)
    reluLayer()
    transposedConv2dLayer(4,64,Stride=2,Cropping=1)
    convolution2dLayer(1,2)
    softmaxLayer()
    ];

学習オプションをセットアップします。学習時間を短縮するために、MaxEpochs を 5 に設定します。

options = trainingOptions("sgdm", ...
    InitialLearnRate=1e-4, ...
    MaxEpochs=5, ...
    Plots="training-progress", ...
    Verbose=false);

ピクセル分類に適したクロスエントロピー損失関数を定義します。

function loss = modelLoss(Y,T)
    mask = ~isnan(T);
    T(isnan(T)) = 0;
    loss = crossentropy(Y,T,Mask=mask,NormalizationFactor="mask-included");
end

関数 trainnet を使用してニューラル ネットワークに学習させます。

net = trainnet(patchds,layers,@modelLoss,options);

ヒント

  • randomPatchExtractionDatastore では、入力データストアに対する read 操作の出力から同じサイズの配列が返されると想定しています。

  • 入力データストアが ImageDatastore の場合、その Labels プロパティの値は randomPatchExtractionDatastore によって無視されます。

  • randomPatchExtractionDatastore の 2 次元データを可視化するには、データのサブセットを table で返す関数 preview を使用できます。関数 montage を使用して、パッチをすべて同じ Figure に可視化します。たとえば、次のコードは randomPatchExtractionDatastore のイメージ パッチ patchds のプレビューを表示します。

    minibatch = preview(patchds);
    montage(minibatch.InputImage)

バージョン履歴

R2018b で導入