Human Pose Estimation Experiment

Human Pose Estimation Experiment

HACARUSデータサイエンティストの小倉です。今回はDeep Learningを用いて、人の骨格を推定するHuman Pose Estimationを試してみました。

Human Pose Estimation に関して

本稿ではHuman Pose Estimation のベースラインの作成を目標とします。Human Pose Estimationは、画像から人間の骨格、いわゆる3Dモデリングにおけるボーンを推定する技術です。2Dで推定するモデルと3Dで推定するモデルがあります。

出典: Simple baselines for Human Pose Estimation and Tracking([1])

実行環境としてはGoogle Colaboratoryを使用しました。私が実行したときには、以下の環境がアサインされました。

OS: Ubuntu 18.04.3 LTS

CPU: Intel(R) Xeon(R) CPU @ 2.30GHz(x2)

MemTotal: 12.7GB

GPU: Tesla K80(x1)

 

ベースラインとなるモデルの調査・選択

Human Pose Estimation は長い歴史を持つタスクですが、近年SOTAを達成している手法はすべて深層学習によるものです。Human Pose Estimationには、大きく分けて、

ボトムアップ方式

キーポイントの検出 → 個人への割当 の順で問題を解く

トップダウン方式

個人の検出 → 個人のキーポイントの検出 の順で問題を解く

 

という2種類の手法があります。キーポイントとは目や関節といった、姿勢を推定するために重要な部位のことです。キーポイント検出ではキーポイントの種類ごと(肩とか膝とか)のヒートマップを作成するので、この部分だけ見れば、以前投稿した[Person part segmentation]とよく似たタスクとなります。

 

本稿では2018年4月末におけるSOTAである「Simple baselines for Human Pose Estimation and Tracking」([1])で提案されているモデルを用います。Human Pose Estimationのタスクで使用されるネットワークは複雑なものが多いですが、実験する際に手を加える可能性が高いため、もっともシンプルなモデルを使用することにしました。

 

「Simple baselines for Human Pose Estimation and Tracking」で提案されているモデルはトップダウン方式です。まず個人の領域を表す矩形(bounding box)をfaster-RCNNで推定し、その後著者らが提案するネットワークによりキーポイント推定を行います。

 

著者らが提案するネットワークは、ResNet(C5)の最後に deconvolution layer(D3)を追加した非常にシンプルなものです。著者はこのモデルに特に名前をつけていないのですが、呼びづらいので今後の説明では C5-D3 と呼ぶことにします。

出典: Simple baselines for Human Pose Estimation and Tracking([1])

 

 C5-D3では、人の画像を入力とし、キーポイントが存在しそうな場所をヒートマップで出力します。また、C5-D3の教師データであるヒートマップ画像は、キーポイントを中心としたガウス関数で生成されます。C5-D3で各キーポイントごとのヒートマップを作成したあとは、ヒートマップの画素値が最大になる点をそのキーポイントの予測された座標とします。

 

動作検証

 同論文の実装は、[GitHub]で公開されており、pre-trainedモデルもダウンロードできます。本稿ではCOCO Datasetを用いたValidationを実行します。キーポイント検出のみを評価するため、人画像はCOCO Datasetのアノテーションを元に切り出しました。

 

また、簡単に試すために、Google Colaboratoryで[サンプルプログラム]を作成しました。興味がある方はぜひ一度実行してみて頂ければと思います。

 

以下が実行結果です。予測はひとりひとり行われます

全員分を描画したのが以下です

 

頭や肩、肘、膝、足先などが、人の体の向きや角度によらず、正確に推定されていることが分かります。

 

また、今回使用したコードでは200枚の画像、100枚の画像から成る2つのミニバッチに対して推論が実行され、それぞれ実行時間は3.856s、0.611sでした。つまり画像1枚あたり6ms 〜 20msであり、50 〜 170fps程度の速度を確認できました。速度にバラつきがあるのは、画像に写っている人数の影響からだと思われます。

 

まとめ

「Simple baselines for Human Pose Estimation and Tracking」で提案されているネットワークを使用し、Human Pose Estimationを試用し、体の姿勢に依らず、手や足といったキーポイントの推定を行うことができました。今後としてはJetson nanoなどのより軽量なマシン上で、リアルタイムな姿勢推定を実現していきたいと思います。

Human Pose Estimation は、例えば野球のフォーム矯正やダンスの採点自動化、VTuberのアバター撮影など応用範囲が広いです。上記のような課題をお持ちのお客様はぜひHACARUSにご相談いただければと思います。

 

参考

[[1] Simple baselines for Human Pose Estimation and Tracking(2018)](https://arxiv.org/pdf/1804.06208.pdf)

 

ニュースレター購読Newsletter

登録はこちら