ラベル AI の投稿を表示しています。 すべての投稿を表示
ラベル AI の投稿を表示しています。 すべての投稿を表示

2021年11月12日金曜日

MLB(メジャーリーグ)主審の判定結果を学習してストライク判定(1)

【what is this】MLB(メジャーリーグ)の主審(アンパイア)によるストライク/ボールの判定結果が公開されています。これを学習させれば、MLBの平均的な主審と同じ能力を持つ判定ロボットが作れそうです。実際、5,000投球のデータを学習させた結果、人間の主審と比べて、約95%は同じ判定をするニューラルネットワークができました。これは、多次元データの2値分類問題ですので、技術的には特に新鮮味は無いのですが、MLBの実際のデータを使った結果なので現実感があります。

続編(2)はこちらです。

■ ストライクゾーンと投球の判定
 ストライクゾーンについて、筆者が調べた結果は、図1右側に示したとおりです。ストライクゾーンは、ホームプレートを底面とする5角柱の立体です。ただし、高さ方向の範囲は、図のとおり、打者(とその構え)で変化します。つまり、プロット図の中の緑の長方形の枠は、平均的な打者のストライクゾーンを示したものであり、打者によって異なります。

 図1のプロット図は、主審が判定した、ストライク(オレンジ色)とボール(青色)を示しています。投球された球が僅かでもストライクゾーンに触れた場合はストライクです。球の直径はMLBの場合約7.5cmですから、ストライクゾーンの外でもストライクの場合が多いようです。中には、正面からはストライクゾーンに触れなくても、球筋が変化して、立体のゾーンの側面や底面に触れてストライクになる場合もあります。もちろん、誤審でストライクにした場合も含まれるでしょう。


 ここで確認ですが、上のプロット図の緑枠のストライクゾーンは、機械測定によるものであり、主審が判断したストライクゾーンとは必ずしも一致しません!

■ 
投球データを利用した学習
 上記で用いた投球データは、図2に示すように、5つの特性値からなっています。すなわち、球がストライクゾーンの正面の面を無限に拡大したと考えた場合に、その面に触れた時点のx座標値とy座標値、さらに、打者に依存するストライクゾーンの縦方向の上限値と下限値、そして、左打者か右打者かのフラグです。
 この5つの特性を持つ個々の投球を、主審の判定による2値ラベル(ストライクかボールか)に対応づけてあります。これを、機械学習させるわけです。


■ ニューラルネットワークの構成
 この機械学習は、参考文献[1][2]で行われていることを参考にして実行しました。具体的なニューラルネットワークの構成は以下のとおりです。2つの隠れ層をもち、それぞれの隠れ層の後にdropout層を挿入しています。
___________________________________________
 Layer (type)                 Output shape    Param #   
 ====================================================
 dense_Dense1 (Dense)         [null, 24]      144       
 ____________________________________________________
 dropout_Dropout1 (Dropout)   [null, 24]      0         
 ____________________________________________________
 dense_Dense2 (Dense)         [null, 16]      400       
 ____________________________________________________
 dropout_Dropout2 (Dropout)   [null, 16]      0         
 ____________________________________________________
 dense_Dense3 (Dense)         [null, 2]       34      
 ====================================================
 Total params: 578
 Trainable params: 578
 Non-trainable params: 0

■ 学習の結果
 学習用のデータは、上に示したように、5,000個です。評価用にも、これと同じデータセットを用いました。10エポックの学習(毎回ランダムに構成したバッチサイズ50のミニバッチを100個を学習)結果、正解率0.959が得られました。すなわち、このニューラルネットワークは、MLBの標準的な主審の判定結果と約95%合致(学習条件により若干変動)する結果を与えるものとなりました。つまり、投球のストライク/ボールの判定に関しては、理論上、MLB主審を努められそうな結果です!
epoch 1 ,  steps= 100 , loss= 0.339  ,acc= 0.879
epoch 2 ,  steps= 100 , loss= 0.281  ,acc= 0.839
epoch 3 ,  steps= 100 , loss= 0.332  ,acc= 0.859
 . . .

epoch 8 ,  steps= 100 , loss= 0.235  ,acc= 0.899
epoch 9 ,  steps= 100 , loss= 0.206  ,acc= 0.879
epoch 10 , steps= 100 , loss= 0.129  ,acc= 0.959
baseball.js:95 training done !

