はじめに
姿勢推定について最近の手法を調べていたところ、KAPAOという物を見つけて気になったので、簡単に調査・動作確認をしてみました。
KAPAOについて
- KAPAOはKeypoints and Poses as Objectsの略
- タスク設定としては一般的な2D Pose Estimationであり、画像中の人物の主要な関節点の2次元座標を推定する
-
分類としては"single-stage"の手法
「人物検知」→「各人物の姿勢推定」という2段階の推論ではなく、1段階で姿勢推定まで行う
- モデルの構造は以下(論文中のFig. 2から引用)
物体検出用のモデルを拡張する形で実現されている
KAPAOは姿勢推定にヒートマップを使っていないのが大きな特徴です。これは論文中でも繰り返し主張されています。
(一般的に姿勢推定ではヒートマップを使った手法が多い。有名なOpenPoseもそう。)
計算コストの高いヒートマップを使わないことで、処理時間(forward pass + 後処理)の短縮を実現したと述べられています。
実際、論文中のTable 1を見るとヒートマップを用いる既存手法と比べて速度(特に後処理)が大きく改善しています。
動作確認
公式の実装と学習済みモデルを用いて推論処理を試してみました。
静止画での推論
サンプル画像を処理するコマンド例
※ --faceをつけると顔パーツのkeypointも描画される
※ --kp-bboxをつけると、検知したkeypoint(膝、ひじ等)ごとにbounding boxが描画される
動画での推論
サンプル動画で推論実行し、結果をgifに保存するコマンド例
実際に処理した結果は以下の通りです。手元のGPU環境(GeForce RTX 3060Ti)で45FPS程度で動作しました。
サンプル以外の動画でも試してみましたが、人が2人だけ映っているシーンでは60FPS以上出ていました。姿勢推定の精度についても、人物の服装や背景によらずかなり安定している印象でした。
※こちらを見る限り、ONNXやTensorRTへの変換は公式では検討されていないようですが、TensorRTに持っていければさらに高速に動作させられるかもしれません。
今回の記事は以上です。
参考
・KAPAO論文
・公式実装
https://github.com/wmcnally/kapao