20-05 エミュレーションモードでFPGA内部とPythonの一致を見る

●Pythonと同じ入力をFPGAの入力に持ってくる

 「エミュレーションモード」では図20‐27のような静止画が表示されます。これらはMNISTテスト画像です(*1)

(*1)Python実行の最後に表示した48枚のうち、最初の16枚が繰り返し(20回)表示される。

図20‐27 Pythonで推論する際に使用するMNIST画像を表示

●ROMがカメラの代わりをするエミュレーションモード

 
MNISTテスト画像は図20‐28のように
FPGA内部のROMに格納されています。エミュレーションモードでは「カメラ」の代わりに「ROM」が選択されるため、MNISTテスト画像が表示・推論されます。

図20‐28 EMUMODE=1でMNIST画像が選択される

●Pythonと同じことがFPGA内部信号で起こっているか

 図20‐29では緑色で推論結果が上書きされています。この状態でFPGA内部信号を
ロジックアナライザであたり、Pythonとの一致を見ます。

図20-29 MNISTテスト画像をFPGA内部で推論している


●最終層の出力はどうなっているか

 図20‐30は
Signal Tap Logic Analyzer(*2)で見たFPGA内部信号、6層目の出力の部分(AIN)です。512, -485, -287, -376,... -1065, -1427と16個あります(*3)。

(*2)Quartus Primeに付属するロジックアナライザ。FPGA内部信号がUSB経由でパソコンに送られる。
(*3)数字10クラス+背景6クラスで計16クラス。最初の512が最大なので答えは数字の”0”。

図20-30 6層目の出力(16個)で推論結果の判定(最初の1個だけ正の数)

●ひるがえってPythonでは・・・

 図20‐31はPython (mnist_pred.py) における6層目の出力です(*4)。FPGA内部信号と
ピタリ一致していることが分かります。

(*4) lay6out_sample_00.csv, Pythonプログラムが各層の出力をCSVファイルに書き出していた。

図20-31 Python(この図)とFPGA(図20‐30)を比較

FPGAで作るエッジAIチップ!

 FPGA内部での演算とPythonでの演算が一致しており、これはPythonのプログラムが正しくHDL化→FPGAに実装できたことの証明になります(
Pythonのハードウェア化に成功!)

 DNN(Deep Neural Network)は複雑な演算に見えますが、所詮は
整数の掛け算と足し算です。言語が変わったところで結果が変わる理由はありません。丁寧に行えば必ず一致します。


 MNIST手書き文字認識をハードウエア化しましたが、一連の作業をYoutubeにアップしてあります。是非ご覧ください。

 @こんなものを作りました
 A始まりはPythonから
 BPythonのEXCEL化(1層目)
 C2,3,4層目のEXCEL化
 D5,6層目とその他のEXCEL
 EEXCEL+VBAでHDL自動生成
 FFPGAに実装して動作確認


★定期的にセミナも行っています(活用編作成編

最初のページへ

目次へ戻る