主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

imageDataAugmenter

イメージデータ拡張の構成

説明

イメージデータオーグメンターは,サイズ変更,回転,反転など,イメージ拡張の一連の前処理オプションを構成します。

imageDataAugmenterは,augmentedImageDatastoreで使用され,拡張イメージをバッチ生成します。詳細については,ランダムな幾何学的変換での学習用のイメージの拡張を参照してください。

作成

説明

8月= imageDataAugmenterは,恒等変換と一致する既定のプロパティ値を使用して,imageDataAugmenterオブジェクトを作成します。

8月= imageDataAugmenter (名称,值は,プロパティを設定する名前と値のペアを使用して,一連のイメージ拡張オプションを構成します。複数の名前と値のペアを指定できます。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

リサンプリング時に範囲外の点の定義に使用される塗りつぶしの値。数値スカラーまたは数値ベクトルとして指定します。

  • 拡張イメージが単一チャネルの場合,FillValueはスカラーでなければなりません。

  • 拡張イメージがマルチチャネルの場合,FillValueにはスカラー,または入力イメージのチャネル数に等しい長さのベクトルを指定できます。たとえば,入力イメージがRGBイメージの場合,FillValueには長さが3のベクトルを指定できます。

グレースケールイメージとカラーイメージの場合,既定の塗りつぶしの値は0です。直言イメージの場合,既定の塗りつぶしの値は' <定义> 'ラベルで,trainNetworkは学習時に塗りつぶされたピクセルを無視します。

例:128

左右方向のランダムな反転。逻辑スカラーとして指定します。RandXReflection真正的1)の場合,各イメージは50%の確率で水平方向に反転します。RandXReflection0)の場合,イメージは反転しません。

上下方向のランダムな反転。逻辑スカラーとして指定します。RandYReflection真正的1)の場合,各イメージは50%の確率で垂直方向に反転します。RandYReflection0)の場合,イメージは反転しません。

入力イメージに適用される回転の範囲(度単位)。次のいずれかに指定します。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。回転角度は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、回転角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して回転角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは回転しません。

例:45 [-45]

入力イメージに適用される一様(等方性)スケーリングの範囲。次のいずれかに指定します。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。スケール係数は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、スケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用してスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージはスケーリングされません。

例:(0.5 - 4)

入力イメージに適用される水平方向のスケーリングの範囲。次のいずれかに指定します。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。水平方向のスケール係数は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、水平方向のスケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向のスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは水平方向にスケーリングされません。

メモ

RandScaleを指定すると,イメージのスケーリング時にimageDataAugmenterRandXScaleの値を無視します。

例:(0.5 - 4)

入力イメージに適用される垂直方向のスケーリングの範囲。次のいずれかに指定します。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。垂直方向のスケール係数は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、垂直方向のスケール係数を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向のスケール係数を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは垂直方向にスケーリングされません。

メモ

RandScaleを指定すると,イメージのスケーリング時にimageDataAugmenterRandYScaleの値を無視します。

例:(0.5 - 4)

入力イメージに適用される水平方向のせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され,範囲は(-90、90)になります。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。水平方向のせん断角度は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、水平方向のせん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向のせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは水平方向にせん断されません。

例:45 [0]

入力イメージに適用される垂直方向のせん断の範囲。次のいずれかに指定します。せん断は角度として度単位で測定され,範囲は(-90、90)になります。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。垂直方向のせん断角度は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、垂直方向のせん断角度を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向のせん断角度を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは垂直方向にせん断されません。

例:45 [0]

入力イメージに適用される水平方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。水平方向の平行移動距離は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、水平方向の平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して水平方向の平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは水平方向に平行移動しません。

例:5 [5]

入力イメージに適用される垂直方向の平行移動の範囲。次のいずれかに指定します。平行移動距離はピクセル単位で測定します。

  • 2要素の数値ベクトル。2番目の要素は最初の要素以上でなければなりません。垂直方向の平行移動距離は,指定区間内の連続一様分布からランダムに選択されます。

  • 関数ハンドル。関数は入力引数を受け入れず、垂直方向の平行移動距離を数値スカラーとして返さなければなりません。関数ハンドルを使用して、重なっていない区間から、または一様ではない確率分布を使用して垂直方向の平行移動距離を選択します。関数ハンドルの詳細については、関数ハンドルの作成を参照してください。

既定では,拡張イメージは垂直方向に平行移動しません。

例:5 [5]

オブジェクト関数

增加 对多个图像应用相同的随机变换

すべて折りたたむ

学習前にイメージを前処理するイメージデータオーグメンターを作成します。このオーグメンターは,範囲[0,360]度のランダムな角度でイメージを回転させ,範囲[0.5,1]のランダムなスケール係数でイメージのサイズを変更します。

增量= imageDataAugmenter (...“RandRotation”360年[0],...“RandScale”(0.5 - 1))
RandXReflection: 0 RandYReflection: 0 RandRotation: [0 360] RandXScale: [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(图象尺寸、XTrain YTrain,“DataAugmentation”增量)
auimds = augmentedImageDatastore with properties: NumObservations: 5000 MiniBatchSize: 128 DataAugmentation: [1x1 imageDataAugmenter] ColorPreprocessing: 'none' OutputSize: [556 56] OutputSizeMode: 'resize' DispatchInBackground: 0

イメージデータストアの最初の8個のイメージに適用されたランダム変換をプレビューします。

minibatch =预览(auimds);imshow (imtile (minibatch.input));

图中包含一个坐标轴。轴包含一个image类型的对象。

同じイメージセットに適用された別のランダム変換をプレビューします。

minibatch =预览(auimds);imshow (imtile (minibatch.input));

图中包含一个坐标轴。轴包含一个image类型的对象。

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

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

[XTrain, YTrain] = digitTrain4DArrayData;

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

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

  • 1はチャネルの数。

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

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

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

idx = randperm(大小(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: 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(图象尺寸、XTrain YTrain,“DataAugmentation”, imageAugmenter);

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

[imageInputLayer(imageSize)] = [imageInputLayer(imageSize)]“填充”“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”“相同”) batchNormalizationLayer relullayer fulllyconnectedlayer (10) softmaxLayer classificationLayer];

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

选择= trainingOptions (“个”...“MaxEpochs”15岁的...“洗牌”“every-epoch”...“阴谋”“训练进步”...“详细”假的,...“ValidationData”, {XValidation, YValidation});

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

网= trainNetwork (augimds层,选择);

ヒント

  • サンプルイメージに適用された変換をプレビューするには,関数增加を使用します。

  • 学習中にイメージ拡張を実行するには,augmentedImageDatastoreを作成し,名前と値のペア“DataAugmentation”imageDataAugmenterを使用して前処理オプションを指定します。拡張イメージデータストアは学習データにランダム変換を自動的に適用します。

R2017bで導入