➊はじめに
■コーディング0のAIツール
「AIって最先端技術だし、さらにpythonプログラミング知識がないと構築できないんでしょ~敷居が高くてムリポです」と言ってたものが、AIの知識ゼロでAIが簡単にできちゃうとんでもないツールが、「Microsoft Lobe」から出ています。
■Microsoft Lobe
まずは「Example」を見てみましょう。凄すぎて、ビクーリたまげます😲できるAIからサービスを考えていた人も、これからはサービス先行で物事を考えることができるようになるのではないでしょうか。あと、他の見どころは「Watch Tourの08:35」のDrink識別をサービスにしたところです。とても興味深いです😊
**Lobe**は、win/macのローカルアプリケーションですが、画像の取り込み、ラベル付け、学習によるモデル作成、作成したモデルでの推論、推論結果のフィードバック(モデル更新)まで、まるっと全部ほぼ自動でできちゃいます!
➋今回やること
■LobeでMNIST
面白いサービスネタが思いつかなかったのでMNISTをやりたいと思います。学習後の推論においてはLobe単体でも完結可能ですが、手書きUIがないことと、LobeとアプリケーションをAPIで連動させてみたいという思いから、今回は「Lobe」と「mnister_for_lobe」をAPI連携させたいと思います。
『【MNIST】手書き数字をAIに認識させよう』のバックエンド(推論エンジン)が、Lobeになったバージョンだと思ってください。
■システム構成
システム構成は以下の通りです。
推論エンジン側は「Lobe
」、**アプリケーション側は自作の「mnister for Lobe
」**を使用します。
※Lobeで作ったモデルはエキスポートが可能で、エキスポートした情報から、pythonなどのプログラミング言語(Tensorflow)を用いて、新たに推論エンジンを構築することも可能です。今回は、新たに推論エンジンを構築せず、Lobeに推論させます。
➌MNISTのデータ取得
今回学習に使用する画像は、MNISTのテストデータ10,000枚を使用したいと思います。
データは、「【MNIST】データをPNG変換」を使えば簡単に入手できます。
➍【推論エンジン側】Lobe
■Lobeインストール
Lobeホームページ ( https://lobe.ai/ )から、ダウンロードしてインストールするだけです。
■Lobe起動
Lobeを起動します。いま(2020/11)はまだBETA版です。
■New Project
■データのインポート
先程用意した「MNISTのテストデータ」のフォルダを選択します。
今回用意したMNISTデータのフォルダ構成は、ラベルと一致しているので、「Label Using Folder Name
」をチェックし、「Import
」を押下します。これで学習データの読込みとラベリングまで自動でやってくれます。
■学習
「Train
」を押下してください。
学習結果がリアルタイムで表示されます。どの画像がどのラベルに分類されてしまったか、そこからどいう画像を学習させるべきなのか、などを検証することができます。
この時点での学習結果は、学習データ10,000枚の内、83%が正解、17%が不正解と認識されました。その後、最適化により認識率はもっと上がっていきます。
■最適化
「Optimizing
」を押下し最適化をしておきます。
※最適化は結構時間がかかります。「Project Settings
」から、最適化方法として、精度重視か、スピード重視かを選択することができます。デフォルトでは「精度重視
」となっています。
※故意に最適化をしなくても、時間をおくと勝手に最適化がかかり、勝手に認識率が上がっています。スゴイ!
最適化が完了し、最終的には99%(9,900枚)が正解、1%(100枚)が不正解の認識率となりました。
■エクスポート
「TensorFlow
、TensorFlow Lite
」用などにもエキスポートできますが、今回は「Local API
」を選択します。
「Format:JSON
」のところにAPI仕様(リクエスト先URLとInterface)が表示されます。
各言語を使用してAIサーバへ接続する際は、「Format:
」欄から使用する言語を選択するとインタフェースのサンプルコード(イマドキ用語だとスニペット
かな)が表示されます。今回アプリケーションはjavascriptで書いているのでこちらを参考にします。
URL http://localhost:38100/predict/5c1fbf69-651f-40d2-aab7-c0b94f1b5a0c
var data = JSON.stringify({
"inputs": {
"Image": "<base64 image>"
}
});
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "http://localhost:38100/predict/5c1fbf69-651f-40d2-aab7-c0b94f1b5a0c");
xhr.send(data);
{
"labels": [
{
"name": "0",
"type": "<float32 confidence>"
},
{
"name": "1",
"type": "<float32 confidence>"
},
{
"name": "2",
"type": "<float32 confidence>"
},
{
"name": "3",
"type": "<float32 confidence>"
},
{
"name": "4",
"type": "<float32 confidence>"
},
{
"name": "5",
"type": "<float32 confidence>"
},
{
"name": "6",
"type": "<float32 confidence>"
},
{
"name": "7",
"type": "<float32 confidence>"
},
{
"name": "8",
"type": "<float32 confidence>"
},
{
"name": "9",
"type": "<float32 confidence>"
}
],
"prediction": "0"
}
➎【アプリケーション側】mnister for lobe
■ダウンロード
local PCで、mnister_for_lobe
を格納するディレクトリに移動後、以下のgit clone
コマンドを打ち込んでmnister_for_lobe
ツールをGETしてください。
git clone https://github.com/PoodleMaster/mnister_for_lobe
■アプリ起動
ダウンロード後、mnister_for_lobe
フォルダ直下にある「index.html
」をchrome、EdgeなどのBrowserで直接開いてください。(本アプリはwebサーバのデプロイ等は不要です)
mnister_for_lobe
│
├─static
│ │
│ ├─favicon.ico
│ ├─GitHub-Mark-32px.png
│ ├─Input.js ← ここでAPIによりLobeへ画像の送信と推論結果の受信を実施
│ └─mnister-Mark-28px.png
│
├─index.html ← これをBrowserで直接起動してください
├─LICENSE
└─README.md
■初期設定
「Get the request URL from Lobe and enter it.」と書かれたテキストボックス欄に、Lobeから取得した「リクエスト先URL
」をコピペしてください。
※リクエスト先URLは、「Lobe->Export->Local API
」のところに記載されています。
➏システム実行
黒い四角枠内に数字を書き、「Predict」を押下してください。推論結果が表示されれば成功です!
➐Lobeを使ってみて
AI側について、プログラミングすることなく推論エンジンを構築できるのはスゴイですね。もちろんTensorflow用にモデルをエクスポートできるので、本来はそれを使うのでしょうが。
Lobeなど無料の高機能アプリを使う際に気になる点ですが、 画像やモデルが収集されたり、クラウドにアップロードされたりすることはないとのこと。安心して使えますね。あと気になる点としては、まだGPUには対応していないとのことで、CPU負荷が結構高いです。高性能なGPUを持っている訳ではないので、Google Colabみたいな環境で実行できると尚良いのですが…
➑以上
今回は認識率云々ではなく、Lobeで推論サーバを構築し手書き数字を推論させることができるかを検証しましたが、簡単に推論までさせることができました。次回は、Lobeからエキスポートしたモデルを使用してPythonプログラミングにより推論でもさせてみようと思います。
お疲れ様でした。