1. OpenPose とは [概要]
OpenPoseとは,人物姿勢推定 むけに,ヒートマップと Part Affinity Fields (PAF) をカスケード推定する2ブランチ構成CNNを用いることで,人物部位間の遮蔽に厳しい状況下でも,動画の各フレームから実時間で推定を可能にした手法である [Cao et al., 2017].また,オープンソースとしても公開・提供されたのことから,改善手法が登場しやすくなったうえ,OpenPoseの人物ボーン出力結果を,他の画像認識目的に応用した研究にもよく使われた.こうして,OpenPoseは「画像からの2D人物姿勢推定」のランドマーク的手法となった.
この記事では,前身の手法である CPM (Convolutional Pose Machines) [Wei et al., 2014] について述べたのち(2節),その同研究チームによる改善版であるOpenPose の紹介を行う(3節).他の路線のボトムアップ手法や,代表的なトップダウン手法については,以下の親記事が参考になる.
CVPRで当初発表されたCNN [Cao et al., 2017] は,古典的な人物姿勢推定技術 と同じように,「人物の大まかな関節キーポイント(から構成されるボーン姿勢)」を学習・推定するCNNであった.
図1は,初代OpenPoseで学習・推定を行う関節構造である.OpenPose 会議版 [Cao et al., 2017] では,MPII Human Pose データセットと,COCO データセットの画像中の各人物に対して各キーポイントがアノテーションされたものが,OpenPoseネットワークの学習に用いられた.
それが,以下のgithubレポジトリに,オープンソースソフトウェアとして公開されてからは,「顔と手先・足先」の詳細な各キーポイントも推定できるように,追加拡張されたものが提供されるようになった:
従来手法では,CPM (Convolutional Pose Machines, 2節)のように,「カスケード学習型のヒートマップ推定CNN」が既に研究されてきていた.それを,OpenPoseでは,並列ブランチとして,Part Affinity Fields (PAF)を学習する第2ブランチを追加した.このアイデアにより,計算コストが低いめのボトムアップ手法でありながらも,パーツ間の遮蔽に強くなり,動画中の各画像での人物姿勢推定のリアルタイムでの推定を初めて達成できた.
1.1 OpenPose の 各研究・ソフトウェアの登場順の整理
OpenPoseは,会議版の研究 [Cao et al., 2017] が発表され,github上でオープンソースとして公開されはじめた.そして,「顔」と「手・足」のキーポイントも推定できるように,人物ボーンモデルを拡張した論文版が最終的に採録された [Cao et al., 2021].
OpenPoseでは,従来のヒートマップ人物姿勢推定CNNに,補助ストリームとしてPart Affinity Fieldsを推定するストリームを追加することを提案した.そして,カスケード構成の推定にすることにより,ヒートマップ推定をPart Affinity ストリームの結果が,各段階で手助けするCNN構造を提案した.
この2ストリームカスケード方式によって,OpenPoseでは,マルチスケールでの複雑な人物間・人物内パーツ遮蔽のある画像においても,動画の毎フレームで,頑健な実時間での複数人物姿勢推定を初めて達成した.
以下のYoutube動画は, OpenPose 会議版 [Cao et al., 2017] の,筆頭著者によるデモ動画である(※ 動画では音楽が鳴るので,音量に注意):
1.2 記事の構成
2節以降は,以下の構成で,前身手法のCPMと,その発展版であるOpenPoseを説明する.
- 2節 Convolutional Pose Machines (CPM)
- 2.1 PoseMachines: CPMの前身手法
- 2.2 CPM: Pose Machines のカスケードCNN化
- 3節 OpenPose: CPMへのPAFストリームの追加
- 3.1 従来手法の問題点: 複数人物間の遮蔽へ対応しづらい
- 3.2 [会議版] Part Affinity Fields ストリームの追加
- 3.3 [会議版] OpenPoseのネットワーク構造と処理
- 3.4 [論文版]:顔・手/足の拡張とオープンソース化
2. Convolutional Pose Machines (CPM)
Convolutional Pose Machines (CPM) [Wei et al., 2016] は,彼らの研究室の過去手法 Pose Machines [Ramakrishna et al., 2014] を,CNN版へ発展させた人物姿勢推定手法である.中間表現のヒートマップ出力を,N(=3)ステージのCNNをカスケード学習する戦略をあらたに用いた.これにより,CPMは,物体検出CNNで先に取得した「1人物領域の画像」を入力として,2Dの人物姿勢を高精度にEnd-to-End学習・推定できるようなった.
CPMは,OpenPose(3節)の前身の,「1ブランチ版」「複数人物未対応版」手法であるとみなせる(3節でもう一度両者を比較).
2節では,まずCPMの前身である,非深層学習時代の「Pose Machines」について,簡単にだけ紹介する(2.1節).それを踏まえて,本題の Convolutional Pose Machines について,Pose Machines からの差分(カスケードCNN化)をおさえながら紹介する(2.2節).
2.1 CPMの前身手法: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 のカスケードとして学習できる.
また,各ステージ間において「それぞれ異なる周辺コンテキスト矩形サイズの画像Scale」を入力とした推定を,$S$ 本だけ並列に実施する.これにより,$S$ 層分の複数スケールのコンテキストに基づいた信頼度マップの洗練具合も学習できる.
2.2 CPM: Pose Machines の CNN化
CPM (Convolutional Pose Machines) [Wei et al., 2016] では,Pose Machinesの「各ステージ$t$におけるヒートマップ $\bf{S}_{c}^{t} (\bf{p})$を予測するモデル $\rho^{t}$ 」を,CNNへと差し替えるCNN化が提案された (ここで,特徴マップにおける,$c$番目のチャンネルのマップ$\bf{S}_{c}^{t} $が,$c$番目のキーポイントのヒートマップである)
([Wei et al., 2016]の Figure 2のように) シンプルな3ステージ程度のカスケード構成でありながら,人物領域全体を最終的に受容野として各画素周辺のコンテキストを取り入れながら,ヒートマップの(構造化)推定を,カスケードCNN群へと効率良く学習できるようになった.
HOG + Random Forestsで頑張っていたPose Machines は,計算コストも高く,手作り特徴への依存でもあり精度面でも限界がある.よって,CPMの同じ枠組みのまま現代的なCNNカスケードに変形できたことの意義は大きい.
※ これが3節の OpenPoseへも繋がることから,Pose Machines や CPMの(シリーズ全体の)研究価値は高いと考える.
CPMの学習の際,各ステージ$t$のヒートマップ出力 $ \bf{S}^{GT}_{c} (\bf{p})$ ($h \times w \times c$の特徴マップ)において,以下のロス関数 $f^t_{\bm{S}} $ を適用する:
$$f^t_{\bm{S}} = \sum^C_{c=1} \sum_{\bf{p}} \bf{W} (\bf{p})|| \bf{S}_{2}^{t} (\bf{p}) – \bf{S}^{GT}_{c} (\bf{p})|| _2^2 \tag{2.1}$$
このロス関数の内容は,「相手キーポイントへの,オフセット予測ベクトル$ \bf{S}^{t}_{c} (\bf{p}) $と,その正解$ \bf{S}^{GT}_{c} (\bf{p})$ のあいだの$l_2$距離」の全キーポイント$p$でのロスを,$P$個の合計を加算したものである(※ OpenPoseの論文 [Cao et al., 2017] の式(4)に,書きかたを揃えた).ここで,$ \bf{W} (\bf{p})$ は,正解ラベルの存在しない画像座標では,値を$ \bf{W} (\bf{p}) = 0$ にしてロスを加えないようにする,バイナリマスク重み係数である.
OpenPoseは,図2のカスケード学習構造により,勾配消失問題を避けながら,高い人物姿勢推定精度と,(CNN導入による)計算効率化の両方を達成しながらも,旧来の人物姿勢推定手法が苦手であった「横向き姿勢」も含めた「あらゆる姿勢変化」を,勾配損失問題を避けつつも Endo-to-End学習することが可能となった.
※ CPM [Wei et al., 2016] 登場の頃は,ResNetが出た当時で,勾配損失問題へは残差接続ではなく,まだカスケードモデル化で主に対抗していた.それが,バックボーンとしてResNetやStacked Hourglass Networks が使われていくと,勾配損失問題への対処にカスケード化は必ずしも必須ではなくなったことに注意である.CPM [Wei et al., 2016] の論文中だけ読んでも,このResNet視点での議論は当然出てこない.
3. OpenPose: PAFも同時に学習
前節のCPMと同じ研究グループから,Part Affinity Fields (PAF)を用いたリアルタイム人物姿勢推定手法のOpenPose が提案された [Cao et al., 2017].
OpenPoseは,CPM(2節)の「ヒートマップを推定する検出ブランチのCNN (図3 オレンジ)する」に,「PAFを推定する結合ブランチのCNN (図3 水色)」も追加して補助に加えた,「2ブランチ化したCPM」とみなすことができる.
※ 図2と図3のあいだで,両者の違いが明快に比較しやすいようにしておいた.
OpenPoseでは,PAF(=ベクトル場)も,各関節ペアに対して学習させる.ヒートマップの推定を精度向上・効率化することができた.PAFは,各座標で,「隣のキーポイントとの結合(どこに隣のキーポイントがあるかの相対位置ベクトル)」を学習したベクトル場である. 各ボーンを構成する,2つのキーポイントペア(A,B)について「関節A周辺の画像特徴ベクトルを入力に,関節Bがどのオフセット座標にあるか(の尤度)」を,画像中の全位置(x,y)座標について学習したベクトル場である(3.2節).
全ステージでのCNNの推定がおわったのちは,後処理として,2分木グラフ(bipartite-graph)により,各キーポイントを,人物ごとにハンガリアンアルゴリズムで,関節ペアを肢(limb)ごとのグループに対応付けする後処理を行う(3.3節).この後処理により,人物間やパーツ間で「遮蔽」が激しい入力画像でも,正しく各人物にキーポイントが割り当てられた最終出力を,「トップダウンの処理(= 人物領域の物体検出)」を使用せずに,ボトムアップのCNN処理中心で得ることができるようになった.
3.1 従来手法の問題点: 複数人物間の遮蔽へ対応しづらい
互いにパーツ間の部分遮蔽も激しい複数人物に対しては,(2節のCPMなど)従来手法で各キーポイント位置のヒートマップを推定しただけでは,「各キーポイントがどの人物のものか対応づけできない」という問題があった.人物ROI画像を入力として,単一人物だけを相手にすればパーツ間遮蔽や人物間遮蔽はなくて問題ないが,「複数の人物がお互い部分遮蔽しながら写る画像」に対する推定は、苦手であり,少ない計算コストで構成度で解ける手法も当時はなかった.
そこでOpenPoseでは,「同一部位(part) に紐付く2つのキーポイント対の結合(association)」を学習させたマップ画像のPAF (Part Affinity Fields)も,別ストリームに学習させる.つまりは,単一キーポイントのヒートマップの推定を,2キーポイント間のオフセット場であるPAFで補助するという,2ストリーム構成のキーポイント位置推定ネットワークを提案した.
これにより,人物同士のパーツ間遮蔽が多い画像でも,PAFで同一人物ごとにキーポイントを分割(グループ分け)することができるようになった.つまりはボトムアップ手法で、
3.2 [会議版] Part Affinity Fields ストリームの追加
Part Affinity Fieldsは,1部位を構成する2端点キーポイント間の『Part Affinity (部位の関連性:片方の端点キーポイント位置から見て,どこに片方の端点キーポイントがあるかを示す2Dベクトル)』により構成される,ベクトル場である.パーツペア(= ボーン)の数Kだけ,そのボーンに対応するPAFをK枚推定するようにFCNを学習する.
各一枚のPAF上では,そのチャンネルが担当する$k$番目のボーン部位(例:右前腕ボーン)上の範囲の各画素位置でのみ,「(1) 基準キーポイント(例:右前腕ボーン- 手首点)」から,そのボーンとしてペアとなる「(2) 反対の端点キーポイント(例:左前腕ボーン – 肘点)」への「方向」を指すベクトルを学習する.
複数人物が重なり合って写っている画像に対して,もし前節3.2の処理のように,信頼度マップの推定を行う処理だけで済ますと,「点が検出されるだけでボーン情報は学習されていない」せいで,うまくキーポイント間の対応づけまで行えない.そこで,各キーポイント間でPAF(対応付けベクトル場)も学習しておくと,どの2点がボーンとして結合を形成するか(ボーンの領域範囲とボーンの向き)も,推定する(対応付けする)ことができる.
3.3 [会議版] OpenPoseのネットワーク構造と処理
OpenPoseの会議版 [Cao et al., 2017] のネットワーク構造 [図3] と,その処理をまとめる.
[Cao et al., 2017] では,以下のカスケード学習型の2ブランチCNNを用いて,ヒートマップとPAFを,双方同時に徐々に洗練していくことが提案された:
- 検出ブランチ(図3 上部)
- P枚のヒートマップを推定
- CPM(2節)と基本同じ構造..
- 結合ブランチ(図3 下部):
- 2 × P枚のPAFを推定.
- 推定されたPAFを,ヒートマップと残差入力と結合 → 次ステージの入力へ
- 残差接続(ブランチ):
- 毎ステージ間は,残差接続でつながっている.
この2ストリーム型CNNの順伝搬を行い,ヒートマップとPAFが,出力のマップ画像群(=特徴マップ)として,各ステージ $t$ で得られる.
推定されるヒートマップは,遮蔽している領域では曖昧になるので,補助ストリームで推定されるPAFを条件付き入力で追加することで,ステージを経るごとに曖昧性を解消していくカスケード推定の利点が使える.
図3は,[Cao et al., 2017]と同じ特徴マップとCNN関数の変数を使用した.よって,論文とも対応させてこの記事を読みやすいはずである.図3だけで,CNN構造の全容が十分わかりやすいと思うので,より詳しいことについては,元論文や,Reference先を参考にしていただきたい.
CNNの順伝搬がおわったあとの後処理
後処理では,以下の「グラフ対応付け処理」を,ハンガリアン・アルゴリズムで行うことにより,キーポイントのグルーピングを行い,各人物ごとにキーポイントをまとめる処理を行う:
- ノードを(信頼度マップで検出した)キーポイントで構成した2分木グラフを用意し,各エッジの重みには,PAF上で「キーポイント間の直線に沿って積分した値」を計算する.
- このグラフを2分木マッチングで解くことにより,最終的な出力である「同一人物同士のキーポイント間のみが接続された対応づけ結果」を得る.
こうしてOpenPoseでは,(最後のキーポイント対応づけのグラフ処理以外は) 2ストリームのボトムアップ処理で,複数人物の人物姿勢推定を実現することができるようになった.
トップダウン手法(PersonLab や Mask R-CNNなど)では,物体検出器を用いて人物領域を切り取る前段の処理が必要である.OpenPoseは人物領域検出の前処理は不要であり,画像入力からボトムアップ処理のみで(one-stage型 物体検出のように),キーポイントマップ群を学習・推定できるようになった.これにより,パーツ遮蔽に頑健ながらも、ボトムアップ処理中心なので計算効率を良くすることができたため,動画から毎フレームの実時間での人物姿勢推定が,初めて達成できた.
3.4 顔・手/足への拡張とオープンソース化
本手法 [Cao et al., 2017] は, OpenPoseという名称で,オープンフレームワークとして公開された.オープンソース版は,会議版[Cao et al., 2017] に,顔と手・足のキーポイント検出処理も追加されたものである.
ジャーナル版論文 [Cao et al.,2021] の4章で,オープンソース版のOpenPoseが(アカデミックにも)改めて提案されている.
ライセンスは厳しいめ
ちなみに,OpenPoseが公開された当初は「どこでも使ってよいよ」的なライセンス方針だったが,途中からのOpenPoseは使用禁止場面も限定されるライセンスに変化している.私も,頻繁にその経過を確認してここに反映はしていられない.
よって,(特に商用目的で) OpenPoseを使用する場合には,ライセンスの最新状況をHP上できちんと確認していただきたい.商用自の不要なライセンス違反トラブルや倫理違反を避けるには、他社の販売する人物姿勢推定ソフトウェアを購入して使用するか,もしくは自社組織で改善した独自手法を編み出し,それを使用することをオススメする.
4. まとめ
この記事ではOpenPoseについて,直前のベースライン手法であるCPM(2節)と,それにPart Affinity Fieldsのストリームを追加することで、(1)パーツ遮蔽への頑健性 (2)効率的なボトムアップ処理によるリアルタイム性を獲得したことを紹介した.
OpenPoseの登場以降,それまで高かった人物姿勢推定の結果出力を,別目的で使用するための敷居が一気に下がり,後追いの人物姿勢推定技術がたくさん増える展開となった.また,OpenPoseで出力された2D姿勢を,(中間)特徴として使用して,更に他の予測タスクに使用することも増えていった(例:アパレル画像や,スポーツ映像解析など).
関連書籍
- Probabilistic Machine Learning: An Introduction, Kevin Patrick Murphy , MIT Press, 2022.
References
- [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.
- [Cao et al., 2021] OpenPose: Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields, TPAMI, 2021.
- [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.
- [Wei et al., 2016] S.-E. Wei, V. Ramakrishna, T. Kanade, and Y. Sheikh. Convolutional pose machines. In CVPR, 2016.