Stacked Hourglassによる姿勢推定メモ

概要

  • stacked hourglassな形状のネットワークを使って姿勢推定する
    • 画像の全ての大きさの情報を捉えて利用できる

f:id:yusuke_ujitoko:20170721234149p:plain

  • hourglassを連結、hourglassごとに教師データを与える
  • FLICとMPIIでsota

関連研究

  • 画像から関節位置(x,y)を直接推定(DeepPose(Toshev et al.))
  • 画像からHeatmapを出力(Tompson et al.)
    • 異なる解像度のネットワークを並列処理し、様々なスケールの特徴量を抽出
  • Iterative Error Feedback(Carreira et al.)
    • 繰り返し予測の精度を高めていく
  • Multi-stage pose machines(Wei et al.)

Hourglass Design

hourglassのネットワークにした理由は、画像中の様々なスケールの情報を抽出したかったから。 局所的な情報は、顔や手などの特徴を特定するのに役立つ一方で、最終的な姿勢の推定は体全体の情報が必要となる。 hourglassネットワークであれば、様々なスケールの情報を抽出できる。

様々なスケールの情報を抽出する他のアプローチとして、 並列に異なるスケールの特徴抽出ネットワークを配置し最後に繋げる方法(Tompson et al.)があるが、 本研究では単一のパイプラインで行っている。 単一のパイプラインで様々なスケールの特徴を保持するために、skip layerを備えている。

f:id:yusuke_ujitoko:20170721234231p:plain

hourglassのbottom-up段階(左側)ではConv層を重ねていき、各スケールでの特徴量を抽出する。 そして、一番解像度が低い段階まで来たら、top-down段階に入り、up-samplingしつつ、各スケールの特徴量を結合していく。 この構造はUNetに近い? 出力層ではheatmapを出力する。

8個のhourglassが連結。 重みは共有されない。 同じ教師データが各hourglassの出力の誤差計算に使われる。

結果

f:id:yusuke_ujitoko:20170722000303p:plain

f:id:yusuke_ujitoko:20170722000333p:plain

Convolutional Pose Machinesメモ

姿勢認識の研究の流れを追うため、とりあえずガンガン読んでいく。
あとで綺麗にまとめたい。

関連研究

  • pictorial structures
    • 部位間の空間的関係を木構造のグラフィカルモデルで記述
    • 四肢が良く見える画像に対しては上手く行くものの、木構造で捉えきれない関係に対しては脆弱

  • Hierarchical models
    • スケールの異なる部位間の関係を階層的な木構造で記述
    • 前提の思想として、大きな部位は簡単に検知可能であり、その下の見つけにくい小さな部位を検知するのに役立つという考えに基づく

  • sequential prediction
    • implicitな空間モデルを学習

  • convolutional architectures
    • DeepPose
    • 画像からconfidence mapを回帰
    • 本研究では、空間的依存性をimplicitに学習させるには、上の研究と同じくCNNをcascade的に繋げて精度を高める際に、confidence mapを大きいreceptive fieldを持つCNNに入力させていく方式がよいことを示す

Pose Machines

f:id:yusuke_ujitoko:20170721001108p:plain

Pose Machinesは幾つかStageを経て部位の特定精度を高めていく。
Stage1とそれ以降のStageで少しだけ処理が異なる。
このPose Machinesに関しては以前の論文の方を見たほうが良さそう。

Stage1

Stage1では、入力画像{x_{z}}をもとに「各部位{p}がどの位置にあるかの度合い」を示すconfidence map {b_{1}^{p}}を出力する。 {} $$ g_{1}(x_{z}) \rightarrow {b_{1}^{p}(Y_{p} = z)}_{p \in {0 \cdots P}} $$ 各パーツ、各座標ごとに{b_{t}^{p}}の値が一意に定まるイメージ。
このStage1で、画像中の局所的な特徴から部位を推定する。 ただしStage1だけの結果では弱いのでStage2以降で部位ごとのconfidence mapを統合してconfidence mapの精度を高めていく。

Stage2以降

Stage2以降では、

  • 局所的な画像特徴量{\boldsymbol{x}_{z}^{\prime}}
  • confidence map {\boldsymbol{b}_{t-1}}

をもとに、confidence map{\boldsymbol{b}_{t}}を出力する。 {} $$ g_{t}(\boldsymbol{x}^{\prime}_{z}, \psi_{t}(z, \boldsymbol{b}_{t-1})) \rightarrow {b_{t}^{p}(Y_{p} = z)}_{p \in {0 \cdots P+1}} $$

その際、前のStageで出力されたconfidence map{\boldsymbol{b_{t-1}}}から、 中間生成物としてcontext featuresを作る。 {\psi_{t}(z, \boldsymbol{b}_{t-1})}{\boldsymbol{b_{t-1}}}からcontext featuresへの写像。 この{\psi_{t}}の役割は、confidence mapにおける異なる部位の同じ座標{z}の情報をエンコードすること。

実はこのPose Machinesの考え方は以前の論文に既に載っている。
本論文の新規な部分としては、{g_{t}}{\psi_{t}(z, \boldsymbol{b}_{t-1}))}をCNNに置き換えたこと。
(以前はランダムフォレストだった)

f:id:yusuke_ujitoko:20170721004918p:plain

勾配消失問題への対処

層が深くなると勾配消失問題が起きる。
その対応として、各Stageにおいて出力の誤差を計上し、その和を最小化するように学習する。

