imageDataAugmenter
イメージ データ拡張の構成
説明
イメージ データ オーグメンターは、サイズ変更、回転、反転など、イメージ拡張の一連の前処理オプションを構成します。
imageDataAugmenter
オブジェクトは、augmentedImageDatastore
で使用され、拡張イメージをバッチ生成します。詳細については、ランダムな幾何学的変換での学習用のイメージの拡張を参照してください。
作成
説明
aug = imageDataAugmenter
は、恒等変換と一致する既定のプロパティ値を使用して、imageDataAugmenter
オブジェクトを作成します。
aug = imageDataAugmenter(
は、1 つ以上の名前と値の引数を使用して、プロパティを設定します。プロパティは、イメージ拡張オプションのセットに対応します。PropertyName=Value
)
たとえば、aug = imageDataAugmenter(RandXReflection=true)
は、イメージを左右方向に 50% の確率でランダムに反転する imageDataAugmenter
オブジェクトを作成します。
プロパティ
リサンプリング時に範囲外の点の定義に使用される塗りつぶしの値。数値スカラーまたは数値ベクトルとして指定します。
拡張イメージが単一チャネルの場合、
FillValue
はスカラーでなければなりません。拡張イメージがマルチチャネルの場合、
FillValue
にはスカラー、または入力イメージのチャネル数に等しい長さのベクトルを指定できます。たとえば、入力イメージが RGB イメージの場合、FillValue
には長さが 3 のベクトルを指定できます。
グレースケール イメージとカラー イメージの場合、既定の塗りつぶしの値は 0
です。categorical イメージの場合、既定の塗りつぶしの値は '<undefined>'
ラベルで、関数 trainnet
は学習時に塗りつぶされたピクセルを無視します。
例: 128
左右方向のランダムな反転。logical スカラーとして指定します。RandXReflection
が true
(1
) の場合、各イメージは 50% の確率で水平方向に反転します。RandXReflection
が false
(0
) の場合、イメージは反転しません。
上下方向のランダムな反転。logical スカラーとして指定します。RandYReflection
が true
(1
) の場合、各イメージは 50% の確率で垂直方向に反転します。RandYReflection
が false
(0
) の場合、イメージは反転しません。
入力イメージに適用される回転の範囲 (度単位)。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。回転角度は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、回転角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して回転角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは回転しません。
例: [-45 45]
入力イメージに適用される一様 (等方性) スケーリングの範囲。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。スケール係数は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、スケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用してスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージはスケーリングされません。
例: [0.5 4]
入力イメージに適用される水平方向のスケーリングの範囲。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。水平方向のスケール係数は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、水平方向のスケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向のスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは水平方向にスケーリングされません。
メモ
RandScale
を指定すると、イメージのスケーリング時に imageDataAugmenter
は RandXScale
の値を無視します。
例: [0.5 4]
入力イメージに適用される垂直方向のスケーリングの範囲。次のいずれかに指定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。垂直方向のスケール係数は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、垂直方向のスケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向のスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは垂直方向にスケーリングされません。
メモ
RandScale
を指定すると、イメージのスケーリング時に imageDataAugmenter
は RandYScale
の値を無視します。
例: [0.5 4]
入力イメージに適用される水平方向のせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され、範囲は (–90, 90) になります。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。水平方向のせん断角度は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、水平方向のせん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向のせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは水平方向にせん断されません。
例: [0 45]
入力イメージに適用される垂直方向のせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され、範囲は (–90, 90) になります。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。垂直方向のせん断角度は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、垂直方向のせん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向のせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは垂直方向にせん断されません。
例: [0 45]
入力イメージに適用される水平方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。
2 要素の数値ベクトル。2 番目の要素は最初の要素以上でなければなりません。水平方向の平行移動距離は、指定区間内の連続一様分布からランダムに選択されます。
関数ハンドル。関数は入力引数を受け入れず、水平方向の平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向の平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。
既定では、拡張イメージは水平方向に平行移動しません。
例: [-5 5]
入力イメージに適用される垂直方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。
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: [1×1 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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)