【E資格不合格から学ぶ】データ拡張のポイントを解説!

  • 「データ拡張」について学びたいけど理解できるか不安・・・
  • 「データ拡張」についてどこから学んでいいか分からない?
  • 「データ拡張」を体系的に教えて!

 「データ拡張(data-augumentationt)」は手元にある画像から疑似的に別の画像を生成するというアプローチのことを言いますが、興味があっても理解できないケースは非常に多いです。

 私は過去に基本情報技術者試験(旧:第二種情報処理技術者試験)に合格し、また2年程前に「一般社団法人 日本ディープラーニング協会」が主催の「G検定試験」に合格しました。現在、「E資格」にチャレンジ中ですが3回不合格になり、この経験から学習の要点について学ぶ機会がありました。 

 そこでこの記事では、「データ拡張」のポイントについて体系的に解説します。

 この記事を参考にして「データ拡張」の基礎が理解できれば、E資格に合格できるはずです。

<<データ拡張を学習する際のポイントを今すぐ知りたい方はコチラ

目次

1.データ拡張とは

データの拡張とは・・・

 画像認識精度の向上のためには、あらゆるパターンを想定した画像を用意することが理想である。しかし、それは現実的に困難であるので、代替として手元にある画像から疑似的に別の画像を生成するというアプローチが採られるケースが多い。このアプローチのことを、データ拡張(data-augumentation)、またはデータ水増しという。
 具体的な手法として、画像の反転処理や回転処理などが挙げられる。

 また、モデルの性能を正しく評価するために、訓練用データに施したデータ拡張を評価用データに適用してはいけない。

メリットデメリット
画像の一部を隠す処理を施すと実際に存在しない画像を生成しても、モデルの汎化性能が向上する場合がある。文字認識のように画像の向きにも意味がある場合、データ拡張を施すと分類精度がかえって低下する場合がある。
例)画像によっては適さない手法がある。例えば、反転処理させると「6」と「9」が、回転処理させると「8」が「∞」が識別できなくなる。
訓練用データの枚数が極端に少ない場合、データ拡張により枚数を増やしても汎化性能の向上は期待できない。
データ拡張を使用する場合のメリット・デメリット

2.データ拡張の手法

元の画像
元の画像
元の画像
Horizontal Flip
Horizontal Flip 画像
Horizontal Flip 画像
  • 水平方向(左右)反転処理
  • TensorFlow/Keras APIの`tf.image.random_flip_left_right`を用いる
  • 反転するか否かはランダム調整
Vertical Flip
Vertical Flip 画像
Vertical Flip 画像
  • 垂直方向(上下)反転処理
  • TensorFlow/Keras APIの`tf.image.random_flip_up_down`を用いる
  • 反転するか否かはランダム調整
Crop
Crop 画像
Crop 画像
  • あるサイズを画像中からランダムに切り出す処理
  • TensorFlow/Keras APIの`tf.image.random_crop`を用いる
  • 引数`size`で、切り出す画像のサイズを指定
  • チャンネルは固定
Contrast
Contrast 画像
Contrast 画像
  • コントラストをランダムに調整する処理
  • TensorFlow/Keras APIの「tf.image.random_contrast」を用いる
  • 引数「lower」と「upper」で、コントラストの強弱の下限値と上限値を指定
Brightness
Brightness 画像
Brightness 画像
  • 輝度値をランダムに調整する処理
  • TensorFlow/Keras APIの「tf.image.random_brightness」を用いる
  • max_delta`$\leq \delta <$`max_delta`
Hue
Hue 画像
Hue 画像
  • 色相をランダムに調整する処理
  • TensorFlow/Keras APIの「tf.image.random_hue」を用いる – `
  • max_delta`$\leq \delta <$`max_delta`
Rotate
Rotate 画像
Rotate 画像
  • 回転処理 – TensorFlow/Keras APIには、90度単位で回転させる
    `tf.image.rot90`と、角度限定なしの
    `tf.keras.preprocessing.image.random_rotation`がある
  • `tf.image.rot90`
    – 引数`k`$\times 90^\circ$で反時計回りに回転
  • `tf.keras.preprocessing.image.random_rotation`
    – 引数`rg`で回転範囲を指定
    – 回転角度はランダム調整

3.データ拡張で利用する画像処理関数

データ拡張で利用する画像処理関数
  • tf.image.random_contrast
    ・ランダムな要因によって画像のコントラストを調整するための関数
  • tf.image.random_crop
    ・画像をランダムに切り出す
  • tf.image.random_flip_left_right
    ・画像をランダムで水平方向に反転するための関数
  • tf.image.random_brightness(image,max_delta,seed=None)
    ・ランダムな要因によって画像の明るさを調整するための関数
    「max_delta」の値が不適切な場合、白飛びや黒つぶれの画像が生成される。
  • tf.image.random_hue
    ・ランダムな要因によりRGB画像の色相を調整するための関数

画像の水増し方法をTensorFlowのコードから学ぶ

引用元:Qiita

TensorFlowを使った画像の水増しレシピまとめ

引用元:gCb Garden.com

4.まとめ

【データ拡張の基礎まとめ】
  • データ拡張とは
    手元にある画像から疑似的に別の画像を生成するというアプローチ
  • データ拡張の手法
    ・Horizontal Flip
    ・Vertical Flip
    ・Crop
    ・Contrast
    ・Brightness
    ・Hue
    ・Rotate
  • データ拡張で利用する画像処理関数
    ・tf.image.random_contrast
    ・tf.image.random_flip_left_right
    ・tf.image.random_brightness(image,max_delta,seed=None)
    ・tf.image.random_hue

最後まで読んで頂きありがとうございます。
皆様のキャリアアップを応援しています!!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次