Hierarchical Clustering of 3D Objects and its Application to Minimum Distance Computation 阅读笔记

3D对象的层次聚类及其在最小距离计算中的应用

摘要

本文提出了一种新的迭代算法,用于自动生成复杂3D场景中包含的对象的层次聚类(hierarchical clustering of the objects)

所提出的面向对象的表示形式比八叉树(octrees)(传统的面向场景的分层表示形式(scene-oriented hierarchical representation))具有优势。

我们的方法可以提高最小距离计算等任务的运行速度。

我们在大型合成3D场景(synthetic 3D scenes) 上进行了实验。

导论

分层表示(Hierarchical representations)

  • 分层表示将复杂的问题分解成一组有层次的更简单的表示形式。
  • 分层表示可以用于运动计划(motion planning)、任务组织(task organization)、图像处理(image processing)等领域。

3D层次结构(3D hierarchical structures)

  • 3D层次结构可以解决碰撞检测(collision detection)、可见性分析(visibility analysis)、路径规划(path planning)等空间推理问题。
  • 3D层次结构生成方法包括 面向场景(scene-oriented)面向对象(object-oriented) 两种。
    • 面向场景:
      • 定义:将给定场景视为一个整体,在层次结构的每个级别上逐步细分其体积。
      • 分类:包括二元空间分区树(Binary Space Partitioning trees)、八叉树(Octress)和扩展八叉树(Extended Octrees)。
      • 不足:由于场景中包含的对象被视为场景的一部分,而不是被视为单个实体,因此许多需要处理单个对象(例如,最小距离计算)的基本任务可能会性能显著下降。
    • 面向对象:
      • 定义:关注场景中包含的单个对象,而不是整个场景。
      • 分类:包括对象内表示(intra-object representations)对象间表示(intra-object representations) 两种。
        • 对象内表示 将每个单个对象分解成基本几何图元(basic geometric primitives) 的层次结构(hierarchy)。例如构造实体几何(Constructive Solid geometry,简称为CSG)就是一种基本几何图元。
        • 对象间表示 对对象进行分组。
对象间表示
A Generic Algorithm for Constructing Hierarchical Representations of Geometric Object

自底向上的启发式贪心聚类方法,将对象逐步分组为二叉树。

  • 维护一个节点集合,该集合中所有节点都没有父节点。
  • 对每一个节点对计算凸包,为凸包直径最小的节点对生成父节点。
Efficient Generation of Object Hierarchies from 3D Scenes
  • 全连接图中提取最小生成树(MST),保留场景中每对对象的分组成本、
  • 成本函数基于万有引力定律。
  • MST生成n元树

优点:效率高。
缺点:随着分组的进行,成本函数缺乏更新。

例:

  • 全连接图,和它的MST:
    全连接图,和它的MST
  • 二元聚类树:将MST中的边根据权重递增排序,依次组合每条边连接的2个顶点。
    即:先组合G和D,然后组合A和C,然后组合GD和E,……
    缺点:太深了,因此要继续生成n元树。
    二元聚类树
  • n元树:合并可兼容的聚类
    权重最小的两条边定义 F 0 F_0 F0,即GDE。
    迭代地:
    • 计算 F i F_i Fi的均值 μ i \mu_i μi和标准差 σ i \sigma_i σi
    • 如果某一条边的权重 w w w,满足 w < μ i + 2 σ i w<\mu_i+2\sigma_i w<μi+2σi,则将该边加入 F i F_i Fi
    • 当没有满足条件的边时,按照相同的方法生成新的家族 F i + 1 F_{i+1} Fi+1
      生成的家族为: F 0 = { 3.7 , 4 , 4.1 , 4.8 } F_0=\{3.7,4,4.1,4.8\} F0={3.7,4,4.1,4.8} F 1 = { 7.1 , 7.3 } F_1=\{7.1,7.3\} F1={7.1,7.3} F 2 = { 10.3 } F_2=\{10.3\} F2={10.3}
      通过合并相邻且权重边属于同一家族的聚类,生成n元图。
      家族与n元图

本文方法

  • 定义了一个更合理直观的代价函数
  • 迭代过程。通过对前一级的 边界球(bounding sphere)(即包含所有对象的n维球)进行分组,来构建 层次结构(hierarchy) 的每一个层级(level)。当只剩单个边界球时,迭代停止。
  • 包括三个阶段:
    1. 建立全连接图。每条边的权重为:在当前级别上,对该球对进行 分组(group)代价(cost)
    2. 计算该图的最小生成树MST
    3. 对MST的边基于代价进行聚类。
第一阶段:全连接图生成

层次结构中的第 λ \lambda λ 层级为例, S = { S 1 , . . . , S N } S=\{S_1,...,S_N\} S={S1,...,SN}是该层中出现的 N N N个球。
S i S_i Si 的半径为 r i r_i ri,3D球心为 C i C_i Ci

  • 一开始,这些球就是他们所包含的对象的边界球
  • 如果两球 S i S_i Si S j S_j Sj分组,它们将被他们的 最小边界球 S i j S_{ij} Sij 代替。

