あさりのみそしるダイアリー

ココロおだやかに暮らしてます😌

【プログラミング】NVIDIA Optical Flow SDK 3.0 がリリース!

2021年7月、NVIDIA開発者サイトに「Optical Flow SDK 3.0」がリリースされました!

developer.nvidia.com

 

NVIDIAのグラフィックボードを使用して、オプティカルフローによる動画像中の動きの計算やオブジェクトトラッキングなどを行うことができます。

 

SDKのダウンロードはこちらから。(要NVIDIAアカウント)

developer.nvidia.com

 

今回の大きな更新内容は以下のとおり。

 

1.DirectX 12 Optical Flow APIのサポート

MicrosoftのローレベルプログラミングAPIであるDirectX12が提供するAPIを使って、NVIDIA Optical Flow APIが使えるようになりました。

これにより、DirextX12アプリケーションから、NVIDIA GPUが搭載するパワフルなOptical Flowエンジンを利用することができ、3Dゲームや動画のフレームレートアップやスムーズなアニメーション表現を可能にします。

 

2.フォワード/バックワード Optical Flowのサポート (FBフロー)

従来のSDKでは、例えば連続する2フレームの画像1,2のオブジェクトの動きから、0番目(1の直前)と3番目(2の直後)の画像を推定したい場合、Forward方向(1→2)とBackward方向(2→1)の2回のオプティカルフローAPI呼び出しをしなければなりませんでした。

f:id:asarinomisosoup:20210727225721p:plain

 

この時、API呼び出しや重複する計算によって計算リソースのオーバーヘッドが発生し、計算の効率が良くありません。

今回サポートされた、Forward/Backward Optical Flow APIにより、1回のAPI呼び出しでForward/Backwardの両方向の計算ができるようになりました。

これにより、オーバーヘッドもなくなり、計算リソースを効率よく使用することができます。

 

3.Global Flow Estimation

カメラを固定したまま、カメラを水平・垂直方向に移動させる動作をパンと呼びますが、グローバルフローは連続するビデオ動画像やゲームのフレームにおけるカメラ/視点のパンによって発生します。

画像中のあるオブジェクトではなく、カメラ画角中の背景成分が画面全体にわたって移動するようなときに、グローバルフローベクトルを計算して背景の動きを推定することで、これをフレーム補間に利用でき、フレーム内のピクセル衝突の計算などに利用することができます。

 

 

主な変更点は以上です。

 

Optical Flow APIは、ホビープログラミングや商用製品、教育などを問わず利用できます。

対応OSはWindowsとLinuxの決められたバージョンです。詳しくはNVIDIAのウェブサイトからご確認ください。

OpenCVのAPIからもOptical FlowのGPU計算系の機能からNVIDIA Optical Flow APIを呼び出せた気もしますが、3.0で動作させるには自前でビルドする必要があるかもしれません。ちょっと分からないです(´・ω・`)

 

それと、これ先に書いとけって内容かもしれませんが、Optical Flow SDKはNVIDIAのGPUがないと動作しませんが、特にTuring世代以降(RTX20xxなど)でないと動作しません

もう少し言及すると、Turingアーキテクチャ、AmpereアーキテクチャのGPUでのみ動作します。

たとえばPascal系や、それ以前のアーキテクチャでは動作しません。

 

というのも、NVIDIA Optical Flow APIによるオプティカルフロー計算は、GPU上のCUDAコアではなく、NVOFA (NVIDIA Optical Flow Accelerator) と呼ばれる専用のハードウェアアクセラレーターによって行われるからです。

動画のハードウェアエンコードをGPU上のNVENCで行うように、オプティカルフロー計算も専用のハードウェア回路で計算しています。なのでCUDAコアとは無関係であり、専用回路が搭載されたTuring/AmpereアーキテクチャのGPUでのみサポートされるというわけです。

docs.nvidia.com

 

私も昨年、オプティカルフロー計算をやろうとして、「おっいいのあるじゃーん」と思ったらGPUが対応していなくて断念した記憶があります(´・ω・`)←まだGTX1060で戦ってるやつ

 

なので、Turing/AmpereアーキテクチャのGPUがある方は、ハードウェアアクセラレーションが効いた高速なオプティカルフロー計算をSDKで実装してみてください(`・ω・´)

 

NVOFAというハードウェア回路がTuring/AmpereアーキテクチャGPUで完成しているところを見ると、将来的にJetsonの新シリーズOrinなどで導入される可能性もありそうですね。素人考えなので分かりませんが。

 

Ampere世代はPCの電源まわりがついていけてないのであれですが、Turing系だったらワンちゃんありそうなんだけど・・・

ぼくもお金あったら買うんだけどなー(´・ω・`)←金欠

 

おわり。

またNVIDIAまわりでおもしろそうなSDKのアップデートが入ったら、触れられる範囲でここでも取り上げてみたいと思います。