Pytorchによる動画分類(ECO)

今回は、動画分類を試してみたいと思い、いい資料ないかな〜と探していたところ、良本を見つけました。

それが、

つくりながら学ぶ! PyTorchによる発展ディープラーニング

です!!

この本では、様々な手法を学ぶことができます。
この中に動画分類が記載されていました。

今まで、画像分類、物体検知を実装したことはありますが、動画分類のタスクはやったことがなかったので、すぐにはじめました。

今回は、学習済みモデルをロードするだけで動画データセットを学習したり、ファインチューニングをしたりはしません。これらについてはいずれnoteに書きたいと思います。


モデル

動画を扱うには

・C3D(Convolutional 3D)
・ECO(Efficient Convolutional Network for Online Video           Understanding)

という二つの手法があります。(他にもあるかも)

C3Dは、オプティカルフローのように時間方向の特徴量をデータから学習させる手法です。直感的にわかりやすい記事があったので参考までに。
→    http://wazalabo.com/3dconvolution-residual-network.html

しかし、特徴量を学習させるためには大量のデータが必要で、パラメータも膨大になるので時間がかかりすぎてしまいます。


これに対して、ECOは
まず先に、動画を画像に分解したデータを2次元の畳み込みニューラルネットワークで小さな特徴量データに変換し、それらをC3Dに入力することによって処理するモデルです。

データ

今回使用しているデータは、Kinetics というもので人間のある行動を1つのクラスとして分類しているデータセットです。

学習

ここでは、書きませんが、こちらにGithubが公開されています。

結果

予測第1位:arm wrestling
予測第2位:headbutting

という結果が帰ってきています。


まとめ

今回、初めてPytorchというフレームワークも触ったし、動画分類もやってみたのですが、難しいという印象が強いです。転移学習するにも結合層を指定しないといけないし、何かとめんどくさいことが多かったようにも思います。動画分類自体は、まだ理論的な部分はほとんど理解できていない状態なのでまだなんとも言えません。ただ、リソースがないとGoogle colabのようにGPUが使えたとしても時間がかかりすぎてしまうので、無料で色々試すにはハードルが高そうです。

動画からある物体の速度を推定したいのでこれからは、動画分類のファインチューニングでもいいのですが、セマンティックセグメンテーションを勉強しようかなとも思います。


#機械学習  
#python
#pytorch
#プログラミング

この記事が気に入ったらサポートをしてみませんか?