分组过程建立了一个全连接图,图中的每个节点代表了第 λ \lambda λ 层级的的一个球,每条边的权重代表了将其两端的球分组的代价

分组代价函数(grouping cost function)

背景:

  • 过去使用的代价函数基于两个对象间的attraction force,或启发式地认为大小相似的两个对象应该被合并
  • 我们的方法结合两者优点,既考虑最小边界球的大小,又考虑填充因子

填充因子(filling factor):

  • 定义: 衡量 原来的两个球 占 分组后的球(即它们的最小边界球) 的比率。(填充的程度)
  • 背景: 过去的算法使用直径的比率作为填充因子,(一维)。如图,它会将a、b、c三种情况都判断为有相同的填充因子,显然是不合理的。填充因子
  • 方法: 使用 原本两个球的体积和 与 最小边界球的体积 的 比率 作为 填充因子,是对空白空间的度量
    • 每个球 S i S_i Si都有一个填充因子 F i F_i Fi F i F_i Fi可以迭代计算。 F i j = ( F i V o l i + F j V o l j − V o l o v e r l a p ) / V o l i j F_{ij}=(F_iVol_i+F_jVol_j-Vol_{overlap})/Vol_{ij} Fij=(FiVoli+FjVoljVoloverlap)/Volij

边界球大小:

  • 目的: 保证分组的单调性增长。
  • **方法:**使用其半径 r r r进行度量。

分组代价函数:
假设球 S i S_i Si S j S_j Sj的最小边界球 S i j S_{ij} Sij的半径为 r i j r_{ij} rij。代价函数为: ζ i j = r i j 3 / F i j \zeta_{ij}=r_{ij}^3/F_{ij} ζij=rij3/Fij
两球越小越接近,分组代价函数就越小。

第二阶段:MST生成

对一个有 N N N个节点和 M M M条边的图。
使用Kruskal算法,可以在 O ( M l o g N ) O(MlogN) O(MlogN)的时间内生成MST。

第三阶段:对象聚类和新层级生成
  • 最底层级由所有初始球组成。
  • 使用X-means算法,根据分组代价,生成MST中所有边的簇。
  • 新层级生成过程:根据一组簇中的边合并节点,生成的新的球与未被合并的球组成新的层级。
X-means算法

对k-means算法进行改进,但是中心点的数目是可增加的,输入给定一个中心点数目的范围,从下界开始,达到上界时终止。

X-means

  1. 执行正常的k-means算法直至收敛
  2. 尝试增加新的中心点。
  3. 如果中心点数目达到上界,终止算法。否则,goto 1。

两种增加中心点的方法:

  • 每次分裂一个簇的中心点:
    • 选择一个簇进行分裂,在原中心点附近增加一个中心点,执行k-means算法。计算收敛后的簇集的得分,判断是否增加该中心点。
    • 时间复杂度为 O ( K m a x ) O(K_{max}) O(Kmax),复杂度较高。
  • 每次分裂所有的簇:
    • 使用一种启发式方法,每次将所有的簇都各分成两半,执行k-means算法。计算收敛后的簇集的得分,判断是否保留这些分裂。
    • 时间复杂度为 O ( l o g K m a x ) O(logK_{max}) O(logKmax),但是每次都成倍地增加簇的数目,步子迈得太大了。

本文方法:

  1. 先分裂所有的簇(即使用第二种方法)。对每一个簇,将其中心点分为两个子中心点——在某一 随机方向 上 相对移动 与区域大小成比例的一段距离分裂所有簇
  2. 对每一个父簇,以两个子中心点为初始中心点,运行一个局部的 k-means(k=2)算法,得到收敛后的结果。
    局部k-means
  3. 判断对每一个簇所进行的分裂操作是否有意义,即获得的子模型相对父模型效果是否有提升。
    BIC Scoring
    最终簇结果

BIC Scoring:
贝叶斯信息量准则(Bayesian information criterion,BIC):

  • 是在有限集合中进行模型选择的准则。(越低越好)

极大似然估计(Maximum Likelihood Estimation,MLE):

  • 用于估计一个概率模型的参数。
  • 给定一个概率分布 D D D,已知其概率密度函数(连续分布)或概率质量函数(离散分布)为 f D f_D fD,以及一个分布参数 θ \theta θ ,我们可以从这个分布中抽出一个具有 n n n个值的采样 X 1 , X 2 , … , X n X_1, X_2,\ldots, X_n X1,X2,,Xn,利用 f D f_D fD计算出其似然函数:
    L ( θ ∣ x 1 , … , x n ) = f θ ( x 1 , … , x n ) L(\theta \mid x_{1},\dots ,x_{n})=f_{\theta }(x_{1},\dots ,x_{n}) L(θx1,,xn)=fθ(x1,,xn)
    最大似然估计会寻找关于 θ \theta θ的最可能的值(即,在所有可能的 θ \theta θ取值中,寻找一个值使这个采样的“可能性”最大化)。从数学上来说,我们可以在 θ \theta θ的所有可能取值中寻找一个值使得似然函数取到最大值。这个使可能性最大的 θ ^ \widehat{\theta} θ 值即称为 θ \theta θ的最大似然估计。

