機械学習の世界に足を踏み入れると、その広がりと可能性に驚かされます。特に、畳み込みニューラルネットワーク(CNN)は、画像分析の分野で優れた成果を上げています。今回は、CNNの基本的な概念から始め、実践的なプロジェクトとして「ウォーリーを探せ」の絵本に挑戦する構想を紹介します。
検証用データの収集
まずは、正解データとして前回も利用した購入した本からウォーリーを再び探してデータを集めていきます。
あまりこの能力の向上はうれしくないですが…順調に私の探索能力が上がっていっており、早いとページを開いて数秒で見つけられるようになってきています。
次に、不正解データを用意します。ここで正解と判断されたくないけど紛らわしいキャラクターを使ってみたいと思います。ウォーリーにはガールフレンドがいるんですが、これがそれなりに似ています。名前は「ウェンダ」というらしいです。見た目はこんな感じです。
プログラム実装
def return_result(data_input):
model = cnn.MyCNN(2)
serializers.load_npz("mymodel.npz", model)
x = Variable(np.array([data_input], dtype=np.float32))
y = model.forward(x)
return y
def main():
train_pathes = {'folder_path': '0'}
for fil in train_pathes.keys():
append_data(fil, train_pathes[fil], 'train')
N = len(x_train_data)
x_train_data_np = np.array(x_train_data, dtype=np.float32)
x_train_data_reshape = x_train_data_np.reshape(N, 1, 60, 60)
x_train_data_reshape /= 255 # to 0-1
for i in range(len(x_train_data_reshape)):
data_input = x_train_data_reshape[i]
r_data = return_result(data_input)
data = np.argmax(r_data.data)
if data == 1:
print(str(t_train_data[i]) + 'はウォーリー')
else:
print(str(t_train_data[i]) + 'は違う')
検証結果
以下のファイル群をプログラムにかけて結果を確認してみます。
ちゃんと判断してくれた!ひとまず成功ですね。よかった。とりあえずは第一関門は突破しました。次回は走査的に全体を探索していくプログラムを組んで実際にウォーリーを探していきます。
コメント