人物姿勢推定 (Human Pose Estimation)

1. 人物姿勢推定 (Human Pose Estimation)とは [概要]

人物姿勢推定 (Human Pose Estimation)とは,入力画像中の各人物に対して,画像上のキーポイントや,それらの点ペアを結んだ2次元ボーンを,その人物の姿勢の現在の状態として,推定する問題のことである.

この記事では,「画像入力からの,2D 人物姿勢推定 の手法」について,深層学習以前の手法(2節)と,深層学習以後(3節)の順に紹介する.

特に,3節の複数人物向けのディープラーニング手法(3.3節)が,この記事の最終的な主コンテンツであり,その中でも2つを代表的手法として取り上げる:

  1. OpenPose (Part Affinity Fields, 部位関連度場) を用いたヒートマップ推定手法 (3.3.1節)
  2. Stacked Hourglass Network + 結合埋め込み(Associative Embedding)によるキーポイントの各人への対応付け手法 (3.3.2節).

※ Web上だと 姿勢推定 と「人物」を省略して書かれている記事も多いが,それだと物体の姿勢推定(例 物体把持目的の 6DoF 推定)など,他の姿勢推定区別がつかないゆえ「人物姿勢推定」と書く方がわかりやすい.同じく「物体姿勢推定」も,「物体」を略さず書くほうがよい.

1.1 記事の構成

1.2節で見た歴史的変遷を踏まえて,この記事では,「画像からの人物2D姿勢の推定手法」について,以下のように深層学習以前(2節,子記事で詳細) と,深層学習以後の手法 (3章,この記事のメインコンテンツ)の順にまとめていく:

  • 1節 概要・導入
    • 1.2 人物姿勢推定の出力と目的
    • 1.3 人物画像データの分布と,モデルの汎化性能
  • 2節 深層学習以前の手法 [概要]
    • 2.1 「パーツ検出 + Pictorial Structures 」の手法
    • 2.2 「キーポイント回帰」ベースの手法
  • 3節 深層学習を用いた手法 :
    • 3.1 カスケード学習方式:回帰ベース
    • 3.2 パーツ検出:「信頼度マップ」の導入
    • 3.3 複数人物への対応:パーツ対応づけ処理の追加

この記事では,(管理人も博士課程以後,専門の1つとしている)以下のような「3D人物姿勢と形状の推定(人体メッシュモデルの画像へのフィッティング)」は範囲外とする:

  • 画像からの3D人物姿勢推定 (Human 3.6Mデータセットなどをベンチマークに用いる).
  • 同一ペンギンポーズでの人物3D形状推定(SMPL等の3D人物メッシュモデルを,画像へあてはめ)
  • 画像からの3D人物姿勢推定(SMPLify-Xなど表情豊かに姿勢も変化する3D人物メッシュモデルを使用.例:Human Mesh Recovery)』

ちなみに,この記事の「画像からの人物2D姿勢推定」は,著者が博士論文で研究を行った,いまでも研究興味の高い問題設定である.私が後期博士課程に進学した当時は,初代の Kinectが発売されて,[Shotton et al., 2011]の論文が話題になった頃であった.

1.2 人物姿勢推定の出力と目的

2D 人物姿勢推定 (Human Pose Estimation) の結果例 (OpenPose のHP中に以前掲載されていた画像を引用).
図12D 人物姿勢推定 Human Pose Estimation の結果例<br>OpenPose の<a href=httpsgithubcomCMU Perceptual Computing Labopenpose target= blank rel=noopener title=httpsgithubcomCMU Perceptual Computing Labopenpose>HP<a>中に以前掲載されていた画像を引用

画像入力からの人物姿勢推定の処理では,まず直線ボーン両端の「関節の中心位置」や「部位の中心や端点(目や鼻の中心)」をキーポイントとして推定する.そして,骨格モデル(図1)をもとに,推定したキーポイントのうち,隣接する2点を結んだ「直線ボーン」を最終出力とする事が多い.つまりは,キーポイント間を結ぶ「直線ボーン部位」自体は推定せず,その端点のキーポイントのみを推定するが,結果として見やすいように各ボーンも可視化する.

