では、PCで作成した学習済みニューラルネットワークをFPGAに実装して推論させてみましょう。
図1は、推論前の手書き文字です。手書き文字とはいっても、FPGAの開発環境を用いてあらかじめ設定しておいたものです。FPGAの電源投入時あるいはPCからのFPGAのプログラミングが完了した時点では、LEDドットマトリクスには何も表示されてないのですが、リセットボタンを押せば図1のようにLEDドットマトリックスに手書き文字が表示されます。これが推論対象の文字になります。
なおリセットボタンは、Tang NanoのボードのUSBポートを左側にしたときに、USBポートの上側にある白いタクトスイッチになります。推論開始は、同じくUSBポートの下側にある白いボタンを押せば開始されます。
図2は推論結果をLEDドットマトリクスに表示しているところです。先ほど示した手書き文字は推論の結果、学習済みの「D」「J」「C」「M」の中から「D」が最も近かったということが示されました。
もう一度、手書き文字の表示に戻りたいときはリセットボタンを押します。結果は同じですが、もう一度推論させたい場合は先ほどと同様にUSBポートの下側のボタンを押します。
また、他の手書き文字で推論を試したい場合は、PC側のFPGA開発環境で25ビット長のレジスターneurosの値(ビット列)を書き換えて、Tang Nanoをプログラミングし直してください。
FPGA上での今回のニューラルネットワークによる推論の実行にかかる時間を計測してみましょう。USBポート下側の白いタクトスイッチを押すと推論を開始するので、そのスイッチの状態を観測するためのテストピンと、推論が終了したときに立ち上がるテストピンをTang Nanoのボードのピンから出しています。そのタイミングの差をオシロスコープで計測すれば、推論実行にかかった時間が分かります。
図3はオシロスコープで2つのタイミングの差を観測した写真になります。
図3の上から2番目の緑の横線が推論を開始するためのボタンの状態を示しています。その上の白い横線が推論が終わったことを示す信号線の状態です。
縦軸のひと目盛りは5Vです。また横軸のひと目盛りは100nsです。推論の開始を指示するスイッチの押下は負論理ですので立ち下がった時点で推論が開始します。この時点から上の白い線が立ち上がるまでの時間差が推論にかかった時間ということになります。
図3を見る限りで、この時間分解能では差を見いだすことが難しいくらいになっています。このTang Nanoは27MHzクロック(1クロック当たりの周期は37ns)の発振子を積んでいるので、少なくとも40ns以上の差異は見て取れないので、1クロック以内で推論処理が完了していることを示していると思います。
この波形を見てどう思いますか。このオシロは最近中古で購入したのですが、使い方が完全には分かっておらず右下の測定日時表示が2039年になったりしてはいますが、別段近未来から来た幻想の値というわけでもありません。
波形に話を戻すと、本稿はFPGAの話なのでロジックというかデジタル回路で全て解決できるので、ロジックアナライザでも十分だったのですが、オシロの波形はちょっと生々しいですよね。電位が変位した後にバウンドしたように見えますがこれはプローブと接続先との整合がうまくできてないことによるものと思われます。これから見てもそんなに容易に1と0を区別できないことをお分かりいただければと思いました。
いかがでしたでしょうか。本連載の全体の流れをつかんで頂けたでしょうか。次回以降は、PCでのニューラルネットワークの学習や、FPGAへの実装作業など、各パートに分けて詳しく解説していく予定です。次回をお楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.