ほろ酔い開発日誌

AI企業のエンジニアのブログです。機械学習、Web開発の技術的お話、ビジネスチックなお話、日常のお役立ち情報など雑多な内容でお送りします。

詳細な全身の2次元特徴点を推定するWhole-Body Pose Estimationの論文のご紹介

f:id:seishin55:20200801153959j:plain

はじめに

今回はECCV'20に採録された2D Pose Estimationの論文をご紹介します。 Pose Estimationのデータセットとしてよく使われるCOCOデータセットは身体の17点の2次元特徴点の位置を推定することが一般的ですが、今回の論文ではCOCOの画像に対して、顔・両手・両足に詳細なアノテーションを追加することでより詳細な2次元特徴点の推定を可能にしました。

また、そのデータセットで実際にPose Estimationを行い、既存の手法に対して大幅に精度向上したモデルであるZoomNetを提案しました。

[2007.11858] Whole-Body Human Pose Estimation in the Wild

著者はSenseTimeの方々が中心で、ECCV'20 Posterに採録、2020/07/23 on arXivとなっています。

既存の2次元特徴点データセット

今回追加された顔・両手・両足のアノテーションの概念自体は今回の論文が新規に提案したものではありません。ただし、これまでのデータセットではそれぞれのパーツごとに独立にデータセットが構築され、研究されてきました。

f:id:seishin55:20200801142101p:plain

既存では以下のようなデータセットがあります。以下のように、パーツごとに異なるタスクとして扱われ、それぞれでデータセットが構築されてきました。

  • Pose Estimation: COCO (17点の身体特徴点)、Body25 (COCOに足のアノテーションを付与)
  • Hand Keypoint Estimation: Panoptic (Lab環境での撮影)、Hand10K(in-the-wild環境だが数は少なめ)
  • Face Keypoint Estimation: 300W (68点特徴点)
  • DensePose: 3D表現に対応するアノテーション。関節点情報が不足したり、顔・手の特徴点が少なく、今回はスコープ外。

補足) Pose Estimation、Keypoint Estimationなど名前が揺れますが、タスクとしては同じで特徴点を推定します。また、特徴点=keypoint=キーポイントです。

既存のWhole-Body Pose Estimation

今回の論文は上記の特徴点を一度に推定するモデルを作ろうという目的なのですが、既存の手法でも同様のモチベーションのものが存在します。

OpenPose [Cao CVPR'17, Simon CVPR'17]

OpenPose自体は姿勢推定の有名なモデルの名前です。このOpenPoseをベースに複数のネットワークを使うことで全身の特徴点を推定する取り組みは既にあるようです。手順としては、

  1. 身体と足のキーポイントの推定と顔の位置の検出を行うネットワーク
  2. 顔と手の推定を行うネットワーク

の2段構えで複数のネットワークを組み合わせて推論を行います。複数のネットワークをそれぞれ独立に学習する必要があるため、学習が面倒、実行速度・計算量が増加してしまうといった問題点がありました。