数据 D D D、一系列候选模型 M j M_j Mj(不同的模型对应不同的 K K K值)
使用后验概率 P r [ M j ∣ D ] Pr[M_j|D] Pr[MjD]来评价模型的得分。

假定簇中的点都符合高斯分布,求解在什么样的参数下,方差最小,满足高斯分布的概率最大。方差使用欧氏距离。
R R R是所有点的数量

惩罚因子
B I C ( M j ) = l j ^ ( D ) − p j 2 ⋅ log R BIC(M_j) = \hat{l_j}(D) - \frac{p_j}{2}\cdot \textrm{log} R BIC(Mj)=lj^(D)2pjlogR
p j 2 ⋅ l o g R \frac{p_j}{2}\cdot logR 2pjlogR是惩罚因子,对自由变量的惩罚。

在这里插入图片描述
R n R_n Rn是由 ∑ i \sum_i i求和得到的。

总结:

  • B I C ( ϕ ) = l ^ ϕ ( D ) − p ϕ 2 ⋅ l o g R BIC(\phi) = \hat{l}_{\phi}(D)-\frac{p_{\phi}}{2}\cdot logR BIC(ϕ)=l^ϕ(D)2pϕlogR
    其中:
    • ϕ \phi ϕ指模型。
    • D D D指所有的数据。
    • l ^ ϕ ( D ) \hat{l}_{\phi}(D) l^ϕ(D)是模型 ϕ \phi ϕ最大对数似然
    • p ϕ p_{\phi} pϕ是模型 ϕ \phi ϕ中参数的个数,作为模型复杂度的惩罚因子。
    • R R R是点的数目。
  • X-Means算法假设:identical spherical assumption
    • 数据由 X X X个高斯函数产生,每个高斯函数有一样的方差 σ \sigma σ(每个维度上的变量不相关,协方差矩阵为 d i a g ( σ ) diag(\sigma) diag(σ))、不同的均值 μ i \mu_i μi
    • 数据生成时,根据概率 p i p_i pi选择一个高斯函数 g i g_i gi,然后生成一个点。
    • 似然函数为:
      l ^ ϕ ( D ) = ∑ i = 1 R [ l o g p ( g i ) ] \hat{l}_{\phi}(D)=\sum_{i=1}^R[logp(g_i)] l^ϕ(D)=i=1R[logp(gi)]
新层级生成过程

假设当前层级为 λ \lambda λ层级。
假设 ξ = { E 0 , E 1 , . . . , E k , . . . E m } \xi=\{E_0,E_1,...,E_k,...E_m\} ξ={E0,E1,...,Ek,...Em}是当前簇中所有边的集合,且这些边按照其代价升序排列。

依次对 E k ( k = 0 , 1 , . . . , m ) E_k(k=0,1,...,m) Ek(k=0,1,...,m)执行以下操作,假设边 E k E_k Ek连接球 S i S_i Si和球 S j S_j Sj

  • 如果 S i S_i Si S j S_j Sj没被合并(merge)过,直接将 S i S_i Si S j S_j Sj合并,使用它们的最小边界球 S i j S_{ij} Sij作为一个新的对象。 S i j S_{ij} Sij对应一个填充因子 F i j F_{ij} Fij
  • 如果 S i S_i Si S j S_j Sj已经被其他球合并过了,(将它们被合并产生的新球分别称作 S I S_I SI S J S_J SJ),则计算 S I S_I SI S J S_J SJ的代价 ζ I J \zeta_{IJ} ζIJ。如果 ζ I J ≤ ζ m \zeta_{IJ}\leq\zeta_m ζIJζm,则将 S I S_I SI S J S_J SJ合并;否则不合并。

生成新的层级,即第 λ − 1 \lambda-1 λ1

实验

方法被用于复杂的合成3d场景。

场景层次结构

如图展示了一个包含24个对象的场景。
实验场景
下图展示了该场景层次结构的每一个层级
其中:

  • 深色实心球体 表示 在之前的层级中被合并的对象。
  • 深色线框球体 表示 在当前层级将要被合并的对象。
  • 浅色线框球体 表示 在当前层级中不会被合并的对象。

在这里插入图片描述

最小距离计算

确定与 给定直线段 距离最近 的 对象。如下图所示。
最小距离计算

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值