ドキュメンテーション

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

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

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

アフィン幾何学的変換をイメージに適用して、学習データセット、検証データセット、テスト データセット、および予測データセットを拡張できます。学習イメージの拡張は、ネットワークで過適合が発生したり、学習イメージの正確な詳細が記憶されたりすることを防止するのに役立ちます。

関数 transform および combine を使用して、独自のパイプラインに従ってイメージの前処理を行うことができます。

イメージのサイズ変更

ネットワークのイメージ入力サイズを確認するには、ネットワークの 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 のデータ ソースとして指定してネットワークに学習させます。学習の反復ごとに、拡張イメージ データストアは変換のランダムな組み合わせを学習データのミニバッチに適用します。

    メモ

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

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

特定のアプリケーション用のデータストア

一部のデータストアは、データのバッチを読み取る際に特定のイメージ前処理演算を実行します。これらのアプリケーション固有のデータストアを次の表に示します。これらのデータストアはすべて、trainNetwork の要件に従って 2 列の table または 2 列の cell 配列でデータを返します。これらのデータストアは、Deep Learning Toolbox™ を使用する深層学習アプリケーションの学習データセット、検証データセット、およびテスト データセットのソースとして使用できます。

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

高度なイメージ前処理

アプリケーション固有のデータストアが提供するイメージ前処理演算より一般的で複雑なイメージ前処理演算を実行するには、関数 transform および combine を使用できます。関数 transform は、定義したカスタム変換関数に従って基になるデータストアからのデータのバッチを処理します。関数 combine は、複数のデータストアから読み取られたデータを trainNetwork に必要な 2 列の table 形式または 2 列の cell 配列形式に変換し、基になるデータストア間のパリティを維持します。

関数結果のデータストア説明
transformTransformedDatastore基になるデータストアからの読み取りデータのバッチを独自の前処理パイプラインに従って変換します。
combineCombinedDatastore2 つ以上の基になるデータストアから読み取られたデータを水平方向に連結します。

基になるデータストアは、関数 read を使用してデータのバッチを読み取ります。カスタム変換関数は、関数 read によって返される形式のデータを受け入れなければなりません。イメージ データの場合、形式は基になる ImageDatastoreReadSize プロパティによって異なります。

  • ReadSize が 1 の場合、変換関数は整数配列を受け入れなければなりません。配列のサイズは、ImageDatastore のイメージのタイプと整合性があります。たとえば、グレースケール イメージの次元は m x n、トゥルーカラー イメージの次元は m x n x 3、c 個のチャネルがあるマルチスペクトル イメージの次元は m x n x c です。

  • ReadSize が 1 より大きい場合、変換関数はバッチの各イメージに対応するイメージ データの cell 配列を受け入れなければなりません。

関数 transform は、ネットワークの入力サイズに一致するデータを返さなければなりません。関数 transform は一対多の観測値マッピングをサポートしていません。

ヒント

関数 transform は、基になる ImageDatastore が JPG または PNG イメージ ファイルのバッチを読み取る際に事前取得をサポートします。imageDatastorereadFcn オプションは通常、速度が大幅に低下するため、このオプションを使用してカスタム変換関数を指定しないでください。イメージの読み取りにカスタム関数を使用する場合、ImageDatastore は事前取得を行いません。

参考

| | | | |

関連する例

詳細