stMind

about Tech, Computer vision and Machine learning

VNect : 1枚のRGB画像からリアルタイムに3D pose estimation

www.youtube.com

SIGGRAPH2017で発表された、単眼RGB画像から3D poseをリアルタイムに推定するVNectのプレゼン動画。音声が若干残念ですが、20分程度で概要を把握できましたので、さらっとまとめ。

3D poseとは

Local 3D PoseとGlobal 3D Poseの二種類がある。Local 3D Poseは、root jointに対する相対的な座標(x, y, z)で表された関節位置及び姿勢。root jointはpelvis(腰位置)。一方、Global 3D Poseは、root jointのカメラからの距離dを考慮したカメラ空間での関節位置及び姿勢。よってこの論文では、1枚のRGB画像からLocal 3D Poseを推定し、さらにそこからGlobal 3D Poseを推定する方法となる。

イデアその1:heatmapベースの3D関節位置推定

単純に関節位置を推定すると考えると、DeepPoseのように画像から(x, y)を回帰するモデルを学習するという手法があるが、推定位置ずれの問題が起こりやすい。これに対して、各ピクセルが関節らしさの値を持つHeatmapを回帰するモデルを学習する手法があり、推定位置ずれの問題を解決している。ということで、Heatmapベースの回帰モデルを3次元に拡張し、3D pose estimationを実現しようというのがVNectのアイデア

2D HeatmapsとLocation maps

f:id:satojkovic:20180714140037p:plain

どのようにして2Dから3DへのLiftを実現するのか、のからくりが2D HeatmapsとLocation maps。

ResNet50をベースにしたFCNNが出力するのは、2D heatmapsとLocation mapsの4つのmapsで、Location mapsというのは、root jointからの相対的な距離を表したもの。X, Y, Zそれぞれ-80cm(濃い青)から+80cm(黄色)までの範囲で、例えば1番目の関節で見ると、X1のmapの左半分は体の左半身の領域でありroot jointに対して負と推定、Y1ではmapの上半分がroot jointに対して負の方向(高い位置)と推定、Z1では周辺がroot jointよりも少しだけ前に出ているので正の方向と推定されていることがわかる。

こんな風にしてroot jointからの相対的な距離を表すLocation Mapを推定することによって、2D Heatmapにより推定された2D関節位置を、Location map上で対応する位置の相対距離で表された3D関節位置に変換できる。

では、学習のための正解データはどう作るのか。2D Heatmapは2D pose estimationの方で行われており、比較的簡単。関節位置が付与されたデータセットがあるので、関節を中心にGaussianをかけて関節毎の2D Heatmapを作成することができる。Location mapsの方は、既存の3D poseデータは存在するが、全て室内に限られていて、様々なシーンで使いたいという目的に対しては不十分。そこで、14台のカメラを設置したマーカーレスモーションキャプチャースタジオを作って、その中でデータを取得。様々な人が任意の姿勢をとり、かつ背景(グリーンバック)をマスクすることで、背景を様々に入れ替えたりしてデータのオーグメンテーションも行った。この新しいデータセットMPI-INF-3DHPは、下記にて公開されている!

VNect: Real-time 3D Human Pose Estimation with a Single RGB Camera, SIGGRAPH 2017

Note: 標準的な体型の人のデータを集めており、160cmから170cmくらいの人が一番良くFitする模様。

イデアその2:スケルトンのFittingによるGlobal 3D pose推定

フレーム単位でのLocal 3D Pose推定では時系列的に推定が不安定になってしまう可能性があり、かつGlobal 3D Poseを求めるために、関節角度θとカメラからの距離dをパラメータとして持つ時系列的に一貫性のあるスケルトンモデルをフィッティングする。

f:id:satojkovic:20180714152238p:plain

IK(Inverse kinematics)はモデルとLocal 3D Poseの差の項、Projは射影後のモデルと2D Poseとの差の項、smoothはモデルの関節角度のacceleration項、depthはモデルのdepthのvelocity項、最後はjoint angleの時系列フィルタリングの項。

ピンホールカメラモデルを想定し、カメラキャリブレーションが未知の場合は、垂直画角は54度と想定する、と論文に記載があった。

動画だけではわからなかったこと

  • なぜ、この処理がリアルタイムで実現できるのか
    • 今のGPUを使うと44fpsまで出るみたいだが、旧世代のGPUでも33fpsは出ているらしい
    • Bounding boxの検出は、2フレーム目以降は関節位置をもとに簡易的に算出できるということだったが、それだけではないはず