■ 感想
 プロ野球に限らず、他のスポーツでも、判定や採点の機械化の方向があるようです。しかし、プロ野球の場合、機械あるいはAIが主審の代役となることが望ましいのでしょうか。スポーツの人間味っぽいところが好きな人も多いはずです。投手、打者、審判とも、一瞬にして見極める技術を向上させているはず。また、観客も、「あれ、誤審じゃないの」とか、「あの主審は低めに厳しいよなあ」などと言い合いながら観戦するのも捨てがたい気もします。もちろん、判定で揉めた場合のリクエスト(現在でも実施されていますが)に対応するための、最新測定機器やAIの出番はもちろん増えるでしょうが。

参考文献
[1]
Nick Kreeger, Visualizing ML training using TensorFlow.js and Baseball data
https://observablehq.com/@nkreeger/visualizing-ml-training-using-tensorflow-js-and-baseball-d

[2] Predicting balls and strikes using TensorFlow.js
https://medium.com/tensorflow/predicting-balls-and-strikes-using-tensorflow-js-2acf1d7a447c

2020年7月5日日曜日

Beautiful mountain view comes automatically to your smartphone

revised [Version2, 2020-7-5] [Version1, 2019-12-19]

Abstract
The purpose of this project is to create an application that uses AI (artificial intelligence) to determine that a mountain is now in a beautiful landscape, and automatically notify it to the smartphone. You can enjoy the scenery with a live camera even in a distant mountain. However, the mountains are often covered with clouds, and the weather changes over a short period of time. Therefore, there will not be many opportunities to see the beautiful scenery. The smartphone app described below will automatically notify you when a photo that is so beautiful that you can see it up to the top of the mountain is obtained. Wouldn't it be fun if you received such a notification while drinking coffee?

Outline of the project
The weather in the mountains changes in a short time. Therefore, the scenery is not always beautiful so that you can see the summit. Here, we have created an app that automatically stores only the photos in which the mountain summit is clearly visible. As an example, this app recognizes the scenery of Rishiri mountain that is towering in northern Hokkaido of Japan in real-time and saves good photos. This app incorporates a trained model of this mountain images, but of course, it is easy to replace them with your favorite mountain images. 

Preparing mountain images
For image recognition, we used MIT's Personal Image Classifier [1]. First, we should classify many photos of this mountain into four categories, as shown in Fig1, depending on how they look. For this purpose, we quote images of a live camera [2] installed at the foot of the mountain. Get the image at appropriate intervals and give it a category label, as shown in Fig.1 and Fig.2. For each label, it is good to have more than 10 images. Enter them into MIT's Personal Image Classifier via your PC's web browser.

Fig.1 Classification into four categories

Fig.2 Preparing images for classification training

Training of the recognition model
When the images are ready, perform training as shown in Fig.3. Training takes place on the Neural Network. Adjust the network structure and some hyperparameter values if necessary. At the scale of this example, training usually ends in tens of seconds. Then download the trained model to your PC and use it in the App Inventor program as shown below.

Fig.3 Train our own model using MIT Personal Image Classifier

Using the trained model in App Inventor
The extension (named personalimageclassifier.aix) for using the downloaded model in App Inventor can be obtained from the reference [1]. The usage is very simple as shown in Fig.4. First, set the downloaded model to the Classifier properties, and then give the image you want to recognize to the block for classifying. As a result of recognition, the degree to which the image should be classified into each label is shown. That is, you get a list of label/confidence pairs. Finally, the image is classified into the label with the highest confidence value.

Fig.4 Blocks of the Personal Image Classifier

Getting the weather forecast
Before using this app, it is better to check the weather forecast for this mountain. If the weather is too bad, you can't expect a good picture. Press the button shown in Fig.5 to automatically display mountain weather up to 6 hours ahead. The weather forecast requires parsing a JSON file from OpenWeatherMap [3]. So we use our own JSON Decoding Extension (named FoYoJSON.aix) [4]. Fig.6 provides an overview of it. In order to use OpenWeatherMap, you need to get your own API key.

Fig.5 Checking weather forecast

Fig.6 Getting and decoding weather forecast JSON file

