がじぇっとるねさす

ホビーとエレクトロニクスを繋げるサイト

アイテム

e-AIトランスレータ チュートリアル

GRボードで実行してみよう!

概要

本チュートリアルではTensorflowの例題にある「MNIST For ML Beginners」で、e-AIトランスレータ用のファイルを出力し、GRボードで実行するまでの手順を紹介します。
MNISTの例題は全結合層一層のコンパクトなAIです。

login

準備

ハードウェア

いずれかのGRボードを準備してください。ただし、GR-KURUMI、GR-COTTON、GR-ADZUKIは本チュートリアルで出力されるCソースに対してROM容量が足りないため、ボードでの実行はできません。


Python, Tensorflow

Tensorflowのインストールページに記載されている手順に沿って、PythonとTensorflowが実行できる環境を構築してください。pipコマンドで最新にアップグレードすることを推奨します。
pip3 install --upgrade tensorflow


e-AIトランスレータ

このチュートリアルではWebコンパイラのe-AIトランスレータを使用しますので、インストール不要です。
なお、e2studioのプラグインでe-AIトランスレータを使用することもできますので、その場合はe-AIトランスレータのマニュアルを参照してインストールを行ってください。


コンパイル(ビルド)環境

このチュートリアルではWebコンパイラでビルドしてGRボードで実行できるバイナリ(binファイル)を生成しますので、インストール不要です。
なお、e2studioでのビルド環境でもできますので、その場合はe2studioでビルドを行ってください。

 

機械学習の実行

e-AIトランスレータ用の学習済みAIモデルを出力するため、以下のMNIST用Pythonコードを実行します。オリジナルのコードとの違いについては巻末の解説を参照してください。

以下のリンクをクリックするとダウンロードが始まります。任意のフォルダにダウンロードしてください。

mnist_softmax_for_e-ai.py

ターミナルでダウンロードしたフォルダに移動し、以下のコードを実行してください。
python mnist_softmax_for_e-ai.py

以下のようにtf_LearnedModelに4つのファイルが生成されます。これがe-AIトランスレータ用の学習済みAIモデルとなります。

login

e-AIトランスレータの実行

Webコンパイラにログインして、新規にプロジェクト作成してください。その後以下の「e-AI Translaotr」ボタンを押してください。

login


次に「アップロード」ボタンを押して、学習済みAIモデルが格納されたtf_LearnedModelフォルダを指定してください。4ファイルがe-AI_Modelフォルダにアップロードされます。それ以外の設定はそのままで「トランスレート」ボタンを押してください。

login


成功すると以下のようにTranslation Successと表示され、サンプルプログラムが表示されます。サンプルプログラムをそのまま使いますので、テキストコピーしておきましょう。コピーしてからウィンドウを閉じてください。
なお、e2studioのe-AIトランスレータプラグインでも同様にAIモデルを指定してトランスレートができます。

login

AIの実行

表示されたサンプルプログラムをgr_sketch.cppにコピーしてビルドしましょう。ビルド後のbinファイルをGRボードで実行し、シリアルモニターを表示すると、以下のように推論にかかった時間と、推論結果が表示されます。なお、筆者はGR-PEACHで実行しましたが、この場合約0.4ms程度で実行されるようで、時間は0と表示されています。

login


以下、画像をクリックするとサンプルヘッダをダウンロードできます。今回はあらかじめ用意された手書き数字データを読み込みましたが、例えばカメラ画像から、28x28のfloat型グレーイメージに変換して入力すれば、数字の判別を行うことができます。

login login login login login login

解説:e-AIトランスレータの入力ファイルについて

今回の入力ファイルは下記URLのPythonコードに対して、e-AIトランスレータ用にコードを追加しています。

https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/tutorials/mnist/mnist_softmax.py


追加しているのは下記ソースで強調表示されている81~89行です。学習後のAIをグラフ構造で出力するコードを学習終了後の位置に追加しています。他のAIモデルを出力するときにこれを参考にしてください。

なお、41~46行目のコメントアウト部分はe-AIトランスレータでの設定項目「入力シェイプサイズ」の適用を省くためです。TensorFlowは入力で使った変数をそのまま次の層で使うと、入力変数のshapeを得ることができません。一度別の変数で受けると、shapeが固定されるため「入力シェイプサイズ」の設定に依存しないようになります。


 

解説:e-AIトランスレータの出力ファイルについて

e-AIトランスレータによって出力されるファイルの概要を示します。ファイルの中身はWebコンパイラでファイルをダブルクリックして確認してみてください。

ファイル名 概要
dnn_compute.c 変換したニューラルネットワークの推論実行関数
network.c ニューラルネットワーク関数ライブラリ
layer_graph.h 変換したニューラルネットワークで使われているライブラリ関数のプロトタイプ宣言
layer_shapes.h 変換したニューラルネットワークで使う変数定義
weights.h 変換したニューラルネットワークの重み,バイアス値
Typedef.h ライブラリを使う際の型定義
input_image_0.h MNIST形式のサンプル文字データ
network_description.txt ニューラルネットワークの構造を解析した結果認識した層定義と,その構成
checker_log_output.txt 上記解析した構造から,数式を使い目安となるROM/RAM容量計算量を見積もった結果。ただし、スピード優先、RAM消費量低減優先のオプションは未考慮。実際には,ノードの値を引数で再定義するため,実際の必要容量は2~3倍となる
 

share