[図1-左] は, COCO データセットにおける人物姿勢の,「キーポイント」の箇所と,そららキーポイント間をつなぐ「ボーン」の定義である.また,[図1-右図]は, 画像にOpenPoseを適用した姿勢推定結果の2Dボーンを,可視化したものである.図1のように,首から下の「四肢と体幹の2Dボーンの人物姿勢 (Articulation)」を推定することが,2D人物姿勢推定問題の主目的である.頭部や手先・足先,顔や目・鼻などについては,1点もしくは数点で簡易的に表現する.そして,その他に,体幹部と腕・足の各関節キーポイントの推定も行う.

あくまで人間が画像上にキーポイントを打った正解を学習しているので,本当の人間の関節点やキーポイントとは一致していない.そもそも人間の関節は,2つの筋肉の組み合わせであったりして「1点で表現できないもの」もあるが,一緒くたにそれらを1点の関節と見なしている(=モデル化している)のが,こういった(グラフィックス業界的な)「人間の簡易スケルトンモデル」である.

この2Dボーンモデルは,人間は解釈しやすいし,そのまま機械学習モデルの入力特徴にも使用できる.画像からの2D人物姿勢推定が発展することに伴い,画像・映像からの人物行動理解の各タスクでも,後段の処理の入力に活用する機会も多くなっていく(例:動画からのファッション画像のコーデ認識,アクション認識,人物-物体インタラクション認識など).

※ 管理人も,この将来的な目的を元に,博士課程の研究テーマを画像からの人物姿勢推定に決めた.

2D画像からの人物姿勢推定(図1)は,複数人物リアルタイム推定手法の OpenPose (Part Affinity Fields, パーツ関連性場) [Cao et al., 2017], [Cao et al., 2018](3.3.1 節) が登場したのが,大きな契機である.これ以降,OpenPoseなどの推定結果の2Dスケルトン姿勢を(ブラックボックス)的に推定することが容易になり,単に推定するだけでなく,アクション認識やグラフィックス向けの時系列ボーン取得目的などでも活用されていく.

一方で,2D人物姿勢推定では,図1のように直線形状の骨の姿勢推定が主である.胸郭・あばら骨に,背骨・骨盤など,非直線的で曲がった形状の骨の姿勢の推定は,人物姿勢推定と言う場合は行わなれない.

ただし,Kinect や モーションキャプチャのように,本当は画像からも2Dスケルトンではなく3Dスケルトン姿勢を推定できた方が,行動認識など他の人物理解タスクへの使い勝手もよい.従って,近年は,画像からの人物3D姿勢推定の研究も非常に活発である.近年は,以下のような2路線の研究も盛んである:

  1. 人物3D姿勢(ボーン)の推定 (3D Human Pose Estimation):
    • 単一画像から人物の3Dスケルトン姿勢を推定する.
  2. 人物メッシュ復元(Human Mesh Recovery):
    • 画像中の人物に3D人体形状モデル(例:SMPL やSMPLify-X)をあてはめて,「3Dスケルトン姿勢 + 3D表面形状 (つまり姿勢と形状)」をメッシュモデルの状態推定として解く.

この記事では,上記2つの3D人物姿勢推定の話は除外し,画像からの2D人物スケルトン姿勢推定の初期研究の動向のみに焦点を当てて,基礎を紹介したい.

1.3 人物画像データの分布と,モデルの汎化性能

2D人物姿勢推定で学習に用いられるデータセット中には,人物の様々な「姿勢の変化」や「服装の変化」が含まれるよう画像が収集されている.それらの,人物の「見え方(appearance)の多様性」を含むことを設計したデータセットでは,未知の人物姿勢や服装変化にも対応できる「汎化性能の高い,人物姿勢推定モデル」を学習することを目標にしている.

しかし,この仮定の話はあまり明示的には各論文で説明されない.逆に言うと,そのようなデータセットで学習した OpenPose [Cao et al., 2017] などは,データセットの平均分布に相当する「中肉中背の大人の人物画像」には強いものの,その平均から比べて極端に体型・身長・服装の変化がある,人物画像の場合は,正しく人物領域を捉えての推定はできていない(ただし,たまたま上手く推定できることが多い).そして,それらの多様性に対応するための,3Dメッシュモデル(SMPLなど)をもとにした,3D人物姿勢推定や3D人物形状推定も近年盛んである(本記事ではこれらは対象外).

