2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

kerasでデータの拡張をする

Posted at

どうもエンジニアのirohasです。

先日、kerasを使用して虹ヶ咲学園のキャラクターを画像認識させてみたの記事において、データ数の少なさから精度があまり芳しくなく、データを増やそうと思い、Data Augmentation(データ拡張)をしたので、
今回は機械学習ライブラリの一つであるkerasを用いた、Data Augmentation(データ拡張)を紹介します。

目次

1.環境
2.使用ライブラリ
3.データ拡張って何?
4.ソースコード
5.まとめ

1. 環境

vscode
Python 3.9.0

2. 使用ライブラリ

・標準ライブラリ

os : ローカルフォルダ用ライブラリ
glob : フォルダ一括取得用ライブラリ

・外部ライブラリ

numpy 1.21.4 : 数値計算ライブラリ
matplotlib 3.5.1 : グラフ描写用ライブラリ
Keras 2.8.0 : ディープラーニング用ライブラリ

3. データ拡張って何?

Data Augmentation(データ拡張)とは、学習用の画像データに対して「変換」を施すことでデータを水増しする手法です。
機械学習、特にディープラーニングによる画像認識では大量の画像データを必要とする場合が多いです。
時にその量は数万枚や数十万枚(またはそれ以上)に登る場合もあるので、人間の手でデータを集めたり、スクレイピングで集めるのも至難の業となってきます。
そこで活躍するのが上記のData Augmentation(データ拡張)という技術です。
Data Augmentation(データ拡張)では、一枚の画像を回転させたり、反転させたり、明るさを調整したりしてデータを増やすことができます。

詳しくはこちら↓
Keras ImageDataGenerator

4. ソースコード

作成したソースコードは以下になります。

aug.py
from keras.preprocessing.image import load_img, img_to_array
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
import numpy as np
import os
import glob

n = 20 #一枚あたりの拡張数

# 入力画像の保存先
input_path = "./dataset/train/sizuku"
files = glob.glob(input_path + '/*.jpg')

# 出力画像の保存先
output_path = "./dataset/train/sizuku"
if os.path.isdir(output_path) == False:
    os.mkdir(output_path)

for i, f in enumerate(files):

  img = load_img(f)
  x = img_to_array(img)
  x = np.expand_dims(x, axis=0)

  # ImageDataGeneratorの生成
  datagen = ImageDataGenerator(
    zca_epsilon=1e-06,   # 白色化のイプシロン
    rotation_range=10.0, # ランダムに回転させる範囲
    width_shift_range=0.0, # ランダムに幅をシフトさせる範囲
    height_shift_range=0.0, # ランダムに高さをシフトさせる範囲
    brightness_range=None, # ランダムに明るさを変化させる範囲
    zoom_range=0.0,        # ランダムにズームさせる範囲
    horizontal_flip=True, # ランダムに水平方向に反転させる
    vertical_flip=True, # ランダムに垂直方向に反転させる
  )

  # 1枚あたりn枚の画像を水増し生成
  dg = datagen.flow(x, batch_size=1, save_to_dir=output_path, save_prefix='img', save_format='jpg')
  for i in range(n):
    batch = dg.next()

5. まとめ

Data Augmentation(データ拡張)を使えば、100枚のデータを1000枚、10000枚などまで増やすことができます!
Data Augmentation(データ拡張)をすることで、過学習の抑制であったり、精度の向上につながります。
ぜひ、Data Augmentation(データ拡張)の技術も極めて快適なAI開発ライフをお過ごしください!!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?