SN [Jidalgo CVPR'19]

全身の特徴点を推定するという今回の論文と共通のモチベーションで設計を行っているのがSNです。ただし、前述のように全ての特徴点アノテーションが含まれるものは既存のデータセットではありません。そこで、この論文では複数のデータセットを使い、学習時のサンプリング方法を工夫しています。

以下の記事で解説されているので興味があれば御覧ください。

engineer.dena.com

2D Pose Estimationのパラダイム

ここで、少し一般的な2D Pose Estimationについて説明させてください。2D Pose Estimationに触れたことがある方であれば既にご存知かと思いますが、2D Pose EstimationにはBottom-Up アプローチTop-Down アプローチの2つのアプローチに分かれます。

以前に、HRNet(今回の記事でも登場します)をBottom-Up型のアプローチに変えたHigherHRNetの論文を紹介しましたが、2D Pose Estimationを語る上ではこの考え方が絡んできます。今回も例外ではありません。

blog.seishin55.com

Bottom-Upアプローチ

  1. まず、画像中の特徴点を全て検出する
  2. その特徴点を人物ごとにグルーピングする

f:id:seishin55:20200801144627p:plain

この手法では人物に関係なく特徴点の推論を行うため、人物が増えても推論速度があまり変わらないという特徴があります。

Top-Downアプローチ

  1. まず人物のbbox (bounding box; 人を囲む長方形)を検出する
  2. そのbboxをbboxごとにリサイズ、クロップして特徴点の検出を行う

f:id:seishin55:20200801144815p:plain

この手法では人物のサイズを揃えることができるので精度が高く出しやすいという特徴があります。精度のSOTA論文はこのアプローチから出ます。

Whole-Body Pose EstimationのTop-Down/Bottom-Up

それでは、Whole-Body Pose Estimationの場合を考えてみましょう。提案手法ではステップとしては以下のようなステップを踏みます。

f:id:seishin55:20200801145152p:plain

まず、画像中の人物を切り出します。これは一般的なTop-Downなアプローチと見ることができます。既存手法のSNモデルもこの部分は同じです。Whole-Body Pose Estimationではこの後の処理にもTop-Down/Bottom-Upの選択があります。それは顔・両手を切り出してから推論を行うか(Top-Down的)、身体・足と同時に推論を行うか(Bottom-Up的)です。既存手法のSNは後者のアプローチ、今回提案されるZoomNetは前者のアプローチを取ります。

このパーツを切り出すか否かの選択は、一般的なPose Estimationの議論と似ているように思います。Top-Downのアプローチが精度の高いモデルになるのは、画像中に人物のスケールを一定サイズに揃えることができるからだと言われています。顔や手のスケールと身体のスケールは大きく異なるので、一度に推論しようとするとそのスケールの違いが精度に悪影響を与えると考えられます。今回の手法は2段階のTop-Downのアプローチで解いているとみると理解しやすいかと思います。

COCO-WholeBody Dataset

それでは、ここで今回作成されたデータセットであるCOCO-WholeBodyについて説明します。以下のようなデータ構成になります。

  • bbox (身体・顔・左手・右手)の4つのbox
  • 特徴点 (body: 17、feet: 6、face: 68、hands: 42)の合計133点

f:id:seishin55:20200801150211p:plain

また、以下は既存のデータセットとの比較です。今回作成されたものは図の一番下ですが、全てのアノテーションが含まれ、数も多いデータセットであるということが分かります。

f:id:seishin55:20200801150429p:plain

アノテーションのステップ

今回の論文はアノテーションを行った論文なのでそのやり方についても説明があります。以下がアノテーションのステップです。

  1. 人物ごとにface/left-hand/right-handのbboxとvalid/invalidのラベルをアノテーション
  2. 複数のアノテーターグループによる厳しい品質チェック
  3. Validラベルのbboxにキーポイントのアノテーション HRNetv2ベースの学習済みモデルで推論した結果を利用し、その結果を修正するようにしてアノテーション
  4. 結果的に、handが約28%、faceが約6%だけが修正対象。この節約によって約89%の時間を節約できたと推察

注目するべきところは、HRNetで予め推論を行い、それを修正するようにしてアノテーションを行っているところで、これによって大幅に時間を節約できたのは参考になります。

ZoomNet

以下の図がZoomNetの全体像を表しています。既存のFaster-RCNNで人物を検出し、その人物のキーポイントを推論しています。以下のモジュールが含まれます。

  • FeatureNet: 2つの畳み込み層とbottleneck blockから成る。 (入力サイズ: 384x288 -> F1: 192x144 -> F2: 96x72)
  • BodyNet: body/footのキーポイント予測とface/handのbbox予測を行う
  • HandHead/FaceHead: BodyNetから得られるface/handのbbox中のキーポイントを予測する

f:id:seishin55:20200801151304p:plain

BodyNetはCornerNet[Law+ ECCV’18]にインスパイアされた設計を行っているとのことですが、少し違う印象があります。bbox (face/left-hand/right-hand)をコーナーの4点と中心点として表し、そのbboxの各点とキーポイントをヒートマップとして予測します。BodyNetの出力は38チャンネル (bbox 5点x3種=15, keypoint 17(body)+6(foot)=23) でbackboneはHRNet-W32を使います。

HandHead/FaceHeadはBodyNetのbboxの出力を使ってF1・F2に対してROI Alignを行い、その特徴量を入力に特徴点の推論をします。backboneはHRNet-18を使います。

補足) HRNetは現在の2D Pose Estimationの手法の中で最も精度の高いモデルの1つです。Top-Downの手法で、CVPR'20ではBottom-Up手法のHigherHRNetも提案されています。

blog.seishin55.com

評価

以下が定量評価の結果です。先程既存手法として出したOpnePoseとSNの他に、Bottom-Up手法のPAFとAE、Top-Down手法のHRNetも比較手法として追加しています。"-body"がつくものは17点の元々のCOCOのキーポイントだけで学させたものを表します。

f:id:seishin55:20200801152032p:plain

まずは、"-body"なしのものだけで比較した場合、ZoomNetが圧勝していることが分かります。また、"-body"がついたものとついていないものを比較すると、bodyの項目で精度は"-body"がついたもののほうが総じて高いです。これは、身体17点以外の特徴点をまとめて推論すると身体17点の推論に悪影響があるということを示しています。

以下は、定性比較です。提案手法の検出がよいということを視覚的に示しています。

f:id:seishin55:20200801152457p:plain

また、その他いくつか分析を加えていたので、それらを箇条書きで以下にまとめます。

  • 顔/手の特徴点の既存データセットとの組み合わせ
    • 顔 with 300Wデータセット -> 事前学習に有用
    • 手 with Panoptic -> 事前学習に有用
  • 顔/手のbboxの精度の影響
    • 顔/手のbboxを推論して使っているが、これを正解データで変えて実験すると大幅に精度向上
  • 人物のスケールの影響
    • Bottom-Upの手法は小さい人物の精度が大きく落ちる (つまり、スケールの違いに対応しきれていない)
  • 顔の特徴点推定の特徴
    • 画像のぼやけ度の影響は大きい (はっきりしている画像は簡単に予測できるのに、ぼやけが強くなると全然予測できていない)
    • 顔の向きによる精度差はあまり大きくない
  • 手の特徴点推定の特徴
    • 握りこぶしの手の形が比較的推論しやすい

おわりに

今回提案されたアノテーションは公開されています。 このようなリッチなデータセットが公開されて非常にありがたいなあと感じます。

github.com

今回提案されたモデルのZoomNet自体はまだ改良の余地があるというか、色々できることもありそうで、楽しみな印象があります。

今後も2Dに限らず、3Dも含めてどんどんデータセットが公開されると嬉しいと思います。