こんにちは。SCSKの島村です。
AIMLの勉強をしていると、「実際に機会学習モデルを作成してみよう!!」 そんな風に思われる方も多いと思います。
そんな時、次にぶつかる壁として「学習に使うデータってどうやって集めるの?」こんな事も考えるかもしれません。
オープンデータではなく、独自に収集したデータで機械学習モデルを作成したいけど、
データ数がちょっと少ないかなぁ….
本ブログは、こんな方に是非読んでいただきたい内容となっております。
今回は機械学習のデータ準備のための前処理テクニックの一つである画像の水増し=Data Augmentation についてご紹介いたします。
データ拡張(Data Augmentation)とは??
データ拡張(Data Augumentation)とは:学習用の画像データに対して「変換」を施すことでデータを水増しする手法です。
データ拡張(Data Augmentation)で得られる効果はいくつかあります。
- 収集が困難なデータにおけるデータ数の増加
- 過学習(Over Fitting)への対策
機械学習モデルの精度を高めるためには、大量のデータ(教師データと言われるもの)が必要となります。
学習データ数が少ないときや、追加での収集が困難な場合にデータ拡張が有効的です。
データ拡張(Data Augmentation)を行うための準備
データ拡張の方法については多数ありますが、本ブログでは画像処理用のOSSとして提供されている「OpenCV (Open Source Computer Vision Library)」を用いた変換を記載しております。
C / C++ / Python / Java / MATLABなどの様々な言語に対応している。
お手持ちの環境にインストールすることで簡単に利用可能です。
Python環境にpipでインストールする例を記載します。
pip install opencv-python
データ拡張(Data Augmentation)でよく用いる手法
データ拡張でよく用いられる手法についてまとめてみました。今回は画像データの拡張というところに焦点を絞りご紹介いたします。
今回拡張した元画像
>>変換方法については多数ありますが、本ブログでは画像処理用の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度 |
|
#img = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)# 時計回りに90度 |
反時計回りに90度 |
|
#img = cv2.rotate(img,cv2.ROTATE_90_COUNTERCLOCKWISE)# 反時計回りに90度 |
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サービスのアップデート情報を掲載していきたいと思います。
最後まで読んでいただき、ありがとうございました!!!