前企画はMNISTという手書き文字データセットをハードウエア化しました。本企画ではこの書籍にあるSSD(Single Shot multibox Detector)と呼ばれる物体認識(推論)のPythonプログラムをハードウエア化していきたいと思います。
●なぜハードウエア化するのか
SSD物体認識はディープラーニングの一種ですが、上述の書籍にあるプログラムは「Python」という言語で書かれており、パソコンで実行する分にはそれほどハードルは高くないでしょう。
しかしパソコンを電気製品に組み込むわけにはいきません。例えばビデオカメラなどでSSD物体認識を行うにはどうしたらよいのでしょうか(図1-01)。
図1‐01 パソコン上で走らせるのは簡単だが…
●ラズベリーパイを組み込むと・・・
ラズベリーパイ(図1‐02)は小型のシングルボードコンピュータで、ちょっとしたパソコンといったところでしょう。パソコンと同じように起動に1分程度かかるので、車に搭載したとするとキーをひねってから動作するまで1分以上待たなければなりません。
またCMOSカメラモジュール(イメージセンサ)を直で操作することが困難です。USBカメラを使うことになりますが、OSの状態によってフレームレート等が変わるため、動画のリアルタイム処理には不都合が生じます。
またOS上で動く限りカーネルパニックなど、フリーズの危険性が常に付きまといます。
図1‐02 ラズベリーパイ3 model B
●マイコンを組み込むと…
一般の電気製品はたいていはCPU(マイコン、図1‐03)で演算・制御を行います。広く普及したデバイスなので安価で小型・省電力というメリットがあります。
またOSを使わないので即応性、安定性は高く、タイマなどを使えば一定のサイクル数で処理できます。
しかしCPUは「逐次処理」であり一つ一つの計算を順番に行います。したがってあまり高速ではなく、ディープラーニングのような大量演算には不向きです。
図1‐03 Nucleo-F303RE
●GPUを組み込むと…
最近はGPU(Graphic Processing Unit、図1‐04)が流行ってきました。演算ユニットがたくさんあるのでそのぶん並列演算が可能になります。
またリアルタイム性、即応性も悪くなく、OSを使わなければ安定的です。
しかしたいていは大きな放熱板がついており、それは大電力を消費することを意味します。放熱板があると格納するケースも大きくなり、結果的に大きな製品になります。
図1‐04 Jetson Nano
●そこでFPGAの登場!
FPGA(図1‐05)はField Programmable Gate Arrayの略で、「現場でプログラムできるロジックの塊」です。「並列処理」が可能で、大量の乗算器・加算器で同時に演算できます。本企画ではこのFPGAでのディープラーニング(SSD物体認識)のハードウエア化を目指します。
図1‐05 Starter Platform for OpenVINO Toolkit。FPGAはCycloneV GT 5CGTFD9D5F27C7N
●VHDLでハードウエアを記述する
FPGAの開発にはHDL(Hardware Description Language)という言語を使用します。HDLには主にVHDLとVerilogがありますが、本企画では前者を使用します。Pythonで書かれたプログラムをVHDLに移植してFPGAに実装するまでのプロセスや、性能を向上させるための勘所を伝えたいと思います。 |