ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

randomPatchExtractionDatastore

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

説明

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

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

メモ

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

作成

説明

patchds = randomPatchExtractionDatastore(imds1,imds2,patchSize) は、イメージ データストア imds1 内のイメージからサイズが patchSize のランダムに配置されたパッチを抽出し、イメージ データストア imds2 内のイメージから対応するパッチを抽出するデータストアを作成します。

patchds = randomPatchExtractionDatastore(imds1,pxds,patchSize) は、イメージ データストア imds1 内のグラウンド トゥルース イメージからサイズが patchSize のランダムに配置されたパッチを抽出し、ピクセル ラベル データストア pxds 内のピクセル ラベル イメージから対応するパッチを抽出するデータストアを作成します。

この構文では Computer Vision Toolbox™ が必要です。

patchds = randomPatchExtractionDatastore(___,Name,Value) は、名前と値のペアを使用して PatchesPerImageDataAugmentation および DispatchInBackground プロパティを設定します。名前と値のペアは複数指定できます。各引数またはプロパティ名は引用符で囲みます。

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

入力引数

すべて展開する

ネットワークへの学習用の入力を含む入力イメージ データ。ImageDatastore オブジェクトとして指定します。

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

目的のネットワーク応答を表す応答イメージ データ。ImageDatastore オブジェクトとして指定します。

目的のネットワーク応答を表す応答ピクセル ラベル データ。pixelLabelDatastore オブジェクトとして指定します。

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

  • 正方形パッチの行と列の数を指定する正の整数。

  • [r c] 形式の正の整数の 2 要素ベクトル。最初の要素はパッチの行数、2 番目の要素は列数を指定します。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

プロパティ

すべて展開する

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

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

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

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

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

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

各バッチで返される観測値の数。学習、予測、および分類では、MiniBatchSize プロパティは trainingOptions で定義されたミニバッチ サイズに設定されます。

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

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

オブジェクト関数

hasdataデータが読み取り可能かどうかを判別
partitionByIndexインデックスに応じた randomPatchExtractionDatastore の分割
previewデータ ストア内のデータのサブセット
readrandomPatchExtractionDatastore からデータを読み取る
readallデータ ストアのすべてのデータの読み取り
readByIndexrandomPatchExtractionDatastore からインデックスで指定されたデータを読み取る
resetデータ ストアの初期状態へのリセット
shufflerandomPatchExtractionDatastore 内のデータのシャッフル

すべて折りたたむ

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

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

目的のネットワーク応答を含む 2 番目のイメージ データストアを作成します。このイメージ データストアには、ガウスぼかしを使用してイメージを平滑化するカスタム読み取り関数 myreadfcn (この例の終わりで定義) が含まれています。

imds2 = imageDatastore(imageDir,'FileExtensions','.jpg','ReadFcn',@myreadfcn);

[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: 4736
    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)')

サポート対象の関数

この例では、ディスクからファイルを読み取り、ガウスぼかしを適用してイメージを平滑化する関数 myreadfcn を定義します。関数は、平滑化されたイメージを返します。

function J = myreadfcn(filename)
    I = imread(filename);
    J = imgaussfilt(I,2);
end

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

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()
    pixelClassificationLayer()
    ]
layers = 
  10x1 Layer array with layers:

     1   ''   Image Input                  32x32x1 images with 'zerocenter' normalization
     2   ''   Convolution                  64 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     3   ''   ReLU                         ReLU
     4   ''   Max Pooling                  2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   Convolution                  64 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     6   ''   ReLU                         ReLU
     7   ''   Transposed Convolution       64 4x4 transposed convolutions with stride [2  2] and output cropping [1  1]
     8   ''   Convolution                  2 1x1 convolutions with stride [1  1] and padding [0  0  0  0]
     9   ''   Softmax                      softmax
    10   ''   Pixel Classification Layer   Cross-entropy loss 

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

options = trainingOptions('sgdm', ...
    'InitialLearnRate',1e-3, ...
    'MaxEpochs',5, ...
    'Verbose',false);

ネットワークに学習をさせます。

net = trainNetwork(patchds,layers,options);

ヒント

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

  • randomPatchExtractionDatastore は常に各入力データストアから 1 つずつイメージを読み取ります。これは、入力データストアの ReadSize プロパティを 1 に設定して実現します。

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

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

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

R2018b で導入