imageDataAugmenter
イメージ データ拡張の構成
説明
イメージ データ オーグメンターは、サイズ変更、回転、反転など、イメージ拡張の一連の前処理オプションを構成します。
imageDataAugmenter
は、augmentedImageDatastore
で使用され、拡張イメージをバッチ生成します。詳細については、ランダムな幾何学的変換での学習用のイメージの拡張を参照してください。
作成
プロパティ
FillValue
— 塗りつぶしの値
数値スカラー | 数値ベクトル
リサンプリング時に範囲外の点の定義に使用される塗りつぶしの値。数値スカラーまたは数値ベクトルとして指定します。
拡張イメージが単一チャネルの場合、
FillValue
はスカラーでなければなりません。拡張イメージがマルチチャネルの場合、
FillValue
にはスカラー、または入力イメージのチャネル数に等しい長さのベクトルを指定できます。たとえば、入力イメージが RGB イメージの場合、FillValue
には長さが 3 のベクトルを指定できます。
グレースケール イメージとカラー イメージの場合、既定の塗りつぶしの値は 0
です。categorical イメージの場合、既定の塗りつぶしの値は '<undefined>'
ラベルで、関数 trainnet
は学習時に塗りつぶされたピクセルを無視します。
例: 128
RandXReflection
— ランダムな反転
false
(既定値) | true
左右方向のランダムな反転。logical スカラーとして指定します。RandXReflection
が true
(1
) の場合、各イメージは 50% の確率で水平方向に反転します。RandXReflection
が false
(0
) の場合、イメージは反転しません。
RandYReflection
— ランダムな反転
false
(既定値) | true
上下方向のランダムな反転。logical スカラーとして指定します。RandYReflection
が true
(1
) の場合、各イメージは 50% の確率で垂直方向に反転します。RandYReflection
が false
(0
) の場合、イメージは反転しません。
RandRotation
— 回転の範囲
[0 0]
(既定値) | 2 要素の数値ベクトル | 関数ハンドル
入力イメージに適用される回転の範囲 (度単位)。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。回転角度は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、回転角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して回転角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは回転しません。
例: [-45 45]
RandScale
— 一様スケーリングの範囲
[1 1]
(既定値) | 2 要素の数値ベクトル | 関数ハンドル
入力イメージに適用される一様 (等方性) スケーリングの範囲。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。スケール係数は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、スケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用してスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージはスケーリングされません。
例: [0.5 4]
RandXScale
— 水平方向のスケーリングの範囲
[1 1]
(既定値) | 正の数値の 2 要素ベクトル | 関数ハンドル
入力イメージに適用される水平方向のスケーリングの範囲。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。水平方向のスケール係数は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、水平方向のスケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向のスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは水平方向にスケーリングされません。
メモ
RandScale
を指定すると、イメージのスケーリング時に imageDataAugmenter
が RandXScale
の値を無視します。
例: [0.5 4]
RandYScale
— 垂直方向のスケーリングの範囲
[1 1]
(既定値) | 正の数値の 2 要素ベクトル | 関数ハンドル
入力イメージに適用される垂直方向のスケーリングの範囲。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。垂直方向のスケール係数は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、垂直方向のスケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向のスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは垂直方向にスケーリングされません。
メモ
RandScale
を指定すると、イメージのスケーリング時に imageDataAugmenter
が RandYScale
の値を無視します。
例: [0.5 4]
RandXShear
— 水平方向のせん断の範囲
[0 0]
(既定値) | 2 要素の数値ベクトル | 関数ハンドル
入力イメージに適用される水平方向のせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され、範囲は (–90, 90) になります。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。水平方向のせん断角度は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、水平方向のせん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向のせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは水平方向にせん断されません。
例: [0 45]
RandYShear
— 垂直方向のせん断の範囲
[0 0]
(既定値) | 2 要素の数値ベクトル | 関数ハンドル
入力イメージに適用される垂直方向のせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され、範囲は (–90, 90) になります。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。垂直方向のせん断角度は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、垂直方向のせん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向のせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは垂直方向にせん断されません。
例: [0 45]
RandXTranslation
— 水平方向の平行移動の範囲
[0 0]
(既定値) | 2 要素の数値ベクトル | 関数ハンドル
入力イメージに適用される水平方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。水平方向の平行移動距離は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、水平方向の平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向の平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは水平方向に平行移動しません。
例: [-5 5]
RandYTranslation
— 垂直方向の平行移動の範囲
[0 0]
(既定値) | 2 要素の数値ベクトル | 関数ハンドル
入力イメージに適用される垂直方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。垂直方向の平行移動距離は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、垂直方向の平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向の平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは垂直方向に平行移動しません。
例: [-5 5]
オブジェクト関数
augment | 複数のイメージに対する同一のランダム変換の適用 |
例
イメージのサイズ変更および回転を行うイメージ データ オーグメンターの作成
学習前にイメージを前処理するイメージ データ オーグメンターを作成します。このオーグメンターは、範囲 [0, 360] 度のランダムな角度でイメージを回転させ、範囲 [0.5, 1] のランダムなスケール係数でイメージのサイズを変更します。
augmenter = imageDataAugmenter( ... 'RandRotation',[0 360], ... 'RandScale',[0.5 1])
augmenter = imageDataAugmenter with properties: FillValue: 0 RandXReflection: 0 RandYReflection: 0 RandRotation: [0 360] RandScale: [0.5000 1] RandXScale: [1 1] RandYScale: [1 1] RandXShear: [0 0] RandYShear: [0 0] RandXTranslation: [0 0] RandYTranslation: [0 0]
イメージ データ オーグメンターを使用して拡張イメージ データストアを作成します。拡張イメージ データストアには、サンプル データ、ラベル、および出力イメージ サイズも必要です。
[XTrain,YTrain] = digitTrain4DArrayData;
imageSize = [56 56 1];
auimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',augmenter)
auimds = augmentedImageDatastore with properties: NumObservations: 5000 MiniBatchSize: 128 DataAugmentation: [1x1 imageDataAugmenter] ColorPreprocessing: 'none' OutputSize: [56 56] OutputSizeMode: 'resize' DispatchInBackground: 0
イメージ データストアの最初の 8 個のイメージに適用されたランダム変換をプレビューします。
minibatch = preview(auimds); imshow(imtile(minibatch.input));
同じイメージ セットに適用された別のランダム変換をプレビューします。
minibatch = preview(auimds); imshow(imtile(minibatch.input));
拡張イメージを使用したネットワークの学習
拡張イメージ データを使用して、畳み込みニューラル ネットワークに学習させます。データ拡張は、ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。
サンプル データを読み込みます。サンプル データは、手書き数字の合成イメージで構成されています。XTrain
は 28×28×1×5000 の配列です。ここで、以下のようになります。
28 はイメージの高さと幅。
1 はチャネルの数。
5000 は手書き数字の合成イメージの数。
labelsTrain
は、各観測値のラベルが含まれる categorical ベクトルです。
load DigitsDataTrain
ネットワークの検証用に 1000 個のイメージを残しておきます。
idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; TValidation = labelsTrain(idx); labelsTrain(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
オブジェクトを作成し、イメージ出力サイズを指定します。学習中、データストアはイメージ拡張の実行とイメージのサイズ変更を行います。データストアは、イメージをメモリに保存せずに拡張します。trainnet
は、ネットワーク パラメーターを更新した後、その拡張イメージを破棄します。
imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,labelsTrain,'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];
学習オプションを指定します。オプションの中から選択するには、経験的解析が必要です。実験を実行してさまざまな学習オプションの構成を調べるには、実験マネージャーアプリを使用できます。
opts = trainingOptions('sgdm', ... 'MaxEpochs',15, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Metrics','accuracy', ... 'Verbose',false, ... 'ValidationData',{XValidation,TValidation});
関数trainnet
を使用してニューラル ネットワークに学習させます。分類には、クロスエントロピー損失を使用します。既定では、関数 trainnet
は利用可能な GPU がある場合にそれを使用します。GPU での学習には、Parallel Computing Toolbox™ ライセンスとサポートされている GPU デバイスが必要です。サポートされているデバイスの詳細については、GPU 計算の要件 (Parallel Computing Toolbox)を参照してください。そうでない場合、関数 trainnet
は CPU を使用します。実行環境を指定するには、ExecutionEnvironment
学習オプションを使用します。
net = trainnet(augimds,layers,"crossentropy",opts);
ヒント
サンプル イメージに適用された変換をプレビューするには、関数
augment
を使用します。学習中にイメージ拡張を実行するには、
augmentedImageDatastore
を作成し、名前と値のペア'DataAugmentation'
とimageDataAugmenter
を使用して前処理オプションを指定します。拡張イメージ データストアは学習データにランダム変換を自動的に適用します。
バージョン履歴
R2017b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)