誰でも使える人工知能FPGA2I:FPGAシールド for Arduinoの実習に参加してきました
9/20(木),21(金)に北海道大学情報科学研究棟で実施された、「FPGAシールド for Arduino」の実習2に参加してきましたのでレポートします。
FPGAシールドとは
「FPGAシールド」とは、AIの学習や推論に使用することを目的として、Arduinoに載せて開発を行うための基板、いわゆる「シールド」としてFPGAを実装したものです。「AIシールド」とも呼ばれています。
資料やサポートフォーラム、QAを掲載したWebサイトがあり、参加者には利用するためのアカウントが必要となっています。
公開情報として、WebにはMaker Faire Tokyo 2018の参加者紹介ページがありましたので、主旨等はご参照ください。
http://makezine.jp/event/makers2018/m0315/
実習
初級と上級の2コースです。 * 初級: Arduinoの使い方から学習する方 * 上級: ArduinoとRTLを知っている方 今回は初級を選択しました。
実習は二日間実施だったのですが、都合により参加したのは二日目のみです。
前日の復習を兼ねて、まずは座学で「Arduinoの基礎」「FPGAの基礎」の解説を少し。
あとの時間は、実際に手を動かす実習です。実習に必要な機材はすべて貸与いただけました。(私はFPGAシールドとSeeed Grove IoTキットは持参したものを使用しました)
まずは、PCを使って開発環境を触ります。PCに用意されていたのはCentOSでした。Linux用のArduino環境を触るのは実は始めてです。ちゃんと同じように使えました。
FPGA向けの開発環境として、Quartusも用意されていましたので、ビルドしてみました。FPGAの合成はとても時間がかかるという予想でしたが、今回の課題で用意されているものでは、数分で終わるくらいでした。
FPGAシールドは、Arduinoの上に重ねて使用します。いわゆるArduinoのソケットの形に合わせてすべてのピンが合うように差し込みます。ピン数が多いので少し固めです。
FPGAの書き込み
FPGAシールドを使用するためには、FPGAにsvfファイルで回路を書き込む必要があります。目的に応じて回路は異なりますので、そのたびに書き込みを行う必要があります。
書き込みを行うには、svfファイルをmicroSDカードに書き込み、それをFPGAシールドに差し込みます。そして電源を入れるため、ArduinoのUSBコネクタをPCに接続します。そうするとLEDが高速に点滅し書き込みが行われます。書き込みが終了すると、LEDの点滅がゆっくりに変化します。電源を切断し、microSDカードを抜いておきます。
使用するsvfファイルは、課題ごとにあらかじめ用意されていましたので、それを使用します。FPGAボードは、FPGAのサイズ(LE数)によって、25k版と16k版の2種類があり、svfファイルもそれぞれ用意されています。ボードの種類はチップの型番で確認できると案内がありました。
FPGAの書き込みは、USB Blasterを使う方法もあるそうです(10ピンのピンヘッダが用意されています)。
Arduino IDEにライブラリを組み込む
ArduinoとFPGAは、メモリを介してデータを受け渡します。SRAMにデータを書き込むことで、FPGAに対してデータを渡し、反対にFPGAで処理した結果はSRAMに書き込まれますので、それをArduino側で読み出します。またデータの準備ができたことを示すためのシグナルをGPIO経由で知らせます。
この双方向のデータの受け渡しを行うためのライブラリが用意されていますので、Arduino IDEへ組み込みます。Arduino/librariesディレクトリに用意されているライブラリをまるごとコピーするだけです。
cd FPGA2I_Series_Rev2.0a2/02_SA_Basic/Option_libraries_Basic_0811 cp ~/Arduino/libraries
Groveセンサを接続する
Groveとは、Seeed Studioが開発しているセンサやスイッチ、アクチュエータなどの電子部品を、同じ形をしたコネクタ経由で使えるようにした仕様のことです。GPIOやI2C, SPI、UART(シリアル)など、いろいろな信号の仕様がありますが、それらすべて4ピンのコネクタ経由で使用することができます。電源も合わせて供給されますので、ケーブル一本だけで、さまざまなスイッチや、センサ類を接続することができます。
今回はGrove IoTキット、そして追加でいくつかスイッチ類を追加で使用しました。
基本サンプルを試してみる
用意されている基本サンプル7種類は下記の通りです。
- 01_Logic : 論理演算を学習
- 02_Color:色を学習再現
- 03_Volume:アナログ値を学習
- 04_Distance:距離の覚え込み
- 05_Timing:タイミング自動調整
- 06_Rhythm:リズムの記憶・再生
- 07_Pattern:パターンの記憶・再生
01_Logic
一番最初の課題、ロジック回路を学習させその動作を確認する基本サンプル1:01_Logicを組み立てたところです。学習/推論モードの切り替えスイッチと、論理入力
ボタンを押すと真理値表に従って数十回の学習が行われます。そして二つのスイッチで0または1を入力すると、推論された論理に従ってLEDがONまたはOFFに変化します。サンプルの真理値表は、XORでしたが、当初は変化しなかったLEDが、学習後はちゃんと論理に従って点灯しました。
真理値表をORに書き換えて学習させると、ちゃんとそのとおりに出力するようになりました。
06_Rhythm
続いて、06_Rhythmを組み立てたところです。
このサンプルはリレーのカチカチ音をメトロノーム代わりに、ボタン操作によりブザーを鳴らし、その音を拾ってそのリズムを学習するという例です。
マイクの感度が合わなくて調整が必要でしたが、何度か調整して反応が変化するようになりました。
実習では時間も限りがあるので、全てのサンプルを試すことはできませんでした。使用するセンサーの組み合わせが異なりますが、基本的な手順は同様ですので自分で試すことは難しくなさそうです。
ライントレースのデモ
実習の最後に、ライントレースカーのデモが披露されました。ラインが一部切れていますが、学習した軌跡をそのまま維持してコースを走り続けることができるとのことです。時々外れていたのはご愛嬌でしょうか。
最後に
「FPGAシールド for Arduino」実習に参加してきた様子を少し紹介しました。サンプルを動かすだけであれば、素人でもFPGAによる機械学習を実際に動かすことができました。ソースコードは公開されており、CNNやRNNの学習機をFPGAで実装している中身はもっと深い要素がたくさんあると思いますので、これを手掛かりにいろいろ調べて行くと中身の理解につなげることができるのではと思います。Arduinoと組み合わせることのできるFPGAボードの例としても興味深いです。ご興味を持たれた方はお問い合わせしてみると良いと思います。