🕺

ブレイクダンスの練習動画をKinetics-400で行動分類したら正しく「breakdancing」判定されるか試してみた

2021/04/13に公開

動画の行動分類に利用できるデータセットKinetics-400にはbreakdancingというクラスが用意されています。論文を確認する限りトレーニング用データの306,245動画のうち948動画が breakdancing に分類される動画のようです。ということで、Kinetics-400がどの程度正確に私の練習動画を breakdancing と判定してくれるか試してみました。

環境

今回利用した環境です

  • OS: Mac OS X 10.15.5
  • Python: 3.8.3
  • GluonCV: 0.10.1.post0
  • mxnet: 1.8.0

環境構築

今回はGluonCV を使って動画の分類に挑戦します。まずはpipenvでGluonCVとMXNetをインストールします。

$ pipenv install gluoncv mxnet

インストールできたらサンプルプログラムをDLして実行してみましょう

$ wget https://cv.gluon.ai/_downloads/195cf73715b35214526b1c53b694625e/demo_i3d_kinetics400.py
$ python demo_i3d_kinetics400.py 

こんな感じで分類結果が表示されたら準備成功です

The input video clip is classified to be
        [abseiling], with probability 0.991.
        [rock_climbing], with probability 0.009.
        [ice_climbing], with probability 0.000.
        [paragliding], with probability 0.000.
        [skydiving], with probability 0.000.

自分の練習動画を分類してみる

先程DLしたサンプルプログラムをちょっとだけ加工して、サンプル動画をDLする部分を自分の練習動画のパスに変更します

# url = 'https://github.com/bryanyzhu/tiny-ucf101/raw/master/abseiling_k400.mp4'
# video_fname = utils.download(url)
video_fname = '/Users/xxxxxxxx/Movies/practive_bboying.mp4'

diffはこんな感じです

$ diff demo_i3d_kinetics400.py demo_i3d_kinetics400_2.py 
43,45c43,44
< # url = 'https://github.com/bryanyzhu/tiny-ucf101/raw/master/abseiling_k400.mp4'
< # video_fname = utils.download(url)
< video_fname = '/Users/xxxxxxxx/Movies/practive_bboying.mp4'
---
> url = 'https://github.com/bryanyzhu/tiny-ucf101/raw/master/abseiling_k400.mp4'
> video_fname = utils.download(url)

準備できたらいくつか練習動画を分類してみましょう。

トーマス

まずはこの辺りから

The input video clip is classified to be
        [tap_dancing], with probability 0.166.
        [breakdancing], with probability 0.114.
        [dancing_ballet], with probability 0.108.
        [robot_dancing], with probability 0.049.
        [jumpstyle_dancing], with probability 0.042.

1番確度が高いのはタップダンスで、ブレイクダンスは2番目でした。

ヘッドスピン

ブレイクダンスを象徴する技といえばやはりヘッドスピンですよね

The input video clip is classified to be
        [juggling_balls], with probability 0.105.
        [cleaning_windows], with probability 0.100.
        [catching_or_throwing_baseball], with probability 0.093.
        [spray_painting], with probability 0.069.
        [contact_juggling], with probability 0.049.

ジャ、ジャグリング...

ステッピン

Kinetics-400のトレーニング用データに縦系ムーブが含まれていることを願いつつ

The input video clip is classified to be
        [climbing_ladder], with probability 0.110.
        [parkour], with probability 0.046.
        [playing_organ], with probability 0.037.
        [moving_furniture], with probability 0.033.
        [cleaning_windows], with probability 0.033.

はしごを登る??

アクロバット

アクロバットも立派なブレイクダンスの要素です。Kinetics-400にはgymnastics_tumblingというラベルも用意されているようですが、2番目ぐらいにbreakdancingが来て欲しいところ

The input video clip is classified to be
        [blasting_sand], with probability 0.129.
        [taking_a_shower], with probability 0.106.
        [bookbinding], with probability 0.052.
        [sailing], with probability 0.051.
        [plastering], with probability 0.041.

砂を吹き付けている??

ということで、今回分類に利用した動画はあまり正確にbreakdancing判定されませんでした。トップロックやフットワークの動画を分類すれば違った結果が出るかもしれませんが、精度の高いbreakdancing判定を実施したければ、Kinetics-400のデータセットをそのまま利用するのではなく、分類対象のスタイルに応じた独自のモデルを構築した方が良さそうです。

参考

Discussion