人体構造の制約を GANでimplicitに教示して姿勢推定するメモ

関連研究

  • 姿勢推定ではDCNN(Deep Convolutional Neural Nets)でheatmapを回帰する手法が一般的
    • しかし、以下の場合では現実ではあり得ない姿勢を出力してしまうことがある
      • 部位のocclusionが大きいとき(以下の画像参照)
      • 背景と部位の類似度が高いとき
    • これを避けるには人体の関節構造についての事前情報が必要。
    • でも人体の幾何的制約をDCNNに入れ込むのは難しい

f:id:yusuke_ujitoko:20170730090950p:plain

Adversarial PoseNet

姿勢推定した結果が「人体として尤もらしいか」をimplicitに学習させるために、GANの枠組みを利用。 通常GANではGeneratorとDiscriminatorが1組ずつだが,この研究ではDiscriminatorが2つある.

  • Generator
    • G: pose generator
      • pose keypointのheatmap(pose heatmap)の生成
      • occlusion heatmapの生成
  • Discriminator
    • P: pose discriminator
      • pose heatmapとocclusion heatmapから姿勢として尤もらしいかを判別する
    • C: confidence discriminator
      • 推定が正しいときにはpose heatmapの値が高い傾向にあることを考慮し,
        Gのpose heatmapの値が大きくなるようにすることが目的

GはG自身で学習可能だが、それだけだと結果は良くない。 PやCの誤差も使ってGを更新する。

PやCは真のheatmapとGの生成したheatmapを区別するように学習する. ただしそれだけではなく,例えばCはGがlow-confidentなheatmapを出力したら"fake"だと分類しやすいようになっている. GはCを欺くよう学習するので,high-confidentなheatmapを出力するようになる.

f:id:yusuke_ujitoko:20170730091150p:plain

以下でG,P,Cをそれぞれ確認する。

G: Multi-Task Generative Network

Gは画像{x}をもとに, pose heatmap {y}とocclusion heatmap {z}を推定する.

Convolutional pose machinesによると,受容野を大きくすることが部位推定に重要であるという. このGでも大きな受容野を利用。

また,顔や手を特定するような局所的な特徴と,体全体を理解するのに必要な全体情報の両方が必要. 各スケールでこれらの情報を捉えるため,encorder-decorderスタイルのアーキテクチャにおいてskip connectionを使用。 stacked hourglassと同様に,各ステージで教師データを与える.

f:id:yusuke_ujitoko:20170730092830p:plain

P: Pose Discriminator

PやCは真のheatmapとGの生成したheatmapを区別するように学習する.
ただそれだけでなく,PはGに対して,人体の関節構造に関する事前情報を与える役割を持つ.

Pの誤差関数は以下で表される.
f:id:yusuke_ujitoko:20170730135244p:plain:w500
この中に{p_{fake}}という項がある。
Gによって生成されたpose heatmapによって関節部位を推定し, その推定した関節位置と真の位置のl2誤差の大きさにより{p_{fake}}は決まる.

f:id:yusuke_ujitoko:20170730134012p:plain:w200

  • その他
    • 誤差関数の設計は従来のGANと同じ.
    • 従来のGANと異なり,encoder-decoderスタイル.

f:id:yusuke_ujitoko:20170730134201p:plain

C: Confidence Discriminator

Cも真のheatmapとGの生成したheatmapを区別するように学習するが, それだけでなくCは,high-confidence predictionをlow-confidence predictionから区別する.

Cの誤差関数は以下で表される. f:id:yusuke_ujitoko:20170730135637p:plain:w500

{c_{fake}}は,Gの生成したheatmapと真のheatmapの類似度で計算される.
f:id:yusuke_ujitoko:20170730133458p:plain:w250
例えばGがlow-confidenceなheatmapを出力したら,{c_{fake}} が 0に近くなる.
GはCを欺くよう学習するので,結果的にGはhigh-confidenceなheatmapを出力するようになる.

学習アルゴリズム

f:id:yusuke_ujitoko:20170730134246p:plain:w500