深層学習登場以前の人物姿勢では,以下の2ステージ構成システムによる解き方が主流であった(2節)

  1. 前半ステージ:
    • パーツ検出器を用いて画素ごとのパーツクラス尤度を推定(ラフな局所情報による推定).
  2. 後半ステージ:
    • 人体シルエットモデル(Pictorial Structures)を用いてグラフ推論で最適パーツ配置を推定( 前半のパーツ位置を全体最適化でRefineする).

深層学習登場以降(3節)も,この基本方針(特にステージ1のヒートマップ推定)は踏襲したまま,深層学習・CNNに合うかたちに改良・洗練されていくことで,精度が向上していった.

また,深層学習以前(2節)は,ステージ2のモデル当てはめの制限のせいで苦手or不可能だった「横向き姿勢」「パーツが遮蔽した姿勢」も,改良により学習・推定しやすいようになっていく(3節).

2. 深層学習以前の手法 [概要]

2010年あたりの「人物姿勢推定技術に実用性がある論文が初めて生まれ始めた頃」から話を始める.この2節の内容について,詳しくは子記事の人物姿勢推定 [ディープラーニング以前の手法] に移動したので,そちらを参照されたい.

2.1 パーツ検出 + Pictorial Structures

2010年頃の当時は,DPM(Deformable Part Models) などの物体検出技術が,画像認識の主役であった.よって,人物姿勢推定においても,当時の物体検出を応用するかたちで「検出性能の高いパーツ検出器(boostingなど)を利用した姿勢推定モデル」が提案されていった.

パーツ検出ベースの代表的手法である Flexible Mixture-of-Parts [Yi and Ramanan, 2011] では,「パーツ検出器の混合モデル化」と, DPM を応用した「人体パーツのPictorial Structuresグラフの学習」により,スポーツ選手のような姿勢変化の激しい対象でも,人物姿勢検出ができる手法を提案した.

2.2 キーポイント回帰による手法

人物姿勢推定向けではないが, Cascaded Pose Regression(CPR) [Dollar et al., 2012] は,剛体物体の2D姿勢の回帰を,回帰モデルの回帰で行うことを提案していた.この路線は,顔のキーポイント推定などでにも応用されて発展していった.

一方,[Hayashi et al., 2015] は,基準キーポイント(頭部中心)をもとに中心位置合わせされた人物領域HOG特徴ベクトルを入力として,ターゲットキーポイント(頭部中心)相対ベクトルを,回帰で学習する Posletet-Regressor を提案した.同時期にDeepPose [Toshev et al., 2014] (3.1.1節)が登場するが,同時期に似たフレームワークで非Deepに解いていたのが私のチームの研究である

※ 前段階の2014年時点では,ROI矩形内の2Dグリッド位置の識別問題として提案していた.

3. 深層学習を用いた人物姿勢推定

2章の手法はPoselet-Regressor以外はどれも,「強いパーツ検出器で各パーツの尤度を計算 -> Pictorial Structureのグラフ処理により最適なパーツ配置を推定」という処理設計であるがゆえ,「正面向き・全パーツ見えていて欲しい」という適用可能な人物画像の制限があった.それが,深層学習およびCNNの発展により,対応不可能だった部分遮蔽時も強い人物姿勢推定手法が提案されていく.

そして,最終的に複数人物でリアルタイムに姿勢推定可能な OpenPose [Cao et al., 2017] の登場により,CNNベースの人物姿勢推定手法がひと段落し,コモディティ化が始まるまでに到る.

3章では,CNN化の開始であったDeepPose から,OpenPose登場に至るまでの「深層学習ベースを用いた手法の発展」を,以下の3段階に分けて時系列順に紹介する:

3.1 直接回帰とカスケードによる手法

3.1.1 Deep Pose

DeepPose [Toshev et al., 2014]は,深層学習時代に入って,一番最初に人物姿勢推定手法として有名になった手法である.人物画像から検出した,ラフな人物領域内の画像を入力とする.そして,カスケード接続した$K$ステージのCNN回帰を用い,キーポイントの絶対座標をRefineしていき,最終結果を推定する.3.2節のヒートマップ画像の推定と異なり,各K個のキーポイントを直接回帰する.

