【画像認識】Deep Learningフレームワーク「Chainer」で学習する下準備
はじめに
前回、Chainerの構築方法とMNISTの実行例を紹介しました。
MNISTのようなチュートリアルが実行できただけでは面白くないので、
自分でいろいろ試せられるようになるための方法を勉強していきます。
ということで、
まずは、自分で用意した画像データをChainerで学習できるようにするための下準備について勉強しました。
考え方
Deep Learningの学習に必要なデータといえば、
学習する画像と評価する画像(最悪なくても良いですが)です。
また、学習画像は正解(ラベル)と紐づける必要があります。
よって、
「画像ファイルパス ラベル」
のリストファイルがあれば学習できることになります。
ソースコード
リストファイルを作成するソースコードは以下になります。
前提として、画像データはラベル毎のフォルダに分けられていることとします。
例)
image\0 ←正解が「0」の画像フォルダ
image\1 ←正解が「1」の画像フォルダ
image\2 ←正解が「2」の画像フォルダ
※ラベルは数値のほうが後々扱いやすいかと思います。
以下のソースコードでは、画像データの75%を学習に、
残りを評価に割り振っています。
# -*- coding: utf-8 -*- import sys import os.path import shutil param = sys.argv inputfolder = param[1] # 学習に使う画像フォルダ outputfolder = param[2] # 学習・テストデータの画像、リストファイル出力フォルダ outputfolderimgname = param[3] # 出力画像フォルダ名 labels = os.listdir(inputfolder) if os.path.isdir(outputfolder) != True: os.mkdir(outputfolder) if os.path.isdir(outputfolder+"/"+outputfolderimgname) != True: os.mkdir(outputfolder+"/"+outputfolderimgname) # 書き込むテキストファイル train_list = open(outputfolder+"/train.txt", "w") test_list = open(outputfolder+"/test.txt", "w") label_list = open(outputfolder+"/label.txt", "w") classno = 0 count = 0 for label in labels: imagefolder = inputfolder+"/"+label+"/" images = os.listdir(imagefolder) label_list.write(label+"\n") startcount = count length = len(images) for image in images: outimagepath = outputfolder+"/"+outputfolderimgname+"/image%07d" %count+".png" shutil.copy(imagefolder+image, outimagepath) # 各クラスのデータの75%を学習に25%をテストに使う if count-startcount < length*0.75: train_list.write(outimagepath+" %d\n" %classno) else: test_list.write(outimagepath+" %d\n" %classno) count+=1 classno+=1 train_list.close() test_list.close() label_list.close()