Yahoo! Hack Day 2018 に参加してきました

去年に引き続き、今年もYahoo! HackDayに参加して24時間ハッカソンを楽しんできました。

去年の作品についてはこちら

今年は、AIとIoTを使って、AIで画像認識をおこなう銃で対象を打つと、打った対象が動いたりデカくなったりするという、その名も「べこべこバンバン」という作品です。

作品発表のスライドはこちら

銃のおもちゃで赤べこを打つと、赤べこが大きくなります。おもちゃのトール君を打つと、トール君が暴れ動きます。

作品の全体の構成は以下の図の通りです。

この中で、私はAI部分をやりましたので、そこを中心にご紹介したいと思います。

AI周りの処理は、まず銃のおもちゃに取り付けたRaspberry Piで写真を撮影するところから始まります。

カメラで1秒ごとに写真を撮影します。
撮影した写真をTiny-YOLO v3で物体認識して、トール君(赤、黄)か赤べこが写っているか確認します。

対象(トール君、赤べこ)を認識すると、認識した結果に応じてWebアプリやデバイスが動作します。

今回使用した物体認識のAIですが、既存のものではございません。

教師データの作成(写真撮影、アノテーション設定)から、Tiny-YOLOの設定、学習実行、学習済みのTiny YOLOのモデルを走らせて通信する為のPythonのプログラムまで、全部このハッカソンの時間内でやっております。

特に、教師データ作成〜モデルの学習まではだいたい13時間くらいでやりました。

1発勝負で、精度出なかったら完全にアウトだったり、そもそもの細かい作業の時間の話もあるのですが、そのあたりは全部、普段やっていることのノウハウだったりします。教師データ作成時から、ある程度学習が上手くいきそうなデータにする(特定の偏りをもたせて特化させる)ことなどなど。

組み込みに関して、AIは当初は銃に内蔵したRaspberry Piで動かそうとしたのですが、NNPACKの導入を試みるも上手くいかなかったため、断念。代案としてMacbook Pro 2018上で走らせました。

遅くなりそうで不安だったのですが、物体認識まわりはだいたい1fps相当は出ているようでした。
予想よりもだいぶターンアラウンドを早くできてびっくりだったのですが、要因としては以下かなーと思っています。

  • 通信にMQTTを使用している為、通信が頻発する状況でオーバーヘッドの削減効果が高かった
  • Tiny YOLOの v3を使用したので、処理速度が早かった

AIの組み込みを考えるうえで、この作戦は割とありだなーと思いました。遠くのクラウドじゃなくて近くのお兄さん作戦。

残念ながら受賞は逃しましたが、新しい技術要素も試せて、ノウハウも溜まり、何より楽しかったので、非常に有意義なハッカソンになりました。