Deep Pose [Toshev et al., 2014] がarxivに登場した2014年当時には,すでに「Cascaded Pose Regression (子記事(3.1節)) 」や,CPRの顔ランドマーク向け応用の「Explicit Shape Regression」[Cao et al., 2012] においても,カスケード構成での姿勢回帰が(人物全身画像以外では)行われていた.Deep Poseは,そのカスケード学習の仕組みを,初めてCNNで試した研究である.

DeepPoseは,ターニングポイントとなる研究であったにも関わらず,このCascaded Pose Regressionが [Toshev et al., 2014] では referされておらず,非常に良くない.査読されていないプレプリントだけ発表された研究には,こういうアカデミック的には経緯を辿れなくなってしまっている好ましくない面も(未査読であるゆえに)出やすい.

処理手順

DeepPose では,$j$番目の関節点のキーポイント$\bm{p}_{j} \in \mathbb{R}^2$ を $K$ 個分CNNで回帰することを,$S$ ステージ分だけ,カスケード方式で前ステージの予測を入力としてRefineしていく.1ステージ目のCNNも,2ステージ目以降のRefine用のCNNも,ともにAlexNetをバックボーンに用いる.

1ステージ目CNNでは,AlexNet最後の全結合層(4096次元)から,K個の関節の $\bm{p}_{j} = (x_j,y_j)$ 値を列ベクトルとして並べた,$2K$ 次元ベクトルを出力として回帰する.この結果,初期解として「誤差がまだ結構含んでいる全パーツの推定結果」が手に入る.

2ステージ目以降のCNNでは,各関節$j$について個別に,正解値をターゲットとした前ステージの予測値からのRefine分を推定する.2ステージ目以降の入力画像には,前ステージ $s-1$ で推定した $\bm{p}_{j}^{s-1}$ の周辺の小さいバウンディングボックス内の画像を用い,出力には関節 $j$ のそのステージにおけるRefine値 $\Delta\bm{p}_{j}$ を推定する.

最初のCNNベースの手法としての立ち位置

論文中の推定結果の可視化を見てもらうとわかるが,Leed Sports データセット中の極端な姿勢での結果が(最近のCNN手法と比べると)どれもあまり良いものではない.すなわちDeepPoseの時点では,以前の手法の課題が解決するまでには至っていない,あくまでCNNベース手法の最初の提案であった.

また,同じ会議 (CVPR2014)で登場し,その後しばらくは人物姿勢推定の標準的ベンチマークとなる「MPIIベンチマークデータセット」の実験がDeepPoseのプレプリントでは行われていない.よってDeepPoseは,その後の世代の「信頼度マップベースの手法(3.2節)」との比較ができないプレプリントでもあった.

3.2 ヒートマップ推定による手法

CNNの時代に突入後,「画素ごとに.キーポイント位置を中心とした確からしさを,2次元正規分布で表したヒートマップ画像」である信頼度マップ(Confidence Map)を $K$ パーツ分だけCNNで学習する手法が,代表的な戦略となった.信頼度マップのことをヒートマップ(Heat Map)と呼ぶ研究も多く,今ではそちらがメジャーな呼びかたである.

ヒートマップ回帰手法では,直接キーポイント回帰させる方針(3.1節)とは異なり,正解のk番目キーポイントの周辺に2D空間ガウス分布として信頼度を配置したマップに対して,各座標のL2ロスをとって学習(=回帰)する.これにより,直接キーポイント1点を回帰するシビアな設定(3.1節)よりも,誤差を許容しやすいヒートマップ画像を推定できるようになり,

※ ヒートマップ回帰手法だと,予測点をガウスで周辺にぼやけさせる分,キーポイント同士が近接した場合に厳しいという欠点を持つことになる.直接キーポイントを予測する手法の方が,複数キーポイントが近接している時は有利であり,のちにリバイバルしていく (「4. まとめ」も参照)

この3.2節では,代表手法として,Convolutional Pose Machines (CPM) [Wei et al., 2016] (3.2.1節)と,Stacked Hourglass Networks (SHN) [Newell et al., 2016] (3.2.2節)の2つを紹介する.後者のSHNは,人物姿勢推定ではResNetと同じくらいの頻度で,バックボーンとして用いられることになった.

3.2.1 CPM

