自前の写真をKerasで学習したい [4/18コード追記]
お久しぶりのらずべりーです。
本業の方で忙しすぎてなかなか更新できずorz
最近は画像の深層学習も比較的手軽にできるようになってきているみたいなので、ちょっとやってみたい!とKerasを導入してみたのですが、Kerasでの画像の取り扱い方法がわからず苦戦して挫折したので、そのあたりを日本語で解説してくれているページをメモ。
このあたりを参考にさせていただいて、ぼちぼち取り組んでみたいなー(予定は未定)。
追記 [2018/4/18]
最終的にフォルダ分けを工夫して、ImageDataGenerator
とflow_from_directory
を使いました。めちゃ楽!
公式ドキュメントは以下。
フォルダ分け
フォルダ構造は以下の通り。A, B, Cの3つに分類する場合。
このフォルダにそれぞれのカテゴリの画像データを入れていくだけ。
コード全文
ちょっと長いですが。説明入りです。
参考にさせていただいたページは以下。
前述の公式ドキュメントを見ながら改変を加えました。モデルはすでに設定してあるものを使っているので別途設定が必要です。(このコードだけでは走りません。注意!)
from keras.preprocessing.image import ImageDataGenerator img_row,img_col = 100,100 #読み込み時の画像サイズ train_path = "train/" #trainフォルダのpath test_path = "test/" #testフォルダのpath #訓練用のデータのインスタンス #各画素の情報を0-255から0-1に変換 #画像を歪ませたり拡大縮小したり回したり反転したりして増やす train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, rotation_range=180, horizontal_flip=True) #テスト用データのインスタンス test_datagen = ImageDataGenerator(rescale=1./255) #フォルダーごとにカテゴリーに分けて訓練用のデータとして読み込めるようにする train_generator = train_datagen.flow_from_directory( train_path, target_size=(img_row,img_col), batch_size=32, class_mode='categorical') #同様の処理をテストデータにも test_generator = test_datagen.flow_from_directory( test_path, target_size=(img_row,img_col), batch_size=32, class_mode='categorical') #すでに設定してあるモデルに対して上記訓練データで学習してテストデータで評価 epochs = 20 history = model.fit_generator( train_generator, samples_per_epoch=300, nb_epoch=epochs, validation_data=test_generator, nb_val_samples=100)