競馬写真を使ってAIを試す(Microsoft Custom Vision)




競馬とテクノロジーを考えてみる

一応IT関連にいますので、いくつかこの手の話題を考えてみます。
(競馬予想とかとは一切関係ないので、興味ない人は無視した方がいいです。。。)

ついに競馬で書くネタも無いので(阪神JFの回顧は途中で挫折中)、競馬ブログとしてはかなり異色な内容です。

目的は色々な機能(API)使って競馬関連のボットとか何か作りたいなと思っています。
そして写真が大量にあるのを利用しない手はありません。

先日Tensorflow使ってpythonで組んでやってみたものの、バラとかひまわりとかは割と簡単に判別しても、競馬写真はイマイチどころか全く精度が出なかったので、自分で組むのは一旦別のものにして、サービスとして提供しているものを使ってみましょう。

しょっぱなはこんな感じのイメージ。LINE botでも作る下準備です。

  1. スマートフォンで写真を撮る
  2. 写真をAIで解析し、結果を返す
  3. botでそれに基づく回答を返す

こんな感じです。最終的には。
まずは2番。

使うのはMicrosoftの提供しているAzure Custom Visionにします。
https://www.customvision.ai/

 

Azure Custom Visionを使おう

①トップページに行き、サインインをします。
メールアドレスなどを求められますので、沿ってきちんと入力をしてください。

②プロジェクトを作ります。

「Name」は何でもいいでしょう。
「Project Types」は物体認識(Object Detection)ではないので、Classificationを選択。
「Classification Types」は複数タグを使えるように一応は「Multilabel」だけど、不要でした。
「Domains」は馬(horse)とかの選択肢はないので、「General」で。

③写真をアップロードします。

左上のAdd Imageを押してファイルを選択します。

で、写真にタグをくっつけてどんどんアップロードします。
事前にファイルを分けておいた方が楽です。複数枚まとめてアップロードできるので、まとめてドカンが良いでしょう。
ただ、1枚のサイズの最大が6MBまでなので、一眼レフで撮った写真などは少し小さくしておく必要があります。

なお、タグは以下の通りとしました。

  • corner(コーナー)
  • paddock(パドック)
  • straight(直線)
  • warm up(返し馬)
  • winning run(ウイニングラン)

学習は1つのタグについて50枚を適当に選び、それを学習させています。
例えば「パドック」タグはこんな感じになります。

④トレーニングをして結果を確認

右上のボタンをぽちっと押すだけ。超簡単です。

枚数にもよるのでしょうが、250枚程度なら1分位で終わります。
結果は以下の通りでした。

Precisionは「適合率」です。
下の表だと「paddok」は100.0%となっています。

これは、パドック写真50枚は、学習後50枚正しく選択出来ており、誤りは1つも無かったということです。
パドック写真は見分けが100%ついている、ということになります。

一方で「warm up」は59.2%に留まっています。
これは、返し馬は50枚写真がある内、学習して再テストをしたら60点位の正解率だった、というイメージですね。
やはりレースとの見分けがつきにくいという弱点があります。

Recallは「再現率」です。
こちらも「paddok」は100%。

今回50枚の写真で学習しましたが、1枚も「これはパドックではない」と判断したものは無かった、ということになります。
正しく見つけることができたものの割合を示しています。

今回のモデルでは、パドックはほぼ満点の性能を叩き出しており、ウイニングランと返し馬はなかなか苦戦している、という結果です。
ま、写真の特徴がほんとうに似ているので、ほとんど分からないのも無理はありません。
ただ、それでも50枚程度で十分な精度が出ています。

作ったモデルでテストをしてみよう

出来上がったモデルを使ってテストをしてみます。結果がどうなるかが楽しみです。
右上に「Quick Test」とあるので、それを使ってください。

Browse local filesから1枚ずつ選択しましょう。
すると結果が出てきます。

これはパドックの確率99%。正解。トゥザフロンティアのパドックです。

次に一般的なものから。今年のダービーの直線です。

これも直線である確率が99.8%ときちんと見極められています。

徐々に変わり種になります。

今年の天皇賞秋の一コマであるダンビュライトの放馬についてはというと。。。

思ったよりしっかり把握していて、返し馬75%と高い数字です。素晴らしい。
ウイニングランが56.5%の可能性を示しているのがなんとも言えません。そりゃ判断に困りますね。こんなのテストデータにないし。

では、海外だとどうなるでしょうか?
トレヴのウイニングランです。

こちらも辛うじてウイニングランが30.5%と一番高い数字を出しています。
ウイニングランが難しいですね。返し馬と区別がつきにくいです。でもこれなら十分使えるかな?

これは?というので言うとゴールドシップの返し馬で止まったシーンです。

これは難しかったか。
直線60.5%、ウイニングランが53.6%、なぜかコーナーが46.4%で実はこれが返し馬というのがモデルでは判別できず。
やはり少しイレギュラーになると精度が下がります。

いくつかテストした中で全く数字が出なかったのがこれ。
ショウナンパンドラのウイニングランです。

全く数字が出ておらず、ほぼ初見といった感じの数字。
この辺りをどうするか?は課題ですが、これを学習させるのはどうすればいいんだ???

ちなみに、この6枚は学習教材として再度組み込むことができます。
上の「Predictions」を選択し、どれでもいいので写真を選択します。

正解のタグをつけて保存します。

全部正解をつけたら再度「Train」を実行することで、再学習をすることができます。

今回は50枚程度でしたが、まずまずの精度が出たと思いますし、割と素直な問題であればほぼ間違えることなくできる事がわかりました。
もう少し学習量を多くすることで、精度を高められるか?は実験が必要ですが、遊びのAPIとして使えるものを作る位ならあっさり出来上がります。

次はこれを使って画像認識→bot作成にまでつなげる事ができないか?を検証していきたいです。