Main Content

augmentedImageDatastore

バッチの変換によるイメージ データの拡張

説明

拡張イメージ データストアは、サイズ変更、回転、反転などのオプションの前処理を使用して、学習データ、検証データ、テスト データ、および予測データのバッチを変換します。イメージのサイズを変更して、深層学習ネットワークの入力サイズに適合させます。ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するには、ランダムな前処理演算を使用して学習イメージ データを拡張します。

拡張イメージを使用してネットワークに学習させるには、augmentedImageDatastoretrainNetwork に指定します。詳細については、イメージの深層学習向け前処理を参照してください。

  • 拡張イメージ データストアを学習イメージのソースとして使用する場合、データストアによって各エポックの学習データにランダムに摂動が与えられるため、エポックごとにわずかに異なるデータセットが使用されます。各エポックの学習イメージの実際の数は変化しません。変換後のイメージはメモリに格納されません。

  • imageInputLayer は、元のデータセットの平均ではなく拡張イメージの平均を使用してイメージの正規化を行います。この平均は、最初の拡張エポックで 1 回計算されます。他のすべてのエポックで同じ平均が使用されるため、学習中には平均イメージが変化しません。

既定では、augmentedImageDatastore はイメージのサイズを出力サイズに合わせて変更します。imageDataAugmenter を使用して、追加のイメージ変換のオプションを設定できます。

作成

説明

auimds = augmentedImageDatastore(outputSize,imds) は、イメージ データストア imds のイメージを使用して分類問題用の拡張イメージ データストアを作成し、OutputSize プロパティを設定します。

auimds = augmentedImageDatastore(outputSize,X,Y) は、分類問題および回帰問題用の拡張イメージ データストアを作成します。配列 X には予測子変数が含まれ、配列 Y にはカテゴリカル ラベルまたは数値応答が含まれます。

auimds = augmentedImageDatastore(outputSize,X) は、配列 X のイメージ データの応答を予測するための拡張イメージ データストアを作成します。

auimds = augmentedImageDatastore(outputSize,tbl) は、分類問題および回帰問題用の拡張イメージ データストアを作成します。テーブル tbl には、予測子と応答が含まれます。

auimds = augmentedImageDatastore(outputSize,tbl,responseNames) は、分類問題および回帰問題用の拡張イメージ データストアを作成します。テーブル tbl には、予測子と応答が含まれます。引数 responseNames は、tbl の応答変数を指定します。

auimds = augmentedImageDatastore(___,Name,Value) は、名前と値のペアを使用して ColorPreprocessingDataAugmentationOutputSizeMode、および DispatchInBackground の各プロパティを設定し、拡張イメージ データストアを作成します。複数の名前と値のペアを指定できます。各プロパティ名を引用符で囲みます。

たとえば、augmentedImageDatastore([28,28],myTable,'OutputSizeMode','centercrop') は中心からイメージをトリミングする拡張イメージ データストアを作成します。

入力引数

すべて展開する

イメージ データストア。ImageDatastore オブジェクトとして指定します。

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

ヒント

イメージのサイズ変更を含む深層学習用のイメージの前処理を効率的に行うには、augmentedImageDatastore を使用します。

関数 imageDatastorereadFcn オプションは通常、速度が大幅に低下するため、前処理またはサイズ変更に使用しないでください。

イメージ。4 次元数値配列として指定します。最初の 3 つの次元は高さ、幅、およびチャネルであり、最後の次元は個々のイメージにインデックスを付けます。

配列に NaN が含まれる場合、学習全体に伝播されます。ただし、ほとんどの場合に学習が収束しなくなります。

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

分類または回帰の応答。次のいずれかに指定します。

  • 分類問題で、Y がイメージ ラベルを含む categorical ベクトル。

  • 回帰問題では、Y は次のいずれかになる。

    • n 行 r 列の数値行列。n は観測値の数、r は応答の数です。

    • h x w x c x n の数値配列。h x w x c は 1 つの応答のサイズ、n は観測値の数です。

応答に NaN が含まれていてはなりません。

データ型: categorical | double

入力データ。テーブルとして指定します。tbl は、最初の列に予測子を、絶対イメージ パス、相対イメージ パス、あるいはイメージとして含まなければなりません。応答の型と場所は、問題によって異なります。

  • 分類問題では、応答はイメージのラベルを含むカテゴリカル変数でなければなりません。augmentedImageDatastore を呼び出すときに応答変数の名前が指定されていない場合、応答は 2 列目に含まれていなければなりません。tbl の異なる列に応答が含まれている場合、引数 responseNames を使用して応答変数名を指定しなければなりません。

  • 回帰問題では、応答は数値であり、最初の列より後の列に含まれなければなりません。応答は、スカラーとして複数の列に、あるいは数値ベクトルまたは 3 次元数値配列が含まれる cell 配列として 1 つの列に含めることができます。応答変数の名前を指定しない場合、augmentedImageDatastoretbl の残りの列を応答変数として受け入れます。引数 responseNames を使用して応答変数名を指定できます。

応答に NaN が含まれていてはなりません。予測子データに NaN が含まれる場合、学習全体に伝播されますが、ほとんどの場合に学習が収束しなくなります。

データ型: table

入力テーブルの応答変数の名前。次のいずれかとして指定します。

  • 1 つの応答をもつ分類または回帰タスクの場合、responseNames は、入力テーブルに応答変数が格納された文字ベクトルまたは string スカラーでなければなりません。

    複数の応答をもつ回帰タスクの場合、responseNames は、入力テーブルに応答変数が格納された string 配列または文字ベクトルの cell 配列でなければなりません。

データ型: char | cell | string

プロパティ

