第45回目の今回と次回は、人物の姿勢推定について紹介します。
人物の姿勢推定(Human pose estimation)は、人の頭部だけでなく、肩、肘、手、腰、膝、足を検出し、人がどのような姿勢を取っているかを推定する技術です。以前はDeformable part modelなどの技術が用いられていましたが、ディープラーニング(Deep Learning:深層学習)が用いられるようになってから飛躍的に性能が向上しました。最も注目を集めたのが、カーネギーメロン大学のZhe CaoらによってCVPR2017で発表された、「Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields」が実装されたライブラリである「OpenPose」です。

OpenPoseは、動画像を入力するだけで、画像内の複数人物のポーズをほぼリアルタイムで推定できます(動画1参照)。高い推定精度と高速処理を両立しており、 COCO 2016 key points challengeで1位に輝き、MPII Multi-Person benchmarkにおいて効率、精度ともに良い成績を残しています。さらに2017年7月より顔と手の推定が追加されました。これらは、オープンソースで無料公開されています(非商用目的に限り無料)。


動画1 Realtime Multi-Person 2D Human Pose Estimation using Part Affinity Fields, CVPR 2017 Oral

OpenPoseでできること

OpenPoseでは、図1に示す通り18個(または15個)もの人の関節位置(画像平面上での2次元座標)を求めることができます。
また前述の通り、顔、手の平の特徴点を求める機能が追加されています。顔については、目、鼻、口、眉毛、輪郭の70個の特徴点を求められます。手の平については、左右それぞれから21個(手首付け根、各指の関節4個)の特徴点が検出可能です。

Open Poseで求めることができる関節位置

図1 OpenPoseで求めることができる関節位置

アルゴリズムの概要

既存手法では、画像から人が写っている領域のBounding Boxを検出したのちに、Bounding Box内の人のPoseを推定するというアプローチが主流でした。
一方OpenPoseは、1枚の画像から複数人のPoseを同時に推定するために、ディープラーニングを用いてまずは画像から各関節位置を推定します(図2b)。各関節に1枚のConfidence map、つまり右手首のConfidence mapといった具合に計18個のConfidence mapを求めます。そして、それらの関節を繋ぎ合わせることで人の姿勢情報を得ます。このとき、複数の人物が写っている場合、左肩と左肘の繋ぎ方の組み合わせが複数存在することになってしまいます。この組み合わせの中から正しいものを推定するために用いられているのが、PAFs (Part Affinity Fields) と呼ばれる手法です(図2c)。これは、関節間が繋がり得る可能性を方向ベクトルマップとして予測するネットワークです。

図2 処理の概要

図2 処理の概要

OpenPoseでは、映っている人数に関わらず1回の推論でPose推定が可能なため、リアルタイムに近い処理速度を実現しているのも大きな特徴です。
コンパイル済みのDemo用プログラムが配布されているので、手軽に試してみることができます。数年前では考えられない精度で検出できるようになっていますので、是非実際に動かしてみて下さい。

次回は引き続きOpenPoseについて、Bottom-upアプローチを実現する「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.