Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?
@PoodleMaster

【AI】LobeでMNISTをやってみた

➊はじめに

■コーディング0のAIツール

「AIって最先端技術だし、さらにpythonプログラミング知識がないと構築できないんでしょ~敷居が高くてムリポです」と言ってたものが、AIの知識ゼロでAIが簡単にできちゃうとんでもないツールが、「Microsoft Lobe」から出ています。

■Microsoft Lobe

まずは「Example」を見てみましょう。凄すぎて、ビクーリたまげます😲できるAIからサービスを考えていた人も、これからはサービス先行で物事を考えることができるようになるのではないでしょうか。あと、他の見どころは「Watch Tourの08:35」のDrink識別をサービスにしたところです。とても興味深いです😊

Lobeは、win/macのローカルアプリケーションですが、画像の取り込み、ラベル付け、学習によるモデル作成、作成したモデルでの推論、推論結果のフィードバック(モデル更新)まで、まるっと全部ほぼ自動でできちゃいます!

SQ

➋今回やること

■LobeでMNIST

面白いサービスネタが思いつかなかったのでMNISTをやりたいと思います。学習後の推論においてはLobe単体でも完結可能ですが、手書きUIがないことと、LobeとアプリケーションをAPIで連動させてみたいという思いから、今回は「Lobe」と「mnister_for_lobe」をAPI連携させたいと思います。

【MNIST】手書き数字をAIに認識させよう』のバックエンド(推論エンジン)が、Lobeになったバージョンだと思ってください。

■システム構成

システム構成は以下の通りです。
推論エンジン側は「Lobeアプリケーション側は自作の「mnister for Lobeを使用します。
system

※Lobeで作ったモデルはエキスポートが可能で、エキスポートした情報から、pythonなどのプログラミング言語(Tensorflow)を用いて、新たに推論エンジンを構築することも可能です。今回は、新たに推論エンジンを構築せず、Lobeに推論させます。

➌MNISTのデータ取得

今回学習に使用する画像は、MNISTのテストデータ10,000枚を使用したいと思います。
データは、「【MNIST】データをPNG変換」を使えば簡単に入手できます。

mnist_test_data

➍【推論エンジン側】Lobe

■Lobeインストール

Lobeホームページ ( https://lobe.ai/ )から、ダウンロードしてインストールするだけです。

■Lobe起動

Lobeを起動します。いま(2020/11)はまだBETA版です。
Lobe

■New Project

New Project」を押下します。
Lobe

■データのインポート

Import」を押下します。
Lobe

Dataset」を押下します。
Lobe

Choose Dataset」を押下します。
Lobe

先程用意した「MNISTのテストデータ」のフォルダを選択します。
Lobe

今回用意したMNISTデータのフォルダ構成は、ラベルと一致しているので、「Label Using Folder Name」をチェックし、「Import」を押下します。これで学習データの読込みとラベリングまで自動でやってくれます。
Lobe

データの読込みを始めます。
Lobe

データの読込みが終わると自動で学習を始めてくれます。
Lobe

■学習

Train」を押下してください。
学習結果がリアルタイムで表示されます。どの画像がどのラベルに分類されてしまったか、そこからどいう画像を学習させるべきなのか、などを検証することができます。

Lobe

この時点での学習結果は、学習データ10,000枚の内、83%が正解、17%が不正解と認識されました。その後、最適化により認識率はもっと上がっていきます。

■最適化

Optimizing」を押下し最適化をしておきます。

※最適化は結構時間がかかります。「Project Settings」から、最適化方法として、精度重視か、スピード重視かを選択することができます。デフォルトでは「精度重視」となっています。
※故意に最適化をしなくても、時間をおくと勝手に最適化がかかり、勝手に認識率が上がっています。スゴイ!

最適化が完了し、最終的には99%(9,900枚)が正解、1%(100枚)が不正解の認識率となりました。

■エクスポート

Export」を押下します。
Lobe

TensorFlowTensorFlow Lite」用などにもエキスポートできますが、今回は「Local API」を選択します。
Lobe

Format:JSON」のところにAPI仕様(リクエスト先URLとInterface)が表示されます。
Lobe

各言語を使用してAIサーバへ接続する際は、「Format:」欄から使用する言語を選択するとインタフェースのサンプルコード(イマドキ用語だとスニペットかな)が表示されます。今回アプリケーションはjavascriptで書いているのでこちらを参考にします。
Lobe

javascript:Prepare Request
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);
javascript:Parse Output
{
  "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してください。

command
git clone https://github.com/PoodleMaster/mnister_for_lobe


Github : 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

起動画面はこんな感じです。
mnister

■初期設定

「Get the request URL from Lobe and enter it.」と書かれたテキストボックス欄に、Lobeから取得した「リクエスト先URL」をコピペしてください。
※リクエスト先URLは、「Lobe->Export->Local API」のところに記載されています。
mnister

➏システム実行

黒い四角枠内に数字を書き、「Predict」を押下してください。推論結果が表示されれば成功です!
mnister

➐Lobeを使ってみて

AI側について、プログラミングすることなく推論エンジンを構築できるのはスゴイですね。もちろんTensorflow用にモデルをエクスポートできるので、本来はそれを使うのでしょうが。

Lobeなど無料の高機能アプリを使う際に気になる点ですが、 画像やモデルが収集されたり、クラウドにアップロードされたりすることはないとのこと。安心して使えますね。あと気になる点としては、まだGPUには対応していないとのことで、CPU負荷が結構高いです。高性能なGPUを持っている訳ではないので、Google Colabみたいな環境で実行できると尚良いのですが…

➑以上

今回は認識率云々ではなく、Lobeで推論サーバを構築し手書き数字を推論させることができるかを検証しましたが、簡単に推論までさせることができました。次回は、Lobeからエキスポートしたモデルを使用してPythonプログラミングにより推論でもさせてみようと思います。
お疲れ様でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?