Convolutional Pose Machines (CPM) [Wei et al., 2016] は,彼らの研究室の過去手法 Pose Machines [
Ramakrishna et al., 2014] を,CNN版へ発展させた手法である.中間表現のヒートマップ出力を,3ステージのカスケードにより繰り返しRefineする設計にしたことで,2D人物姿勢を高精度にEnd-to-End学習できるようなった.

前身手法:Pose Machines

CPMの前身 Pose (Inference) Machines [Ramakrishna et al., 2014] は,複数の信頼度マップの構造化推論(Structured Inference)の挙動を,代わりにカスケードモデルへ学習をおこなう手法である.Pose Machines の更に前身で,最初のアイデアだった Inference Machines は,セマンティックセグメンテーション問題に対して,グラフのMessage-PassingによるInfereceをカスケードモデルへ学習をおこなう手法であった.

Pose Machines は,各ステージでマルチクラス識別器(Random Forest) を用いたカスケードにより,$K$ チャネル(= $K$ パーツ) のヒートマップを,段階的にRefineする.前ステージの $K$ パーツ分のヒートマップ全てを,次ステージの予測の入力特徴ベクトルに結合して用いる.よって,パーツ間コンテキストを考慮した推論を,Random Forest のカスケードとして学習できる.また,各ステージ間において「それぞれ異なる周辺コンテキスト矩形サイズの画像」を入力とした推定を,$L$ 本だけ並列に実施する.従って,$L$ 層分の複数スケールのコンテキストに基づいた信頼度マップのRefine具合も学習できる.

CPM: Pose Machines のカスケードCNN化

CPM では,Pose Machinesの各ステージをCNNに差し替えることが提案された.そのおかげで(論文中 Figure 2のように) 3ステージのカスケード構成であるにもかかわらず,人物領域全体を最終的に受容野として各画素周辺のコンテキストを取り入れながら,(構造化推定を)カスケードCNN群へと効率良く学習できる.

このカスケード学習構造により,CPMは,高い人物姿勢推定精度と,(CNN導入による)計算効率化の両方を達成しながらも,旧来の人物姿勢推定手法が苦手であった「横向き姿勢」も含めた「あらゆる姿勢変化」を,勾配損失問題を避けつつも Endo-to-End学習することが可能となった.

※ CPMの論文 [Wei et al., 2016] を読んでも触れられていないのでこの論文を読んだだけだとわからない話だが,ResNetが出た当時で,勾配損失問題に対抗するには残差接続ではなく,カスケードモデル化で対抗していた.バックボーンとしてResNetやSHNが使われていくと,勾配損失問題への対処にカスケード化は必ずしも必須ではなくなることに注意.

3.2.2 Stacked Hourglass Network

CPM [Wei et al., CVPR2016] の直後に,Encoder-Decoder構造である「Hourglassモジュール」ブロックを,複数カスケード化したバックボーン構造として,Stacked Hourglass Network (SHN)が,人物姿勢推定向けに提案された [Newell et al., 2016] .SHNは「Hourglassモジュール」を,$N$ 段直列方向に積んで繰り返して実行する,カスケード型のネットワークである.

Hourglassモジュール(内)の構造は,U-NetFPN的に,各解像度間をスキップ接続で結んだEncoder-Decoder型CNNをベースにし,畳み込み層をこまめに残差接続化して,残差ブロック化したものである.

また,SHNでは,Hourglassモジュール間も残差接続で結合されている.(カスケード型ネットワークでよく行うことであるが),残差接続側パスで信頼度マップを中間出力する際に,毎回教師信号を与えて補助ロスも取ることができる構造になっている (InceptionNetから使われるようになった,中間層で補助ロスをとるしかけ)

以上の,残差接続を多用し,かつカスケード化されている構造により,かなりの深く残差的な畳み込み層群を,残差学習かつ残差カスケード学習(※ Houglassモジュール単位で)が可能になる.これによって,SHNは高精度な2D人物姿勢推定を達成できるようになり,その後の人物姿勢推定の定番バックボーンとなった.

3.3 複数人物対応: キーポイント対応付け処理の追加

3.1と3.2の手法は単一人物向けの手法であったが,この頃「画像中の複数人物の姿勢」をお互い区別して推定する問題設定の提案が,ディープラーニング向けにも始まった [Pishchulin et al., 2016].

