読者です 読者をやめる 読者になる 読者になる

Qstairs

起業に向けた活動、およびAndroid・画像認識(人工知能、Deep Learning等)の技術を紹介します

広告

【画像認識】Deep Learningフレームワーク「Chainer」で学習する下準備

AI (人工知能) Chainer Deep Learning(ディープラーニング) 画像認識 python

f:id:qstairs:20160601221351j:plain

はじめに

前回、Chainerの構築方法とMNISTの実行例を紹介しました。

qstairs.hatenablog.com

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()

最後に

今回は学習するための下準備として、
学習に必要なデータリストを作成するための方法を紹介しました。
次回からは実際に学習するためのソースコードを紹介します。



【関連記事】

  • 「Chainer」の構築

qstairs.hatenablog.com

  • 「Chainer」での自前データによる学習

qstairs.hatenablog.com

  • 「Chainer」での自前データによる識別

qstairs.hatenablog.com

広告