このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
イメージの深層学習向け前処理
ネットワークに学習させ、新しいデータについて予測するには、イメージがネットワークの入力サイズに一致しなければなりません。ネットワークに一致するようにイメージのサイズを調整する必要がある場合、データの再スケーリングまたはトリミングを行って必要なサイズにすることができます。
ランダム化された "拡張" をデータに適用して、実質的に学習データの量を増やすことができます。拡張では、イメージ データの歪みに対して不変になるようにネットワークに学習させることもできます。たとえば、入力イメージに存在する回転に対してネットワークが不変になるように、入力イメージにランダムな回転を追加できます。augmentedImageDatastore
は、分類問題用の 2 次元イメージに限られた拡張を適用する便利な方法を提供します。
回帰問題用のイメージの前処理、3 次元ボリューム イメージの処理など、より高度な前処理演算の場合、組み込みデータストアで開始することができます。関数 transform
および combine
を使用して、独自のパイプラインに従ってイメージの前処理を行うこともできます。
再スケーリングとトリミングを使用したイメージのサイズ変更
イメージ データは、数値配列、ImageDatastore
オブジェクト、または table として格納できます。ImageDatastore
を使用すると、大きすぎてメモリに収まらないイメージ コレクションからデータをバッチ単位でインポートできます。拡張イメージ データストアまたはサイズを変更した 4 次元配列は学習、予測、および分類に使用できます。サイズを変更した 3 次元配列は予測および分類にのみ使用できます。
ネットワークの入力サイズに一致するようにイメージ データのサイズを変更する方法は 2 つあります。
再スケーリングでは、イメージの高さと幅に倍率が掛けられます。倍率が垂直方向と水平方向で同一ではない場合、再スケーリングによってピクセルの空間範囲と縦横比が変更されます。
トリミングでは、イメージの部分領域が抽出され、各ピクセルの空間範囲が保持されます。イメージは、中心から、またはイメージのランダムな位置からトリミングできます。
サイズ変更オプション | データ形式 | サイズ変更関数 | サンプル コード |
---|---|---|---|
再スケーリング |
| imresize |
im = imresize(I,outputSize);
|
| augmentedImageDatastore |
auimds = augmentedImageDatastore(outputSize,I);
| |
トリミング |
| imcrop (Image Processing Toolbox) |
im = imcrop(I,rect);
|
| imcrop3 (Image Processing Toolbox) |
im = imcrop3(I,cuboid);
| |
| augmentedImageDatastore |
auimds = augmentedImageDatastore(outputSize,I,'OutputSizeMode',m);
入力イメージの中心からトリミングするには 入力イメージのランダムな位置からトリミングするには |
ランダムな幾何学的変換での学習用のイメージの拡張
イメージ分類問題の場合、augmentedImageDatastore
を使用して、サイズ変更、回転、反転、せん断、および平行移動のランダムな組み合わせでイメージを拡張できます。
図は、trainnet
がどのように拡張イメージ データストアを使用して各エポックの学習データを変換するかを示しています。データ拡張を使用する場合、各イメージについてランダムに拡張された 1 つのイメージが、学習の各エポックで使用されます。ワークフローの例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。
学習イメージを指定します。
imageDataAugmenter
を作成して、反転をランダムに適用するかどうかや回転角度の範囲などのイメージ変換オプションを構成します。ヒント
サンプル イメージに適用された変換をプレビューするには、関数
augment
を使用します。augmentedImageDatastore
を作成します。学習イメージ、出力イメージのサイズ、およびimageDataAugmenter
を指定します。出力イメージのサイズは、ネットワークのimageInputLayer
のサイズに適合しなければなりません。拡張イメージ データストアを
trainnet
のデータ ソースとして指定してネットワークに学習させます。学習の反復ごとに、拡張イメージ データストアは変換のランダムな組み合わせを学習データのミニバッチのイメージに適用します。拡張イメージ データストアを学習イメージのソースとして使用する場合、データストアによって各エポックの学習データにランダムに摂動が与えられるため、エポックごとにわずかに異なるデータセットが使用されます。各エポックの学習イメージの実際の数は変化しません。変換後のイメージはメモリに格納されません。
組み込みデータストアを使用した追加のイメージ処理演算の実行
一部のデータストアは、データのバッチを読み取る際に特定の限られたイメージ前処理演算を実行します。これらのアプリケーション固有のデータストアを次の表に示します。これらのデータストアは、Deep Learning Toolbox™ を使用する深層学習アプリケーションの学習データセット、検証データセット、およびテスト データセットのソースとして使用できます。これらのデータストアはすべて、trainnet
でサポートされている形式でイメージ データを返します。
データストア | 説明 |
---|---|
augmentedImageDatastore | 深層ニューラル ネットワークに学習させるために、サイズ変更、回転、反転、せん断、平行移動を含む、ランダムなアフィン幾何学変換を適用します。例については、新しいイメージを分類するための深層学習ネットワークの学習を参照してください。 |
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 配列に連結して、複数の入力があるネットワークの学習に使用します。
参考
trainnet
| trainingOptions
| dlnetwork
| imresize
| transform
| combine
| ImageDatastore