1-01 重み係数・バイアスを整数化するPythonプログラム

●Pythonの実行環境はGoogle Colab(*1)

 Google Colabのノートブックから「ファイル」をクリックします。図1‐01のようにsample_dataフォルダのみが存在します。

(*1)PCでもラズパイでも実行できます。ブラウザはPCならChrome、ラズパイならChronium推奨

図1‐01

●ファイル枠にドラッグ&ドロップ

 インターフェース誌のダウンロードサイト→2025年3月号→生成AI×エッジ・デバイス…からPC用アーカイブ(edgeai-pc-202403.zip)をダウンロードして適当なディレクトリに展開します。その中にballs_int_5.py, weight_plus.zipがあるので図1‐02のようにアップロードします。

1‐02

●重み係数・バイアス(小数版)の準備

 !unzip weight_plus.zip とタイプして解凍すると
、図1‐03のように重み係数w1〜w6.csv、バイアスb1〜b6.csvが現れます。これらは前の章(ラズパイ編)で生成した重み係数です(*2)。

(*2)balls_float_5.pyを実行すると生成される。ただし、実行のたびに係数値、バイアス値は変わってくる(学習に使用する画像の順番がランダムに変わるので)。

図1‐03

●重み係数・バイアスを整数化するPythonプログラム

 w1〜w6.csv、b1〜b6.csvは皆小数なので、そのままではFPGA化出来ません。run balls_int_5.py とタイプして実行すると図1‐04のようにw1_int〜w6_int.csv、b1_int〜b6_int.csvが生成されます。これらは整数化された重み係数・バイアスです。

図1‐04 

●ラベルリスト、推論用Python、推論用画像セットをアップ

 PC用アーカイブのTestBalls_5.csv, balls_int_pred_5.py, val_1.zipをアップロードします。

図1‐05

画像セットは赤/緑/青/黄/床の5クラス

 !unzip val_1.zip で解凍すると図1‐06のようにval_1フォルダの下に5つのフォルダが現れます。これらは推論用画像セットです。

図1‐06

整数化後の認識率の確認

 balls_int_pred_5.pyは整数化した重み係数・バイアスを使って推論を行うプログラムです。実行すると図1‐07のように正解率が100%となっており、小数と比べてほぼ劣化していないことが分かります(*3)。

(*3)整数化すると推論品質は劣化するが、このケースではそれが数字に表れなかったということ

図1‐07 

重み係数・バイアス(整数版)のCSVファイル

 w1_int〜w6_int.csv、b1_int〜b6_int.csvがを右クリックでダウンロードします(図1‐08)。これらCSVファイル12個を以降のステップ(EXCEL化)で使用します。

図1‐08 

入力画像や中間出力などのデータもCSVに落とす

 balls_int_pred_5.pyは他にもいろいろなCSVファイルを生成します。下表はそれらの説明。例えばlay6out_sample_00.csvはFPGA内部信号との比較に使います(ここ参照)。
CSVファイル 説明
Bin1_int, Gin1_int, Rin1_int 推論画像最初の1枚目の画素。それぞれB/G/R成分
RGB565.csv 推論画像最初の20枚の画素。B/G/R成分が結合して1データになっている。
layNout_M N層目Mチャネル目の出力(推論画像最初の1枚目)
lay5out 5層目の出力(推論画像最初の1枚目、lay5Boutも同じ)
lay6out_sample_X 6層目の出力(推論画像最初のX枚目)

目次へ戻る