LoginSignup
3
0

More than 3 years have passed since last update.

tfjsで渋野日向子プロとボールを追いかける

Last updated at Posted at 2019-11-19

Pythonが隆盛のAIプログラミングですが、私はWEB屋なのであくまでもJavascriptにこだわりたい、と思い、オブジェクト検出・CoCo-SSDの転移学習に挑戦してみました。ゴルファーが泣いて喜ぶ、壮大な野望を目論みつつ、日々勉強中です。

tfjsのMobilenet(画像分類)においては、こちらにチュートリアルがあり、比較的容易に転移学習が可能です。前回の「渋野日向子プロのスイングを機械学習してみた」は、これを改良しています。

JSサンプルが無い

思った以上に、JSでのCoCo-SSD転移学習の事例が無いことがわかりました。
そこで、いずれにせよGPU環境が必要にもなるので、Google Colab上で、Pythonで転移学習させ、出来上がったモデルを tfjs_converter を使ってJSモデルに変換しよう、と思い、実践しました。
Pythonならいくらでも転移学習の事例が転がってますね。その中からとあるGithubのものを使用しました。小手始めに、画像・映像から「渋野日向子プロとボールを追いかける」ことを目標にしました。

アノテーション作成が大変

オブジェクト検出を作った方ならご存知の通り、1枚の画像から「渋野プロ」と「ボール」を一つずつ正方形で囲ってXMLにするのが大変。。もちろんツールを使いましたが、20枚作成が限界でした。。先人の皆さん、本当にご苦労様です。

Pythonモデルは出来たが。。

Jupyter Notebook、便利ですね。作成した画像とXMLに入れ替えて、Google Colab上でipyonbに準じて実行し、無事Pythonモデルは出来ました。8000エポックで、誤差ほぼなし。ただし元画像20枚は少ないので、どこかで影響は出るかも。
あとは、こちらにある通りにJS版に変換すればOK、と思っていましたが、これがエラーを吐きまくり、何とか出来たと思っても今度はJS側で「Unknown op 'NonMaxSuppressionV5'」というエラーで動作しない。

引数値が違ってる

こちらにある通り、Python版のモデルはそのままJS版では動かないので、Pythonモデルからあれこれ取り除かないといけない、ということで、tensorflowjs_converterのヘルプをよく見ると、
「--output_node_namesは、--input_format=tf_frozen_modelでしか使えない」
とあったので、--input_format=tf_frozen_modelとして、入力ファイルに「./saved_model」ではなく、.pbファイルを指定して実行したら、無事変換成功しました。
Tensorflowはバージョン依存が激しいようなので、特に過去記事には要注意です。

PC性能に依存します

スクリーンショット 2019-11-19 22.09.44.png
何はともあれ、ブラウザで動くので、PCのスペックと回線状況に依存します。モデル読み込み〜描画までに数十秒掛かることも。この辺りがJS版の弱点ですね。
予想はしていましたが、動画やライブで使えるようになるには、スマフォを含めたスペックアップと軽量モデルが必要に思います。
ただ、これが手持ちの機器でライブで軽快に動作するようになると、スポーツおいても用途が多くなると思っています。

何に使う?

将来的には、高価な測定機器に匹敵するものを作ろうと模索中。
協力者を募っています。

あと、セマンティックセグメンテーションの転移学習にも挑戦しようかな。
お題は「渋野日向子プロを隠そう」かな。

3
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0