2021年10月17日日曜日

利尻山 初冠雪

本日(2021-10-17)北海道北部で、今季初の積雪が観測されたとのことです。さっそく、北海道最北端の名山、利尻山(利尻岳)の様子をライブカメラで確認してみました。冠雪というよりも、かなりたくさんの積雪がみられました。これから長い厳冬になります。

http://www.town.rishiri.hokkaido.jp/rishiri/ 
ライブカメラから引用(15:00ころ)

同(翌朝 07:00ころ)

同(翌日 15:00ころ)

2021年10月5日火曜日

スマホでニューラルネットワーク(ml5JS/TensorflowJS利用)その1

 【what is this】分類問題等で保持しているデータを使って機械学習させ、その結果を利用して、未知のデータを予測(分類など)したい場合があります。最近では、Tensorflow/Kerasなどを使えば、それは比較的楽に実現できます。ここでは、学習結果をスマホアプリに組み込み、スマホで利用することを行いました。Javascriptから使えるTensorflowJSML5JSを利用しました。

■ 例題:1700万種の彩色を9種に分類する
 R、G、Bそれぞれ、0〜255まで取る場合の可能な色彩の種類は約1700万になります。それを9種(緑系、桃色、橙系、青系、茶系、赤系、黄系、紫系、灰色)に分類したいとします。そのためには、以下のようにします。参考資料[1]にあるML5.JSの例題Color_Classifierを利用させていただきました。定番の手書き数字認識MNISTばかりではなく、この例題も魅力的ではないでしょうか?
  • ラベル付きの色彩データ(R:81, G:183, B:155→緑系、など)5,600組を用意
  • これをPC上の、下図の画面にあるようなニューラルネットワークで学習(各層へのバイアスの表示は略しています。)
  • 数十秒で学習は完了(スマホでも実行は可能と思われるが)
  • 学習結果のモデル(ネットワーク構造と重みデータ)をsaveしておく

■ 学習結果のモデルをスマホで利用する
 上記でsaveしておいた学習モデルを、スマホへloadします。それを利用するスマホアプリをMIT App Inventorで作成しました。すなわち、約1700万種の彩色のどれを与えても、的確に9種のいずれかに分類できます。下図に、実行例(緑系、紫系、桃色など)を示します。第2候補も示しています。



 ちょっとデザインに凝ってみます。以下の画面設計は如何でしょうか?こちらの方が、ニューラルネットワークでpredictionを行っているというrealityがあると思います。下図左側は、[紫系= 0.90, 青系 = 0.04]、右側は、[橙系 = 0.84, 黄系 = 0.12]という結果でした。どちらも納得できます。

 時間のかかる学習をPCやクラウドで実行させ、学習済みモデルをスマホへloadしてアプリケーションを作成するという一般的な方法ですが、実際にやってみると適用範囲が広そうなことを実感できます。

■ なぜスマホで?
  • MIT App Inventorを使うのですが、それに搭載されているWebViewerは強力なJavaScriptエンジンなので、Tensorflow.jsやml5.jsを活用できる。
  • デザインが楽しい。上図のように、好みの画面設計がとても容易にできる。
  • ニューラルネットワークを使う機械学習にもっと親しめる。

(補足)
  • スマホ上で、ML5JSやTensorflowJSを使うには、スマホ上にWebサーバを立ち上げ、ドキュメントルートを設定し、そこへ学習済みモデルファイルと、関連コード一式を配置する必要があります。この辺りが少し面倒ですが、分かってしまえばあまり苦になりません。
  • 別の問題として、最近のAndroid OSでは、このように立てたwebサーバに対しても、セキュリティが厳しくなっていて、いくつかのpermissionsが必要になるようです。また、どのWebサーバを使うかにもよります。例えば、Pixcel3a (Android 11)の場合は、比較的新しい"Serve:HTTP Server"と、古めの"KWS"サーバは共にOKですが、古いAndroid OS(Android 8.1)で利用可能だった"KSWEB"サーバは、403 Forbiddenのエラーが発生して使えませんでした。
参考資料
[1] ml5.js examples search, https://examples.ml5js.org