Simon Says

インスピレーション

Simon Says とは、"Simon" から始まる命令を受けたときにのみ動作を行う、子供向けのゲームです。"Simon says" から始まる Simon の命令にはアクションをとりますが、そうでない命令には反応してはいけません。

豆知識: Simon Says ゲームの参加人数のギネス世界記録は、2007 年 6 月 14 日に Utah Summer Games で行われた 12,215 人となっています。 

何をするか

このプロジェクトでは、DeepLens を使用して各プレイヤーの正しいアクションを認証することによってすべての人が同じグローバルゲームに参加できる、Simon Says Deep Learning プラットフォームを構築しています。

手法

アプリケーションの開発には、Openposemxnet Realtime Pose Estimation の 2 つのオープンソースプロジェクトを使用しました。トレーニング済みモデルをインテルの深層学習推論エンジンでの実行向けに最適化することからスタートしました。このモデルを使って、体の位置を示すポーズマップを生成します。このポーズマップを使用して小さいネットワークを分類し、プレイヤーのアクションを出力しました。

グローバルゲームネットワークは AWS のサーバーレスアーキテクチャを基盤として構築されました。はじめに、1 分ごとに CloudWatch からイベントを発生させ、ゲームを生成する一連の Lambda 関数を有効化します。新規ゲームが生成されると、ゲームが IoT メッセージサービスを使用して各デバイスにプッシュされます。デバイスはそのメッセージを使用して必要な音声ファイルをダウンロードし、ゲームを開始します。音声ファイルは AWS Polly で生成されたものです。このアーキテクチャを使えば、多数のデバイスをサポートするようスケールすることができると考えます。

課題

プロジェクト構築の過程でいくつかの課題に直面しました。最も顕著だったのは、インテルの推論エンジン向けにモデルを変換することでした。まず Python コンバーターで MXNet モデルを変換することから始めましたが、concat レイヤーに axis 属性がないことに関するいくつかのエラーが発生しました。それらのエラーを解決した後には、Test failed: This sample accepts networks having only one output というエラーに悩まされました。最終出力レイヤーを再構築するか、GPU での実行をスキップすることが必要になりました。バージョン 1.2.2 で修正 – AWS サポートフォーラム

成果

このプロジェクトにはもう見込みがないと思ったことは何度もあります。最適化できないモデルと結果の解釈の間で、動作するデモに至るまでの道は実に険しいものでした。ポーズマップがオーバーレイされたライブのプロジェクトフィードを初めて見たときに、自分たちの始めたことを完成させられるという気持ちになりました。

免責事項

このプロジェクトの商用利用はできません。また、オリジナルライセンスの遵守が必要です。 

次のステップ

短期的には、一群のプレイヤーが同じデバイスで遊べるよう、複数ポーズ検出を実現したいと思います。そのためのモデルは既にセットアップされていますが、デモとしては、1 人プレイヤー用のセットアップの方が簡単だったこともあり、今後ゲームに実装する必要があります。

長期的には、ランダムなタイミングでシステムがプレイヤーに新しいアクションを求めるようなトレーニング/分類ループを構想しています。それから、作成されたポーズを取得して分類の加重を更新できます。

さらに大きな観点で考えると、ポーズの推定と分類には、子供のモニタリング、万引きの検出、ダンスなど他の種類のゲーム、スポーツトレーニングなどへの応用も考えられます。 

使用したもの

Python
アマゾン ウェブ サービス
DeepLens
インテルの深層学習推論エンジン
MXNet
Caffe
深層学習
AWS Polly
AWS Lambda
IoT
AWS API Gateway
AWS Athena

今すぐ試す