ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

Pyrhon:Pillowを利用したデータの拡張用コード(オフライン拡張)

備忘録です。今回は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/ファイル名')