Teachable Machine の機械学習モデル出力に関するメモ 〜画像プロジェクト編〜【2021年5月版】

この記事は、以前も何度か記事を書いてきた「[Teachable Machine](https://teachablemachine.withgoogle.com/)」に関する記事です。

もう少し補足すると、Teachable Machine には以下の「画像・音声・ポーズ」の 3つのプロジェクトがありますが、今回は画像プロジェクトで出力できる機械学習モデルの形式などに関するメモです。
![Teachable_Machineの3つのプロジェクト.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d237456a-4e42-580f-e4e4-9e08bc182945.jpeg)

## 画像プロジェクトの機械学習モデル
### 出力の方法と形式
画像プロジェクトの機械学習モデルを出力する際の画面は以下のとおりです。
![出力形式（3種）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/73566a47-e9d4-a54f-0167-f3cca9ea5939.jpeg)
上記の画像では、出力形式で TensorFlow.js が選択されていますが、その横に TensorFlow・TensorFlow Lite の 2つもあります。
ここで、出力できる方法・形式をまとめてみます。

- クラウドにアップロード
   - TensorFlow.js
- ダウンロード
   - TensorFlow.js
   - TensorFlow
      - Keras
      - SavedModel
   - TensorFlow Lite
      - 浮動小数点
      - 量子化済み
      - Edge TPU

以上のように、機械学習モデルをダウンロードする場合は複数の出力形式を選べます。
以下、TensorFlow・TensorFlow Lite を選択した際の画面のスクリーンショットものせておきます。
![TensorFlow.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/33693523-b766-1fc2-e4b1-81dd49e716c9.jpeg)

![TensorFlow Lite.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/46e96f66-54c6-21ce-f75d-46e7370ecc8c.jpeg)

### ダウンロードして得られるデータについて
以下の内容は、適当に 2クラス分の学習を行ってみて、機械学習モデルを各種形式でダウンロードした場合に得られたファイルの情報です。

- TensorFlow.js
   - metadata.json
   - model.json
   - weights.bin
- TensorFlow（Keras）
   - keras_model.h5
   - labels.txt 
- TensorFlow（SavedModel）
   - 【フォルダ】 model.savedmodel
      - 【フォルダ】 assets 
      - 【フォルダ】 variables
         - variables.data-00000-of-00001
         - variables.index
      - saved_model.pb
   - labels.txt
- TensorFlow Lite（浮動小数点）
   - model_unquant.tflite
   - labels.txt
- TensorFlow Lite（量子化済み）
   - model.tflite
   - labels.txt
- TensorFlow Lite（Edge TPU）
   - model_edgetpu.tflite
   - labels.txt

### 出力したモデルの利用について
機械学習モデルの出力形式は複数の形式を選択できますが、それぞれをプログラムで利用する際に用いる言語等は、提示されるコードスニペットをベースにすると以下のようになります。

- TensorFlow.js
   - JavaScript（TensorFlow.js か ml5.js と組み合わせ）
- TensorFlow：Keras・SavedModel
   - Python
- TensorFlow Lite：浮動小数点・量子化済み
   - Java
- TensorFlow Lite：Edge TPU
   - Python

機械学習モデルを用いる場合のコードスニペット・手順について、上記の中の一部はコード・手順だけでなく GitHub等へのリンクも表示されます。

- [TensorFlow.js を利用する場合のコードの関連リンク](https://github.com/googlecreativelab/teachablemachine-community/tree/master/libraries/image)
- [ml5.js を利用する場合のコードの関連リンク](https://editor.p5js.org/ml5/sketches/ImageModel_TM)
- [TensorFlow（Keras）を利用する場合のコードの関連リンク](https://github.com/googlecreativelab/teachablemachine-community/blob/master/snippets/markdown/image/tensorflow/keras.md)
- [TensorFlow Lite の機械学習モデルを Android で利用する場合](https://github.com/googlecreativelab/teachablemachine-community/blob/master/snippets/markdown/image/tflite/android.md)
- [TensorFlow Lite の機械学習モデルを Edge TPU で利用する場合](https://github.com/googlecreativelab/teachablemachine-community/blob/master/snippets/markdown/image/edgetpu/python.md)

上記のサンプルを使う際の注意ですが、コードが古い API を使っていて今は利用できないものがあったり、情報が古いものが混じっているようでした。
それに関連する話の 1つは以下で書いています。
　●Mac で Coral USB Accelerator の利用環境準備 ＆ Teachable Machine の Coral用モデルで画像分類（試行錯誤を含む） - Qiita
　　https://qiita.com/youtoy/items/f9829798b391826e4fec

## 【追記】 音声・ポーズのそれぞれのプロジェクトについて
その後、他の 2つのプロジェクトについても情報をまとめてみました。
　●Teachable Machine の機械学習モデル出力に関するメモ 〜音声・ポーズプロジェクト編〜【2021年5月版】 - Qiita
　　https://qiita.com/youtoy/items/980e08e8469ae51ce556

あとは、Microsoft の Lobe も情報をまとめたいな。
　●Lobe | Machine Learning Made Easy
　　https://lobe.ai/
　　https://github.com/lobe