大北です。

今日は、有馬記念ということで、MicrosoftのCustom Visionを使って牡馬(「ぼば」と読みます。オス馬のこと。)と牝馬(「ひんば」と読みます。メス馬のこと。)の判別に挑戦してみました!

ちなみに、有馬記念とは、毎年12月の終わり頃に開催される競馬のG1レースです。ファンの人気投票によって出走馬が決まります。私の1番好きな有馬記念は、2014年の有馬記念です。常に3番人気以内にいたジェンティルドンナという牝馬が、引退レースにも関わらず、4番人気という(ジェンティルドンナの中では)低評価をつけられてしまいます。しかしながら、その低評価を覆して1着でゴールする姿は圧巻でした。レースが気になる方は、JRAによってYoutubeにレース動画があがっているので、ぜひ御覧ください。https://youtu.be/uH8Gooc2-FU

それでは、本題に入ります!

Custom Visionは、画像とタグを用意するだけで、簡単に画像識別器を作ってくれます。しかも、結果にアクセスするためのAPIまで用意してくれます。

簡単に使い方を説明していきます。

Custom Visionのページにアクセスし、”はじめる”ボタンからスタートします。
Custom Vision Get Started

新しいプロジェクトを作るように促されるので、以下を記入して、あたらしいプロジェクトを作ります。

  • プロジェクトの名前
  • プロジェクトの説明
  • プロジェクトのタイプ
    • Classification(分類。インプット画像には何がいるのか?を判別する。)かObject Detection(物体検出。インプット画像のどこに何がいるのか?を判別する)を選びます。今回は牡馬と牝馬を判別したいので、Classificationにしました。
  • 分類のタイプ
    • Multilabel(1枚の画像に複数のタグをつける)かMulticlass(1枚の画像には1つのタグしかつけない)を選びます。今回は、Multiclassにしました。
  • 対象は、どんなものか
    • 一般的なものなのか、食べ物なのか、… 。今回は、馬なので、Generalにしました。

新しいプロジェクトの作成

プロジェクトを作成すると、次は、画像の追加を促されます。

イメージの追加

“Add Images”ボタンを押して、画像を追加していきましょう。

以下の例では、netkeiba.comからお借りしたエイシンフラッシュの画像を追加してみました。(エイシンフラッシュは私が一番好きな馬です。競馬ファンの間でもイケメン馬として有名です。)

画像の追加

My Tagsには、アップロードした画像を表すタグを入れます。

今回は、牡馬と牝馬の判別をしていきたいので、牡馬であるエイシンフラッシュには、牡馬を表すcoltというタグをつけていきます。

とりあえず、牡馬、牝馬ともに32枚の画像を追加してみました。

ダッシュボード

右上の”Train”ボタンを押すと、学習が始まります。

学習は、すぐ終わります。ちゃんと測ってはいないですが、10秒もかからなかったと思います。

学習が終わると、以下のような結果がでてきます。

学習結果

全体のパフォーマンスは、Precisionが64.5%、Recallが64.5%です。つまり、インプット画像に対する判別が正しい割合が64.5%、学習データとして使った画像に対して、正しく判別できたものが 64.5%ということになります。ちなみに、Thresholdを50%としているので、インプット画像に対して、牝馬である確率が51%、牡馬である確率が49%という予測が出てきたとき、本当に牝馬であるならば、予測は正しい、牡馬であるならば予測は間違っていたとなります。(Thresholdは、左上にあるスライダーから変更できます。)

あとは、画像を32枚ずつしかいれなかったので、画像が少ないと怒っています。(通常は、ImageCountの所のバーが灰色です。)

それでは、実際に予測を出してみましょう。

上の方にある”Prediction URL”というボタンを押すと、APIが自動で生成され、URLとリクエストの方法を教えてくれます。

API

netkeiba.comにあるメイショウベルーガの画像(https://cdn.netkeiba.com/img.db/v1.1/show_photo.php?horse_id=2005106472&no=3060&tn=yes&tmp=no)を使ってAPIにリクエストを投げてみました。

すると、以下のような結果が返ってきました。

filly(牝馬)である確率が約98%、colt(牡馬)である確率が約2%です。メイショウベルーガは牝馬なので、当たっていると言っていいでしょう。

Custom Visionでは、この結果を残したまま、イテレーションを増やすこともできます。

牡馬324枚、牝馬326枚にして試してみたところ、Iteration1よりも悪い結果が出ました。

イテレーション2

PrecisionとRecallが64.5%から58.8%に下がっています。

原因として、同僚からは、牡馬と牝馬に微妙な差異しかなかったことや、学習用の画像が小さすぎたことを指摘されました。私が見ると、牝馬と牡馬では目の雰囲気などが違うのですが、同僚に説明してもあまり牡馬と牝馬の違いが伝わらなかったので、牡馬と牝馬を見分けるのは難しいのかもしれません。次回CustomVisionを使う時には、ちゃんとタグ間の差異がわかりやすい写真を選んでから、学習データに入れていこうと思います。

今回は、気合が足りず、良い結果を出せませんでしたが、それでも十分楽しかったので、みなさんもぜひCustom Visionで遊んでみてください!