3.2節などの,単一人物画像向けのアプローチで解こうとした場合,$N$人同時に画像上に登場していると,CNNで信頼度マップを予測しても,同一パーツの関節が$N$個同時に登場してしまい,各関節が$N$人のうち誰の関節なのかを区別できなかった.そこで,信頼度マップで推定した関節キーポイントを「人物インスタンスごとに分割する処理」を追加することで,解決をはかることが提案された.

複数人物姿勢推定手法は,その「人物ごとにキーポイントを分割する処理」の実施方法によって,以下の2つに分類できる:

  1. Bottom-Up手法
    • 信頼度マップに加えて,関節キーポイントを人物インスタンスごとに対応付けする用の「中間特徴量」も推定しておく.
    • 最後に,それらを用いて人物ごとに関節を分割(グルーピング)して対応付けする.
  2. Top-Down手法
    • Faster R-CNN などで人物検出を行い異なる人の領域を先に検出して区別
    • 各インスタンス領域で個別に処理:
      • 人物領域からの,単一画像姿勢推定を行う.
      • 人物間遮蔽などにより生じた「関節推定位置のエラー」を修正する処理も行う.

Bottom-Up手法として,DeepCut [Pishchulin et al., 2016]・DeeperCut [Insafutdinov et al., 2016]が,初めての複数人物姿勢推定として連続して提案された.

次にTop-Down手法として,[Iqbal and Gall, 2016] が提案された.人物検出後に,その各ROI矩形内で単一画像姿勢推定を行い,誤差をInterger Linear Programmingで修正する手法である.また,この頃登場した Mask R-CNN も,COCOデータセットの人物キーポイント位置も学習する意味で,Top-Down人物姿勢推定手法の一種である.

以降は,このうち,3.2節の複数人物対応版手法として発表された,Part Affinity Fields(PAF, OpenPose)(3.3.1節)と ,Associative Embedding (3.3.2節)を紹介する.

3.3.1 OpenPose (PAF)

子記事:OpenPose:Part Affinity Fields (部位関連性場, PAF) [T.B.D]

前節のCPMと同じ研究グループから,Part Affinity Fields (部位関連性場,PAF)を用いたリアルタイム人物姿勢推定手法のOpenPose が提案された [Cao et al., 2017].

互いにパーツ間の部分遮蔽も激しい複数人物に対して,従来の単一人物向け手法(CPMなど)のように,各キーポイント位置のヒートマップを推定しただけでは,各キーポイントがどの人物のものか対応づけできない.そこでOpenPoseでは「同一部位(part)に紐付くパーツの結合アオダイ(association)」を学習させたものであるPAFを追加ストリームに推定させるようにした.これにより,後処理でPAFを元に,同一人物ごとにキーポイントを分割(グループ分け)する処理を,グラフ対応づけ処理を行えるようにしたのが,OpenPoseのアイデアである.

Part Affinity Fields (部位関連性場,PAF) の詳細

PAFは,ペアとなるキーポイント(=パーツ)間の『Affinity (密接な関連性:2つのキーポイントが同一パーツないの2つの端点である度合い)』によるベクトル場である.パーツペア(= ボーン)の数Kだけ,そのボーンに対応するPAFをK枚推定するようにFCNを学習する.

各一枚のPAF上では,そのチャンネルが担当する$k$番目のボーン(例:右前腕ボーン)上の範囲の各画素位置でのみ,「(1) 基準キーポイント(例:右前腕ボーン- 手首点)」から,そのボーンとしてペアとなる「(2) 反対の端点キーポイント(例:左前腕ボーン – 肘点)」への「方向」を指すベクトルを学習する.

複数人物が重なり合って写っている画像に対して,もし前節3.2の処理のように,信頼度マップの推定を行う処理だけで済ますと,点が検出されるだけでボーン情報は学習されていないせいで,うまくキーポイント間の対応づけまでができない.そこで,各キーポイント間でPAF(対応付けベクトルフィールド)も学習しておくと,どの2点がボーンとして結合を形成するか(ボーンの領域範囲とボーンの向き)も,推定する(対応付けする)ことができる.

OpenPoseのネット構造と処理

[Cao et al., 2017] では,以下の2ストリームを,カスケード式構造で,同時に相互Refineしていくネットワーク構造が提案された:

  1. 信頼度マップ(キーポイント検出)を出力するストリーム.
  2. PAF (同一人物内のパーツ間の対応づけ) を推定するストリーム.

