ブレイクダンスの練習動画をKinetics-400で行動分類したら正しく「breakdancing」判定されるか試してみた
動画の行動分類に利用できるデータセット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