すべて展開する

入力グレースケールまたは RGB イメージに対して実行される色の前処理演算。'none''gray2rgb'、または 'rgb2gray' として指定します。イメージ データストアにグレースケール イメージと RGB イメージが混在している場合、ColorPreprocessing を使用して、すべての出力イメージが imageInputLayer に必要な数のチャネルを持つようにします。

入力イメージに既に必要な数のカラー チャネルがある場合、色の前処理演算は実行されません。たとえば、値 'gray2rgb' を指定しており、入力イメージに既に 3 つのチャネルがある場合、色の前処理は行われません。

メモ

augmentedImageDatastore オブジェクトは、関数 rgb2gray を使用して RGB イメージをグレースケールに変換します。イメージに赤、緑、青のチャネルに対応しない 3 つのチャネルがある場合 (L*a*b* 色空間のイメージなど)、ColorPreprocessing を使用すると良い結果が得られないことがあります。

入力イメージが 1 つまたは 3 つのチャネルを持たない場合 (マルチスペクトル イメージまたはハイパースペクトル イメージの場合など)、色の前処理演算は実行されません。この場合、すべての入力イメージが同数のチャネルを持たなければなりません。

データ型: char | string

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

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

拡張イメージ データストアは、trainNetwork、および predictclassify などの推論関数と共に使用した場合、バックグラウンド ディスパッチのみを実行します。データストアの関数 read を直接呼び出すと、バックグラウンド ディスパッチが行われません。

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

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

拡張イメージ データストアに含まれている観測値の合計数。観測値の数は 1 つの学習エポックの長さです。

出力イメージのサイズ。2 つの正の整数のベクトルとして指定します。最初の要素は出力イメージの行数、2 番目の要素は列数を指定します。

メモ

イメージ出力サイズを 3 要素ベクトルとして指定して augmentedImageDatastore を作成すると、データストアでは 3 番目の要素が無視されます。代わりに、データストアでは ColorPreprocessing の値を使用して、出力イメージの次元が決定されます。たとえば、OutputSize[28 28 1] に設定しても、ColorPreprocessing'gray2rgb' に設定した場合、出力イメージのサイズは 28 x 28 x 3 になります。

出力イメージのサイズ変更に使用するメソッド。次のいずれかに指定します。

  • 'resize' — 双一次内挿を使用して、出力サイズに合わせてイメージをスケーリングします。

    メモ

    augmentedImageDatastore は、imresize の双一次内挿法をアンチエイリアシングと共に使用します。双一次内挿を使用すると、最近傍内挿などによって発生する歪みを回避しながら、イメージ処理を高速化できます。対照的に、imresize は既定で、双三次内挿をアンチエイリアシングと共に使用して、サイズ変更された高品質のイメージを生成しますが、処理時間は長くなります。

  • 'centercrop' — 学習イメージの中心からトリミングします。トリミングのサイズは、出力サイズと同じです。

  • 'randcrop' — 学習イメージからランダムにトリミングします。ランダムなトリミングのサイズは、出力サイズと同じです。

データ型: char | string

オブジェクト関数

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

すべて折りたたむ

拡張イメージ データを使用して、畳み込みニューラル ネットワークに学習させます。データ拡張は、ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。

標本データを読み込みます。標本データは、手書き数字の合成イメージで構成されています。

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData は、数字の学習セットを 4 次元配列データとして読み込みます。XTrain は、28 x 28 x 1 x 5000 の配列です。

  • 28 はイメージの高さと幅。

  • 1 はチャネルの数。

  • 5000 は手書き数字の合成イメージの数。

YTrain は、各観測値のラベルが含まれる categorical ベクトルです。

ネットワークの検証用に 1000 個のイメージを残しておきます。

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

サイズ変更、回転、平行移動、反転など、イメージ拡張の前処理オプションを指定する imageDataAugmenter オブジェクトを作成します。イメージを、水平方向および垂直方向に最大 3 ピクセルまでのランダムな平行移動をさせたり、最大 20 度までの回転をさせたりします。

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-20,20], ...
    'RandXTranslation',[-3 3], ...
    'RandYTranslation',[-3 3])
imageAugmenter = 
  imageDataAugmenter with properties:

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

ネットワーク学習に使用する augmentedImageDatastore オブジェクトを作成し、イメージ出力サイズを指定します。学習中、データストアはイメージ拡張の実行とイメージのサイズ変更を行います。データストアは、イメージをメモリに保存せずに拡張します。trainNetwork は、ネットワーク パラメーターを更新した後、その拡張イメージを破棄します。

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);

畳み込みニューラル ネットワーク アーキテクチャを指定します。

layers = [
    imageInputLayer(imageSize)
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

モーメンタム項付き確率的勾配降下法の学習オプションを指定します。

opts = trainingOptions('sgdm', ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation});

ネットワークに学習をさせます。検証イメージは拡張されないため、検証精度が学習精度より高くなります。

net = trainNetwork(augimds,layers,opts);

ヒント

  • 関数 imtile を使用して、変換された多くのイメージを同じ Figure で可視化できます。たとえば、次のコードは、auimds という拡張イメージ データストアから、変換されたイメージのミニバッチの 1 つを表示します。

    minibatch = read(auimds);
    imshow(imtile(minibatch.input))
  • 既定では、イメージに対して実行されるイメージ前処理演算はサイズの変更のみです。名前と値のペアの引数 DataAugmentationimageDataAugmenter オブジェクトを使用して、追加の前処理演算を有効にします。拡張イメージ データストアからイメージが読み取られるたびに、前処理演算がランダムな異なる組み合わせで各イメージに適用されます。

バージョン履歴

R2018a で導入