まず前段の処理では,このネットワークの順伝搬を行い,信頼度マップとPAFが出力のマップ画像として2つ得られる.

そして,後段の処理では,以下の「グラフ対応付け処理」を行うことで,キーポイントのグルーピングを行い,各人物ごとにキーポイントをまとめていく:

  • ノードを(信頼度マップで検出した)キーポイントで構成した2分木グラフを用意し,各エッジの重みには,PAF上でキーポイント間の直線に沿って積分した値を計算する.
  • このグラフを2分木マッチングで解くことにより,最終的な出力である「同一人物同士のキーポイント間のみが接続された対応づけ結果」を得る.

こうしてOpenPoseでは,人物検出器による前段のTop-Down処理の必要なしに,(最後のキーポイント対応づけのグラフ処理以外は) 2ストリームのBottom-upベース処理のみで,複数人物の人物姿勢推定を実現することができた.計算効率も向上することになり,リアルタイムに動画から毎フレームの複数人物姿勢を推定することが,初めて達成できた.

オープンソース化と,顔・手足の拡張.

本手法 [Cao et al., 2017] は, OpenPoseという名称で,オープンフレームワークとして公開された.顔と手・足のキーポイント検出処理も追加されたもので,ジャーナル版論文の4章で,このOpenPoseが(アカデミックに)提案されている.

3.3.2 結合埋め込み (Associative Embedding)

Newellら [Newell and Deng, 2017] は,単一人物画像むけの Stacked Hourglass Network (3.2.2節) の続編手法として,複数人物の姿勢推定手法である 結合埋め込み (Associative Embedding)を提案した.この手法では,同一人物のキーポイント同士が近くに配置される「人物クラス値の埋め込み」をしめした結合埋め込みマップ (Associative embedding map) もデータセットから学習しておく.これにより,信頼度マップで検出した関節位置の結合埋込みタグ(= 関節がどの人物IDクラスに属するか)を推定することができ,各キーポイントを人物IDごとにすぐ分離できる手法である.

結合埋め込みマップによる,各キーポイントへのIDタグ割り振り処理

[Newell and Deng, 2017] のネットーワークでは,信頼度マップ$K$チャンネルに加えて,結合埋め込みマップ (結合埋込みのタグ値のマップ) $K$ チャンネルを出力し,合計 $2K$ チャンネルを出力する (どんなマップなのかは,論文中 Figure 2を参照).

$i$ 番目の関節の信頼度マップ上で検出された各関節位置 $x$ は,まだ誰の関節であるかはわからない.一方で,関節 $i$ に対応する結合埋め込みマップ $h \in \mathbb{R}^{W \times H}$ 上では,検出位置 $x$ でのタグ値 $h(x)$ に,その関節がいったい $j$ 番目の人物IDクラスの関節であるかの値が推定されている.したがって,このタグ値の距離を用いるだけで,人物ごとに関節群をグルーピング(対応付け)できる.難解な最適化や,後処理的にCNNから分離してしまう対応づけ処理 (例:ハンガリアンアルゴリズムを用いたbipartite matchingなど) を,後処理で行うことなく人物別に関節のグルーピングが済むゆえ,計算効率性が高い手法である.

Groupingロスを用いた埋め込みマップの学習

$K$ 枚の結合埋め込みマップ $h$ を学習する際には(contrastive loss的な) Deep Embedding 学習を行うGrouping ロス関数」が用いられる.

画像上の関節位置 $x$ に対応するタグ値を $h(x)$ としたときに,Grouping ロス関数は「同一人物クラスのタグ値は近づける」と「別人物クラスのタグ値は遠ざける」の,2種類の誤差の重み付け和として定義されている.

これにより,(人物間遮蔽パターンも十分に含む)複数人物が写っている画像群からネットワークを学習すると,同一人物の関節位置が,以下の2つを同時に満たすような埋め込み空間を学習できる:

  1. 結合埋め込み上の近い位置にグルーピングされて埋め込まれる
  2. 人物 $N$ 人分の各グループはお互い離れた場所に埋め込まれる
キーポイント埋め込みベースの物体手法への発展

