前回からの続き
前回までで、MNISTの数字認識は一応ながら動作するようになった。が作りたいものは、データセットに対してではなく未知の適当な画像に対して回答を返すものが作りたかった。(その参考サイトもそうではあるが、目的とは違う)というわけで、次はこの参考サイトを参考にしながら、妻か私かの2択画像認識プログラムを作成することにした。
コーディングで引っかかるところは前回引っかかっていたので、特に苦労はなく、妻か私かを判定するところまではいった。が問題はここから
どの画像も全部妻と答える
参考サイトと同じ現象となる…ここから非常に苦労の連続でわけが分からなかった。画像数が少ないこともあるが、少しくらい行けるだろうと思ったが、全然いけない。ここから改善していった点を紹介する
1.顔の部分をトリミングする
ただでさえサンプル数も少なく特徴が少ないのに他のものが写っていると、その要素の方が強く出てしまっている感があるため、まずは顔のみトリミングした。手動でやったため、めちゃくちゃ疲れたが、少しは私という判定が出る画像が現れるようになった。
2.パラメータの修正
画像が圧縮されすぎでは?と思い
y.resize((50,50))
のところを
y.resize((200,200))に
model =Sequential([Dense(512,input_dim = 7500),Activation(“relu”),Dense(2),Activation(“softmax”)])
を
model =Sequential([Dense(512,input_dim = 120000),Activation(“relu”),Dense(2),Activation(“softmax”)])
にした。
モデルデータがすさまじく大きくなった。
学習過程を表示する
おそらく意図的に隠していたのだと思うが、知らない私は、自力でacc等を後から表示させていたが、
history = model.fit(X,Y,batch_size=5,verbose=1,epochs=2, validation_split=0.3)
個々のverboseを1にすると表示してくれる。よほどプロか、別でグラフ表示しているならともかく、ひとまずはここを表示させないと学習状況すらわからないため良くなっているのか悪くなっているのかさえ分からない。必須といえる
予測値も何%対何%でどちらを選んだか知りたかったため表示することにした
画像が少ないので増やす方法を探す
調べていると、画像を回転、縮小等して増やすのが有効らしい。最初は最新の手法であるrandaugmentを使用することを考えたのだが、公式はtensorflow1.xしか対応してない模様…
すっごく今更だけど実力がない私は最新環境でなくリファレンスのそろった環境を使用すべきだと思った。というわけで、ImageDataGeneratorについて調べ、プロが使ってそうなパラメータを利用する。
いや、まずは写真撮って枚数増やせばよいのでは???
結果
テスト用に用意したえりすぐりの11枚中8枚は正解できるようになった。2枚は横向きの私だが、横向きの私のサンプルが学習用データに全くないためかとは思う。1枚は妻の横顔でほぼ髪で隠れており、これはかなりつらそう。
ここから先は系統立てて勉強したとしてどうなるんかという思いが強く、ほどほどにしようと思います。
コメント