マイクロソフトが公開した機械学習モデルの訓練を容易にできる「Lobe」を試してみた。

マイクロソフトがLobeというツールを公開しました。
このツールを使うことでとても簡単に画像分類の機械学習モデルを作ることができます。

Lobeの画像分類には「ResNet-50 V2」と「MobileNetV2」の２つのmodelを使用することができます。
それぞれのmodelには特徴があり目的や実行環境に合わせて使い分ける必要があります。

ResNet-50 V2を使用すると高い予測精度を達成できますが、予測時間が長くなりより多くのメモリが使用されます。
MobileNetV2は予測速度が速く、メモリ使用量は少ないですが、予測精度は高くありません。

ある程度のマシンパワーがある環境で高い精度が必要なときはResNet-50 V2を使用し、
スマホやRaspberry PiなどではMobileNetV2を使用することになると思います。

どちらのmodelを使用しても転移学習を用いることで少ないデータでもより良い訓練出来るようになっています。

今回は、kaggleに公開されている犬/猫の画像を使用して画像分類modelを学習する手順を書いていきたいと思います。ベースとなるmodelにはResNet-50 V2を使用します。

## Lobeのダウンロード
下記の公式ページからダウンロードできます
[Lobe](https://lobe.ai/)

## 学習に使うデータを用意する
今回はkaggleで公開されているデータを使用します。
[Dogs vs. Cats](https://www.kaggle.com/c/dogs-vs-cats/data)

## Lobeでmodelを学習する
Lobeを起動しNewProjectを選択します。
![スクリーンショット 2020-10-31 15.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/66e75281-34ba-9815-de88-284dced8c08d.png)

学習を開始する前にベースとなるmodelを設定します。
[File]-[Project Settings]から[Optimize for Accuracy]を選択します
![スクリーンショット 2020-11-04 0.38.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/e2064a90-8e16-3450-8449-9b59fe50fa9c.png)


右上のImportをクリックしImagesを選択します。
![スクリーンショット 2020-10-31 15.41.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/a4ef2095-316c-ae9a-0c2c-c09cec24f3f1.png)

kaggleからダウンロードした学習用データの中からまずはcatの画像を読み込みます。
![スクリーンショット 2020-10-31 15.47.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/07423671-4461-766f-8514-c1747fd3c651.png)

読み込んだ画像にLabelを付けます。
この時全ての画像を選択(macならcommand+A)すればまとめてLbelをつけることができます。
![スクリーンショット 2020-10-31 15.51.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/b29d127a-ef13-d211-7619-f3fe14141144.png)

続いてdogの画像も同じように読み込みLabel付けを行います。
![スクリーンショット 2020-10-31 15.53.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/3b8e531b-d4ea-227d-86b6-50a5c7e25633.png)

学習用の画像がディレクトリ名をlabelにして予め分けられている場合はdatasetとしてまとめて読み込むことができます。
![スクリーンショット 2020-11-05 11.07.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/d43f1f40-c625-67ea-e82f-c604dc130c97.png)

![スクリーンショット 2020-11-05 11.07.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/dd185ff7-ff9d-147f-5086-38d67e3c542e.png)

２種類以上の画像を読み込むと自動でTrainingが開始されます。
![train_start.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/1a9b89e1-0eab-111a-2ee6-c017891e1968.png)

Trainingが終わったらPlayをクリックしテスト用の画像をドラッグ&ドロップで読み込ませると予測結果を確認できます。
![スクリーンショット 2020-10-31 16.01.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/1cb978a8-ca7b-ee4b-9ec2-aecbfcff9d12.png)

読み込んだ画像の正解予測が間違っている場合は、下記の画像で示した場所をクリックするとLabelが修正されて再度Trainingが行われます。
![スクリーンショット 2020-10-31 16.07.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19516/374056f2-d5ba-6ce9-66f9-56bf091256a2.png)


このように非常に簡単に画像分類のmodelを作ることができます。
画像をインポートする代わりにwebcカメラから画像をキャプチャして使用することもできます。

下記の公式動画ではwebカメラで数枚の画像を撮影しそれを元に「Drinking」を「not Drinking」を識別するモデルを作成しています。

[Introducing Lobe | Build your first machine learning model in ten minutes.](https://youtu.be/Mdcw3Sb98DA)

Lobeでは学習したmodelはエクスポートしてCoreMLやTensorFlowで利用することができます。
modelをエクスポートしてPythonで利用する方法は下記の記事をご覧ください。
[Lobeで学習したモデルをPythonで利用する方法](https://qiita.com/tkinjo1/items/bbcb77fb0f4b8fe79a81)

[Lobeで学習したモデルとTensorFlow Servingを使ってREST APIを作ってみました。](https://qiita.com/tkinjo1/items/4fd9f0202aa8e3949845)

[FastAPIと組み合わせてREST APIを作ってみました。](https://github.com/tkinjo1985/lobe_fastapi)

[Flaskと組み合わせてREST APIを作ってみました。](https://github.com/tkinjo1985/lobe_flask)