ちなみに,結合埋め込みは CornerNet [Hei and Deng, 2018] などの「キーポイント埋め込み(アンカーポイント)ベースの物体検出手法」にも発展している.シンプルな手法である上に,こうして他のタスクにも応用できる汎用性の高い手法であるのも,結合埋め込みの良い点であると管理人は感じる.

4. まとめ

この記事では,画像からの2D人物姿勢推定手法について,深層学習ベースの手法 (3章) を中心に紹介した.それ以前の状況は,2節で概要だけ述べて子記事にまかせた..

深層学習ベースの人物姿勢推定は,現在 (※2019年執筆当初) 主に,信頼度マップを推定する「画素クラス識別」の設定で解かれることが多い.ディープラーニングが導入される以前からの問題設定である「単一人物姿勢推定(3.1節,3.2節)」も解かれていたが,その後は新たに「複数人物の姿勢推定(3.3節)」も研究されており,代表的な手法の OpenPose (PAF)と,結合埋め込み (Associative Embedding)を紹介した.

※ (2022年2月追記) この2年間 2020~2022年では,OpenPose以降主流であった「ヒートマップを学習する手法」をおさえて,「直接キーポイントを回帰する手法」が精度を伸ばし,復権してきている.

References

  • [Cao et al., 2012] X. Cao, Y. Wei, F. Wen, and J. Sun. Face alignment by explicit shape regression. In, CVPR 2012
  • [Cao et al., 2017] Z. Cao, T. Simon, S.-E. Wei, and Y. Sheikh. Real-time multi-person 2d pose estimation using part affinity fields. In CVPR 2017.
  • [Dollar et al., 2012] Dollar P., Welinder, P. and Perona, P.: Cascaded pose regression, In CVPR 2010.
  • [Hayashi et al., 2015] M. Hayashi, K. Oshima, M. Tanabiki and Y. Aoki. Upper Body Pose Estimation for Team Sports Videos Using a Poselet-Regressor of Spine Pose and Body Orientation Classifiers Conditioned by the Spine Angle Prior. IPSJ Transactions on Computer Vision and Applications 2015.
  • [Insafutdinov et al., 2016] E. Insafutdinov, L. Pishchulin, B. Andres, M. Andriluka, and B. Schiele. Deepercut: A deeper, stronger, and faster multi-person pose estimation model. In ECCV, 2016
  • [Iqbal and Gall, 2016] Umar Iqbal and Juergen Gall. Multi-person pose estimation with local joint-to-person associations. In ECCV, 2016 workshop.
  • [Newell et al., 2016] A. Newell, K. Yang, and J. Deng. Stacked hourglass networks for human pose estimation. In, ECCV 2016.
  • [Newell and Deng, 2017] Alejandro Newell and Jia Deng. Associative embedding: End-to-end learning for joint detection and grouping. In NIPS, 2017.
  • [Hei and Deng, 2018] Law, Hei, and Jia Deng. Cornernet: Detecting objects as paired keypoints. In, ECCV 2018.
  • [Pishchulin et al., 2016] L. Pishchulin, E. Insafutdinov, S. Tang, B. Andres, M. Andriluka, P. Gehler, and B. Schiele. Deepcut: Joint subset partition and labeling for multi person pose estimation. In CVPR, 2016.
  • [Ramakrishna et al., 2014] V. Ramakrishna, D. Munoz, M. Hebert, J. A. Bagnell, and Y. Sheikh. Pose machines: Articulated pose estimation via inference machines. In, ECCV 2014.
  • [Ross et al., 2011] Ross, S., Munoz, D., Hebert, M., Bagnell, J.A.: Learning message-passing inference machines for structured prediction. In , CVPR 2011.
  • [Shotton et al., 2011] J. Shotton, et al. “Real-time human pose recognition in parts from single depth images.” In CVPR, 2011.
  • [Toshev et al., 2014] A. Toshev and C. Szegedy. Deeppose:Human pose estimation via deep neural networks. In CVPR, 2014
  • [Wei et al., 2016] S.-E. Wei, V. Ramakrishna, T. Kanade, and Y. Sheikh. Convolutional pose machines. In CVPR, 2016.
  • [Yi and Ramanan, 2011] Yang, Yi, and Deva Ramanan. Articulated pose estimation with flexible mixtures-of-parts. In CVPR 2011.

外部サイト