Progressive Tree-Based Compression of Large-Scale Particle Data | 学习笔记

目标

在这里插入图片描述

摘要

现有的方法存在缺点:
    1.要么只能很好地压缩小数据量,却对大数据量效率不高
    2.要么处理大数据量,但压缩不足

为了实现有效的、可扩展的粒子位置压缩/解压缩,我们引入了新的粒子层次结构和相应的遍历顺序,在快速和低内存占用的同时,快速地减少了重构误差

我们的大规模粒子数据压缩解决方案是一个灵活的基于块的层次结构,支持渐进的、随机访问的和错误驱动的解码,其中错误估计可以由用户提供。
对于低层节点编码,我们引入了新的方案,有效地压缩均匀和密集结构粒子分布。

因此,我们提出的方法针对基于树的粒子压缩管道有三个阶段,即树的构建、树遍历和节点编码。

与现有的压缩机相比,这些方法的有效性和灵活性得到了提高,这是通过广泛的实验和广泛的科学粒子数据集进行的。

关键词: 粒子数据集,压缩(编码),数据压缩与压缩,分层,渐进解压缩,粗近似,树遍历,多分辨率,可视化


盲点:粒子数据集
在计算机图形学中,粒子数据集是指包含了大量离散粒子信息的数据集。每个粒子都可以具有各种属性,如位置、速度、质量、颜色等,用于描述粒子在场景中的行为和外观。

粒子数据集常用于模拟和渲染各种自然现象和效果,如火焰、爆炸、烟雾、雨滴、云朵、粉尘等。通过在场景中放置和操纵大量的粒子,可以模拟和呈现出逼真的效果,使得场景更加生动和具有交互性。

盲点:粒子数据和点云数据的区别
粒子数据通常用于表示离散的、具有属性的粒子,如粒子系统中的粒子、分子动力学中的原子等。每个粒子都有自己的位置、速度、颜色等属性,并且粒子之间可能存在相互作用。粒子数据通常用于模拟和渲染自然现象、特效等。

点云数据是一种表示空间中离散点的数据形式。每个点都有自己的位置信息,但通常没有其他属性。点云数据常用于三维扫描、三维建模、计算机视觉等领域。点云数据可以用于重建三维物体、进行点云配准、目标检测等任务。

盲点:渐进访问 随机访问 错误驱动解码
该解决方案支持渐进访问,意味着可以根据需要逐步加载和解码压缩的数据。这对于大规模数据集或带宽有限的情况下非常有用,可以在不完全解压全部数据的情况下进行部分访问和分析。
随机访问:
该解决方案支持随机访问,即可以直接访问和解码所需的特定粒子数据,而不需要按顺序逐个解码。这样可以提高数据的访问效率和灵活性。
错误驱动解码:该解决方案采用错误驱动的解码方式,即根据数据的重要性和可接受的误差范围进行解码。根据具体需求,可以根据所需的精度水平进行解码,从而平衡解码质量和解码效率。


1.简介

目前还没有被广泛接受的粒子数据压缩器,
基于网格的压缩器用于压缩粒子的尝试 取得的成功并没有达到预期
除了HPC之外,被设计用于压缩点云来表示对象的技术,主要是以性能可伸缩性为代价提高压缩比,这使得它们不适合大型数据集。
另一方面,多分辨率渲染系统可以处理大量数据,但不以有效压缩为目标。

为了弥合高压缩比和低内存占用率压缩之间的差距,我们引入了新颖的基于树的粒子压缩方法,能够在不需要过多的计算或内存成本的情况下实现高质量的渐进式重建。
我们的重点是对粒子位置进行压缩,因为在几乎所有应用中都需要这些位置信息,并且在许多应用中,这些位置信息是唯一需要的属性。在科学应用中,粒子位置往往很难进行无损压缩,因为它们通常被指定到非常精确的精度,导致许多低位的信息基本上是随机的。然而,在有损和渐进式(解)压缩空间中,可以做出有价值的权衡。渐进解压缩使得解压缩器可以生成逐渐改进的近似数据,通过从磁盘或网络流式传输更多的比特进行解码,这些近似数据可以逐步细化。渐进解压缩使用户可以立即使用逐渐改进的数据近似值,而无需等待完整数据加载或解压缩,这可以极大地提升用户体验并加速洞察力的获取速度。渐进解码器还可以根据可用的计算资源和时间进行自适应,因为解压缩可以在达到一定时间或数据大小阈值时停止。

补充
在科学应用中,粒子位置通常需要以非常高的精度进行指定。例如,在分子动力学模拟中,粒子的位置可能需要被指定到小数点后多位数,以准确地表示其在空间中的位置。由于这种高精度的要求,粒子位置的编码会导致许多低位(小数点后的位数)的信息变得随机。
由于粒子位置的高精度要求和低位信息的随机性,实现对粒子位置的无损压缩变得困难。为了在粒子位置数据的压缩过程中取得良好的效果,需要采用有损压缩方法,即通过牺牲一部分精度来实现更好的压缩效率。

在渐进式压缩设置中,重建质量在很大程度上取决于粒子位置位的解码顺序,这也影响了在恢复解压缩时保持状态所需的成本。在解码成本和重建质量之间取得平衡通常表现为以下选择之一:(1) 对粒子进行空间上有限但完整的表示,或者(2) 对空间进行量化但均匀的覆盖,或者可以理解为深度优先(DT)和广度优先(BT)遍历粒子层次结构之间的选择。我们从树遍历和树构建的角度探讨了这种权衡。在我们的贡献中,核心是一种节点分割方案,称为奇偶分割(odd-even split),我们利用它构建了新颖的层次结构,可以以渐进地近似高质量的方式进行遍历,并具有几乎恒定的内存占用

补充
Quantized(量化):这指的是将空间进行离散化或量化处理。在粒子数据压缩中,将空间划分为离散的格点或单元,并对每个格点或单元进行表示。这样可以减少需要存储和传输的数据量。通过对空间进行量化,可以将连续的粒子位置转化为离散的表示。
Uniform coverage of space(空间的均匀覆盖):这表示将空间划分为具有均匀分布的格点或单元。在粒子数据压缩中,为了保持良好的重建质量,需要确保对空间的覆盖是均匀的。这意味着每个格点或单元应该具有相似的粒子数量或属性值,以便在解压缩时能够准确地恢复原始粒子的位置。

论文的贡献主要包括:

  1. 引入了一种新的空间划分机制——奇偶分割(odd-even split),它可以与标准的k-d分割结合使用,有选择地将子树的DT(dual tree,双树是一种树结构,用于表示粒子数据的层次关系)转换为相应空间的BT(binary tree,二叉树)(4.1小节)。
  2. 提出了一种将奇偶分割和k-d分割结合起来创建混合树(hybrid tree)的方法(4.2小节),使低内存占用的DT具有BT的能力(高质量重建),同时有利于压缩。
  3. 提出了一种自适应遍历方案(AT)(5.1小节),可以根据给定的误差度量动态引导树的细化;论文提出了两种启发式的误差度量方法。
  4. 引入了块混合树(block-hybrid tree)(4.3小节),结合了k-d树和混合树的优势,可以通过块自适应遍历(BAT)(5.2小节)进行遍历,以实现更好的内存-质量平衡和基于误差的渐进细化,并支持随机访问。
  5. 提出了二项式编码方案(binomial coding scheme)(6.1小节),通过使用二项分布来建模子节点值的分布,改进了均匀分布粒子的压缩效果。
  6. 提出了奇偶上下文编码方案(odd-even context coding scheme)(6.2小节),通过利用奇偶分割下两个子树之间的相似性,改善了密集表面数据的压缩效果。

在我们之前的工作中,我们对树的构建和遍历进行了初步讨论。在这里,我们通过将这些想法与新颖的节点编码方案相结合,进一步分析和扩展了这些想法。这些编码方案与树的构建和遍历(之前的工作)一起,完成了基于树的粒子压缩流程(图1)。我们的方案是灵活的,它们可以相互结合使用,也可以独立使用,适用于现有的框架。我们通过对各种粒子数据集的实验进行讨论和比较。最后,请注意,我们的工作纯粹关注粒子编码和解码的任务,这是后续任务(如渲染)的基础。我们的完整实现源代码可在线上获取。


盲点1:HPC:
在计算机图形学中,HPC(高性能计算)是指利用高性能计算技术来处理和渲染复杂的图形数据和计算密集型图形任务的领域。
HPC在计算机图形学中的应用非常广泛,特别是在处理大规模数据集、复杂模型和高精度计算方面。

盲点2:多分辨率渲染系统:
多分辨率渲染系统用于高效地渲染复杂场景和大规模数据集。它通过对场景进行分层表示和渲染,根据观察者的视点和需求,动态地选择适当的分辨率和细节级别进行渲染。
这种系统的基本思想是利用人眼对图像细节的感知特性。人眼对于近距离观察和关注的区域需要更高的细节,而对于较远处或次要的区域则可以降低细节级别,以节省计算资源和提高渲染速度。

盲点3:低位比特
“lower order bits” 指的是这些颜色值中较低位的比特。由于较低位的值变化幅度较小,所以它们对整体颜色的影响较小。这意味着更改较低位的值通常会导致较小的颜色变化,而更改较高位的值可能会产生更显著的变化。


2.相关工作

