Jetson nano開発者キットB01を使った「ゼロからはじめるJetson」の3回目。
前回はJetson nanoを立ち上げて初期の設定を行うまでの様子を紹介しました。
今回は、JetPackにどんなサンプルが入っているかをご紹介します。
JetPackについての開発者用ドキュメント
NVIDIA社はJetsonの開発者用ドキュメントのサイトを用意しています。残念ながら英語ですが、このサイトにてライブラリー、サンプル、デベロッパーツール、それぞれについてのドキュメントが掲載されており、Jetsonを使ったアプリケーションの開発に必要な情報がまとまっています。
Introduction to JetPack :: NVIDIA JetPack Documentation
JetPackに入っているサンプル
JetPackには、
- TensorRT
- cuDNN
- CUDA
- MM API
- VisionWorks
- OpenCV
- VPI
のサンプルが入っており、Jetson nanoを入手して、このサンプルを動かすことで、Jetson nanoの実力を体感することができます。
ちなみに、こちらが2019年5月の時点のサンプルプログラムです。この時と比べるとVPIというサンプルが増えていますね。
VPI-Vision Programming Interface
VPI – Vision Programming Interface: Main Page
VPIというのはVision Programming Interfaceの略です。
下記はNVIDIA社のサイトにかかれている説明の機械翻訳です。
NVIDIA® Vision Programming Interface (VPI)は、NVIDIAの組み込みデバイスやディスクリートデバイスで利用可能な複数のコンピューティングハードウェアプラットフォーム上に実装されたコンピュータビジョン/画像処理アルゴリズムを提供するソフトウェアライブラリです。
VPIは、OpenCVやCUDA SDKのような異なるAPIや、PVA – Programmable Vision AcceleratorのようなパブリックAPIがまだ存在しない場合など、異なるAPIや時には互換性のないAPIを介してアクセスしなければならない様々なコンピューティングハードウェアへのシームレスなアクセスを提供します。
VPI内では、CPU、GPU、PVA1などの異なるバックエンドに同じアルゴリズムが実装されています。処理パイプラインは、ターゲットデバイスのインストールされたコンピューティング能力をフルに活用するように設定することができます。例えば、PVAが次のフレームのための前処理段階を実行している間に、GPUで1フレーム分のディープラーニング推論段階を実行することができる。同時に、CPUは、現在の結果をユーザに表示したり、前のフレームの後処理タスクを実行したりするなどのGUIタスクを自由に実行することができます。
高いスループットを実現するために、VPIは、メモリ特性(ディメンション、要素タイプ、アライメントなど)に応じて、サポートするさまざまなバックエンド間でシームレスな共有、ゼロコピー、メモリマッピングを提供します。API は、メモリの割り当てが初期化段階で行われるように設計されており、通常は 1 回実行されます。その後、アプリケーションのメインループの間に、アルゴリズムは必要に応じて、事前に割り当てられたメモリを再利用します。
まとめ
1年前に比べて新しくVPIのサンプルが増えました。また、それ以外のサンプルももしかしたら新しいものが含まれているかもしれません。
次回からはひとつづつサンプルを動かしながら、その方法をご紹介していきたいと思います。