「Draco」を使った点群データの圧縮検証

はじめに


Team XRのホルヘです。

 

最近では、空間をスキャンしてデータとして保存できるデバイスや技術が普及し始めています。技術の進歩により、質の高い点群を撮影できるようになっていますが、 データのサイズも大きくなり、データの保存や共有が難しくなっています。 この問題を解決するために、データを圧縮して保存/共有し、必要なタイミングで解凍する需要が高まっています。

 

2013年、MPEGは静的データと動的に取得されたデータを対象とするGeometry Point Cloud Compression(G-PCC)と、動的コンテンツを対象とするVideo Point Cloud Compression(V-PCC)の2つの規格を作成しました。 その後2017年、GoogleはDracoと呼ばれる3Dジオメトリメッシュと点群を圧縮・解凍するためのオープンソースライブラリをリリースしました。

 

今回は「Draco」の使用感と結果についてまとめてみました。

点群データの取り方


Kinect v2を使用して点群深度データを約6秒間記録し、各フレームをPLYファイルに保存しました。

 

この場合、各フレームの深度データのみを保存するため、PLYファイルのサイズは1フレームあたり5070~5147KBs程度になりました。 合計191フレーム、約959MBのサイズです。つまり、1分間のテストデータを作成する場合、1サンプルあたり10ギガバイトになります。これを仮にAIの学習に利用する場合は、何千ものサンプルが必要になるので、このままデータを使うと何百テラバイトのデータを扱うことになるので、現実的ではありません。 

Dracoで圧縮


Dracoを使ってPLYファイルをエンコードし、デコード後のファイルサイズとデコードにかかる時間をチェックします。 

 

主に2つの設定があります:

  •  Compression Level(CL):10は最も高い値で、最も圧縮されるが、デコードに時間がかかる。
  •  Quantize Position(QP): パラメータに0を指定すると、量子化を行いません。 0以外の値を指定すると、指定した属性の入力値をそのビット数に量子化します。

結果は以下の通りになりました。

まとめ


試したパターンで最小のQPは9ですが、ポイントが減りすぎて、多くの情報が失われているようでした。プロジェクトのニーズによっては、点群データの品質が必要なければ、使えるかもしれません。

 

QP13が一番バランスがよく最高の結果をもたらしました。点群の品質はオリジナルとほぼ同じで、エンコードされたバージョンはオリジナルの5%のサイズまで削減することが出来ました。

 

単純にデータ数を間引くだけなら簡単ですが、利用時に意味のないデータになってしまう事が多いので、この「Draco」を利用すればその問題を軽減できそうなのが分かりました。

上記ブログの内容に少しでも興味がありましたら、お気軽にご連絡ください。

弊社のエンジニアがフレンドリーに対応させていただきます。