KAPAOによる姿勢推定を試してみる

はじめに

姿勢推定について最近の手法を調べていたところ、KAPAOという物を見つけて気になったので、簡単に調査・動作確認をしてみました。


KAPAOについて

  • KAPAOはKeypoints and Poses as Objectsの略
  • タスク設定としては一般的な2D Pose Estimationであり、画像中の人物の主要な関節点の2次元座標を推定する
  • 分類としては"single-stage"の手法

    「人物検知」→「各人物の姿勢推定」という2段階の推論ではなく、1段階で姿勢推定まで行う

  • モデルの構造は以下(論文中のFig. 2から引用)
    物体検出用のモデルを拡張する形で実現されている

 

KAPAOは姿勢推定にヒートマップを使っていないのが大きな特徴です。これは論文中でも繰り返し主張されています。

(一般的に姿勢推定ではヒートマップを使った手法が多い。有名なOpenPoseもそう。)

 

計算コストの高いヒートマップを使わないことで、処理時間(forward pass + 後処理)の短縮を実現したと述べられています。
実際、論文中のTable 1を見るとヒートマップを用いる既存手法と比べて速度(特に後処理)が大きく改善しています。


動作確認

公式の実装と学習済みモデルを用いて推論処理を試してみました。

 

静止画での推論

サンプル画像を処理するコマンド例

python demos/image.py --pose --bbox

※ --faceをつけると顔パーツのkeypointも描画される
※ --kp-bboxをつけると、検知したkeypoint(膝、ひじ等)ごとにbounding boxが描画される


動画での推論

サンプル動画で推論実行し、結果をgifに保存するコマンド例

python demos/video.py --yt-id 2DiQUX11YaY --tag 136 --imgsz 1280 --color 255 0 255 --start 188 --end 193 --gif

 

実際に処理した結果は以下の通りです。手元のGPU環境(GeForce RTX 3060Ti)で45FPS程度で動作しました。

 


サンプル以外の動画でも試してみましたが、人が2人だけ映っているシーンでは60FPS以上出ていました。姿勢推定の精度についても、人物の服装や背景によらずかなり安定している印象でした。


こちらを見る限り、ONNXやTensorRTへの変換は公式では検討されていないようですが、TensorRTに持っていければさらに高速に動作させられるかもしれません。

 

今回の記事は以上です。


参考

・KAPAO論文

Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation

・公式実装

https://github.com/wmcnally/kapao