※**以前のブログ** の続きとなります。

11月20日にJPHacksの全国大会に相当する、JPHacks Award Dayに参加しました。ベースとなるアイデアや技術は以前のブログに書いたので、今回までの約2週間で行なった改善点について書いていきたいと思います。

プロダクトの方向性の変更

JPHacksの審査基準・審査方法は最初から公開されており、それに当てはまる方向で機能開発を進めていました。ところが、Hacking Sporint後にslackで”本選に向けたアドバイス”なる長文が回ってきました。要約すると「PSF(Problem Solution Fit)からPMF(Product Market Fit)への変更するといいよ」って内容です。
自分達もココノマスクは「正直ネタ枠」などと言っていたので、競合なんぞなく、問題着眼点完成度・動作性の二点突破を目指していました。悩みに悩み、チームと何度もMTGを重ねた上で、実行・実現可能性の採点ポイントを上げるために「使いやすい帽子型にすること」「コストの観点から家族で共有するデバイスにすること」を決めました。

機能開発

僕が直接開発に関わった機能はオンデバイス顔認識の導入でした。導入理由は以下のような流れでした。

  1. コストの観点から家族で共有するデバイスにしたい

  2. 家族全員がメアドを持っているわけでは無いので、生体認証が現実的

  3. 家族の顔画像をクラウドで保存するのはプライバシー的に問題なので顔画像の処理はデバイス上で行う(COCOAがプライバシーに配慮した設計であるので、それを使う限りココノマスクもプライバシーに配慮した設計にする)

顔認証はposeへの多様性があるvggfaceを学習したInceptionnetのPytorchモデルをONNX形式に変換し、ONNXRuntimeで軽量化して実行する方針にしました。開発チームはweb技術に長けていたことから、ネイティブではなくwebアプリとして作っていたため、最初はJavaScript版のONNXRuntimeで推論処理を実行しようとしましたが、

  • ONNX Runtime Webの提供開始が最近であり、サンプルやエラー(主にWebAssembly周り)の情報が少ない
  • webである限り、最初の接続時にモデルをロードする時間がかかる

の二つの問題が発生しました。そこで妥協点ではありますが、ラズパイ上でPython版ONNX Runtimeを実行するようにしました(ラズパイとスマホはbluetooth接続)。

チーム開発で気をつけたこと

僕はReactがそこまで書けないのですが、PRのCode Reviewやcommentを積極的にするように心がけました。逆に自分のコードに対しても書いてない人からは分かりにくいだろうと思い、ReviewNBの導入や、MLで使用したモデルやデータセットの発表論文を説明するようにしました。
自分がB1,B2相当の頃にはブランチ切っていたかどうかも怪しかったので、B1,B2のチームメイトの方々にはGitHubの機能を使い倒してすごいなぁと感心していました。

その他

  • 資料作成

    発表スライドにCanvaを使いました。アニメーションの追加や画像からの色抽出機能が便利で、プレゼンというよりも動画編集に近い感覚で作れました。

    Koki TanakaさんによるA_2111 チームガリガリ君
  • 開発環境が地獄

    今回の開発での一番のボトルネックはWebアプリにしたことだと思います。僕はMac/iOSの環境しかないので、WebBluetoothは使えない・Windows版Chromeと同じ機能がMacOS版Chromeでは再現されないなどが発生したので、デバイスとアプリの接続テストが後回しになっていました。また、機械学習に関してもネイティブアプリで実行可能なAPIの方がパフォーマンスが良い場合が多く、今までのハッカソンでも「Webよりネイティブの方が映えるよな〜」と思うことは多々ありましたが、ここまで開発面からwebであることを悔やむ経験は初めててでした。

全体を通しての感想

今回のハッカソンで個人的に嬉しかったことが2つありました。
1つ目はハッカソンにML技術を自然な形で利用できたこと。今まで自分は開発(web)と研究(ML)は完全に切り離された状態で勉強してきて、その二つが混じり合う経験をしてこなかったのがコンプレックスに感じていました(過去にもブログでそんなことを書いた気がします。)。ですが、今回プライバシーやUX向上を理由に、推論処理だけではありますが開発に応用できたのは楽しかったです。
2つ目はJPhackのgithubのPopular repositories
に載ったことです。これは自分達のチームメンバーに加えて、ツイートしたことでstarをしてくれた方々による影響です。ハッカソン前に過去の優秀な作品のコードをよくPopular repositoriesから参照していたので、ここに載れたのは嬉しい限りです。