はじめに
PoseNet は、主要な体の関節の位置を推定することにより、画像や動画内の人物のポーズを推定するために使用できるビジョンモデルです。
Web ブラウザ上で実験する場合には、TensorFlow.js GitHub リポジトリをご覧ください。
サンプルアプリとガイド
PoseNet モデルのデモが可能な TensorFlow Lite アプリの例を Android と iOS の両方に提供しています。
使い方
ポーズ推定とは、画像や動画内の人物を検出するコンピュータビジョン手法のことで、例えば、画像内の人物の肘の位置などを特定することができます。
正確には、この技術は画像の中に誰がいるかを認識できるわけではありません。アルゴリズムは単に主要な体の関節がどこにあるかを推定するものです。
検出されたキーポイントは「部位 ID」でインデックス化され、信頼度スコアは 0.0 ~ 1.0 で、1.0 が最も高い信頼度となります。
ID | 部位 |
---|---|
0 | 鼻 |
1 | 左目 |
2 | 右目 |
3 | 左耳 |
4 | 右耳 |
5 | 左肩 |
6 | 右肩 |
7 | 左ひじ |
8 | 右ひじ |
9 | 左手首 |
10 | 右手首 |
11 | 左腰 |
12 | 右腰 |
13 | 左ひざ |
14 | 右ひざ |
15 | 左足首 |
16 | 右足首 |
パフォーマンスベンチマーク
パフォーマンスベンチマークの数値は、ここで説明するツールで生成されます。
モデル名 | モデルサイズ | デバイス | GPU | CPU |
---|---|---|---|---|
PoseNet |
12.7 Mb | Pixel 3 (Android 10) | 12ms | 31ms* |
Pixel 4 (Android 10) | 12ms | 19ms* | ||
iPhone XS (iOS 12.4.1) | 4.8ms | 22ms** |
- 4 つのスレッドを使用。
** 最高のパフォーマンス結果を得るために、iPhone では 2 つのスレッドを使用。
出力例
パフォーマンス
使用するデバイスと出力ストライド(ヒートマップとオフセットベクトル)によって、パフォーマンスは異なります。PoseNet モデルは画像サイズが不変であるため、画像サイズがスケールダウンされても、元の画像と同じスケールでポーズの位置を予測することができます。これはパフォーマンスと引き換えにして高い精度が出せるように PoseNet を設定できることを意味します。
出力ストライドは、入力画像サイズに対してどれだけ出力をスケールダウンするかを決定します。これはレイヤーとモデル出力のサイズに影響を与えます。出力ストライドが大きくなれば、ネットワーク内のレイヤーと出力の解像度は小さくなり、それに応じて精度が低下します。この実装では、出力ストライドの値を 8、16、32 のいずれかで設定できます。言い換えると、出力ストライドが 32 の場合は最速のパフォーマンスが得られますが、精度は最も低くなります。出力ストライドが 8 の場合は最高の精度が得られますが、パフォーマンス速度は最も遅くなります。まずは 16 から始めることをお勧めします。
次の図では、入力画像サイズに対して、出力ストライドがどのように出力のスケールダウン値を決定するかを示しています。出力ストライドが大きければ高速になりますが、精度は低下するということになります。