オープンソースカンファレンスでサイコロの認識を展示してきた

概要

以下の記事の続きである。

機械学習でサイコロの目をカウントするモデルを作成する - いわゆる備忘録

OpenCVでサイコロのでた目の数をカウントする - いわゆる備忘録

オープンソースカンファレンスカタンを電子化したものを作って展示したので、それに関して書きたいと思う。

詳細

そもそもサイコロの目の認識は私の所属する札幌電子クラフト部の活動で、カタンを自動化するために必要だった。

オープンソースカンファレンスに出展! – サッポロ電子クラフト部

カタンボードゲームの中でも最も有名なものだと思う。資源を集めつつ、道、家などを立てていき、勝利ポイントを満たすまでひたすらサイコロを振るゲームだ。

このゲームを早く回すコツはサイコロを振った後に、そのサイコロに該当するを見つけて、資源を該当する人に配るプロセスを早くすること。 自分はこのプロセスを半自動化するためにサイコロの目を画像認識するシステムを作った。

ちなみに上記記事からもだいぶ修正を入れた。 変更点↓ * 画像の枚数を増やした * オリジナルのCNNからResNet18へ変更 * 各種オーグメンテーションを導入

実は正確にサイコロの目を認識するためにはtestやvalidationが95%程度などでは全然足りない、ということが実際にやってみてわかったのだ。 照明や背景などの様々な違いがある実環境でも堅牢に動作するためには99%以上の精度が必要だった。

オーグメンテーションを工夫したり、ResNetを使ったりする工夫したのだが、それはそれほど大きな改善を産まなかった。 結局は画像の枚数を増やすことが一番有効だった。 だいたい2,000枚程度の教師画像ができたあたりで実用的になったと感じた。 深層学習は力技が一番効く。

また、もう一つ苦労したのはRaspberry Piだ。 Pytorchを入れて使ったのだが、ライブラリのコンパイルに時間がかかるわ、動作してもモデルにforward()したあたりでたまにセグメンテーションフォルトがおきるわで、なかなか苦労させられた。Raspberry Piに載せるならTensorFlowがベストだと思われる。最近公式にサポートしたらしいので。

TensorFlow 1.9 Officially Supports the Raspberry Pi

これからモバイルで動く深層学習ベースの画像認識の需要は上がっていくだろう、MobileNet, SSD, Yoloなどの物体認識はすでにできている。 今回は問題を分類としたため、認識できるサイコロの数が固定になってしまったが、物体認識に切り替えれば任意の個数のサイコロの認識が可能になるだろう。 今度チャレンジしたいと思う。ただ、物体認識の教師データ作るのがめんどくさいんだよね・・・。誰かに手伝ってもらわなければ。

以上。