以前からちょこちょこ使っていた Teachable Machine。
その技術情報をいろいろ調べてみようと思い、その過程を自分用メモを兼ねてこの記事に書きました。
(そして、調査を進めていたら TensorFlow.js についても調べる形となりました)
公式の Teachable Machine関連の情報を見てみる
概要
Teachable Machine の学習の仕組みについて、公式の FAQ に「これはどのような仕組みになっていますか?」という部分があります。
その情報によると「画像モデルとポーズモデルの 2つは MobileNet を使った転移学習」で、「音声モデルは Speech Command Recognizer に基づいた転移学習」と書かれています。
「MobileNet は V1・V2・V3 とかあったけど、どれだろう?」とか、「Speech Command Recognizer って何だろう?」とか思いつつ、先へ進んでいきます。
画像モデル関連(MobileNet関連)
画像モデル・ポーズモデルのほうで利用されている MobileNet に関する情報をさらに調べてみます。
GitHub を見ていたら「googlecreativelab/teachablemachine-community」の「libraries/image」というものがあったので、そこを見てみることにしました。
さらに、その中を見ていくと「src/custom-mobilenet.ts」という部分があったので、見てみます。
上記を見てみると、「デフォルトは MobileNetV1 で、MobileNetV2 も扱えそうな感じ」に見えます。
音声モデル関連
音声モデルについては、Speech Command Recognizer の話が出ていたので、そのページを見てみます。
いろいろ見ていくと「transfer-learning」という部分がありました。
ざっくり内容を見てみると、1つ目の段落は転移学習に関する説明が書かれているだけのようでした。
そして、2つ目の段落に Speech Command Recognizer の説明が出てきていました。
説明によると「speech-command model」は転移学習に適したモデルで、オリジナルは巨大なデータセットによる(数値的には「~50k examples from 20 classes」の部分)と書かれていました。
ポーズモデル関連
さらにポーズモデルについても見てみます。
上で出てきた GitHubの 「googlecreativelab/teachablemachine-community/libraries」の中に「pose」というものがあるので、そのページを見てみます。
上記の画像モデルの時と同じ流れで「src/custom-posenet.ts」を見てみます。ソースを見ていると、画像モデルの時のような V1・V2 を指定するような記載もなく、MobileNet というキーワードが登場しているのは以下の画像内の 2箇所のみでした。
これを見た感じだと、V1 のみを利用する形に見えます。
画像関連の部分について TensorFlow.js公式の情報も見てみる
画像を対象にしたモデル
さらにググったりなどしていると TensorFlow.js のモデル関連のページも出てきたので、そちらも見てみます。
●tensorflow/tfjs-models: Pretrained models for TensorFlow.js
https://github.com/tensorflow/tfjs-models
まずは画像に関わる部分を見てみると、画像分類用のモデルで MobileNet の記載がありました。そして姿勢推定については、PoseNet の記載があります。
上記の流れでは、Teachable Machine では姿勢推定のほうも MobileNet がキーワードとして出てきていましたが、ここでの記載も考慮すると姿勢推定については PoseNet の中に情報がありそうです。
TensorFlow.js の MobileNet
まずは、「MobileNet」と書かれた部分のリンク先を見ていきます。
上記の画像モデルに関する部分で「custom-mobilenet.ts」というものが出てきましたが、そこに書かれていた V1・V2 の話に関する記載がありました。
「Loading the model」という項目の中で、以下の記載がありました。
「version: The MobileNet version number. Use 1 for MobileNetV1, and 2 for MobileNetV2. Defaults to 1.」とあるように、TensorFlow.js で扱えるのが V1・V2 のみで、デフォルトでは V1 を使うという設定のようでした。
TensorFlow.js の PoseNet
PoseNet のリンクのほうも情報を見てみます。
「Loading a pre-trained PoseNet Model」という部分を見ると、「In the first step of pose estimation, an image is fed through a pre-trained model. PoseNet comes with a few different versions of the model, corresponding to variances of MobileNet V1 architecture and ResNet50 architecture.」という記載がありました。
PoseNet の事前トレーニング済みモデルについて、TensorFlow.js で利用できるのは「MobileNetV1」のみで、他に「ResNet50」が利用できるようです。
Teachable Machine のポーズモデルを再度見てみる
上で 1度見ていた Teachable Machine のポーズモデルに関するページに戻って情報を見返してみます。
試しに「ResNet」でリポジトリ内を検索してみましたが、以下のとおりヒットする検索結果はありませんでした。
Teachable Machine のポーズモデルで使える事前トレーニング済みモデルは MobileNetV1 のみっぽいです。
まとめ
表題のとおり、技術情報をざっくりと調べてみました。
ここが違っている、などという部分がありましたら、コメントでお知らせいただけると嬉しいです。