Main Content

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

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

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

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

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

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

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

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

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

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

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

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

imresize

im = imresize(I,outputSize);

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

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

  • ImageDatastore

  • table

augmentedImageDatastore

auimds = augmentedImageDatastore(outputSize,I);

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

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

imcrop(Image Processing Toolbox)

im = imcrop(I,rect);

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

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

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

imcrop3(Image Processing Toolbox)

im = imcrop3(I,cuboid);

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

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

  • ImageDatastore

  • table

augmentedImageDatastore

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

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

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

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

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

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

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

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

    ヒント

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

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

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

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

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

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

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

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

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

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

関数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 配列に連結して、複数の入力があるネットワークの学習に使用します。

参考

||||

関連する例

詳細