Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@bluepost59

五十嵐響子画伯AIを作る その1 CNN

More than 1 year has passed since last update.

はじめに

head.jpg

五十嵐響子さんは「味わい深い絵を描く」ことで有名なアイドルです。これまでに公式でウサギとネコの絵を披露していますが、正直見わけられないので判別するCNNを組んでみました。

サンプル

6つしか見つかりませんでした。

ソース ラベル
モバマスN ジューンブライド ウサギ
劇場369話4コマ目 ネコ
劇場369話5コマ目 ネコ
デレステログイン画面 ネコ
デレポ ウサギ
アイプロアイテム「響子の特製オムライス」 ウサギ

SSRあったかハートのウサギはあまりにひしゃげていたのでカットしました。ほとんどのサンプルがオムライスにケチャップで書かれたものなので、響子さんのお嫁さん特性がよくわかりますね。結婚したい。

画像処理・水増し

7サンプルだけだとCNNどころかSVMすら学習させるのは難しいので、水増しします。

参照文献を参考に、openCVで以下の処理を行いました。

  • ガウシアンノイズ
  • 上下左右反転
  • 平滑化(フィルタサイズを5x5から14x14まで変化)

その結果こんな感じで5280枚まで画像を増やすことができました。

無題.png

学習

読み込むときはグレースケールとしました。ケチャップだけを抽出したいので、thresholdをかけました。

マシンスペックがくそ雑魚なので、MNISTを参考に28x28x1を入力としました。

cnn.py
def cnn():
    inputs = Input(shape=(28,28,1))
    xx = Conv2D(32,(3,3))(inputs)
    xx = Activation("relu")(xx)

    xx = Conv2D(32,(3,3))(xx)
    xx = Activation("relu")(xx)

    xx = MaxPooling2D(pool_size=(2,2))(xx)
    xx = Dropout(0.25)(xx)

    xx = Conv2D(64,(3,3))(xx)
    xx = Activation("relu")(xx)
    xx = Conv2D(64,(3,3))(xx)
    xx = Activation("relu")(xx)

    xx = MaxPooling2D(pool_size=(2,2))(xx)
    xx = Flatten()(xx)

    xx = Dense(512)(xx)
    xx = Activation("relu")(xx)
    xx = Dropout(0.5)(xx)

    xx = Dense(2)(xx)
    outputs = Activation("softmax")(xx)

    model = Model(input=inputs,output=outputs)

    model.compile(loss='categorical_crossentropy',
                  optimizer=keras.optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True),
                  metrics=['accuracy'])

    return model

結果

test accuracyが100%になりました。ただ水増ししたとはいえサンプルが絶対的に少なすぎるので、これが過学習なのかどうかも判定するすべさえもありません。響子さんにテストデータを描いてもらうしかないですね。

ちなみに、自分で書いた絵を判定させてみました。

myfile.png

AI響子さん曰くこれは「ネコ」だそうです。僕はネコのつもりで描きました。

ソース

github
https://github.com/bluepost59/kyoko_CNN

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
bluepost59
pythonとかfortranとかC++とか

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?