[Survey]Large-scale Video Classification with Convolutional Neural Networks


スポーツ動画認識に関する[論文](http://vision.stanford.edu/pdf/karpathy14.pdf)

この論文の流れは、以下の通りです。
**１． Convolutional Neural Networkは様々な問題、特に静止画、に適応されて成果を出してきた**

**2. 動画のClassificationに目を向けた時に、はたしてCNNの構造のままでいいのか？検討してみよう。**

**3. 動画のClassification用の大規模なDatasetの不足。自分たちでDataSetを作った。**

**4. 作成したデータ・セットに対して、CNNを用いた３つの異なる構造のNetworkで評価を行いました。転移学習も少々**

# １． Convolutional Neural Networkは様々な問題、特に静止画、に適応されて成果を出してきた

**適応されている領域：**　Image Recognition、Segmentation、Detection、Retrieval

これらの結果は、数１０００万のParameterを持つネットワークと学習を支える大規模なデータセットによってもたらされたものです。


# 2. 動画のClassificationに目を向けた時に、はたしてCNNの構造のままでいいのか？検討してみよう。

・静止画で高い性能を出してきたCNNをそのまま動画に適応してよいのか？
・動画なので複数フレームを処理しようとすると、学習に静止画以上に時間がかかるという問題がある

# 3. 動画のClassificationの大規模なDatasetの不足。自分たちでDataSetを作った。
大規模なデータ・セットはCNNの学習に必要だけど、動画のDatasetは集めるのも正解データを作成するのも大変だから、十分なものがなかった
**Sports-1M Dataset：**
1 million のSport動画をYoutubeから集めて、487のClassに分類した
正解データは動画についているText Metadataから自動で作成した。そのせいで正解データの質があまりよくない。
 正解データの間違いの原因
　・tag prediction algorithmのミス、または、tagが間違っている
　・soccerのtagが付いているけど、soccerのplayシーンが無い動画

# 4. 作成したデータ・セットに対して、CNNを用いた３つの異なる構造のNetworkで評価を行いました。転移学習も少々

## Time Information Fusion
![範囲を選択_055.png](https://qiita-image-store.s3.amazonaws.com/0/100523/1e82a33d-b2f7-6478-8387-fc02abd9d985.png)

###　Single Frame
ベースとなるSingle Frameの構造

![範囲を選択_058.png](https://qiita-image-store.s3.amazonaws.com/0/100523/2df3cec7-71f3-5d6f-ead2-a3e2b8f606f3.png)


Input Size: 170x170x3

C(d,f,s)
d ... # of filters
f ... spatial size of filter
s ... stride

**Arichitecture:**
C(96, 11, 3)-N-P-C(256, 5, 1)-N-P-C(384, 3, 1)-C(384, 3, 1)-C(256, 3, 1)-P-FC(4096)-FC(4096)

下記を見るとわかりやすい。
ただし下の図はMultiresolutionを説明する図なので、細かいことは気にしてはいけない。
Red...C, Green...N, Blue...Pを表している
![範囲を選択_056.png](https://qiita-image-store.s3.amazonaws.com/0/100523/ca9e2f56-130b-d951-0fb0-22ff2ce262a0.png)


### Early Fusion
Single FrameのFirst layerのConvolutionを１１ｘ１１ｘ３ｘTに拡張したもの。
TはFrame数で、１０を使用

![範囲を選択_057.png](https://qiita-image-store.s3.amazonaws.com/0/100523/c255c576-408c-6cdb-5eb5-1c1b48e923b0.png)


### Late Fusion
15Frameの最初と最後のフレームを入力とした２つのC(256,3,1)までのCNNを最後Fully Connected Layerで結合したもの
![範囲を選択_059.png](https://qiita-image-store.s3.amazonaws.com/0/100523/33a5ea02-439c-2b0d-f1a7-18614da33567.png)

### Slow Fusion
Early FusionとLate Fusionの中間

![範囲を選択_060.png](https://qiita-image-store.s3.amazonaws.com/0/100523/b1246a13-a074-40ce-4ae4-c39985420668.png)

入力Frame数は、１０Frame

First Convolutional Layerはそれぞれ４Frameを入力とする

![範囲を選択_061.png](https://qiita-image-store.s3.amazonaws.com/0/100523/fd863749-3f89-23b6-2d40-3e998acccea2.png)

Second Convolutional Layerは２Frameを入力とする

![範囲を選択_062.png](https://qiita-image-store.s3.amazonaws.com/0/100523/da963f42-27f8-fc7f-aa64-9b4691ddaad9.png)

Third Convolutional Layerも２Frameを入力とする
![範囲を選択_063.png](https://qiita-image-store.s3.amazonaws.com/0/100523/0abec6e7-26e4-52eb-41b7-e325a9d754a3.png)

## Multiresolution CNNs
速いGPUを使っても学習に数週間かかるので、性能を犠牲にしないで、学習のスピードアップをする必要ある。

方向性としては、Layer数と各LayerのNeuronの数を減らす

やったことは以下の通り
・入力の画像サイズを８９ｘ８９にした。（１７８ｘ１７８がもともとのサイズ）
・Low Resolution用（Context stream)とHigh Resolution用fovea stream)のMultiresolution CNNにした
・Low Resolutionの入力は１７８ｘ１７８の入力をDownsamplingしたもの
・High Resolutionの入力は、１７８ｘ１７８の中心８９ｘ８９を切り出したもの

## Learning
・minibatch size 32
・momentum 0.9
・weight decay 0.0005
・learning rate 0.0001
・data augmentation and preprocessing
 動画の中心を切り出して、２００ｘ２００にResizeして、１７０ｘ１７０にRandom Samplingして、５０％の確率でHorizontal Flipping、最後１１７を引く（１１７は全動画の平均値）

## Experiments
![範囲を選択_064.png](https://qiita-image-store.s3.amazonaws.com/0/100523/05b11aff-19e0-6900-f619-6c013d186a6b.png)

3つのArchitectureの中ではSlow Fusionが一番性能がよい

＃＃＃動きを使った効果
![範囲を選択_065.png](https://qiita-image-store.s3.amazonaws.com/0/100523/0925afc9-3e01-907c-d665-3462c0a6464a.png)

Single Frame（上）とSlow Fusion（下）の比較
動きを使うと左３つのシーンでは正しく分類できている。ただしカメラモーションがあるとうまく分類できない（一番右）

### Transfer Learning

Sports-1M datasetで学習した結果をUCF-101で評価した結果。
Fine Tuningとしていくつかのパターンを実施
・Fine-tune top layer: 最終Layerだけ再学習
・Fine-tune top 3 layers: 最終3Layersだけ再学習
・Fine-tune all layers: 全部のLayerを再学習

![範囲を選択_066.png](https://qiita-image-store.s3.amazonaws.com/0/100523/124bd1d1-61c2-ecb3-61dd-b89375288a9e.png)

・Fine-tune top layerは、おそらくHigh Level FeatureがSportに特化していたためベストのPerformanceではなかった
・Fine-tune all layersは、Overfittingのためかも
・Fine-tune top 3 layersが一番バランスがよくBestなPerformanceになった

**動画データの内容ごとに比較**
![範囲を選択_067.png](https://qiita-image-store.s3.amazonaws.com/0/100523/92573e46-cea8-1089-715b-528d7461340d.png)

Sport以外のデータでは、より多くの層を再学習した方が性能がよい。
逆にSportのデータでは、最終層だけ再学習した方が性能がよい。