ドキュメンテーション

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

イメージの深層学習向け前処理

ネットワークに学習させ、新しいデータについて予測する場合、ネットワークの入力サイズに一致するイメージが必要になります。ネットワークの入力サイズに一致するようにイメージのサイズを変更するには、imresize または augmentedImageDatastore を使用できます。

イメージのサイズ変更だけでなく、追加の前処理を実行して、学習データセット、検証データセット、テスト データセット、および予測データセットを拡張できます。学習イメージの拡張は、ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。

イメージのサイズ変更

ネットワークのイメージ入力サイズを確認するには、ネットワークの imageInputLayerInputSize プロパティから最初の 2 つの要素を取得します。たとえば、AlexNet の事前学習済みネットワーク用のイメージ入力サイズは以下により取得します。

net = alexnet;
inputSize = net.Layers(1).InputSize(1:2)
inputSize =

   227   227

イメージのサイズを変更する方法は、イメージのデータ型によって異なります。

  • 1 つのカラー イメージ、1 つのマルチスペクトル イメージ、または大量のグレースケール イメージを表す 3 次元配列を再スケーリングするには、imresize を使用します。たとえば、3 次元配列 im3d 内のイメージは以下でサイズ変更されます。

    im = imresize(im3d,inputSize);
  • 大量のイメージを表す 4 次元配列を再スケーリングするには、imresize を使用できます。たとえば、4 次元配列 im4d 内のイメージは以下で再スケーリングされます。

    im = imresize(im4d,inputSize);

    または、augmentedImageDatastore を使用して、4 次元配列内のイメージの再スケーリングまたは切り取りができます。既定では、augmentedImageDatastore はイメージを目的のサイズに再スケーリングします。代わりに、イメージの中央またはランダムな位置からイメージを切り取る場合、名前と値のペアの引数 'OutputSizeMode' を使用できます。たとえば、4 次元配列 im4d 内のイメージは以下により各イメージの中心から切り取られます。

    auimds = augmentedImageDatastore(inputSize,im4d,'OutputSizeMode','centercrop');
    

  • ImageDatastore または table 内のイメージの再スケーリングまたは切り取りを行うには、augmentedImageDatastore を使用します。たとえば、イメージ データストア imds 内のイメージは以下で再スケーリングされます。

    auimds = augmentedImageDatastore(inputSize,imds);
    
    より完全な例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。

拡張イメージ データストアまたはサイズを変更した 4 次元配列は学習、予測、および分類に使用できます。サイズを変更した 3 次元配列は予測および分類にのみ使用できます。

学習のためのイメージの拡張

イメージのサイズ変更に加え、augmentedImageDatastore を使用すると、回転、反転、せん断、および平行移動の変換を組み合わせてイメージを拡張できます。図は、trainNetwork がどのように拡張イメージ データストアを使用して各エポックの学習データを変換するかを示しています。

  1. 学習イメージを定義します。イメージは、ImageDatastore、4 次元数値配列、または table として格納できます。ImageDatastore を使用すると、大きすぎてメモリに収まらないイメージのコレクションからデータをインポートできます。この関数は、機械学習とコンピューター ビジョン アプリケーションの処理を高速化するためにイメージをバッチ単位で自動的に読み取るよう設計されています。

  2. imageDataAugmenter を作成して、反転をランダムに適用するかどうかや回転角度の範囲などのイメージ変換オプションを構成します。

    ヒント

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

  3. 学習イメージ、出力イメージのサイズ、および imageDataAugmenter を指定して、augmentedImageDatastore を作成します。出力イメージのサイズは、ネットワークの imageInputLayer のサイズに適合しなければなりません。

  4. 拡張イメージ データストアを trainNetwork のデータ ソースとして指定してネットワークに学習させます。学習の反復ごとに、拡張イメージ データストアは変換のランダムな組み合わせを学習データのミニバッチに適用します。

    メモ

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

ワークフローの例については、拡張イメージを使用したネットワークの学習を参照してください。

高度なイメージ前処理

augmentedImageDatastore が提供する変換を超えるイメージ前処理を行おうとする場合、データ拡張には "ミニバッチ データストア" が使用できます。ミニバッチ データストアとは、バッチ単位でのデータの読み取りをサポートする組み込みデータストアまたはカスタム データストアを指します。ミニバッチ データストアは、Deep Learning Toolbox™ を使用する深層学習アプリケーションの学習データセット、検証データセット、およびテスト データセットのソースとして使用できます。

以下の組み込みミニバッチ データストアは、データのバッチを読み取る際に特定のイメージ前処理演算を実行します。

ミニバッチ データストアのタイプ説明
augmentedImageDatastore深層ニューラル ネットワークに学習させるために、サイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何変換を適用します。例については、AlexNet を使用した転移学習を参照してください。
pixelLabelImageDatastoreセマンティック セグメンテーション ネットワークに学習させるために、イメージおよび対応するグラウンド トゥルース ラベルに対して、同一のアフィン幾何変換を適用します (Computer Vision System Toolbox™ が必要)。例については、深層学習を使用したセマンティック セグメンテーションを参照してください。
randomPatchExtractionDatastoreイメージまたはピクセル ラベル イメージからランダム パッチのペアを抽出します (Image Processing Toolbox™ が必要)。オプションで、同一のランダムなアフィン幾何変換をパッチのペアに適用できます。例については、Single Image Super-Resolution Using Deep Learningを参照してください。
denoisingImageDatastoreノイズ除去ネットワークに学習させるために、ランダムに生成されたガウス ノイズを適用します (Image Processing Toolbox が必要)。

独自の画像処理パイプラインを使用したイメージ前処理用に、カスタムのミニバッチ データストアを実装できます。詳細は、カスタム ミニバッチ データストアの開発を参照してください。例については、超解像ネットワーク用のカスタム ミニバッチ データストアの定義を参照してください。

ヒント

カスタム ミニバッチ データストアでデータを読み取る方法を定義する場合、ランダムなアフィン幾何変換を使用してデータを拡張できます。imageDataAugmenter オブジェクトを使用して変換オプションを指定してから、関数 augment を使用してデータを変換します。関数 augment は、同一の変換を入力イメージと応答イメージのペアに適用できます。

参考

| | |

関連するトピック