Running the app
An example of running the app is shown in Fig.7. In this case, it was recognized as "Cloudy but looks good" because there are many clouds but the mountainside looks good. Such a case is normal and it is rare to see it well up to the top.

Fig.7 Get an image and then recognize

Automatic notification of good scenery
If you are lucky, you will encounter a scene where you can see the summit as shown in Fig.8. In such a case, the recognition results in "Clear enough to see the summit". In that case, You can know that in two ways. One way is to feel the vibration of your smartphone, another way is to receive an e-mail automatically. If you choose the latter, the recognized image is automatically sent to the registered mail ID. Whichever you choose, if you have a PC nearby you will be able to enjoy the larger, clearer images immediately on your PC screen rather than your smartphone.

Fig.8 Automatic notification of beautiful scenery via email

Probably the easiest way to send emails automatically without human intervention is to use Taifun's extension [5] shown in Fig. 9 but note that it is a paid extension. 

Fig.9 Using an extension to send emails via SMTP without user interaction

Notice
(1) If the live camera image of your choice has a high resolution, you may need to reduce the resolution and pass it to the image classifier.
(2) To get and display the weather forecast, you need your own API Key for OpenWeatherMap. 
(3) If Error_908 is displayed when running the app, please allow access to External_Storage on your Android settings.

References
[1] MIT's Personal Image Classifier
https://appinventor.mit.edu/explore/resources/ai/personal-image-classifier
[2] Live camera at Rishiri Town Hall (in Japanese)
http://www.town.rishiri.hokkaido.jp/rishiri/
[3] OpenWeatherMap
https://openweathermap.org
[4] JSON Decoding Extension by FoYo
http://sparse-dense.blogspot.com/2019/01/a-json-decoding-extension-for-app.html?m=0
[5] Taifun's mail extension (paid)
https://puravidaapps.com/mail.php

2019年10月17日木曜日

AI with MIT App Inventor(生徒にAIの可能性を探求する機会を)

 これまでも、生徒/学生向けのComputational Thinking教育の一環として、人工知能(AI)を利用した環境は提供されていました。例えば、ML4K (Machine Learning for Kids)やSctatchを利用したものなどです。これらに加えて、最近、MIT App Inventorの本家のWebページに、主に高校生を対象とした「Artificilal Intelligence with App Inventor」というカリキュラムのアナウンスがありました。具体的な教材として、教員用[1]と生徒用[2]のような例が示されています。その一例は下図のようなものです。

http://appinventor.mit.edu/ の情報を元に作成したものです

 MIT App InventorにAI用のExtensionを組み込んでいますので、AI分野でこの10年間ほどで行われた高度な研究成果を活用して、生徒(高校生など)でも、オリジナルのAIアプリケーションを作成できます。これにより、生徒にAIの可能性を探求する新たな機会と、未来の創造者としての力を与えることを目指しているようです。生徒が自分のアイデアを具体化できることに重点をおいたカリキュラムを構成して行こうとしているようです。米国内の「K-12 Computer Science Standards」[3]にも適合させるとしています。

 単に、手順を示してそのとおりに造らせるのではなく、それを観察して問題点や改良案を考えさせることを重視しています。一例ですが、本題(例題)では、認識結果として、"(clock 0.63525)"のように、ヒットした最初の候補しか表示していません。これに対して、例えば、次のような課題を与えています。

  • ベスト(第1候補)だけでなく、第2候補も示しなさい。
  • 確度の数値を取り除き、物の名前だけにして、それを音声で出力しなさい。

これらを通して、「多重のリスト構造とその操作」も自ら調べて発見することになります。

参考資料

[1] INTRODUCTION TO MACHINE LEARNING Image Classification(教員用)
https://drive.google.com/file/d/1RQMs_bF2MBIb5agGYY-no4dpyi5zABr8/view
[2] Image Classification: WhatIsIt(生徒用)
https://drive.google.com/file/d/1YS0w_tDo20afucM33sJ_qb117-E0olNh/view
[3] K-12 Computer Science Standards, Revised 2017
https://www.doe.k12.de.us/cms/lib/DE01922744/Centricity/Domain/176/CSTA%20Computer%20Science%20Standards%20Revised%202017.pdf