Learningを応用したアプリケーションを作れるようになるのが目的です。MNIST数字識別する簡単なアプリケーションを、色々な方法で作ってみます。AI)を意識しています。モデルそのものには言及しません。数学的な話も出てきません。Learningモデルをどうやって使うか(エッジ推論)、ということに重点を置いています。Liteモデル(tflite)になります。(https://coral.ai/docs/edgetpu/models-intro/)一番の重要点は、「8-bit量子化モデル」であることです。モデルを量子化するためには2つの方法があります。現在、Tensorflow2.0では非サポート。quantizationを試します。作成したKerasモデル(conv_mnist.h5)を変換します。下記スクリプトではダウンロードしていますが、前記事から継続して実施している場合には不要です。"wb").write(tflite_model)上述したように、学習時に使用したものと同じデータが必要です。このデータの形式(値範囲など)は学習時と全く同じである必要があります。今回はMNISTなので、再度ダウンロードして100個ランダムに選ぶようにしました。1つずつリスト形式で返却するようにします。)これによって、conv_mnist_quant.tfliteというファイルが出来上がります。modelから変換する場合は、以下を使います。TPU用に変換します。これには、Googleが提供しているコンパイラを使用しますので、インストールが必要です。quantizationPost-training量子化によって、重みと活性化関数の値が8bit整数になります。変換するだけだと、万が一量子化できない演算があったら、その演算はfloat32のままになります。この場合、量子化できない演算があると変換に失敗します。入出力はfloat32のままになります。quantizationだと、tfliteモデルとしての入出力はint8になります。quantizationだと、tfliteモデルとしての入出力はfloat32のままになります。そのため、edgetpu用モデルに変換後、量子化用の演算がCPU実行になります。量子化を含む演算は全部で7個あるのですが、そのうちの2個(Quantize)がCPU実行になったと、edgetpuコンパイル時に警告が出ます。それでも、EdgeTPUでの実行も可能でした。PythonライブラリのAPIを使うと、ライブラリ部がuint8型を期待しているらしく動かすことはできませんでした。quantizationモデルでも動かすことが出来ました。上記のように書かれているため、ここまで、Tensorflow1.15を使用してきました。実はTensorflow2.xでも変換まではできました(2020年1月現在)。modelはTensorflow1.15では変換できませんでした。Tensorflow2.2だと変換できました。以下の点に注意が必要です。ないと、というエラーが発生。quantizationになる。通りに進めれば大丈夫です。ラズパイ上の端末で以下コマンドでインストールします。使用してMNIST数字識別するアプリケーションを作ります。TPUを使用する場合には、大抵はこの方法になると思います。識別、検知処理を簡単にするためのクラスが提供されています。クラスが提供されています。関数を使うことで、前処理、後処理を含めて簡単に識別処理を行うことが出来ます。この関数は入力として3chを期待しており、1ch入力だとエラーを返します。使って前処理、後処理を自分で実装しました。Lite用のコードとほぼ同じになります。TensorflowLiteランタイムのインストールが必要になります。quantizationしたモデルを使ってみます。delegateだと実行可能でした。np.uint8からnp.float32に変更して、0.0-1.0に正規化しています。quantizationとほぼ同じでした。upLoginユーザーは見つかりませんでした。