こしあん
2022-06-25

3DのポーズやUVマップのとれるトラッキングPHALPを試してみた


Pocket
LINEで送る
Delicious にシェア

908{icon} {views}


3Dの位置、外観、姿勢といったパラメーターは3Dモデルをレンダリングする際には必須です。CVPR2022にあった「PHALP」が、それらのパラメーターを推定しつつ、トラッキングしてくれ、個人的に面白そうだったので動かしてみました。

はじめに

CVPR2022のBest Paperリスト見てたら面白い論文があったので試してみました。ファイナリストの候補の「Tracking People by Predicting 3D Appearance, Location & Pose」という論文です。論文の内容については今は割愛します。

通常トラッキングというと、フレーム単位の物体検出を時系列でつなげたもので、2DのBounding BoxとIDが出てくるだけなのですが、PHALPはポーズやUVマップといった3Dオブジェクトを扱うのに必須のパラメーターが一緒に出てくるトラッキングです。サンプル動画を見るのが早いでしょう。

公式GitHubより。3Dモデルでレンダリングしてトラッキングの可視化をしています。PHALPはこのレンダリングに必要な、顔の向きやUVの推定もやっています。

これは顔の部分だけレンダリングしたもので、全身もレンダリングできます。

フォークしてみる

このデモプログラムは若干使いにくい部分があったので、以下の点を変更しました

  • リソースファイルをGoogle DriveからGitHubのReleaseに変える
    • Google Driveからのダウンロードは帯域制限なのか頻繁にエラーを出すため
  • YouTubeのファイルをダウンロードして推論していたが、オフラインのファイルに変える
  • requirements.txtを追加

変更したものがこちらです。

https://github.com/koshian2/PHALP

こちらを動かしていきます。

動作環境想定

  • ColabのGPUインスタンス

(3Dの推定しているだけに結構重たいです)

コードは公式のColabデモを参考にしています

コード

リポジトリをCloneします

# Clone the main repo
PHALP_ROOT="PHALP"
! git clone https://github.com/koshian2/PHALP.git $PHALP_ROOT
%cd PHALP

前提ライブラリをインストールします。結構いっぱいあるため時間かかります。

# Install dependencies 
!pip install -r requirements.txt

ランタイムの再起動が必要になります(RESTART RUNTIMEボタンでOK)。カレントディレクトリをPHALPに移動します。

%cd PHALP

判定対象ファイルが「PHALP」フォルダの直下にあるとします。判定対象ファイル名が「pexels-grace-wu-6022014.mp4」だったとします。使っている動画はこちらの記事と同じです。

実行します。

!python eval_onefile.py \
--track_dataset      "file" \
--storage_folder     "Videos_v1" \
--video_path        "pexels-grace-wu-6022014.mp4" \
--predict            "TPL" \
--distance_type      "EQ_010" \
--encode_type        "4c" \
--all_videos         True \
--track_history      7 \
--past_lookback      1 \
--max_age_track      50 \
--n_init             5 \
--low_th_c           0.8 \
--alpha              0.1 \
--hungarian_th       100 \
--render_type        "HUMAN_FULL_FAST" \
--render             True \
--res                256 \
--render_up_scale    2 \
--verbose            False \
--overwrite          True \
--use_gt             False \
--batch_id           -1 \
--detection_type     "mask" \
--verbose            True

しばらくするとoutフォルダ直下に生成されます。

体感としてはGPUで2FPS前後ですね。3Dの推論が明らかに重そうなので、仕方ないです。リアルタイムは諦めたほうがいいでしょう。

結果

人が塗りつぶされたものはSegmentationモデルの結果ではなく、3Dのパラメーターを推定して、後から人のモデルをレンダリングしたものです。

ツイッターに上げたら「かまいたちの夜みたい」「トリップしてる」等好評でした。

トラッキングの性能自体はいいのか?

ぱっと見、トラッキングの性能は良さそうに見えます。ただ純粋にトラッキングの性能がほしい場合、前述のByteTrackとどっちが良いのか気になったので調べてみました。

ByteTrackの論文からです。バックボーンはYOLOX-Xを使っているとのことでした。

一方のPHALPの性能です。論文からです。2Dのトラッキングと3Dのトラッキングでは問題設定が違うので、純粋には比較7できないかもしれません。

PHALPのコードを見ていたらDeepSortを使っていたので、トラッキングのモデルに関してはもしかしら一世代前のものかもしれません。ただやっていることが全く違うので単純に比較できるものではないと思います。

あくまで論文に書かれた性能を比較するなら、

  • 扱っているデータセットが違うから何とも言えない
  • ByteTrackのほうがトラッキング自体の性能はよさそう
  • ただ、ByteTrackのバックボーンがYOLOX-Xというとても大きなモデルなので、実用的なバックボーンサイズを選択すると一定の性能低下は見込んでおくべき

純粋にトラッキングだけほしい場合はByteTrackでやったほうがいいかもしれません。ただ、PHALPは明らかに楽しそうなことができそうなので、今後の活用法を模索していきたいです。

PHALPトラッキングにUVやポーズの特徴を取ってマッチングしている

PHALPを見て「推論遅いな、ならUVや姿勢の推定切ったらどうなんだろう?」と試してみましたが、トラッキングの部分で

'appe'
Traceback (most recent call last):
  File "eval_onefile_simple.py", line 141, in test_tracker
    tracker.update(detections, t_, frame_name, 0)
  File "/content/PHALP/deep_sort_/tracker.py", line 88, in update
    self._initiate_track(detections[detection_idx], detection_idx)
  File "/content/PHALP/deep_sort_/tracker.py", line 153, in _initiate_track
    dims=[self.A_dim, self.P_dim, self.L_dim])
  File "/content/PHALP/deep_sort_/track.py", line 52, in __init__
    self.track_data['prediction']['appe'] = deque([detection_data['appe']], maxlen=self.opt.n_init+1)
KeyError: 'appe'

に遭遇しました。この理由はトラッカーの部分でAppe(外観)の特徴を使っているため、その推論を切って、端折らせようとするとエラーになるということです。当該のコードを見ると、「外観、ポーズ、UVマップ」といった特徴も使用してマッチングしていました。ByteTrackよりもマッチングに使っている特徴が多いので、もしかしたらByteTrackよりもいいトラッキングができているかもしれません。

ByteTrackと同じ方法で比較

少し面倒でしたが、YOLOX+ByteTrackと同じ方法で比較してみます。

最初に白いジャンパーの人が全面にオクルージョンしてきますが、オクルージョンの前後である程度IDが保持されているのが確認できます。動画編集ソフトのタイムラインは以下の通りです。

明らかにYOLOX+ByteTrackよりまとまりがいいです。ちなみにByteTrackの場合は以下の通りです。

ByteTrackの場合

もしかするとPHALPのほうが、3Dの外観やポーズをマッチングの特徴に使っている結果、オクルージョンに対してロバストになっているのかもしれません。

Pocket
Delicious にシェア



Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です