Kerasを使ってμ's(2年生)の分類(1)


概要

 スマートフォンアプリ「スクールアイドルフェスティバル(以下「スクフェス」)」のカードから学習データの作成を行いニューラルネットワークでの学習を行う.
 今回はその中で学習データの作成を行った.

学習データ

 今回作成したデータはスクショが面倒だったため2年生の3人のみを対象とした.

  • スクショにより得られた枚数
    • 高坂穂乃果:45枚
    • 南ことり:32枚
    • 園田海未:55枚

 ニューラルネットワークでの学習を行うにあたり,これでは学習データが少なすぎると考えられるためDataAugmentationを行うことにした.

DataAugmentation

 DataAugmentationとは画像の回転や拡大・縮小,左右反転を行うことによりデータの拡張を行うものである.
 KerasではImageDataGeneratorクラスを使うことによりDataAugmentationを行うことができる.

実装

data_augment.py
import numpy as np 
import glob
from keras.preprocessing import image
from keras.preprocessing.image import img_to_array, load_img, array_to_img, ImageDataGenerator

#ディレクトリ内の画像を読み込み
files = glob.glob("読み込むディレクトリ" + "/*.PNG")

for i,file in enumerate(files):
    #画像をPIL形式で読み込み
    img = load_img(file,target_size=(2436,1125))
    #PIL形式をnumpyのndarray形式に変換
    x = img_to_array(img)
    #ImageDataGeneratorクラスがndarray形式の4次元配列を要求するため
    x = x.reshape((1,) + x.shape)

    #クラス生成
    datagen = ImageDataGenerator(
        rotation_range=25,#画像の回転
        fill_mode='constant',#境界周りの埋め方の指定
        width_shift_range=0.2,#水平シフト
        height_shift_range=0.2,#垂直シフト
        horizontal_flip=True,#水平方向にランダムに反転
        vertical_flip=True)#垂直方向にランダムに反転

    #画像を生成して保存
    aug_img = datagen.flow(x, batch_size = 1, save_to_dir = "生成した画像を保存するディレクトリ", save_prefix = "umi", save_format = "jpg")

    #作成する画像の数だけループ
    for i in range(10):
        batch = aug_img.next()

生成結果

 上記のソースの処理の結果以下に示す「生成画像の例」のような画像が生成できた

  • 生成後の画像の枚数
    • 高坂穂乃果:483枚
    • 南ことり:349枚
    • 園田海未:598枚

まとめ

 今回はスクフェスのカードからスクショにより学習データを作成しDataAugmentationを行った.
次回は(気力があれば)今回作成したデータを使いニューラルネットワークでの学習を行いたい.

参考

画像の前処理-Keras Documentation