Main Content

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

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

ネットワークに学習させ、新しいデータについて予測するには、イメージがネットワークの入力サイズに一致しなければなりません。ネットワークに一致するようにイメージのサイズを調整する必要がある場合、データの再スケーリングまたはトリミングを行って必要なサイズにすることができます。

ランダム化された "拡張" をデータに適用して、実質的に学習データの量を増やすことができます。拡張では、イメージ データの歪みに対して不変になるようにネットワークに学習させることもできます。たとえば、入力イメージに存在する回転に対してネットワークが不変になるように、入力イメージにランダムな回転を追加できます。augmentedImageDatastore (Deep Learning Toolbox) は、分類問題用の 2 次元イメージに限られた拡張を適用する便利な方法を提供します。

回帰問題用のイメージの前処理、3 次元ボリューム イメージの処理など、より高度な前処理演算の場合、組み込みデータストアで開始することができます。関数 transform および combine を使用して、独自のパイプラインに従ってイメージの前処理を行うこともできます。

再スケーリングとトリミングを使用したイメージのサイズ変更

イメージ データは、数値配列、ImageDatastore オブジェクト、または table として格納できます。ImageDatastore を使用すると、大きすぎてメモリに収まらないイメージ コレクションからデータをバッチ単位でインポートできます。拡張イメージ データストアまたはサイズを変更した 4 次元配列は学習、予測、および分類に使用できます。サイズを変更した 3 次元配列は予測および分類にのみ使用できます。

ネットワークの入力サイズに一致するようにイメージ データのサイズを変更する方法は 2 つあります。

  • 再スケーリングでは、イメージの高さと幅に倍率が掛けられます。倍率が垂直方向と水平方向で同一ではない場合、再スケーリングによってピクセルの空間範囲と縦横比が変更されます。

  • トリミングでは、イメージの部分領域が抽出され、各ピクセルの空間範囲が保持されます。イメージは、中心から、またはイメージのランダムな位置からトリミングできます。

サイズ変更オプションデータ形式サイズ変更関数サンプル コード
再スケーリング
  • 1 つのカラー イメージまたはマルチスペクトル イメージを表す 3 次元配列

  • グレースケール イメージのスタックを表す 3 次元配列

  • イメージのスタックを表す 4 次元配列

imresize

im = imresize(I,outputSize);

outputSize は再スケーリングされたイメージの次元を指定します。

  • イメージのスタックを表す 4 次元配列

  • ImageDatastore

  • table

augmentedImageDatastore (Deep Learning Toolbox)

auimds = augmentedImageDatastore(outputSize,I);

outputSize は再スケーリングされたイメージの次元を指定します。

トリミング
  • 1 つのカラー イメージまたはマルチスペクトル イメージを表す 3 次元配列

imcrop

im = imcrop(I,rect);

rect は 2 次元トリミング ウィンドウのサイズと位置を指定します。

  • グレースケール イメージのスタックを表す 3 次元配列

  • カラー イメージまたはマルチスペクトル イメージのスタックを表す 4 次元配列

imcrop3

im = imcrop3(I,cuboid);

cuboid は 3 次元トリミング ウィンドウのサイズと位置を指定します。

  • イメージのスタックを表す 4 次元配列

  • ImageDatastore

  • table

augmentedImageDatastore (Deep Learning Toolbox)

auimds = augmentedImageDatastore(outputSize,I,'OutputSizeMode',m);

入力イメージの中心からトリミングするには m'centercrop' に指定します。

入力イメージのランダムな位置からトリミングするには m'randcrop' に指定します。

ランダムな幾何学的変換での学習用のイメージの拡張

イメージ分類問題の場合、augmentedImageDatastore (Deep Learning Toolbox) を使用して、サイズ変更、回転、反転、せん断、および平行移動のランダムな組み合わせでイメージを拡張できます。

図は、trainNetwork (Deep Learning Toolbox) がどのように拡張イメージ データストアを使用して各エポックの学習データを変換するかを示しています。データ拡張を使用する場合、各イメージについてランダムに拡張された 1 つのイメージが、学習の各エポックで使用されます。ワークフローの例については、拡張イメージを使用したネットワークの学習 (Deep Learning Toolbox)を参照してください。

  1. 学習イメージを指定します。

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

    ヒント

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

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

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

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

組み込みデータストアを使用した追加のイメージ処理演算の実行

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

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

組み合わせと変換を使用したカスタム イメージ前処理パイプラインの適用

アプリケーション固有のデータストアが提供するイメージ前処理演算より一般的で複雑なイメージ前処理演算を実行するには、関数 transform および combine を使用できます。詳細については、深層学習用のデータストア (Deep Learning Toolbox)を参照してください。

イメージ データを含むデータストアの変換

関数 transform は、定義した変換関数に従い、基になるデータストアによって読み取られたデータを変換することで、"基になるデータストア" と呼ばれるデータストアの変更された形式を作成します。

カスタム変換関数は、基になるデータストアの関数 read によって返される形式のデータを受け入れなければなりません。ImageDatastore 内のイメージ データの場合、形式は ReadSize プロパティによって異なります。

  • 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 イメージ ファイルのバッチを読み取る際に事前取得をサポートします。これらのイメージ タイプの場合、ImageDatastore の引数 readFcn を使用してイメージ前処理を適用しないでください。このオプションでは通常、速度が大幅に低下するためです。カスタム読み取り関数を使用する場合、ImageDatastore は事前取得を行いません。

データストアとイメージ データの組み合わせ

関数 combine は、複数のデータストアから読み取られたデータを連結して、データストア間のパリティを維持します。

  • データを 2 列の table または 2 列の cell 配列に連結して、image-to-image 回帰ネットワークなど、単一の入力があるネットワークの学習に使用します。

  • データを (numInputs+1) 列の cell 配列に連結して、複数の入力があるネットワークの学習に使用します。

参考

(Deep Learning Toolbox) | | | |

関連する例

詳細