前回の「人物の姿勢推定 (1)」に引き続き、第46回目となる今回も「OpenPose」についてです。OpenPoseは既に紹介した通り、2017年に人物の姿勢推定で最も注目を集めたカーネギーメロン大学のZhe Caoらによる「Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields」が実装されたライブラリです。
OpenPoseの大きな特徴は既に軽く触れた通り、「画像に映っている人を検出し、検出した各人ごとに姿勢推定を行うTop-downアプローチ」ではなく、「画像全体から映っている人全員の身体部位を検出し、その繋がりの関係性から複数人の姿勢推定を行うBottom-upアプローチ」であるところです。このBottom-upアプローチは、Convolutional Neural Network(CNN)での予測を繰り返し行い、身体部位の位置と部位ごとの関係性(例えば右肩と右肘の関係性)を同時に学習することにより実現されています。ここでは、このBottom-upアプローチを実現するTwo-branch multi-stage CNNについて説明します。
Top-downアプローチによる姿勢推定の課題
まずは、姿勢推定の課題、Top-downアプローチの課題について整理します。姿勢推定の大きな課題として、画像中の人数・スケールが不定であるということが挙げられます。また、既存のTop-downアプローチは、画像中の人の検出に失敗すると姿勢推定できない、人数に比例して計算量が増加する、複数人物間の身体部位の位置関係といったグローバルなコンテクスト情報を直接的に使えていないという欠点がありました。
Two-branch multi-stage CNN
OpenPoseでは、前述の課題を解決するためにTwo-branch multi-stage CNNと呼ばれる手法が提案されました(図1)。
図1 Architecture of the two-branch multi-stage CNN
まず、VGG19と同じ構造のFine-tuningされたCNNにより、入力画像の解像度を圧縮した特徴量マップFを生成します。これがTwo-branch multi-stage CNNの入力となります。そこからは構造が2つに分岐しています。
1つ目は、各身体部位が存在する位置をheat mapとして表すConfidence Mapsを予測するネットワークです(図2)。複数人が映っている場合でも一括して身体部位の位置を予測します。前回書いた通り18個の関節位置を求める場合は、身体部位ごとに18チャネルの予測結果を得ます。複数人が映像中に映っている場合は、例えば左肩に該当するチャネルのConfidence Mapには複数のピークが現れることになります。
図2 Confidence Maps
2つ目は、各身体部位間の繋がり得る可能性を表すベクトルマップを予測するネットワークです。前回も少し説明したPAFs(Part Affinity Fields)です。繋がり得る身体部位間を結ぶ領域中の全ピクセルに対して、方向ベクトルが定義されます。このベクトルは画像の横軸xと縦軸yの2チャネルのheat mapとして表されます。図3は、左肩と左肘の方向ベクトルマップを可視化したものです。複数人が映っている場合、複数の左肩と左肘が存在することになりますが、これらの繋がりを一括して推定することができます。
図3 PAFs (Part Affinity Fields)
このように2つのブランチでConfidence MapsとPAFsを予測します。そして、その予測した結果と、入力データであるVGG19で抽出した特徴量マップFを連結して、これを再度同様の構造を持つCNNに繰り返し入力していきます(図1)。OpenPoseでは、このようにCNNによる予測を複数のstageで繰り返し行うことにより、複数人物間の身体部位の位置関係といったグローバルなコンテクスト情報を活用し、推定精度を向上しています。
Two-branch multi-stage CNNの考え方は人物の姿勢推定以外でも活用できるかもしれません。
次回は、機械学習で必要なデータセットについて紹介します!
参考文献
[1] Zhe Cao and Tomas Simon and Shih-En Wei and Yaser Sheikh. Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields. In CVPR, 2017.