AutoML Video Intelligence(ベータ版) を試してみた画像

行動認識 Activity Recognition(または Action Recognition) が手軽に試せるようになりました！

Google の AI サービスは、様々ありますが、ビデオを入力とするものは２つ用意されています：
https://cloud.google.com/video-intelligence/?hl=JA

* Video Intelligence API
* AutoML Video Intelligence

上の Video Intelligence API に関しては、上記のページからデモが簡単に試せますので、どんなものか雰囲気が掴めます。以下の画像のように、動画中にどんな物体が写っているか教えてくれます。(2019/12/29時点では試せないようです)

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/a9a40382-da0e-9cc0-469d-c653b5fe4fd1.png)

Video Intelligence API では、以下のように、どんな行動かは、ある程度は認識してくれるようですが、
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/12b5f65a-060d-6610-ea3a-971985a650de.png)
既存のデータセットにない特殊な動作を認識させたい場合には、もう一方の AutoML Video Intelligence が役に立ちます。動画中で「どの区間」で「どんな行動」を行っているかを認識してくれるのは変わらないのですが、「どんな行動」かを指定することができるのです。
（ベータ版ですので、日々インターフェースが変更されています。以下の説明とは現状異なっていることをご了承ください。）

AutoML Video Intelligence では、教師データとして、カスタムデータセット（短いビデオクリップとそれが表す行動のラベル）を用意します。それを学習させると、未知のビデオに対し「どの区間」で「どんな行動」をしているかを教えてくれます。

AutoML というぐらいですから、 Google先生がいつも通り、機械学習を自動的にうまい具合にやってくれるわけです。

# 試してみた

基本的に、以下のサイトに従うだけなのですが、システムが常に更新されているようで、説明通りに使えません。
https://cloud.google.com/video-intelligence/automl/docs/quickstart-console?hl=JA

## データセットの作成
まず、[Create Dataset] をクリックした時点で出てくるダイアログがもうすでに違います。前は「動画分類」しかできなかったんですがね。「動画オブジェクトトラッキング」も面白そうですが、今回は「動画分類」を試します。
<img width="703" alt="2019-12-29AutoMLVision-01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/22d20ac7-e87c-422c-7830-09e2f42ca20e.png">

## モデルのトレーニング

あと、説明ではいくつものラベルを読み込んでいるスクショがありますが、デモでは認識できるラベルの数が５つになってます。
<img width="592" alt="2019-12-29AutoMLVision-02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/1faa778a-3cd8-8cae-1226-3b5741f6f5dc.png">

<img width="552" alt="2019-12-29AutoMLVision-03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/59d1ede4-b194-5a02-4357-9ff6bbcbd5de.png">

<img width="590" alt="2019-12-29AutoMLVision-04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/0831c368-49df-7dd3-5686-44bbd1ea03ff.png">


モデルのトレーニングが終わると、メールが届きます。

## 動画を分類する

「動画を分類する」の "アノテーション結果を受け取る Cloud Storage バケット内のディレクトリを選択します。" とさらっと書いてありますが、
説明通り、Result Bucket 欄に my-storage-bucket と入力しても動きません。

そもそも、 Bucket（バケット）ってなんだよ？ってことになるのですが、 Google Cloud Storage というのを自分で作成しないといけません。
しかも、このバケットは、Result Bucket 欄の横の？マークをクリックするとわかるのですが、us-central1リージョン内に作成しないといけません。

バケットの作り方については、例えばここを参考にしてみてください（かならずus-central1リージョンに作ってね！）：
https://thinkit.co.jp/story/2015/03/30/5801

そうすると、認識結果が指定したバケット内に保存されます。

##結果を表示する

以上のサイトの説明では、単体動作のビデオクリップを選んでるだけで面白くないので、学習に利用したレゾリューションが同じビデオクリップを組み合わせた動画を作って認識させてみました。（学習に利用したデータをテストに利用するのは邪道ですけど、適当な動画がすぐ手に入らなかったので。。。）
0-3秒：懸垂(pullup)
3-5秒：ゴルフ(golf)
5-6秒：側転(cartwheel)
7-8秒：乗馬(ride_horse)
9-11秒：ボールキック(ball_kick)


