超リアルタイムHMD試作に向けた技術検証(中間報告?)
以前から書き続けていた電脳メガネ計画ですが、一応、パーツ実験としてカメラからOLED表示までの一連のデータパスが貫通したので、一度動画にまとめました。
あとは、上の動画だと遅延の解消にどういう価値があるのか分かり難いと思いますので、同じ観点で訴求されているマイクロソフトのHigh Performance Touchという動画にもリンクを張っておきます。とても分かりやすい動画なので、現実世界に対してバーチャル空間の処理が遅れないことの価値を感じていただければと思います。
また、同システムで高速度撮影も実施してみたので、分かりやすく性能を示す面で、こちらの動画も張っておきます
部屋が暗いというのもありますが、ちょっとザラザラしてくるのが高速度撮影の特徴です。S/N比が悪化しますが、情報が減っているわけではなく、これをフレーム間で足し合わせると、ノイズが減り、従来の露光時間の画像にも戻せてしまうという点で、情報量としては上位互換でして、これを使ってHDRなどの新しい撮影なども可能です。
HMDとしては、まだまだ、システムとして機能するよう形にするには課題が山済みですが、使えるデバイスが揃えられるかという技術検証としての大きな山場は越えたように思います。
次の課題は
- システムとしてどうやって実用的にメガネ(HMD)の形にしていくか
- アプリやコンテンツどうするか?
というフェーズに移れそうに思います。
後半のコンテンツ部分は、まあもうちょっと先になると思いますので、あれこれ考えつつシステムとしての検討が出来ればと思いますが、前半のシステム検討も時間とお金も必要になってくるのでじっくり進めていければと思います(そもそもHMDの形にするにはFPGAごと基板起こさないと辛いかもと思い始めていたりです)。
今日は一旦ここまでを振り返ってみたいと思います。
当方、RTOS自作したり、CPU作ったりと、計算機科学部分には比較的昔から取り組んでいましたが、特にFPGAとの出会いは大きかったように思います。
当初はシリコンOSとか作れれば面白いかなという程度だったのですが、どうせFPGA使うならFPGAでしか出来ないことがやりたいな、しかもリアルタイム系、つまり現実世界や人間と深く相互作用するコンピューティングがやりたいなと思いが広がってきました。
今回の試作は、リアル空間にリアルタイムに相互作用できる可能性を示せた点で意義があったと思います。これまで何度か書いておりますが、リアルタイムシステムというのはシステム全体で考える必要があります。その際に、特に重要なのがアムダールの法則だと思います。目的のスペックに対して、システムのボトルネックを効率よく取り除いていく必要があります。
つまりは、入出力での遅延が計算機より遅いと意味が無くなってしまうわけです。例えば今回のようなAR的なものだと、カメラ/計算機/表示が、それぞれ16.6msで50msだったときに、計算機だけ16倍速くして 1ms にしても他が同じ速度だと、システム全体では 34.3ms に短縮されるだけで、1.5倍程度しか早くならないわけです。
そういった中で、OLEDがFPGA直結で思惑通り 高速で動いてくれ、安価な Raspberry PI のカメラがこれもまたFPGAに直結で1000fpsで動作してくれたのは非常にラッキーでした。
いや~、意外と何とかなるもんですね
FPGA直結というのも肝でして、各種I/Oと演算器を直結できるI/Fが記述で来ちゃうのがFPGAの良いところでもあります。
データフローとセットで計算機を構成できてしまい、いわゆる非ノイマン型の演算アーキテクチャのアイデアがいろいろ試せてしまうわけです。
いわゆる一般のCPUやGPUはハードマクロで超高速ではあるものの、メモリからメモリにしか演算できないので、メモリにデータを入れたり、メモリからデータを出したりという部分が遅いとリアルタイム性が一気に失われてしまいます(そもそもメモリから画像を出力するHDMIなどの規格に1000fpsなどのプロファイルは無いわけで)。
少し、おさらいしておくと、リアルタイムの世界では、スループットとレイテンシは分けて考える必要があります。
昨今のGPUは非常に大きなスループットで計算することが出来ます。例えば1秒あたりに1テラ個以上の浮動小数点演算が出来てしまったりします。
ただし、これは1個が 1ピコ秒で演算が出来るわけではなく帯域として1秒あたりに沢山演算できるというだけで、実際の演算は並列処理やパイプライン処理で、もっと時間をかけて演算しますし、演算器にデータがたどり着くまでに様々なバッファリングが行われてシステム的にも遅延が入るわけです。
このデータを入れてから出てくるまでの時間がレイテンシと呼ばれるものですが、リアルタイムシステムではレイテンシもスループットと合わせてとても重要です。
折角、1秒あたり1テラ個データを入力することが出来ても、そのデータをあちこちメモリに貯めたり、転送したりしてから回りまわって、少し遅れてデータが出てくるのだと価値が下がってしまうケースもあるわけです。
なので、この分野だと、入力と演算器が直結でき、計算結果も出力デバイスに直結できてしまうFPGAは実に面白いわけです。
計算分野を限定すれば、スパコンでも出来ない演算システムが作れるかもしれません。ワクワクしますね。
引き続き頑張りたいと思います。
« Zybo Z7 への Raspberry Pi Camera V2 接続 (1000fps動作) | トップページ | FPGAアーキテクチャ上でのバイナリDNNについての考察 »
「FPGA」カテゴリの記事
- LUT-Networkの蒸留とMobileNet風構成とセマンティックセグメンテーション(2020.03.09)
- LUT-Networkの蒸留(Distillation)について(2019.12.29)
- FPGAでのDNN(Deep Neural Network)の整理(LUT-Netまとめ)(2019.12.15)
- LUT-NetのFPGAリソースについて(2019.12.08)
- MNIST認識のリアルタイム動作環境更新(2019.09.02)
この記事へのコメントは終了しました。
« Zybo Z7 への Raspberry Pi Camera V2 接続 (1000fps動作) | トップページ | FPGAアーキテクチャ上でのバイナリDNNについての考察 »
コメント