備忘録です。今回はPillowを利用してデータを拡張する際のコードです。
機械学習におけるデータの拡張について
ディープラーニングなどで画像などの学習を行わせる際、手持ちの画像には限りがあリます。そう言う時は画像データを変換し画像データを拡張します。
その際にPillowを利用して画像を拡張するためのコードを備忘録として記載します。
データの拡張(Data Argumentation)についてとてもわかりやすい記事がありました。
www.codexa.net
こちらはkerasを利用して、学習を行う際にデータを増やすことができます。これを読んで確かに元のデータを増やしてしまうと保存しておかないといけないため保存先の容量負荷などの問題が出てくるなと思いました。
ただ、今回のデータは元データを増やす形(オフライン拡張)です。オンラインで拡張する方法はまた実装した際に備忘録として記載します。
コード
※元画像がpngの場合(RGBA)に備えて一旦、RGBに先に変換しています
from PIL import Image, ImageFilter
file = 'data/train/ファイル名'
# ランダムに回転
img = Image.open(file)
img = img.convert('RGB')
new_img = img.copy().rotate(np.random.randint(-90, 90))
new_img.save(f'data/train/ファイル名')
# 反転(左右)
img = Image.open(file)
img = img.convert('RGB')
new_img = img.copy()
new_img = ImageOps.mirror(new_img)
new_img.save(f'data/train/ファイル名')
# 反転(上下)
img = Image.open(file)
img = img.convert('RGB')
new_img = img.copy()
new_img = ImageOps.flip(new_img)
new_img.save(f'data/train/ファイル名')
# 白黒
img = Image.open(file)
img = img.convert('RGB')
new_img = img.copy().convert('L')
new_img.save(f'data/train/ファイル名')
# ガウシアンブラー
img = Image.open(file)
img = img.convert('RGB')
new_img = img.copy().filter(ImageFilter.GaussianBlur())
new_img.save(f'data/train/ファイル名')