2.在本节中,我们对粒子(点云)数据管理和压缩的文献进行概述。
在这里插入图片描述

  1. 粒子层次结构
    粒子层次结构。为了进行压缩,为粒子数据集引入结构的一种常见方法是在粒子上建立空间层次结构(树)。这种技术在最先进的压缩器中被广泛采用。可以使用多种类型的树,包括:二叉树(Binary Trees),四叉树(Quad Trees),八叉树(Octrees),k-d树(K-D Trees),边界体层次结构(Bounding Volume Hierarchies)
    八叉树是其中最常见的方法,每个节点存储其子节点的占用情况。层次结构通过两种方式帮助压缩。一,较高位的位置信息被“分散”到更粗糙的树层级中,并以粗糙的树节点形式在粒子之间共享。因此,在较细的节点中,只需存储粒子的低阶位,有时还会进行截断。二,可以快速识别和去除没有粒子的区域(空白空间),进一步减少准确定位粒子所需的位数,这对于压缩和渲染都是关键的特性。

  2. 细节层次
    “Level-of-detail”(细节级别)是一种技术,用于在渲染或处理粒子数据时根据观察距离或需要的精度选择合适的数据细节级别。本文中提到,尽管使用树结构可以自然地提供一个逐渐从粗到细的结构,从中可以解码和查看代表性粒子,但有些技术通过子采样生成不同细节级别的数据。
    在子采样中,可以通过减少数据量而无需在粗糙级别进行数据复制,从而加快计算速度。然而,采用随机子采样可能会导致压缩效果不佳,因为粗糙粒子子集的边界体积难以确定。
    为了解决这个问题,文中提到了"lazy wavelet inspired odd-even subsampling"(懒惰的小波启发的奇偶子采样)方法,该方法可以精确地在每个级别上减半边界体积。小波基于的数据降采样在压缩网格顶点时较为常见。当网格不可用时,可以通过构建图形、局部图形或从粒子重新采样的有符号距离场来引入连接性。然而,本文采用了一种常规网格,因为它简单且计算速度快。

补充
这里的“小波”指的是一种数学函数,它在信号和图像处理中常用于分析和处理数据的不同频率成分。在这种方法中,通过应用小波变换,将粒子数据分解成不同的频率范围,然后通过丢弃一部分频率范围的数据来实现粗化
而“懒惰的”表示在进行子采样时只进行必要的计算和处理,避免不必要的复杂性和计算开销。在这种方法中,通过奇偶模式来确定需要保留的粒子数据,例如,按照奇数或偶数索引选择要保留的粒子。
因此,“懒惰的小波启发的奇偶子采样”是一种基于小波变换和奇偶模式的子采样方法,用于减少粒子数据的细节级别,以实现数据粗化和降低存储或计算开销。

综上所述,该段落讨论了在粒子数据管理和压缩中使用的细节级别的概念以及不同子采样方法的优劣之处。其中,"lazy wavelet inspired odd-even subsampling"方法通过精确地减半边界体积来提供更好的压缩效果

  1. 错误导向的树构建和遍历。错误导向的树构建和遍历是一种方法,目的在于最小化近似误差。它可以被视为一个聚类问题,其中在每个层级上,粒子被聚类,并用选定的点来表示,以使某个误差度量最小化。这种方法也被应用于三角形网格的研究中,其中量化误差(表示粒子的不准确性)和离散化误差(表示粒子数量较少)之间存在权衡。为了实现这种权衡,使用了一些几何失真度量的启发式方法,其中包括通过使用优先级对八叉树节点进行逐步重建。

盲点:coarse tree node and fine tree node.
在图形学中,树结构常用于组织和管理场景中的物体或空间数据。树的节点表示场景中的一个区域或一个物体集合。这些节点可以是粗糙的(coarse)或细分的(fine)。
较粗糙的树节点适用于需要快速近似结果而对精度要求相对较低的情况,而较细分的树节点则适用于需要更精确结果的场景。
"Coarse tree nodes"即指的是粗糙的树节点,其表示的区域或物体集合比较大。这意味着每个节点涵盖的空间范围较大或包含的物体较多。因此,在较细的节点中,只需要存储其中粒子的低阶位,可能会截断。

盲点:Coarser tree
指的是在构建树结构时,采用较大的包围体或较大的节点来构建树。这样的树结构通常具有较少的层级和较高的节点密度,因此被认为是较粗糙的树。较粗糙的树结构可以提供更快的遍历速度,但可能会牺牲一定的精确性和细节。

盲点:包围体(Bounding Volume)
是用来表示一组物体的边界的几何形状,如球体、轴对齐包围盒(Axis-Aligned Bounding Box,简称AABB)等。通常,每个节点都会使用一个包围体来表示其所包含的物体或子节点的整体范围
"较大的包围体"意味着使用比实际物体集合更大的包围体来包围这些物体。这样做的目的是在构建树结构时减少节点的数量,从而提高遍历的效率。较大的包围体可以容纳更多的物体,减少树的层级数和节点数量。
类似地,"较大的节点"表示在树的每个层级中使用较大的节点来容纳更多的物体或子节点。这样做同样可以减少树的层级数和节点数量,提高遍历的效率。


大规模和非核心技术
当重建基于点采样的几何体时,我们通常需要对粒子数据进行遍历和解码,以生成逼近的几何体表示。传统上,两种常见的遍历方法是深度优先遍历(DT)和广度优先遍历(BT)。深度优先遍历在内存效率方面表现良好,而广度优先遍历则在渐进重建方面更具优势。实际上,在文献中,BT是更受青睐的遍历顺序。
然而,我们的研究表明,通过对空间进行奇偶分解,深度优先遍历(DT)的重建质量可以大幅提升。具体而言,我们提出了一种奇偶分解的方法,该方法可以将空间分割为奇数和偶数两个子空间,从而使得粒子的位置在每个层级上都可以被精确地减半。这种奇偶分解的方法改善了深度优先遍历的重建质量,使其接近甚至超越了广度优先遍历的效果。
此外,我们的研究还考虑到了基于任务的误差度量。传统上,峰值信噪比(PSNR)是衡量重建质量的常用度量指标,但针对点云数据,一些研究提出了更多的任务导向的误差度量方法。我们的块自适应遍历方法允许在解码时使用用户指定的误差度量标准,独立于数据的编码方式。这意味着我们可以根据特定的任务需求来调整误差度量标准,从而更好地满足应用的要求。

在处理大规模数据和外部存储技术方面,通常会将数据组织成块,以便每个块可以根据需要独立地进行随机访问和解码。多级层次结构将子树视为块的方法也很常见,但以前的方法使用广度优先遍历(BT)同时遍历粗级别树和细级别子树(块),在遍历过程中只能按照单一的渐进顺序逐个遍历块,并在其间进行内存重用。相反,通过在块内使用深度优先遍历(DT),我们的块混合树允许同时、独立和渐进地解码所有块,而不是逐个进行解码。这种方法在计算方面提供了显著的优势,因为深度优先遍历具有较低的内存占用。
通过使用块混合树,我们能够同时处理和解码所有的数据块,而不需要逐个处理。这种并行处理的方法极大地提高了计算效率,特别是在处理大规模数据和使用外部存储技术时。通过深度优先遍历的低内存占用,我们能够更有效地管理和利用系统的资源,提供更快速、高效的数据处理能力。

补充:关于块混合树
块混合树(Block-Hybrid Trees)是一种用于处理大规模数据的树结构,它在压缩和解压缩过程中提供了高效的存储和访问方式。块混合树的主要思想是将数据划分为多个块,并在每个块内部使用不同的树结构进行表示和遍历。
在块混合树中,每个块可以采用不同的树结构,如k-d树(k-d tree)或混合树(hybrid tree)。这样的设计使得每个块可以根据其特定的特征选择最适合的树结构,从而在存储和重建过程中获得最佳的性能
块混合树通过结合不同的树结构,以块为单位进行数据划分和处理,提供了一种高效的处理大规模数据的方法,可以同时兼顾存储效率和计算效率。

压缩建模

为了实现有效的压缩,技术通常会对粒子数据假设一定的模型。这个模型可以是预设的,例如使用局部平面、高阶曲面、图形或图形转换等方法,也可以是从训练数据中学习得到的。模型还可以是统计模型,通常使用频率直方图来驱动算术编码。此外,对粒子进行排序以引入连贯性也是常见的做法,可以使用基于图形的遍历或直接使用粒子坐标进行排序。

在这段文本中,提到了"odd-even context coding",它假设了一个统计模型,但与以往的方法不同之处在于它利用了同一点集的子采样版本之间的相似性,这是一个前所未有的想法

盲点补充

  1. Local planes (局部平面): 这是一种对粒子数据进行建模的方法,其中假设每个局部区域都可以由一个平面来近似表示。通过对每个区域进行平面拟合,可以减少表示这些区域所需的信息量,从而实现压缩。
  2. Higher order surfaces (高阶曲面): 这是一种更复杂的建模方法,其中假设粒子数据的局部区域可以由高阶曲面(如二次曲面或三次曲面)来表示。这种方法可以更准确地捕捉数据的形状特征,但也可能需要更多的信息来表示曲面的参数。
  3. Graph-based transforms (基于图形的变换): 这是一种将粒子数据转换为图形结构的方法,其中粒子之间的关系被表示为图的边。通过对图进行变换和编码,可以利用图的结构特性来实现数据压缩。
  4. Statistical model (统计模型): 这是一种使用统计方法来对粒子数据进行建模的方法。统计模型通常基于对数据的频率分布进行建模,并利用概率和信息论的概念来进行压缩编码。
  5. Odd-even context coding (奇偶上下文编码): 这是一种编码方法,它利用了同一点集的不同子采样版本之间的相似性。具体来说,它使用奇偶子采样的差异来表示数据,并利用上下文信息来进一步压缩编码。这种方法利用了粒子数据的内在结构和局部特性,可以提高压缩效率。

3.背景

在这里,我们讨论了Devillers和Gandoin的方法[36](DG),该方法为我们的技术贡献奠定了基础。基于k-d树的编码器(在Google的Draco中实现)具有竞争力的压缩比,同时非常快速和通用,部分原因是其编码方案是非统计的(即不依赖于粒子的分布)。该方法构建了一个k-d树,其中每个节点存储了由边界框B包围的粒子数量n。给定一个节点(B,n),它被分成两个子节点(B1,n1)和(B2,n2),其中B1和B2正好沿着一个维度在B的中间进行切割,并且n1和n2分别是由B1和B2边界框包围的粒子数

问:怎么理解:"其中B1和B2正好沿着一个维度在B的中间进行切割"
答:这句话的意思是,节点B被沿着一个维度切割成两个子节点B1和B2,而且这个切割是在节点B的中间位置进行的。具体来说,如果我们考虑节点B所表示的空间是一个矩形框,那么切割就是将这个矩形框沿着一个维度(比如x、y或z轴)等分成两个相等大小的子矩形框B1和B2。这样的切割方式有助于构建k-d树的分层结构,将粒子数据按照空间位置进行组织和编码。

继续paper…