まず、

```csv:concat.csv
gs://[central1で作成したバケット名]/test-data/concat.mp4,0,12
```
を作成し、以下に置きます：
gs://[central1で作成したバケット名]/test-data/concat.csv 
二列目の０と三列目の12 は、一列目で指定する動画の 0秒から12秒までを認識させるという意味と思われます。

[入力 CSV] で、上記の文字列を入力します。

[結果バケット] は、[central1で作成したバケット名]を入力します。

## 認識結果

認識の単位が１秒ごとで荒いので、１秒たってから、その動作カテゴリが認識された形となっています。

8月に試した結果：
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/3790b7d9-3af8-240a-68e6-8b30a6f0f77b.png)
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/df8878d4-7a6a-d923-d984-c320d4210f52.png)
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/d3d83587-c681-544f-d63d-5b57f41b1978.png)
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/ba44d33f-777d-f92e-4a8f-6b634dcefc53.png)
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/b706c4ce-3136-69e7-8bd3-a11d44117ed4.png)

以上の画面では、信頼度を 0.3 に設定して表示させています。初期の認識画面では、信頼度が0.5になっているのですが、最後の画像をみてもわかるように、明らかに kick_ball のシーンになっているのにもかかわらず、ride_horse の信頼度 0.684 より　kick_ball が 0.311 と低くなってバーが表示されないからです。

12月に試した結果：
<img width="926" alt="2019-12-29AutoMLVision-05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/e030e704-c96e-9135-b083-34a2c1be6f96.png">
<img width="928" alt="2019-12-29AutoMLVision-06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/16ac6b3a-bb98-271e-d804-f34e23bcf5ba.png">
<img width="923" alt="2019-12-29AutoMLVision-07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/7a3144c7-921c-924a-7c96-cb0011a7692c.png">
<img width="928" alt="2019-12-29AutoMLVision-08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/147bede7-02d0-dad1-15f5-205a22ed2bbb.png">
<img width="924" alt="2019-12-29AutoMLVision-09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/3c76cf6e-f4ce-3c3c-489a-a7ae4fdcdcc2.png">
<img width="926" alt="2019-12-29AutoMLVision-19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60968/e71688ba-1698-cd9c-0081-30f241ffd2e8.png">

この見せ方も、複数の信頼度曲線で表すとわかりやすいのになぁと思います。（稜線が認識結果になりますよね）

## 料金
結構、計算パワーを使う処理ですので、値段が気になるところです。
前回８月に利用した際は、こんな値段でしたが、トライアルのクレジットで無料になりました：

|内   容      |時   間|金    額|
|:------------------------|----------------------:|:---------------------:|
| Cloud AutoML AutoML Video Classification Model Training:|42.109   時間| ￥13,450 [通貨換算: USD から JPY（レート 108.64 を使用）]|

~~今回は、だいたい２時間ぐらいの学習でしたので、640円ぐらいの請求になるでしょう。１日経たないと料金がわからないので、わかったら報告します。~~

ちなみに、かかった費用ですが、月ごとの請求書をみたら、AutoML Video Classification Model Training に 10.527 時間　かかっており、3,382円の請求でしたが、フリートライアルで、無料でした。

いくらかかるか事前に予想できないのが、ちょっと怖いです。どこかに書いてあるんでしょうけど。
https://cloud.google.com/free/docs/gcp-free-tier


# おわりに

今回は学習データをテストデータに使うという荒技を使っていますので、実際に実用になるかはわかりませんが、スポーツ映像を解析する上で、ビデオ中でどんな行動をとっているかわかると、手間が省けますよね。サッカーだと、ゴールシーンだけざっと見るとかできそうです。

行動認識についての情報は、Qiitaでは、ココ：
https://qiita.com/tags/%E8%A1%8C%E5%8B%95%E8%AA%8D%E8%AD%98

海外のサーベイは、いいかわからないけど、とりあえずココ：
http://blog.qure.ai/notes/deep-learning-for-videos-action-recognition-review

Activity Net コンテスト:
http://activity-net.org/challenges/2019/challenge.html