【AIML】データ拡張(Data Augmentation)って知っていますか??①

こんにちは。SCSKの島村です。

AIMLの勉強をしていると、「実際に機会学習モデルを作成してみよう!!」 そんな風に思われる方も多いと思います。
そんな時、次にぶつかる壁として「学習に使うデータってどうやって集めるの?」こんな事も考えるかもしれません。

オープンデータではなく、独自に収集したデータで機械学習モデルを作成したいけど、
データ数がちょっと少ないかなぁ….

本ブログは、こんな方に是非読んでいただきたい内容となっております。
今回は機械学習のデータ準備のための前処理テクニックの一つである画像の水増し=Data Augmentation についてご紹介いたします。

データ拡張(Data Augmentation)とは??

データ拡張(Data Augumentation)とは:学習用の画像データに対して「変換」を施すことでデータを水増しする手法です。

Data Augmentationには画像を「変換」する手法だけでなく「生成」する手法(GAN 敵対的生成ネットワークetc..)も存在しますが本ブログでは記載しておりません。

 データ拡張(Data Augmentation)で得られる効果はいくつかあります。

  • 収集が困難なデータにおけるデータ数の増加
  • 過学習(Over Fitting)への対策
過学習への対策については、次回以降のブログで詳細はお話できればと思います。

機械学習モデルの精度を高めるためには、大量のデータ(教師データと言われるもの)が必要となります。
学習データ数が少ないときや、追加での収集が困難な場合にデータ拡張が有効的です。

データ拡張(Data Augmentation)を行うための準備

データ拡張の方法については多数ありますが、本ブログでは画像処理用のOSSとして提供されている「OpenCV (Open Source Computer Vision Library)」を用いた変換を記載しております。

画像処理や画像解析および機械学習の機能を持つライブラリ。
C / C++ / Python / Java / MATLABなどの様々な言語に対応している。
Home
OpenCV provides a real-time optimized Computer Vision library, tools, and hardware. It also supports model execution for...

お手持ちの環境にインストールすることで簡単に利用可能です。
Python環境にpipでインストールする例を記載します。

pip install opencv-python

データ拡張(Data Augmentation)でよく用いる手法

データ拡張でよく用いられる手法についてまとめてみました。今回は画像データの拡張というところに焦点を絞りご紹介いたします。

今回拡張した元画像

  元画像

画像はStandard Image Data-BAse (SIDBA)より引用しています。

>>変換方法については多数ありますが、本ブログでは画像処理用のOSSとして提供されている「OpenCV (Open Source Computer Vision Library)」を用いた変換を記載しております。

画像Data Augmentation手法 変換後画像 Sample Code
上下・左右シフト
上下シフト

上下シフト

#img = np.roll(img,shift=(0,100),axis=(0,1))
左右シフト

左右シフト

#img = np.roll(img,shift=(100,0),axis=(0,1))
上下・左右反転
上下反転

上下反転

#img = cv2.flip(img,0)#上下反転
左右反転

左右反転

#img = cv2.flip(img,1)#左右反転
上下左右反転

上下左右反転

#img = cv2.flip(img,-1)#上下左右反転
回転
時計回りに90度

時計回りに90度

#img = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)# 時計回りに90度
反時計回りに90度

反時計回りに90度

#img = cv2.rotate(img,cv2.ROTATE_90_COUNTERCLOCKWISE)# 反時計回りに90度
180度回転

180度回転  

#img = cv2.rotate(img,cv2.ROTATE_180)#180度回転
色相・彩度・明度変更
色相変換

色相変換

# img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) # 色空間をBGRからHSVに変換
# h_deg = 60 #色相(Hue)の回転度数
# s_mag = 1 # 彩度(Saturation)の倍率
# v_mag = 1 # 明度(Value)の倍率
# img_hsv[:,:,(0)] = img_hsv[:,:,(0)]+h_deg # 色相の計算
# img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_mag # 彩度の計算
# img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_mag # 明度の計算
# img = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR) # 色空間をHSVからBGRに変換
彩度変換

再度変換

# img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) # 色空間をBGRからHSVに変換
# h_deg = 0 #色相(Hue)の回転度数
# s_mag = 0.5 # 彩度(Saturation)の倍率
# v_mag = 1 # 明度(Value)の倍率
# img_hsv[:,:,(0)] = img_hsv[:,:,(0)]+h_deg # 色相の計算
# img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_mag # 彩度の計算
# img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_mag # 明度の計算
# img = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR) # 色空間をHSVからBGRに変換
明度変換

明度変換

# img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) # 色空間をBGRからHSVに変換
# h_deg = 0 #色相(Hue)の回転度数
# s_mag = 1 # 彩度(Saturation)の倍率
# v_mag = 0.5 # 明度(Value)の倍率
# img_hsv[:,:,(0)] = img_hsv[:,:,(0)]+h_deg # 色相の計算
# img_hsv[:,:,(1)] = img_hsv[:,:,(1)]*s_mag # 彩度の計算
# img_hsv[:,:,(2)] = img_hsv[:,:,(2)]*v_mag # 明度の計算
# img = cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR) # 色空間をHSVからBGRに変換
ズームイン(拡大)・ズームアウト(縮小)
拡大

拡大

#img = cv2.resize(img[100:200,100:200],dsize=(img.shape[1],img.shape[1]))
縮小

縮小

# img[0:128,0:128] = cv2.resize(img,dsize=(128,128))
# img[128::,::] = 0
# img[::,128::] = 0

最後に

今回はデータ準備のための前処理テクニックの一つであるデータ拡張(Data Augmentation)についてご紹介させていただきました。

今後とも、AIMLに関する情報やGoogle CloudのAIMLサービスのアップデート情報を掲載していきたいと思います。

最後まで読んでいただき、ありがとうございました!!!

著者について

SCSK株式会社のクラウド専門部隊に所属
Google Cloudの
・AI MLサービス選定/導入コンサルティング/導入サポート/AI 基盤・運用構築 まで多く案件を担当
Google Cloud Partner Top Engineer 2024 受賞 カテゴリ:Cloud AI/ML
Google Cloud Next Tokyo 出展
Google Cloud Day ’23 Tour 登壇
「AI は選んで組み込んで実装!最新 AI を道具として有効利用するためには!?」
■好きな Google Cloud サービス:Vertex AI / Dialogflow CX / Visual Inspection AI / Cloud Run

島村裕哉をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(Google Cloud)は、Google Cloudの多彩なAIや各種サービスを活用したワンストップソリューションを提供します。SCSKのノウハウや体制を有効活用し、業務課題の解決に必要な全体検討と組み合わせで、最適な業務実装まで支援します。

AI・MLGoogle Cloudクラウドソリューション
シェアする
タイトルとURLをコピーしました