根据构造方式,每个节点只需要编码n1,因为n2、B1和B2可以通过推断得到。此外,n1可以使用大约 log2(n + 1) 位进行编码(因为0 ≤ n1 ≤ n)。随着n逐渐减少到叶节点级别,编码每个节点所需的位数变得更小,从而实现了压缩效果。树可以在构建、遍历和编码的同时隐式地生成,通过使编码器按照特定的遍历顺序原地对粒子数组进行分割,解码器也按照相同的顺序进行解码。在本文中,术语"k-d树"始终指的是使用这种方法构建的树。

图2展示了DG编码器的一个示例。在他们的论文中,作者对分离粒子所需的比特数进行了理论分析
在这里插入图片描述
这是一个二维情况下构建的k-d树的示例,用于处理7个粒子(位于右下角)。为简单起见,当粒子全部分离时,细分停止。每个节点包含其边界框内的粒子数。边上的数字指定编码相应左子节点所需的比特数(右子节点可以推断出来)。写入比特流的数字(按照BT顺序)为:7、5、3、1、1、1、1,总共使用了14比特。

假设树是平衡的,并且每次划分都将粒子数量减半,在树的深度为k时,总共需要的比特数大约为
在这里插入图片描述
其中N是粒子的总数。因此,分离粒子所需的总比特数为:
在这里插入图片描述
利用这个结果,论文还给出了使用k-d树编码器相比直接编码粒子位置所节省的最低比特数下界,该下界为N log2 N。由于O(N log2 N)也是编码粒子相对顺序所需的比特数(其中粒子的数量为N!),所以可以理解为k-d树通过丢弃粒子的原始顺序来实现压缩,而不是通过将粒子与空间分离来实现的压缩效果。

4. 树的构造

大多数基于树的压缩技术通过编码(和解码)隐含的量化(离散)粒子位置的节点来工作。一开始编码粒子数量可能看起来有些浪费:已经有人指出,在粗粒度层次上,基于占用的八叉树(occupancy-based octree)优于DG所使用的k-d树,因为编码子节点的粒子数量通常需要多个比特,而占用只需要最多一个比特。然而,占用编码要求同时编码节点的两个子节点,而不仅仅是左子节点。经过粒子分离阶段后,在接近叶节点的层次上,编码n1只需要一个比特,而编码两个子节点的占用需要2个比特。由于叶子节点的数量大致与内部节点的数量相当,最终编码两个子节点的占用相对于仅编码每个内部节点的左子节点的粒子数量来说并不能实现整体上的节省。

此外,正如在第5.1小节中所述,编码粒子数量还可以使我们能够执行自适应树的遍历,以最小化重建误差。重建误差是通过使用粒子数量和节点的空间范围进行估计的。此外,通过了解粒子数量,我们可以采用基于网格的方法,并在网格中的粒子数量多于空单元格时,切换到对空单元数进行编码,从而显著节省编码成本(如第4.1小节所讨论的)。

4.1 奇偶分裂与奇偶树

当解码运行到完成时,所有树节点都将被访问,其顺序取决于遍历策略。

