Deep Learningでターゲットに狙いを定めるWEBアプリを1時間で構築する
先月から年の瀬まで土日もあるようなないような忙しさで、 アドベントカレンダーを楽しむ間もなく気づいたら年の瀬です。
死蔵させるのももったいないので、記事を書く余裕があればやりたいなと思っていたクソアプリネタを晒させていただければと思います。
https://github.com/katsugeneration/tfjs-yolo-tiny-targeting-object
とりあえずターゲットに狙いを定めるWEBアプリを作る
今回は tensorflow.js を使用して、WEBアプリに物体検出を実装していきます。 tensorflow.js では既存の TensorFlow モデルをコンバートしてWEBブラウザや Node.js 上で使用することができます。
このモジュールを使用する基本的なフローは、
学習済みモデルを用意
tensorflow.js 用にコンバート
必要な推論コードを実装
のようになりますが、世の中大変便利なもので、 tensorflow-models/coco-ssdやtfjs-yolo-tinyなど、物体検出の用途を満たすtensorflow.js 用のモデルがサンプル付きで公開されているという状況です。
というわけで、この記事内でやることはもうほとんどありません。
今回は(本家のtensorflow-models/coco-ssdはなぜかメモリーリークが激しいため)、tfjs-yolo-tinyを使用して上記のWEBアプリを実装しましたが、
デモアプリの認識範囲の矩形を表示しているところを、ターゲットを示す画像に差し替えるだけでアプリとして必要な作業は完了です。
正直実装だけなら1時間もかからずにできてしまいます。
tensorflow-models/coco-ssd と tfjs-yolo-tiny の速度比較
tensorflow-models/coco-ssd には lite_mobilenet_v2 という ssd_mobilenet の SSD部分を軽量にし、
モデルサイズ及び推論時間をさらに軽くしたモデルが存在します。
また、yolo-tiny は高速な物体検出アルゴリズムである YOLO のネットワークを小さくし、さらなる高速化を実現したものです。
それぞれベースとなるモデルの速度は、こちらとこちらにあるように、yolo-tiny の方が高速に動作するとされています。
tensorflow.js 上での速度を比較するために、ありもののモデルですが、以下の設定で速度比較をしてみましょう。
入力:416×416 のWEBカメラ映像
出力:COCOの80クラスの物体検出結果
結果は、 lite_mobilenet_v2 が約4FPS、yolo-tiny が約2FPSとなりました。ちなみに mobilenet_v2 は約2PSほどと yolo-tiny とほぼ同じ位の速度となりました。
tensorflow-models/coco-ssd のモデルは TensorFlow 公式のモデルであるため、tesnorflow.js に比較的最適化されているであろうことが考えられます。
また、本家のモデルの方も動作環境を実際にそろえた上での測定結果ではないということも考慮が必要でしょう。
実際、OpenCV の機能で各モデルを比較した記事では、YOLO Tiny V2 と SSD_Mobilenet_V2 の処理速度が同じくらいという結果になっています。
まとめ
機械学習周りは、発展スピードの速さもありますが、モデルや実装のオープン化が非常に進んでおり、学習結果を使うだけの敷居はどんどん下がってきているなという印象です。
一方で、オリジナルのデータを集めて学習させて、というあたりは Google の AutoML の進化はありますが、まだまだ普通のプログラミングに比べると敷居が高い印象です。
とはいえ、つい最近もこのような論文が話題を集めるなど、Meta Learning やこの技術を利用した Few Shot Learning 系の技術は恐ろしい速度で発展をとげています。
このあたりのハードルが来年以降どんどん下がっていくことも期待できるのではないでしょうか。