かわいい赤ちゃんだよ。
かわいいね。
ノンプログラマーの赤ちゃんが、興味関心と勢いで『ポケモンけんしゅつマシン』をつくったよ。
『ポケモンけんしゅつマシン』って?
→ひでんわざ「かいあおり」を覚えたポケモンをけんしゅつする装置です。
いまは3種類のポケモンに対応しているよ。
このリンクからあそべるよ。すきなしゃしんをいれてみてね。
「機械学習で顔の認識がしたい」と思い立ったのですが、なにぶん素人の手習いなので、なるべく詳細な解説のついたやさしいドキュメントを参考にしたいところです。
調べた結果、わかりやすそうな下記記事を参考に作ることにしました。
TensorFlowによるディープラーニングで、アイドルの顔を識別する
TensorFlowによるももクロメンバー顔認識(前編)
ディープラーニングでザッカーバーグの顔を識別するAIを作る①(学習データ準備編) ←★
今回は上記★印の「ザッカーバーグ検出器」をメインに作っていきました。
仮想通貨界隈には大小さまざまな買い煽りが存在しますが、全てを拾おうとすると学習コスト(時間)がかかりすぎてしまうので、今回は赤ちゃんの思う「かいあおり御三家」についてピックアップし実装することにしました。
ポケモンでいう御三家とは、ゲーム開始時に最初に選ぶことのできる「くさ・ほのお・みずタイプ」のポケモン3匹を指す言葉です。
タイプ別のイメージカラーは見たまんま、くさ=緑・ほのお=赤・みず=青ですね。
今回は、仮想通貨における「くさ・ほのお・みずタイプ」を以下のように選定しました。
①くさタイプ
くさタイプのシンボルは、高倍率PoSとは死ぬことと見つけたり、XPさんです。
「運営が大量枚数を保有しており、かつそれを売却することができる状況」がいかに無常であるかを体現したような通貨ですね。
この通貨のかいあおりポケモンである尊師さんが自然に囲まれた山奥に住んでいる点からも、くさタイプがピッタリだと思います。
かいあおりポケモンは「シグナル」と形容される大衆心理の代弁行為を得意としている(自称)ようなので、いわゆる普通の人の代表ということで、尊師さんの複合タイプは「くさ/ノーマル」かなと思いました。弱点多そうなタイプですね。
ちなみに本家ポケモンには「エモンガ」というでんきタイプのモモンガがいるのですが、光回線を齧ったモモンガの個体が突然変異により蓄電能力を得たと考えていくととても納得ができますね。
②ほのおタイプ
ほのおタイプのシンボルは、Wowbitさんがいいかなと思いました。
基本的にはどの通貨もだいたい炎上するので、そういった要素は別として、単純に「色が赤い」という理由での選出となります。
そんなWowbitのかいあおりポケモンであるサロン主さんは、月次損益が赤色であるとかなんとか、諸々ゴシップの絶えないポケモンでおなじみですね。
お得意のヒューッも赤いローソク足がつきますし、赤色と縁があるのでしょうか。
その勢いでサロン生の資産もろとも燃やし尽くす様は、まさに「かえんぐるま」いや「ほのおのうず」かな?
サロン主さんは、複合タイプでいうと「あく」か「かくとう」でしょうね。ほら、ね、色々と、ね。
③みずタイプ
おまたせしました!みずタイプのシンボルといえばこれしかありませんね、NOAHさんです!
ロゴ下部のリゾートチックな波模様もさることながら、なんといってもポイントは方舟です。方舟って、人類最古のなみのりツールですからね。
NOAHのかいあおりポケモンことキングオブコインさんは、「なみのり」や「そらをとぶ」をつかって海外に行っていることが多いようです。
本人がリアルドラゴン桜を自称されているということなので、タイプとしては、みず・ドラゴンになるのかな。言われてみれば弱点の少なそうな人間性ですよね。
自身が訴えられている裁判を欠席し、海外観光地からインスタを更新するというムーブができるのも、その人となりならではなのかもしれません。
余談ですが、このポケモンは、名前からも水を連想させるところがとてもポイントが高いです。
こんな感じにできています。
さまざまなサービスをとっかえひっかえしながら、最終的は下記の組み合わせでなんとかなりました。
・OpenCV
・tensorflow
・Flask
・heroku
「やってみよう!」と思い立ってから、OpenCVの顔認識の実行でハマり、tensorflowへの反映でハマり、学習データの読み込みでハマり、WEBフレームのlocal環境確認でハマり、一般公開にむけた実装でハマり、なんだかんだ2週間くらいかかっていい感じになりました。
上記ハマりの解決に際して調べた記事のうち、有用だったものを個別にストックしているので、どこかにハマりメモを纏めて次なる誰かへの道標としたいと思います。
けんしゅつマシンですが、学習させる際のチューニングセンスがまだ掴めておらず、精度がイマイチです。
今回使用した学習データの学習曲線を見てみると、最初の方によくわからず限られたデータで学習コマンドを連打した影響からか、異常な軌跡を描いているとわかります。
実際に、下記のような不具合が出ています。
不具合1:メガネをかけた人間はみんなかいあおりポケモンだと認識してしまう。
不具合2:ポケモンがポケモンであると認識されない場合がある。
また、先んじて一部の方にテストして頂いたのですが、「持ち逃げ占星術師も検出してほしい」や「(逃げた)国産通貨の運営も検出してほしい」など複数の要望を頂戴したので、検出精度の向上がてら、検出可能なポケモンを追加するアップデートを行う予定です。
趣味なので特に期日は設けませんが、興味のある方は少々お待ちください。
初心者あるあるなのかもしれませんが、少しづつ前に進んでいく感じがたのしかったです。普段プログラミングに触れないので新鮮でした。
ソースはgithubにあります。ようやく活用できたなという気持ち。
普段はtwitterを見ているよ。みんなも赤ちゃんとおはなししよう!