主要内容

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

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

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

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

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

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

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

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

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

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

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

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

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

imresize

我= imresize(我outputSize);

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

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

  • ImageDatastore

  • 表格

augmentedImageDatastore

auimds = augmentedImageDatastore (outputSize,我);

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

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

imcrop(图像处理工具箱)

我= imcrop(我、矩形);

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

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

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

imcrop3(图像处理工具箱)

我= imcrop3(我、长方体);

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

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

  • ImageDatastore

  • 表格

augmentedImageDatastore

auimds = augmentedImageDatastore (outputSize,我,“OutputSizeMode”, m);

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

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

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

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

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

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

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

    ヒント

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ヒント

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

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

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

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

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

参考

||||

関連する例

詳細