在这里插入图片描述
如图。在一个42网格上有11个粒子(a到k)的示例中,我们构建了一个k-d树(左侧)和一个奇偶树(右侧)。我们的奇偶划分通过在每个树层级上交错奇索引和偶索引的网格单元来划分空间。为简单起见,树仅构建到每个粒子位于自己的单元格为止。使用DT编码的比特流中的数字分别是{k-d树:{11, 6, 3, 1, 1(a), 1(f), 1, 0, 1(i), 3, 2, 1(b), 1(h), 1, 1©, 0},奇偶树:{11, 5, 3, 1, 1(a), 1(b), 1, 0, 1(e), 3, 2, 1(f), 1(h), 2, 1(i), 0}。

然而,在实践中,为了节省I/O带宽、内存和解码时间,通常只需要对大型树进行部分遍历和解码,重构的粒子的位置仅近似于原始粒子的位置。在这种情况下,树的形状和遍历顺序可以深刻地影响近似的准确性。深度优先和广度优先遍历之间的权衡。在使用传统的k-d树以典型的k-d划分构建的情况下,一个节点的边界框B沿着某个维度(在3D中为x、y、z之一)进行划分,形成子框B1和B2。在每个树层级上,BT在访问B1之后访问B2,而DT只有在完全访问B1之后才访问B2。因此,在中途停止时,BT通常会给出整个空间的粗略表示,而DT可以完美地重建一个空间区域,但完全忽略了其他部分。在大多数情况下,前一种行为(BT)是首选的。

然而,DT的资源消耗要小得多,因为它只需要一个很小的栈,其大小最多为树的高度(O(log2 n)),而BT需要一个足够大的队列来保存当前深度的所有节点,该队列的大小可能与粒子的总数一样大(O(n))。因此,k-d划分提供了两种对比选择高成本和粗略重建(使用BT)的两个子节点,或者低成本和完美重建一个子节点,但对另一个子节点没有重建(使用DT)。在这里,成本主要指的是内存占用,但高内存占用通常也意味着较低的缓存利用率,因此速度较慢。

奇偶分割。为了在保留其主要优点的同时减轻DT的主要缺点,我们引入了奇偶分割的概念,通过使每个子节点B1和B2包含许多不相交的切片而不是整个连续区域,从而在空间上"交错"这些子节点。该方案受到层次索引方案[85]和惰性小波变换[86]的启发:这些多分辨率技术最初是为了处理在规则网格上采样的数据而开发的。在规则网格上采样的数据具有结构化的特点,可以方便地进行层次化处理和分割。因此,奇偶分割的概念受到了这些多分辨率技术的启发,试图将其应用于非规则的粒子数据,以实现类似的层次化处理和分割效果。

在这里,我们首先在粒子上方施加(但不构建)一个规则网格,以使每个网格单元最多包含k个粒子。构建这样的网格的一种方法是沿着最长的维度递归地将粒子的边界框等分为两半,直到达到目标k为止。为了使奇偶分割方案发挥最佳效果,k理想情况下应为1。然而,当粒子坐标以浮点数表示时,如果任意两个粒子的坐标几乎完全相同,k = 1可能会产生一个过大的网格。在本文中,我们在所有实验中使用k = 1,但一般情况下,k是用户可以设置的参数。此外,为了避免浮点数乘法和除法时可能产生的舍入误差,我们在确定一个粒子属于哪个网格单元时使用量化的粒子位置,但请注意,如果需要,仍然可以无损地编码原始粒子的位置。

补充
"量化的粒子位置"是指将粒子的实际位置映射到离散的位置值,以便在网格中进行处理。当粒子坐标使用浮点数表示时,存在舍入误差和精度限制。为了避免这些问题,可以将粒子的坐标进行量化,即将其四舍五入或截断为离散的数值。

在odd-even分割中,我们将每个节点与一个特定的子网格G以及包含在G中的粒子相关联。如果G的维度为Gx × Gy × Gz,我们沿着三个固定的轴将其单元进行索引,从(0, 0, 0)到(Gx−1, Gy−1, Gz−1)。一个odd-even分割将一个节点(G, n)分解为(Ge, ne)和(Go, no),其中(Ge, ne)包含G中的偶数索引单元(沿着分割维度)和占据这些单元的ne个粒子,而(Go, no)包含其余的(奇数索引)单元和粒子。换句话说,odd-even分割将子网格G沿着某个维度划分为两个子网格,一个包含偶数索引单元和粒子,另一个包含奇数索引单元和粒子。这种分割方案使得不同子网格之间的粒子分布交错排列,从而提供了良好的局部性和多分辨率特性,以支持高效的压缩和重建过程。

奇偶树。完全由奇偶分割构建的树被称为奇偶树,与k-d树相对应,如图3所示。奇偶分割的思想是奇数或偶数子节点都表示与父节点相关联的粒子集的粗略近似,因此DT永远不会像k-d分割那样错过整个区域。奇偶树将这个思想发挥到极致,其中每个节点都以奇偶方案进行分割,因此在奇偶树上的DT相对于重建的粒子数来说,提供了对完整数据最佳的从粗到细的细化,但在编码成本(或压缩比)方面则不尽相同,这将在后面进行讨论。

奇偶子采样。选择奇数或偶数子网格进行遍历可以看作是一种子采样方法。起初,可能认为随机子采样(例如,[87]中所用的方法)能够实现与奇偶子采样相同的效果,而且更为简单。然而,与随机采样不同,奇偶采样产生的子网格(Go和Ge)的单元格数量是父网格G的一半,这对于使用更少比特位来定位粒子是很重要的。然而,奇偶树仍然不利于压缩。这是因为在大多数数据集中,粒子并不随机分布在空间中,而是形成聚类和结构,这些聚类和结构与空单元格可以很好地分离。使用奇偶分割,空单元格被"分散"到奇数和偶数子树中,增加了要编码的树节点的数量。相反,可以使用k-d分割来快速删除整个空子树(如图4所示)。

在这里插入图片描述
这个示例展示了奇偶树(c)在压缩方面不如k-d树(b),以及混合树(d)如何缓解了这个问题。奇偶树完全使用奇偶分割,而混合树只在连接根节点和最左叶节点的路径上使用奇偶分割。奇偶树在压缩方面效果不佳,因为它们创建了太多的节点来完全定位所有单元格中的粒子。

这里还需要推一下公式

编码成本。为了进行更加定量的分析,我们计算使用k-d树在一个包含G个单元格的网格G中定位n个粒子所需的比特数,其中n个单元格包含粒子,G-n个单元格为空。将这个答案表示为T(n, G)。在最理想的情况下,k-d分割会将大多数粒子放在一个子节点中,将空间放在另一个子节点中,导致T(n, G) = (log2 n) + T(n, G/2),即n保持不变,但G减半。经过i = log2 (G/n)次迭代后,G/2^i 和 n大致相等,即G/2^i < 2n。此时,k-d树需要约2.4n比特来分离这n个粒子(见第3节),并额外需要n比特来最终定位这些粒子(假设在叶节点级别,每个粒子需要与一个空单元格分离)。相比之下,奇偶分割意味着另一个递归关系:T′(n, G) = (log2 n) + 2T′(n/2, G/2)(即n和G都减半,但创建了两个子树而不是一个)。在将粒子彼此分离后(大约需要2.4n比特),每个粒子还需要在G/n个单元格中进一步定位,需要额外的n log2 (G/n)比特。因此,T(n, G)和T′(n, G)之间的差异在于n + log2 n log2 (G/n)(对于k-d树)和n log2 (G/n)(对于奇偶树)。当G接近n时(网格中的粒子密集),这两者是相似的,但在大多数情况下,G显著大于n,使得奇偶树的效果较差。在实验中,我们发现相同输入下的奇偶树几乎是k-d树的两倍大。稍后在第4.2小节中我们将讨论一种解决方案。

对于分布密集的粒子编码。除了方便奇偶分割外,底层网格还允许我们有效地编码稀疏和密集的粒子集(相对于网格的大小而言)。当粒子数量n大于G中单元格数量的一半时,我们可以从编码左子节点中的粒子数量(n1)切换到编码左子节点中的空单元格数量,即G/2 - n1,从而更快地限定要进一步编码的值。请注意,n1始终最多为G/2,因为每个网格单元格最多只能有一个粒子。在每个单元格都包含粒子的极端情况下,我们的方法只需在根节点编码粒子数量后停止,因为空单元格的数量现在为0,而其他方法(如DG [36]或MPEG [17])会一直对该网格进行细化,直到单个单元格。

补充
在每个单元格都包含粒子的极端情况下,意味着整个网格被完全填满了粒子,没有任何空的单元格。在这种情况下,我们的方法会在根节点编码粒子的数量后停止,因为没有空单元格需要进一步编码。而其他方法(如DG [36]或MPEG [17])会继续对该网格进行细化,直到对每个单元格进行编码,无论其中是否包含粒子。这是因为这些方法是基于节点的占用情况进行编码的,而不管单元格内是否有粒子。所以在密集粒子分布的情况下,我们的方法可以更快地完成编码,而其他方法需要更多的编码操作

对于粒子集合来说,编码空单元格可以减少编码的复杂性和存储开销。

在这里插入图片描述
图5:树表示了根据粒子的变换莫顿码进行排序。输入的莫顿位在顶部显示,箭头指示底部输出位的方向。
k-d树和奇偶树使用正向和反向莫顿码。混合树使用HZ索引。块混合树在中间部分使用HZ索引。
单元内细化位在灰色显示。

补充
莫顿码是一种空间填充曲线,通过对粒子的坐标进行编码,可以在一维空间中表示粒子的顺序。

将树的遍历结果作为粒子索引。通过遍历树来解码粒子的位置,即重构其量化坐标的整数位,或者等价地说,使用坐标位对粒子进行索引(排序)。众所周知,k-d树使用莫顿码对粒子进行排序,莫顿码将粒子的坐标位以x、y、z的方式交错排列,交错模式取决于沿着哪个维度划分节点。换句话说,如果使用DT进行遍历,k-d树从左到右(从最高位到最低位)重构交错的坐标位,而奇偶树从右到左(从最低位到最高位)重构它们(参见图5),因为最低位决定一个粒子是“奇数”还是“偶数”

问题:为什么最低位决定一个粒子是"奇数"还是"偶数"
在奇偶树中,最低位(即最右边的位)被用来确定一个粒子是“奇数”还是“偶数”。这是因为在奇偶树的构造过程中,我们使用了奇偶分割(odd-even split)的策略,通过将每个节点的格子划分为奇数索引和偶数索引两部分来进行空间的“交错”(interleaving)。因此,每个节点中的粒子按照它们的最低位被分配到奇数索引或偶数索引的格子中。最低位为0的粒子被认为是“偶数”,而最低位为1的粒子被认为是“奇数”。这种奇偶的划分方式使得在奇偶树的遍历过程中,我们可以按照最低位的顺序重构粒子的坐标位。

4.2 混合树

如在4.1节中所示,奇偶树的缺点是会创建过多的节点,因为每个奇偶分割都会将粒子和空单元格都分配到两个子节点中,而不是(大部分)粒子分配到一个子节点,空单元格分配到另一个子节点。
为了减少对压缩的不利影响,同时保留它们的大部分优点,我们需要减少奇偶分割的使用。在这里,我们借鉴了小波领域的一种技术,即通过在每次迭代中仅对低通滤波的子频带进行递归变换来进行多分辨率分解
类似地,我们限制奇偶分割仅用于左子节点,其他地方都使用k-d分割。此外,一旦使用了k-d分割,后续的子孙分割都将是k-d分割。我们还使用左子节点是(Ge, ne)的约定,即它包含偶数索引的格子。划分的维度是父节点的网格G的最大维度,这也适用于本文讨论的所有其他树结构。通过这种构造方式,我们的混合树对压缩的影响很小;在最坏的情况下,我们注意到与k-d树相比,压缩后的大小仅增加了5%

怎么理解:"通过在每次迭代中仅对低通滤波的子频带进行递归变换来进行多分辨率分解":
我们只对频率较低(低通)的子频带进行处理,而不对频率较高(高通)的子频带进行处理。这个概念可以类比于小波变换中的低频和高频分量。
在小波变换中,我们将信号分解成多个子频带,每个子频带对应不同的频率范围。而多分辨率分解则是通过逐步进行迭代,将原始信号的频率范围逐渐细化,从而获得不同分辨率的子频带。在每次迭代中,我们只对当前最低频率范围的子频带进行处理,而将其他高频部分保留为未处理的子频带。
这种方式可以有效地降低计算和处理的复杂性,同时保留了重要的低频信息。在论文中,将这种思想应用于混合树的构建中,即限制奇偶分割仅用于左子节点,而其他地方都使用k-d分割。这样做可以最大程度地减少混合树对压缩的影响,并保持与k-d树相似的性能,同时减少了编码和存储的开销。

在这里插入图片描述
如上图所示:
(a)使用奇偶分割(不同颜色的子节点)和标准k-d分割(相同颜色的子节点)的特定组合创建的混合树
(b)在浅层专门使用k-d分割和在更深处使用杂交树创建的 块混合树
这两棵树都是为图3中相同的11个粒子构造的,这两棵树都是针对同一个11粒子构造的 为单元格内精化位添加额外的(概念性的)树节点,用灰色表示。

分辨率级别。从顶部到底部,每个奇偶分裂都会创建一个新的、更粗糙的分辨率级别,该级别包含在偶数索引子树中的节点。一个具有L个分辨率级别的混合树包含了一系列恰好有L-1个奇偶分裂的节点,这些节点是从根节点向下沿着左子节点遍历L-2次找到的(例如,当L=3时参见图6a的示例)。可以自动设置L,使得在没有粒子或单元格可分裂时奇偶分裂链条终止。假设始终先访问左子节点,DT在混合树上的遍历顺序是从粗到细的,产生了类似于k-d树上的广度优先遍历(BT)的空间遍历,但内存占用更小。
虽然混合树是为DT而设计的,但它们也支持BT(参见图12的示例),需要注意的是BT最好只在每个分辨率级别内使用,而不是跨越分辨率级别(因为位于相同深度级别的节点可能属于不同的分辨率级别,例如图6a)。我们提出的混合树只是k-d和奇偶分裂的众多可能组合之一,适用于不同的目的。

粒子索引。从使用粒子的交错量化坐标进行粒子索引的角度来看,混合树对应于粒子的分层(HZ)排序[85]。HZ排序首先按照粒子的分辨率级别进行排序,然后按照它们在该级别内的索引进行排序。这是通过交换粒子的Morton码中的最低有效位(从LSB确定粒子的分辨率级别)和其左侧的位(构成粒子的分辨率级别内索引)来实现的。图5给出了该方案的示例。HZ索引方案最初由Pascucci和Frank [85]提出,并由Hoang等人[88]推广用于规则网格的多分辨率分解。在这里,我们将该方案调整为构建多分辨率粒子树的方案。

补充:HZ排序
HZ排序通过莫顿码(Morton code)的扩展形式来实现。莫顿码将多维数据转换为一维编码,使得相邻的数据在编码中保持相对的接近。HZ排序在此基础上,通过递归地对数据进行划分和排序,生成具有层次结构的排序结果

细化位。细化位是进一步定位每个粒子在其相应单元格中的位(参见图6,底部的灰色节点)。在同一树深度下的所有细化位构成一个位平面。一旦每个粒子被定位到其单元格中,进一步的细化位平面会逐个维度地将单元格减半,位值指示粒子属于哪一半。细化位平面的数量因数据集而异。对于某些数据集,没有细化位,即粒子的精度足够低,以至于仅通过将它们分开的网格就可以准确定位粒子。
科学模拟数据通常由于粒子的相对高精度而主导细化位的数量。对于混合树,细化位按深度优先顺序存储:粒子一个接一个地进行完全细化,按照它们在树中出现的(深度优先)顺序。例如,在图6a中,细化位流是10(a)11(b)00(c)10(d)01(e)11(f)00(g)00(h)10(i)10(j)11(k)

编码成本。与4.1小节中类似,设T(n,G)表示使用k-d树定位n个粒子在G个网格单元中所需的位数。对于混合树,编码节点(G, n)下的子树所需的位数为(log2 n) + Tl(n/2, G/2) + Tr(n/2, G/2)。其中,右子树的项Tr(n/2, G/2)就是T(n/2, G/2),因为右子树始终是一棵k-d树。左子树的项Tl(n/2, G/2)可以再分解为log2 (n/2) + Tl(n/4, G/4) + T(n/4, G/4)。按照递归继续推导并忽略不重要的log2 (n/2i)项,我们可以看到编码整个混合树的成本大约是Pi T(n/2i, G/2i)。由于T(n,G)大约与n线性相关(参见4.1小节),T(n,G) = 2T(n/2, G/2)。因此,Pi T(n/2i, G/2i)大致等于T(n,G),这意味着混合树的编码成本与相同输入的k-d树大致相同(差异为O(log2 n log2 (G/n))位,这基本上是分辨率级别的数量乘以每个级别上剔除空单元格的成本)。这种分析还表明,如果使用DT遍历混合树,使得分辨率级别从粗到细进行访问,那么(部分)编码成本在每个分辨率级别后会翻倍,因为粒子数量n也可能翻倍。

理解
在混合树中,每个分辨率级别对应一个子树,而这些子树中的粒子数量逐级减少。当使用DT(深度优先遍历)方式遍历混合树时,我们首先访问较粗的分辨率级别,然后逐渐向较细的级别移动。由于每个分辨率级别上的粒子数量可能会翻倍,编码成本也会随之增加。

具体来说,当我们在某个分辨率级别上遍历混合树时,编码成本取决于该级别上的粒子数量。随着分辨率级别的增加,粒子数量可能会翻倍,从而导致编码成本的翻倍。这是因为在每个分辨率级别上,我们需要编码更多的粒子位置信息。

需要注意的是,这里所说的编码成本翻倍是相对于上一个分辨率级别而言的。在整个混合树中,随着分辨率级别的增加,编码成本会逐级增加,但整体上仍保持与k-d树相近的编码成本。

重建误差。在量化重建误差时,我们通过找到重建粒子中与原始粒子最近的粒子来衡量每个原始粒子的重建误差。
我们给出了两种情况下的重建误差的上界:基于k-d树的BT方法(BT-kd)和基于混合树的DT方法(DT-hybrid)。假设这两个粒子是一个具有dx × dy × dz尺寸的盒子的两个相对角,我们可以使用k来界定dx、dy、dz的取值范围。这里的k表示尚未遍历的树深度(对于BT-kd)或尚未遍历的分辨率级别(对于DT-hybrid)。对于这两种情况,我们有dxdydz ≤ wxwywz*2k,其中wx、wy、wz是叶子级别上每个单元格的尺寸。根据前面“Coding costs”一节的分析,我们知道k-d树的总编码成本与混合树的总编码成本大致相同。而且,这个成本在每个树深度级别(对于k-d树)或每个分辨率级别(对于混合树)后翻倍。
因此,BT-kd和DT-hybrid树具有相似的编码成本和相似的重建误差上界。需要注意的是,当所有粒子都被定位到各自的单元格时,重建误差受限于一个单元格的尺寸,即wx × wy × wz,并且每个细化位平面会将这个上界减半。

补充 怎样理解:"并且每个细化位平面会将这个上界减半"
这句话指的是在混合树的重建过程中,每个细化位平面都会减小重建误差的上界。在混合树中,细化位平面用于进一步定位粒子所在的单元格。每个细化位平面都会将之前的重建误差上界减半,因为它提供了更精细的定位信息。换句话说,随着细化位平面的逐步使用,重建误差的上界会越来越小,因为我们通过更详细的定位信息逐渐缩小了粒子可能所在的范围。因此,细化位平面的引入有助于减小重建误差并提高重建精度。

在重建误差方面,这两种方案的主要区别在于DT-hybrid将重建的粒子放置在与原始粒子完全对应的位置,而BT-kd将它们放置在遍历前沿边界框的中间位置。根据数据集的不同,一个选择可能比另一个更受青睐(第7节)。由于这两种方案具有大致相同的总编码成本,但DT-hybrid对粒子进行了部分高精度重建,因此与BT-kd相比,当两者在相同的解码位预算下,DT-hybrid往往会生成更少的粒子。

补充 怎么理解:而BT-kd将它们放置在遍历前沿边界框的中间位置
这句话的意思是,在BT-kd方案中,重建的粒子被放置在遍历前沿边界框的中间位置。在使用k-d树进行遍历时,每个遍历步骤都会导致一个边界框,该边界框将包围一组粒子。对于重建的粒子,它们的位置被设定为相应边界框的中心位置,而不是精确匹配原始粒子的位置。因此,BT-kd方案会在边界框中间位置生成重建的粒子。

遍历前沿
"遍历前沿"指的是当前正在遍历的节点所属的区域或子空间的边界。当遍历到某个节点时,该节点所代表的区域即为遍历前沿。

DT的内存占用情况。对于混合树,我们不需要在内存中显式构建整个树结构,因为节点的值只是通过编码和解码的方式存储在二进制流中,按照一定的遍历顺序进行访问二进制流。因此,内存占用只与用于遍历的数据结构的大小有关,而不涉及树本身的大小。
在使用DT进行遍历时,我们可以使用一个大小受树的高度限制的栈。栈中的每个元素需要log2(N+1)位来记录包含的粒子数。除此之外,遍历还需要节点的关联网格、分辨率级别、分割的维度和分割类型的信息,这些信息可以从连接节点与树根的路径中推导出来,并用log2(G+1)位进行编码。

因此,编码器的内存占用为(log2G+1)² + log2(N+1)位,而解码器的内存占用为(log2G+1)²位。即使在N = G = 2^64 - 1的情况下,编码器和解码器所需的内存都非常小(少于600字节)。

4.3 块混合树

在混合树中存在一个问题,即每个分辨率级别仍然按区域遍历,导致误差分布不均匀(参见图14,a5为例)。为了解决这个问题,我们将整个树分割成多个块(子树),并交错它们的遍历,以更均匀地减少误差。生成的块混合树包含多个可以独立解码的块。通过自适应地分配比特位于各个块之间,我们可以降低整体的重建误差,或优先处理特定的块。此外,可以随机访问或并行解码块

要构建一个块混合树,我们首先使用k-d分割形成一个粗部分(顶部的k-d子树),然后将k-d分割与奇偶分割结合起来形成一个中间部分(多个混合子树),最后使用细化位在一个细部分形成。粗部分的每个叶子节点创建一个混合子树或块。粗部分和中间部分共同将整个网格细化到至少单元格级别(即,没有叶子节点包含多个粒子)。细部分在各自的单元格中进一步定位各个粒子。图6b显示了在我们的运行示例中构建的块混合树的示例,该示例是一个2D空间中包含11个粒子的情况。从粒子索引的角度来看,块混合树在中间部分使用HZ索引,而在其他部分使用正序Morton索引(参见图5)。

5. 树遍历

为了实现比BT和DT更好的渐进式重建,遍历应该更加自适应,即应优先考虑遍历成本潜在较低(解码所需的位数)且收益较高(误差减少)的节点。我们引入了两种自适应顺序:k-d/hybrid树的自适应遍历(AT)和块混合树的块自适应遍历(BAT)。

5.1 自适应遍历

在这里插入图片描述
左图:带有按分辨率级别着色的子树的块-混合树。
右图:块的二进制流分别存储,因此可以独立解码,由箭头表示。在一个块中,中间部分的位按深度优先顺序排列(按分辨率级别),而在单元内部细化位(灰色)按广度优先顺序排列(按位平面)。在解码时,可以跳过任何分辨率级别(着色的三角形),以便为较粗的分辨率级别提供更多的细化位。

对于k-d树,我们将算法1中的容器C从堆栈或队列推广为优先级队列,这样可以在遍历过程中进行速率失真优化,即根据某个误差度量和编码成本优先考虑更重要的节点。具体而言,给定节点(B,n)的重要性评分是
在这里插入图片描述
其中d是B在当前分割轴上的长度。分母捕捉了解码当前节点的成本,而(d/2)2捕捉了通过解码该节点获得的每个粒子的(平方)误差减小,假设所有n个粒子都落入左子节点或右子节点的极端情况。直观地说,空间更大、更密集的节点优先级更高,以便减小更多粒子的重建误差。我们期望使用这个启发式方法的AT在粒子分布高度不均匀时(相比于BT)表现最佳,因此同一深度节点的重要性需要有明显不同。

可选评分功能。我们的重要性评分方法虽然简单,实践中在各种数据集上改善了比特率与失真之间的权衡(参见第7节)。然而,这个评分方法仍然是一种启发式方法,不能保证在所有数据集上都有效。我们还展示了对重要性函数的修改(参见图12),通过减少对节点密度的重视(即从分子中去除n),我们观察到对于表示表面的粒子效果更好。我们预计在未来的工作中,可以根据数据和任务的不同设计出更多的重要性函数,但所有的函数都应该由AT支持。

5.2块自适应遍历

尽管AT在重建质量方面优于BT,但在实际中它具有类似的高内存占用(参见第7.3小节)。此外,AT是针对单个节点而非块级别的,因此不能直接用于高效地遍历块混合树。因此,我们将AT推广为块自适应遍历(BAT),它也是数据自适应的,但是与DT类似,它与整个块的节点一起工作,并且具有渐进恒定的内存占用。

使用BAT,块混合树的粗糙部分可以使用BT或AT进行遍历。在粗糙部分遍历完成后,才开始遍历中等部分。中等部分以数据相关的轮询方式进行迭代遍历。每个迭代包含两个步骤:一,我们使用一个优先队列根据某些准则对块进行排序,然后选择一个要遍历的块;,我们使用DT遍历所选的块。
优先队列中的顶部块将被遍历一定数量的解码字节或一定数量的粒子,然后其优先级在队列中更新,并且该过程在下一次迭代中重复进行。

块排序的探索。块的排序由用户提供的评分函数处理;在这里,我们提出了一种方法。在两个部分解码的块之间,我们总是优先选择粗糙分辨率级别的块。如果两个块位于相同的分辨率级别上,我们优先选择具有较小值的n*/n的块,其中n是分辨率级别L上块中的总粒子数,n∗是已经被块内DT访问的粒子数。
这种思想是尽可能均匀地将重构误差分布在各个块之间,从而降低平均误差。

重构误差。通过构造,同一分辨率级别上的节点与具有相同内部间距的子网格相关联(即相邻单元格之间的空间距离)。这个间距给出了重构误差的上界,因为落在当前子网格相邻单元格之间的粒子尚未被重构(它们属于更细的分辨率级别)。例如,当奇偶分割下的偶数子树中的所有粒子都被重构时,但奇数子树中的粒子尚未被重构(因为奇数子树属于下一个更细的分辨率级别),与偶数子树对应的网格单元格之间的间距就是一个误差上界。因此,强制块被细化到相同的分辨率级别有效地使得在每个地方近似具有相同的重构误差上界。一旦块处于相同的分辨率级别,比率n∗/n表示已经遍历了给定级别的程度。

内存占用。对于BAT,给定一个高度为H的树,内存占用受到粗k-d子树的高度Hc的控制。由于最多有2(Hc−1)个块,且每个块包含的堆栈大小最多为H−Hc,不同容器中的元素总数受到以下限制:2(Hc−1)(队列)+2(Hc−1) *(H−Hc)(堆栈)+2(Hc−1)(优先队列)。相比之下,如果BT专门用于整个层次结构,其队列的大小上限为2(H−1),这通常比2(Hc−1)大几个数量级,因为典型的Hc只有H的一半。在实践中,选择的Hc应该足够大,以使错误更均匀地分布,并且对块的随机访问更精细,但同时也要足够小,以避免将BAT变成BT,并且不要创建太多的块。

6. 编码节点值

在解压缩过程中,对于一个节点(G,n),解码器需要在已知n和0 ≤ n1 ≤ n的情况下解码n1的值。目前的方法使用算术编码或截断二进制编码,这种方法是假设n1在{0, . . . , n}中是均匀分布的。然而,实际情况中这个假设通常并不成立,因此有可能存在更好的编码方法。我们在这里介绍两种更好地预测n1值的方法,即非统计二项编码方案和统计奇偶上下文编码方案,针对两种极端的粒子分布:均匀分布和高度结构化分布

补充均匀分布和高度结构化分布
均匀分布:均匀分布的粒子意味着它们在空间中以大致相等的间隔分布。这意味着粒子在整个空间中没有明显的聚集或分散。在这种情况下,粒子的密度相对均匀,没有明显的空间结构。处理均匀分布的粒子时,可以采用一些通用的压缩技术,如熵编码或字典编码。

高度结构化分布:高度结构化分布的粒子指的是它们在空间中具有明显的有序结构或规律。这种分布可能是由于某种物理或几何规律导致的,例如晶体结构、分子排列等。在高度结构化分布中,粒子的位置之间存在明显的关联性和规律性。处理高度结构化分布的粒子时,可以利用这些规律性来提高压缩效率。例如,可以使用特定的编码方案来捕捉和表示结构化分布中的模式和规则。

6.1 二项编码方案

对于粒子空间分布近似均匀的数据,n1不是均匀分布在{0,…, n},但更有可能接近于n/2------- 我们将利用这个属性来改进编码。给定一个有n个粒子的节点,有2n种可能的配置(n个粒子中的每个粒子都有可能落在两个子节点中的任意一个,概率为1/2) ,并且有 在这里插入图片描述种方法考虑左子节点包含父节点的n个粒子中的n1个粒子。
因此,n1遵循参数为n和1/2的二项分布,即
在这里插入图片描述
对于小数量级的n的算数编码。对于小数量级的n,可以使用算术编码和预先计算的二项表对这种二项分布进行有效编码。我们的算术编码器支持整数概率,其和最多为231,这意味着分布B(n, 1/2)在n≤30时是精确建模的。对于每个n ∈ {1, . . . , 30},我们预先计算一张表,其中的条目是对于每个n1 ∈ {0, . . . , n}的Cn n1(我们通过2n缩放P(n1|n)以用整数表示概率)。然后,我们对每个表进行前缀和计算,以得到一个(缩放的)累积分布函数(CDF),用于我们的算术编码器。

对于大数量级的n的二进制搜索编码
当n > 30时,由于我们的算术编码器使用32位值作为其内部状态,精度不足以区分所有可能的P(n1|n)值,因此使用精确概率的算术编码会失败。这是因为缩放的累积分布函数随着n的增长呈指数增长,即

在这里插入图片描述
由于指数增长速度非常快,32位值无法准确表示所有可能的累积概率。因此,对于大于30的n值,我们需要采用其他的编码方法来处理。请注意,简单地使用64位内部状态并不能解决问题,因为在乘法运算中可能会发生整数溢出。相反,我们利用de Moivre-Laplace定理[91],将二项分布近似为正态分布,即B(n, p) ≃ N(np, np(1 − p)),其中N是均值为µ = np,方差为σ^2 = np(1 − p)的正态分布。 当p ≈ 1/2时,即假设粒子近似均匀分布时,该定理表明P(n1|n)近似遵循N(n/2, n/4)。

将N(n/2, n/4)的累积分布函数记为F,我们使用二分搜索,在每次迭代i中 将F在搜索范围[ai , bi ]中二等分,输出一个比特位来指示n1位于哪一半。划分点可以使用F的反函数计算,即
在这里插入图片描述
其中erf是误差函数。初始时,[a0, b0] = [0, n],我们的搜索停止条件是要么找到了目标值(即存在某个i使得n1 ≤ ai < bi < n1 + 1),要么搜索范围不再收敛,表明我们的数值精度已经不足。在后一种情况下,我们假设在[ai, bi]中的所有值具有相等的概率,并使用截断二进制编码来编码n1 - ai。我们使用中短码(或居中最小码),为在[0, …, bi - ai]中靠近中间值的数值分配较短的编码字。我们在附录中给出了我们的二项分布编码器的伪代码。

使用二项分布编码的理论收益可以通过二项分布的熵进行评估,即H ≃ 1/2 log2 (2πenp(1-p))(完整的推导见附录D)。对于p = 1/2,我们有H ≃ 1/2 log2 (2πen/4) ≈ 1 + 1/2 * log2 n。因此,归一化熵(将H除以log2 n)随着n趋向无穷大而接近1/2,而当n趋向1时接近1。相比之下,均匀分布的归一化熵始终为1,这意味着在最好的情况下(当n非常大时),与均匀算术编码或截断二进制编码相比,二项分布编码可以将编码长度减少一半。这种收益使得二项分布编码在处理大数据时具有吸引力。最后,二项分布编码也适用于奇偶分割,因为这种分割倾向于在两侧产生近似相等数量的粒子,而不受实际粒子分布的影响。

6.2 奇偶上下文编码

对于粒子分布不近似均匀的数据集,即不适用二项式编码的情况,我们提出了一种基于混合树上的DT的预测方案,以改善压缩效果。由于奇偶分割下的偶数(左)子树和奇数(右)子树在空间上交错,它们可以具有非常相似的粒子分布(图9)。因此,我们可以利用它们的空间相关性,使用其中一个子树来预测另一个子树。奇偶分割创建了一个奇数子树和一个偶数子树,分别表示为To和Te。我们使用不同的符号表示,To始终是一个k-d树,而Te根据定义几乎总是一个混合树。使用DT,我们首先遍历和编码Te,然后使用它作为参考来预测To。

在进行lock-step遍历之前,由于Te和To是不同类型的树,我们首先需要将混合树Te转换为k-d树Te。为此,我们在Te的粒子所在的单元格上调用k-d树构建例程。现在,k-d树Te和To可以使用DT进行lock-step遍历,用来在遍历前,维护各自节点之间的空间相关性。在To完全编码之后,将结合Te和To的混合子树转换为k-d树,以作为下一个分辨率级别的参考(图10)。算法5在附录中给出了我们的奇偶上下文编码器的完整伪代码。请注意,我们从未明确创建和存储Te、Te和To在内存中。将Te从奇偶子树转换为k-d子树的概念性转换可以原地执行(通过对存储输入粒子的数组进行分区)和内联执行(在遍历To时即时计算Te的节点值)。

补充:lock-step遍历
"lock-step遍历"是指同时遍历多个数据结构或数据序列,并按照相同的步调进行迭代。在lock-step遍历中,每个数据结构或序列的对应位置的元素会同时被处理。

上下文编码。在lockstep DT期间,遍历前沿通常包含两个节点:Te上的(Gs, s)和To上的(G, n)(参见图10)。如果(Gs, s)的左子节点和(G, n)的左子节点的粒子数量分别为s1和n1,则已知n、s和s1,而n1需要进行编码。为了使用n、s和s1来预测n1,我们利用基于上下文的算术编码,其中向量c1(上下文)的知识有助于缩小n1的可能值范围。我们不直接使用c1 = [n, s, s1]来直接编码n1,因为其中任何一个数值都可能非常大,以至于跟踪所有可能的上下文是不实际的。相反,我们使用对数 数值,即m = ⌊log2 (n + 1)⌋,m1 = ⌊log2 (n1 + 1)⌋,r = ⌊log2 (s + 1)⌋和r1 = ⌊log2 (s1 + 1)⌋。对数数值的使用也使得所有上下文更加可靠,因为每个上下文现在出现的次数足够多,具有统计显著性。然而,现在我们需要编码的不仅是n1,还有m1和m2 = ⌊log2 (n2 + 1)⌋,其中n2是当前节点右子节点中的粒子数量(即n2 = n−n1)。原因是,m2不能从m和m1中推断出来,除非在一些特殊情况下,即当m = m1 = 1,m2 = 0时,以及当m1 = 0,m2 = m时

上下文更新。为了编码m1,我们的上下文向量c1包含的信息不仅仅是 [m, r, r1]。具体而言,c1 = [m, r, r1, r2, l, h],其中r2是参考节点右子节点中粒子数量的对数值(即r2 = ⌊log2 (s − s1 + 1)⌋),l是当前节点的分辨率级别h是当前节点的树深度。我们使用上下文表H来在遍历过程中实时维护和更新所有遇到的m1和c1组合的条件概率P(m1|c1)。H是一个哈希表,当使用键c1索引时,返回一个频率数组,该数组给出给定c1的m1的条件分布,即P(m1|c1) = H[c1][m1] / Σi H[c1][i]

在遍历和编码过程中,每当出现(c1, m1)对时,我们就增加H[c1][m1]的计数。然而,由于Te和To通常具有不同的形状,完整的上下文可能不存在,这种情况下我们会回退到较短的上下文[m, l, h]来编码m1。当第一次出现(c1, m1)对时,H[c1][m1] = 0,因此无法使用c1来编码m1。相反,我们使用频率为1的空符号(即H[c1][-1] = 1)来表示给解码器,c1无法使用,然后使用均匀概率编码m1,即1/(m+1)。同时,我们仍然增加H[c1][m1]的计数,以避免下次出现相同的(c1, m1)对时出现零概率问题。最后,m2也使用一个上下文来进行编码,该上下文结合了c1和m1,因为在解码m2之前,m1已经是已知的。

在遍历和编码过程中,每当出现(c1, m1)对时,我们就增加H[c1][m1]的计数。然而,由于Te和To通常具有不同的形状,完整的上下文可能不存在,这种情况下我们会回退到较短的上下文[m, l, h]来编码m1。当第一次出现(c1, m1)对时,H[c1][m1] = 0,因此无法使用c1来编码m1。相反,我们使用频率为1的空符号(即H[c1][-1] = 1)来表示给解码器,c1无法使用,然后使用均匀概率编码m1,即1/(m+1)。同时,我们仍然增加H[c1][m1]的计数,以避免下次出现相同的(c1, m1)对时出现零概率问题。最后,m2也使用一个上下文来进行编码,该上下文结合了c1和m1,因为在解码m2之前,m1已经是已知的。

在这里插入图片描述
图10.在这个过程中,偶数子树Te从混合树转变为k-d树Te。奇数子树To使用与Te的锁步遍历进行编码。两个前节点((Gs, s)和(G, n))的局部信息用于上下文编码。当To完全编码完成后,它与Te合并并转变为下一级预测所使用的k-d树。

7 评估和结果

我们通过进行各种实验来评估我们提出的解决方案的有效性。在接下来的讨论中,“BT on k-d tree”和“DT on k-d tree”是基准的DG 方法;而其他的遍历树组合则是我们的贡献。
我们以每粒子的比特数(bpp)来量化数据的损失,即解码的比特数除以原始粒子的总数。粒子始终使用32位浮点坐标来表示,然后在实验之前将其量化为32位(96 bpp)整数。当遍历在中途停止时,我们为遍历前沿的每个节点(G,n)输出G内的一个(随机)粒子来生成一个近似结果。我们使用|C|来表示用于遍历的容器的大小,以元素的数量为单位。

在适当的情况下,我们使用标准的峰值信噪比(PSNR)渲染图像来评估部分重建的质量。PSNR定义为20 log10 (W/E),其中E是每个参考粒子与其最近的重建粒子之间的均方根点距离,W是参考粒子边界框的最大尺寸。PSNR为50 dB表示E约为W/300,每提高1 dB相当于将E减少10%。渲染图像是在解码后使用OSPRay [93]生成的(即我们不 同时解码和渲染);正如前面提到的,本工作主要关注编码和解码,希望未来的工作可以将这里提出的思想扩展到从压缩数据直接进行渲染。请注意,除非另有明确说明(如第7.4节和第7.5节),我们使用的是截断二进制编码

7.1 k-d树自适应遍历

AT(采用提出的评分启发式公式,方程1)在k-d树上相对于BT(基线DG方法)改善了广泛数据集的速率-失真折衷(参见图11)。我们没有在同一图中包括DT,因为由于整个区域缺失,DT的均方根误差通常异常高,导致基于L2范数的质量度量(如PSNR)的意义较小。图14提供了使用BT和AT进行低比特率重建的视觉演示(见第一个绿色高亮的列对比)。我们使用OSPRay [93]以低比特率渲染各种遍历和树 的组合输出。所选择的比特率使得各种组合之间的视觉差异最为明显。对于girl数据集,相比于在每个树深度级别上遵循严格顺序的BT(a2),AT(a3)提供了更好的空间覆盖,避免了分辨率变化处的明显接缝。对于fissure数据集,同样的现象发生在b2和b3之间的对比上。对于soldier数据集,虽然不太明显,AT(d3)也能生成更平滑的表面。对于cosmic web数据集,AT(f3)通过偏好密集的节点更好地捕捉到兴趣点(粒子集群,即星系)。总体而言,由于更具数据自适应性,AT在视觉上和定量上(通过PSNR)都可以显著改善相比于BT。

可选的 评分函数。我们默认的AT评分函数(方程1)并不总是适用于所有数据集。例如,图12中煤炭数据集(包含模拟的煤炭粒子)的渲染结果包含遮挡,因为“表面”上的粒子被赋予更高的重要性。然而,由于遮挡,密集树节点中的大多数粒子被隐藏起来,但这些节点在我们的评分函数中被认为很重要。为了提高视觉质量,我们使用了另一种替代的评分函数,将分子中的n去除,以防止对密集节点过度强调。结果是重建的PSNR降低,但视觉质量改善(即更接近参考图像,比较图12b和图12c),表明PSNR并不总能捕捉到视觉质量。当粒子被视为表面时,我们的替代评分函数通常会产生更好的可视化效果,因为含有表面粒子的节点被赋予更高的优先级,尽管它们往往更为稀疏。

在这里插入图片描述
图 12:遍历顺序和树的可选组合的重建结果,包括使用用于AT的可选评分函数以获得更好的可视化重建©,即使在较低的PSNR下也是如此。 所有重建都在0.3bpp。 尽管不是典型的,杂交树上的BT和AT是非常可能的组合,有时可能比K-D树上的BT更好,就像这里的情况一样。

7.2 混合树和块混合树的遍历

在图14中,我们使用文中讨论的五种树和遍历顺序的组合对六个具有不同特征的数据集(行)进行编码和解码。对于每一行,所有列都以相同的比特率进行解码,但需要注意的是每种方法解码的粒子数量可能不同。可以看到,我们的混合树上的DT能够恢复整个空间的粗略重建,而不仅仅是对数据部分进行非常精细的重建,这是在k-d树上的DT中的情况(见第二对绿色突出显示的列)。与k-d树上的BT(DG)相比,混合树上的DT倾向于为密集表面数据(girl,soldier)产生更好的结果,但对于稀疏科学数据则产生较差的结果。对于混合树上的DT来说,一个特别困难的情况是molecule数据集,其中分布非常稀疏,但粒子的精度很高。在这种情况下,对粗略粒子子集进行高精度的细化是没有用处的(见图14(c5))。

对于大多数数据集,基于块混合树的BAT通常通过在整个空间更均匀地分布误差来改进混合树上的DT,从而在视觉上得到改善。这种观察在比较(a5)和(a6),(c5)和(c6),以及(e5)和(e6)时最为明显。有趣的是,就PSNR而言,基于块混合树的BAT往往表现不如基于k-d树的BT或AT,有时甚至不如混合树上的DT。然而,在视觉上,BAT通常优于所有其他方法(尤其在molecule数据集的情况下),与BT或AT相比,在密集采样的表面上产生的块状外观较少(例如girl或soldier数据集)。BAT在视觉上也可能失败(cosmic web数据集),相比之下,与混合树上的DT相比(见(f5)和(f6)),均匀细化并不是一个好策略。最后,与基于k-d树的BT相比,我们的混合树和块混合树通常以相同比特率下生成的粒子数量要少得多(见fissure,dam break和cosmic web数据集),这应该有助于下游处理任务。最引人注目的例子是比较(e6)和(e2),其中BAT使用的粒子数量仅为BT的八分之一,却产生了几乎相同外观的近似结果

7.3 速度和内存占用

图13(a, b)显示了任何树上的混合树DT和基于块混合树的BAT实现了恒定的内存占用,而AT和BT则需要数量级更多的内存。与DT和BAT相比,BT和AT的速度也变得非常缓慢。与BT相比,我们的AT需要相同的内存占用,但速度较慢,但可以显著提高重构质量(如7.1节所述)。BAT的解码时间增长速度比DT(无论是基于k-d树还是混合树)更快,其内存占用也更高,但仍然是渐近恒定的(图13b)。这是以更高的重构质量为代价的(图14)。尽管与基于块混合树的BAT相比,DT在混合树上的功能较少,但也许最好的折衷方案是使用混合树上的DT,它在几乎不增加成本的情况下大大提高了重构质量,超过了基于k-d树的DT。基于这些结果,我们建议对于小数据使用k-d树上的AT对于大数据使用基于块混合树的BAT且AT仅限于顶部的粗糙k-d部分

在这里插入图片描述
图13(a, b):对于混合树和遍历方法的组合,绘制了解码时间和内存占用,图中展示了爆炸数据集的情况。DT和BAT实现了恒定的内存占用和与位数线性缩放的解码时间,而AT和BT则需要数量级更多的内存,并且解码时间增长得更快。(c):与MPEG [17]相比,我们的基于块的编码器(基于块混合树的BAT)几乎降低了5到7倍的成本,而且我们的时间和内存成本增长速度也更慢。

在这里插入图片描述
图 14:本文讨论的六个数据集(行)的不同遍历树组合(列)的可视化比较。 简化后的数据集分别为1.1bpp(女孩)、1.3bpp(裂缝)、4.4bpp(分子)、0.4bpp(士兵)、3.1bpp(溃坝)和1.3bpp(宇宙网)。

我们对BAT(基于块混合树的编码器)和当代最先进的八叉树压缩器MPEG进行了可扩展性测试,使用了TMC3的参考实现。我们对八个数据集进行编码,数据集中的粒子数量逐渐增加,并记录了两种方法的编码时间和内存使用情况。图13(c)显示,我们基于块的编码器比MPEG的编码器快数倍,同时对于较大的数据集,内存使用量更少一个数量级。此外,我们的方法的时间需求和内存占用以较慢的速度增长。对于解码来说,很难进行公平比较,因为MPEG是逐块解码和输出,而我们维护了所有必要的状态,以便同时进行渐进解码的所有块(对于跨块位分配很重要)。尽管如此,MPEG在解码本实验中最大的数据集(包含4亿个粒子)时崩溃了。

我们还使用基于块混合树对一个几乎有10亿个粒子(名为detonation-large,包含968M个粒子)的数据集进行编码,然后从相同的编码中渐进地解码和渲染出三个近似结果(图15)。渲染是使用OSPRay 进行的,每次解码时仅解码原始968M个粒子的一个子集。由于OSPRay为渲染构建了自己的加速数据结构,这会增加内存需求,而不会减少粒子数量。原始数据集在我们的64GB RAM机器上无法进行渲染(之前使用3TB RAM进行渲染)。而使用基于块混合树,可以在显著较低的粒子数量下进行高质量的重建,使用恒定的内存占用(50MB RAM)进行渐进解码。

在这里插入图片描述
图15:对一个爆轰模拟数据集的三个近似,用我们的块混合树方法进行压缩和解码(压缩率k×和相应的粒子数n,给定)。 这三个都是一个渐进解压过程的快照,并且都只使用50 MB进行解码。

7.4 二项式编码

在图16中,我们绘制了使用截断二进制编码和我们的二项式编码在k-d树上进行压缩的率失真曲线。我们使用了三个具有近似均匀粒子分布的真实数据集,以及一个分布真正均匀的合成数据集。可以看出,在相同的数据质量下,二项式编码在压缩比方面始终提高了10%到20%左右。相反,在相同的压缩比下,二项式编码平均提高了约0.5 dB的PSNR。图17在视觉上展示了二项式编码和截断二进制编码之间的数据质量差异,使用了fissure数据集,它显示即使是0.68 dB的看似小差异也可以产生显著的视觉差异。最难压缩的数据集是随机数据集。

在这里插入图片描述
图16:率失真曲线表明,对于粒子近似均匀分布的数据集,我们提出的二项编码优于标准的截断二进制编码[89]。我们还包括一个合成的随机数据集,具有随机粒子分布。

在这里插入图片描述
图 17:在相同的比特率下,二项式编码更完整地重建原始数据中的特征:对于裂缝数据集,二项式编码更清楚地定义了裂缝的形状。

率失真曲线
它是指在不同的压缩率下,数据的失真程度。具体来说,它表示了在给定压缩比的情况下,数据质量(通常使用PSNR)与压缩率之间的关系。

为了进一步评估我们实现的编码效率,我们对由随机生成的粒子组成的合成数据集进行压缩,并将我们压缩后的比特流大小 与 理论计算的编码大小 进行比较。理论编码大小是通过在每个k-d树节点(G,n)下假设n1服从二项分布的情况下,计算编码n1所需的最小比特数之和来计算的。图18显示我们的二项式编码实现在所有树深度上实际上与理论计算的编码大小几乎相同,这意味着我们每个树节点的平均编码大小接近二项分布的熵。同样的图表还显示,随着n越来越接近树根,该(归一化)熵趋近于0.5;当n趋近于叶节点时,该熵趋近于1,这与我们在6.1节中的分析一致。这个结果对于未来越来越大(和更密集)的数据集非常鼓舞人心,因为渐进细化将更多地停止在树的根部,从而为二项式编码提供更好的压缩,接近于 相对截断二进制编码的减少比例为0.5。在性能方面,二项式编码比截断二进制编码运行速度慢约1.5倍。

7.5 奇偶上下文编码

为了测试奇偶上下文编码方法的有效性,我们使用两种方法对多个数据集进行压缩:截断二进制编码和上下文编码。为了进行比较,我们始终使用混合树上的DT,因为奇偶上下文编码是为这种组合设计的。在混合树上,DT从粗到细地访问分辨率级别;因此,当处理每个分辨率级别时,我们记录两个比特流之间的比率,并将这些比率绘制在图19中(比率小于1表示上下文编码更好)。图表显示,对于几个数据集,上下文编码在压缩比方面优于截断二进制编码,可以压缩得更好(对于舞者数据集高达40%),在最后一个分辨率级别(无损压缩)中,有几种情况下可以压缩得更好程度相比于截断二进制编码达到20%。随着分辨率变得更高,上下文编码的效果也变得更好,这很可能是因为奇偶分割下的兄弟子树在更细的分辨率级别上更相关,因为它们的空间分离度较小。另一方面,随着距离向粗分辨率级别增加,相关性减少,从而压缩效果变差。

图19还显示,我们的上下文编码对某些数据集效果不佳,但从未明显差于截断二进制编码。我们区分两种类型的数据集:密集采样的表面(虚线)和科学模拟中稀疏但高精度的粒子(实线)。可以看到,我们的方案在表面(密集)数据集中效果更好,其中粒子形成非常明显的形状,并且有足够的粒子使得形状通过奇偶子采样相对保持完整。这种数据集包含密集分布的粒子,因此它们具有明显较少的单元内细化比特。由于此类比特往往更加随机,具有较少此类比特的数据集通常压缩效果更好。相反,科学模拟数据集更难压缩,因为它们由于粒子相对稀疏但存储精度高而主要由单元内细化比特所占据。
在这里插入图片描述
图 19:压缩码大小之间的比率(上下文编码与截断二进制编码之间的比率)在逐渐更细的分辨率级别上,最后一个级别对应于无损压缩。 我们的上下文编码器对密集的表面数据集(实线)非常有效,对高精度但稀疏的数据集(虚线)不太好。(比率小于1表示上下文编码更好)

我们的上下文编码方案在一个非表面数据集(detonation)上也表现出良好的效果。在这里,粒子的排列大多是非常规则的,因为它们代表了爆炸物的阵列,上下文建模可以利用这种全局重复性。使用dancer数据集,图20展示了上下文编码相对于截断二进制编码,在逐步解压缩中可以显著提高PSNR。从视觉上看,PSNR的提高表现为在低比特率下更好的重构表面,并且具有显著减少的伪影(图20底部)。在实验中,我们实现的奇偶上下文编码在编码器方面通常比截断二进制编码慢两倍,并且在解码器方面比截断二进制编码慢三到八倍。额外的计算成本主要来自于对偶子树中的粒子进行重新分区,这使得编码器的计算成本加倍(正如预期的那样)。没有奇偶上下文编码,解码器比编码器快大约四倍,因为它不需要对粒子数组进行分区以获得节点值(节点值从比特流中解码)。使用奇偶上下文编码,增加了一个额外的分区步骤,编码器和解码器的运行速度相似。

在这里插入图片描述
图 20:上图:Dancer数据集的率失真图显示Oddeven上下文编码明显优于截断二进制编码。 下图:两种编码方法在0.03bpp相同比特率下的可视化比较。 奇偶上下文编码更明显地再现参考数据(用更少的伪影)。

我们在表1中对几个数据集进行了近似无损压缩比(相对于量化粒子而言)的比较,比较的方法包括DG [36],我们提出的技术,MPEG [17]和LASZip [95]。为了实现最佳压缩,我们对crystal、molecule、salt、fissure、detonation和random-80使用带有二项式编码的k-d树,对girl、dancer和soldier使用带有奇偶上下文编码的块混合树,对其他数据集使用带有截断二进制编码的混合树。对于点云的无损压缩,LASZip是行业标准,而MPEG代表了压缩比方面的最新技术。表1显示,我们的方法在大多数情况下与DG相比实现了可比较的无损压缩比,这意味着我们使用的奇偶分割不会降低压缩效果(同时实现了更好的质量和内存权衡,如前所示)。对于密集表面数据集(girl、dancer、soldier),我们的奇偶上下文编码相对于DG实现了显著更好的无损压缩比。LASZip在大多数情况下产生了最差的压缩比,而MPEG通过其复杂的上下文建模实现了最佳的压缩效果。并不意外的是,对于密集表面数据集(girl、dancer、soldier),MPEG表现最佳,因为它专门设计用于这种类型的数据。然而,对于许多粗糙但高精度的科学数据集(molecule、salt、dam break、coal和cosmic web),MPEG的压缩比并不比我们的好。

在这里插入图片描述
表1:比较了四种压缩方法对实验中使用的几个数据集的无损压缩比。 对于标有*的数据集,我们在文本中给出了进一步的注释。

detonation数据集包含高度规律、重复的粒子排列,MPEG和LASZip利用了这一特点,而DG和我们的方法则没有。然而,通过使用基于字典的额外压缩,我们的压缩比从3.85增加到10.3,与LASZip相当。random-80是一个由合成生成的数据集,其中随机选择了80%的网格单元包含粒子。由于我们基于网格的方法可以在稀疏数据和密集数据之间平滑切换当粒子密集分布时,我们将切换到对空单元进行编码,因此它的压缩比 比DG好两倍,比LASZip好四倍,而MPEG则会崩溃。在实际应用中,大多数科学数据集相对于网格大小而言是稀疏的,但随着更多粒子的捕获和模拟,未来的数据可能会变得更加密集。

8.结论和今后的工作

我们提出了一种基于树的粒子压缩管道的创新技术,核心概念是奇偶划分。与其他最先进的粒子压缩器相比,我们提出了一种能够在数据质量和资源需求之间取得更好平衡的树构建和遍历技术。我们的自适应遍历方法相对于静态的广度优先遍历在用户定义的误差启发式方面有所改进。与k-d树相比,我们的混合树实现了高质量的深度优先遍历。块混合树不仅允许对块进行独立、低占用的编码和解码,而且相比其他方法还可以获得更高的重建质量。我们的块自适应遍历方法在解码时允许灵活的、基于误差引导的重建,与数据的压缩方式无关。我们提出的二项式编码和奇偶上下文编码显著改善了它们所设计用于的数据集的压缩比,对于均匀分布的数据集可提高20%,对于密集采样的表面数据集可提高40%。所有提出的技术对编码器和解码器都有益处。总的来说,我们的贡献构成了一个高度灵活和可扩展的粒子压缩系统,与现有的MPEG标准相比,在内存和速度方面都具有优势,无论是绝对性能还是增长速度。

与DG [36]类似,我们的方法也没有利用全局冗余,尽管这可能有助于压缩特定的粒子排列方式,但代价是编码复杂性和速度。为了实现奇偶分割方案,我们需要对粒子位置进行量化,以避免浮点运算带来的不准确性,但可能存在一些技术可以在不进行量化的情况下保持准确性。我们也没有处理除位置之外的属性压缩,尽管基于懒惰小波变换的奇偶分割可能暗示了一种适用于属性的小波压缩方案。我们认为有机会进行更深入的研究,以权衡奇偶分割和k-d分割之间的权衡,以及各种树和遍历类型的可能组合之间的权衡。奇偶分割的思想可能推广到八叉树,尽管可能会有不同的权衡。

对于诸如最近邻查询、遮挡剔除或渲染中的空间跳跃等任务,我们还需要观察奇偶分割机制对应用层面的影响,以及我们的混合树和块混合树在非压缩目的中的应用程度。对于某些数据集,既不适用于二项式编码,也不适用于奇偶上下文编码。这些数据集往往包含非均匀、相对稀疏但高精度的粒子,在科学模拟中很常见。可以发明更好的编码方案来更好地针对这些情况,希望本文提供的思路为这些方案提供了良好的起点。最后,研究面向任务的误差度量/启发式算法及其在驱动树构建或树遍历方面的实用性也是重要的。

致谢:

本研究部分得到美国能源部(DOE)授予的奖励号码DE-FE0031880和Exascale计算项目(17-SC-20-SC)的支持,该项目是美国能源部科学办公室和国家核安全局的合作努力。
此工作还得到了NSF OAC奖项1842042、NSF OAC奖项1941085和NSF CMMI奖项1629660的部分支持。
此工作还在美国劳伦斯利弗莫尔国家实验室的合同DE-AC52-07NA27344下进行,并在LLNL-LDRD项目17-SI-004的支持下进行。

猜你喜欢

转载自blog.csdn.net/lijiamingccc/article/details/130594363