Stage間での誤差を最小化する提案手法の場合と、 (そうでない)最後のStageの誤差を最小化する場合で勾配のばらつきを調べたところ、 提案手法を使えば前の方の層でも勾配が消失していないことがわかった。

f:id:yusuke_ujitoko:20170721010106p:plain

実験

  • 3つのデータセットを使った
    • MPII Human Pose Dataset
    • LSP(Leeds Sports Pose) Dataset
    • FLIC

f:id:yusuke_ujitoko:20170721010839p:plain

f:id:yusuke_ujitoko:20170721010845p:plain

その他

この論文の言うbeliefの意味が良くわからなかった。

DeepPoseHeatmap regressorの方法だと、最初のステージでcropされた領域に部位が存在しない場合、絶対に成功しないが、本研究の手法の場合、cropしないのでこの問題は起きない。

Multi-Resolution Heatmap Regressorによる姿勢推定メモ

関連研究

  • DeepPose (DeepPose論文メモ - 緑茶思考ブログ)
    • Toshev et. al,は"FLIC"や"LSP"のデータセットでSOTA
    • 関節位置を回帰問題として直接解く
    • RGB画像からXY位置座標へのマッピングの学習が不必要に複雑であるため,high-precision regionで結果が良くない.
      • RGB画像入力に対して単一の出力を行う必要があるため,出力の自由度が小さい

Multi-Resolution Heatmap Regressor

Coarse Heat-Map Regression Model

さらに工夫を加えた点として

  • Spatial Dropout
    • 通常のdropoutだと過学習を防げなかった
      • natural imageを入力としており,feature map activationの各ニューロンの関連度が強いため通常のdropoutが上手く行かなかったという説明
      • f:id:yusuke_ujitoko:20170717233425p:plain:w400
      • 右図のf2aとf2bの関連度が強い場合,f2bのactivationが0(dropouted)になってもf2aが残り,意味がない
    • feature map全体を0とするかactiveとするSpatialDropoutを使う
    • f:id:yusuke_ujitoko:20170717233858p:plain:w400

  • Loss
    • 真のヒートマップと予測したヒートマップのMSEとする
    • 真ヒートマップは関節位置(x,y)を中心とする2D Gaussian

Fine Heat-Map Regression Model

  • ネットワークを直列でつなぐときに各stageのパラメータを別とするDeepPoseと異なり,本研究ではパラメータを再利用する.
    • パラメータ数の軽減
    • coarseとfineモデルを両方学習することでregularizationとなる

f:id:yusuke_ujitoko:20170717235205p:plain

  • 関節の推定
    • coarse heat-map modelにおいて,関節位置(x,y)を推定し,
      その関節位置まわりを最初の2つの畳み込み層でcropする
    • fine heat-map modelにおいて,微小位置変位(Δx, Δy)を推定し,
      coarse modelで推定した関節位置(x,y)に加える

  • このcascaded architectureはいくつも繋げても良いが,1つだけでも十分な精度が出た.

問題

  • 人体の関節の階層構造を利用していない
  • coarseモデルの時点でcropされた部分に真の関節が含まれてしまう問題(DeepPoseと同じ問題)

DeepPose論文メモ

関連研究

  • 人体をlocalなパーツが連結したものと見る手法
    • Figure Drawing
    • Pictorial Structures
    • Mixtures of Parts

  • 人体をパーツに分けずholisticに推定する手法
    • DeepPoseはこちら

手法

f:id:yusuke_ujitoko:20170717195026p:plain

  • モデルの構造はAlexNetを流用
    • 入力:画像(220x220)
    • 出力:各関節ごとの位置(2次元)

  • loss
    • 関節ごとの予測位置と真の位置のL2距離の和

  • 上記ネットワークを直列につなぎ多段stage化する。後ろのstageになるほど精密に関節位置を推定していく。(異なるstageのネットワークは異なるパラメータを持つ)
    • 一番目のstageでは、入力画像のうちで全関節の位置を特定する
    • 中間のstageでは各関節ごとに処理が分かれる
      • 各関節ごとに画像cropし高精細化する
      • 一つ前のstageで推定した関節位置と真の関節位置の差分を予測する。

f:id:yusuke_ujitoko:20170717204302p:plain

f:id:yusuke_ujitoko:20170717204310p:plain

  • 制限
    • stageの最初の方で真の位置との乖離が大きいと、予測がうまく行かなそう
    • 1つの画像に対して、関節位置候補が1つのみ

参考

以下の資料は素晴らしいです.
これを読めば論文読む必要はないです.
DeepPose: Human Pose Estimation via Deep Neural Networks

【cs231n】深度画像をもとにCNNで姿勢推定する手法メモ

cs231nの授業レポートを読んだ。 http://cs231n.stanford.edu/reports/2016/pdfs/426_Report.pdf

  • Li 2014のモデルをほぼそのまま使っている

f:id:yusuke_ujitoko:20170717140512p:plain

  • 上記との違う点は
    • 入力が3チャンネルではなく、1チャンネルであること
    • conv2の後の正規化をしないこと
    • 出力は各関節位置

  • 誤差関数の設計
    • 出力の各関節位置のL2距離だけを誤差関数とすると,
      人間の階層的情報を活かしきれてない.
    • 本研究では以下の3つの和を使う
      3つの最適な重みを実験で調べている
      • {L_{d}}:四肢の位置のL2距離
      • {L_{s}}:四肢の長さのL2距離
      • {L_{r}}:関節角度のコサイン類似度