かつてML.NET による画像分類をしたのですが、これをWebアプリとして公開する方法はないのでしょうか?

Microsoft.ML, Microsoft.ML.Vision, Microsoft.ML.ImageAnalytics, SciSharp.TensorFlow.Redist V2.3.1 など必要なものをインストールしてASP.Net Coreでアプリを作ってみると自分のPC環境では動作するのですが、サーバー上で動かそうとするとライブラリが不足しているというエラーメッセージがでて動いてくれません。そして不足しているライブラリをインストールしたくても権限がないのでインストールできません。このあたりはPVSであればできるのかもしれませんが、共用サーバーではどうすることもできません。

あきらめていたところJavaScriptのライブラリでml5.jsの存在を知りました。TensorFlow.js がベースになっていて使いやすいということなので、使ってみることにしました。学習済みのモデルをつかった画像分類の方法は検索すればたくさん出てきます。

学習済みのモデルをつかった画像分類

以下は学習済みのモデルをつかった画像分類の処理結果を表示するコードです。

ページが読み込まれたら既存の学習済みモデルを読み込みます。読み込みが完了したら[実行]ボタンをクリックできるようにします。また現在表示されている画像ではなく、ユーザーが自由に画像ファイルを変更できるようにしています。

自分で選んだ画像で学習させる

ml5.jsは機械学習のライブラリなので、やるなら自分で学習させてみたいものです。タグ付けした画像から学習データを作り、これをつかって画像分類する処理をやってみます。画像は犬と猫と鳩だけです。それ以外のものもやろうとすると処理に時間がかかるので、これくらいで妥協します。

まずHTML部分を示します。

以下、JavaScript部分を示します。

画像ファイルを読み込んで学習データを生成

まずはサーバー上にあるファイルを読み込んで学習データを生成する処理を示します。この処理はページを読み込んだら自動的に開始されます。

学習後に推論する

[学習後に推論する]ボタンがクリックされたら、上記の処理で生成された学習データをつかって現在表示されている画像が犬、猫、鳩のどれなのかを推論して結果を表示します。その処理を示します。

ユーザーが画像ファイルを選択したときの処理を示します。これは最初のサンプルコードで示したものと同じです。

学習データの保存とロード

生成された学習データをダウンロードできるようにします。ボタンをクリックするとmyKNN.jsonという名前でファイルをダウンロードできます。これを同じディレクトリにアップロードすればこれをつかって推論ができるようになります。

すでに存在する学習データから推論する処理を示します。

loadClassifier関数もページが読み込まれたら自動的に呼び出されます。そしてロードされたら[既存のモデルで推論する]ボタンをクリック可能にします。

[既存のモデルで推論する]ボタンをクリックすると推論が行なわれます。

[学習後に推論する]も[既存のモデルで推論する]も結果的に同じ学習データを使うので同じ結果になります。両方の結果の違いがわかるように[クリア]ボタンをクリックしたら表示されている結果がクリアされるようにしました。