点云序列压缩格式对比

在工作中有存储点云数据的需求,因此对不同格式的点云压缩率做了比较。

目录

在自动驾驶数据中,点云几乎总是单个传感器数据量最大的一部分,原因是它经常由数十万个点构成,而每个点的精度要求又都很高,造成了单帧点云的数据量就很大,因此一个好的点云压缩算法,尤其是能处理点云序列的算法对节省存储和传输开销是很有用的。

测试对象

本文主要对比几种不同数据格式压缩点云序列的压缩率和速度,涉及的格式如下:

  • tar:最基本的文件打包格式之一,配合强大的压缩算法(本文使用LZMA)即可以获得有效的点云压缩。
  • npz:Numpy所使用的数据打包格式,其本质上就是特殊格式的zip文件。
  • pcd:这个格式是在点云处理领域很常用的库——PCL——所使用的点云格式,它也支持对二进制存储的点云进行压缩。
  • laz
  • drc:这个格式是Google的Draco几何压缩库所使用的格式,也被应用与GLTF等文件格式中。它的主要使用对象是网格(Mesh)数据,但也支持点云的无损和有损压缩。

目前据我所知,没有针对时序点云设计的存储和压缩格式。有一些格式支持深度图的压缩,但是点云并不是总能无损地转变成深度图,因此在本文对比中没有考虑。

测试使用的数据是从Carla仿真器中采集的连100帧点云数据,这些数据原始的存储格式是numpy的npy格式(该格式没有任何数据压缩)。

测试结果

LAS格式对点云压缩的支持较好,对一些常用的点属性有清晰的定义和支持,但是它对自定义的点属性支持不够灵活,并且不支持有损压缩;Draco格式虽然是针对网格数据设计的,但是它支持自定义的点属性,并且它使用量化技术对浮点数进行压缩,能够有效地进一步降低点云压缩后的大小。由于传感器本身的噪声,对点云数据进行一定程度的有损压缩实际上是完全可以接受的,但是如果有损压缩的点云会被用于机器学习的模型,那么量化带来的一些数据上的噪声规律是有可能对模型性能产生一定影响的,需要留意。

时序点云压缩目前没有有效的算法,这可能是在两帧点云的点中进行匹配并不是一个简单的问题,因此delta encoding等手段并不能方便地应用于点云数据。但是从实验结果中可以看出,把多帧点云转移到同一个坐标系中其实是一个有效的手段,因为对于静态场景来说,在同一个世界坐标系中不同帧的点云对静态物体的采样应该是很接近的,这就给提高压缩率带来了可能。

最优格式:draco + 适当量化 + 时序对齐 兼顾速度的最优格式:laz + 时序对齐

Draco量化

分析量化性能损失


结语:希望能看到针对时序点云的压缩格式设计;相关代码参考我的Github仓库:xxx

使用 Hugo 构建
主题 StackedJimmy 设计,Jacob 修改