当前位置: 代码迷 >> 综合 >> CvxNet: Learnable Convex Decomposition (CVPR 2020 论文)
  详细解决方案

CvxNet: Learnable Convex Decomposition (CVPR 2020 论文)

热度:88   发布时间:2024-01-28 16:42:31.0

CvxNet: Learnable Convex Decomposition

CVPR 2020

PDF:https://arxiv.org/pdf/1909.05736.pdf

Code:https://github.com/tensorflow/graphics/tree/master/tensorflow_graphics/projects/cvxnet

Video:https://www.youtube.com/watch?v=Rgi63tT670w

欢迎从印象笔记保存:https://www.yinxiang.com/everhub/note/30b02b2b-af6c-41c9-a3fa-9905b1a31774

 

目录

摘要

引言

相关工作

方法:CvxNet

综述

可微凸指示器

凸编码器/解码器

显示表示

多凸分解

训练

实验

抽象能力 Abstraction

重建 Reconstruction

消融实验 Ablation studies

总结


摘要

  • 任何固体对象可以分解为凸多面体(凸面)的集合

    • 这种分解是计算机图形学的基础

       

    • 例如在实时物理模拟中

凸多面体,也称欧拉多面体,是一种简单多面体,即整个多面体都在其任何一个面所在平面同侧的多面体。凸多面体的任何一个面延展都不会通过它的内部,即把凸多面体的任何一个面伸展成平面,它的所有其他各面都在这个平面的同侧。

  • 凸对象(convex object)

    • 显式表示

      • 通过计算凸包的顶点而派生的网格

    • 隐式表示

      • 半空间约束或支持函数的集合

      • 适合于神经网络的训练

      • 是从需要表示的几何拓扑中抽象出来

显式:结果非常直接,但是训练较为复杂

隐式:训练是一个简单的分类问题,但是表面就需要通过移动立方体来提取

  • 一种网络体系结构

    • 基于凸组合的混合表示

    • 表示低维凸面族

    • 通过自动编码过程自动派生的

    • 应用:自动凸分解、图像到3D重建、基于零件的形状检索

 

引言

  • 3D 几何形状

    • 体素Voxel:低分辨率,分层表示

      • 是捕获拓扑未知的3D数据的关键

    • 表面建模:点points、多边形polygons、表面面补丁surface patches的集合

      • 能在GPU上高效的渲染

      • 便于跟踪低维参数模板

    • 简单几何图元的集合geons

      • 实现高效碰撞检测和分辨率

      • 将对象自然分解为语义成分,是描述场景和计划运动的关键

  • 贡献

    • 提出了一种基于原始分解的几何表示方法

    • 通过少量凸形元素来近似几何,同时力求从数据自动推断低维表示,而无需人工监督

    • 无监督

      • 启发于[68, 21, 44]

      • 通过检查重构的几何形状是否与目标几何形状相匹配来预测原始配置及其参数

    • 基于零件的表示

      • 因为训练形状的集合,零件具有语义关联

      • 不限于框、椭圆形、球面网格的类别,而是属于更一般的凸面类别

      • 凸面:半空间约束的集合

        • 可以同时将其解码为显式(多边形网格)和隐式(指示符函数)

        • 凸面之间的碰撞分辨率(collision resolution)由GJK [23]有效地确定

      • 零件可以通过结构化相互作用以在零件之间生成平滑的混合

 

 

 

 

相关工作

  • 体素:高维表示,用于判别模型和生成模型

    • 缺点:内存要求高,分辨率小于643

    • 利用体素稀疏性的八叉树,可以减少内存消耗,但更为复杂

  • 表面:多边形网格,用于图卷积、网络的输出

    • 缺点:可能会产生自相交的网格

  • 点云:高维表示,由深度传感器得到作为输入或中间结果

    • 缺点:想要生成3D网格会较为复杂

  • 图元 Primitive:通过一组体积图元来近似输入形状

    • 体素可以视为图元为单位立方体的特殊情况

    • 其他方法:

      • 构造实体几何 [33]

结构实体几何(constructive solid geometry,CSG)法:使用集合操作来组合两个三维对象。

      • 经典图元:blocks world 块, generalized cylinders 广义圆柱体, geons 几何数, Lego pieces 乐高积木

      • [68] 利用deepCNN将形状解释为简单矩形棱柱的结合

      • [50] 将长方体cuboid扩展为超二次曲面superquadrics,表明额外的灵活性将导致更好的重建

图形软件包中用来描述各种图形元素的函数称为图形输出原语(graphics output primitive),简称为图元(primitive);有点的位置、直线段、圆、二次曲线、二次曲面、曲面、多边形等等。

描述对象几何要素的输出图元一般称为几何图元(geometric primitive)。

  • 隐式曲面 Implicit surfaces:用于生成形状

    • 将形状图元推广到分析曲面(即分析功能的水平集 level sets of analytic functions)

    • [44, 15]训练了一个模型,以区分内部坐标和外部坐标(在本文中称为占用函数occupancy function,在图形社区中称为指示符函数indicator function)

    • 隐式描述形状的一个缺点是:最终结果缺少可解释性

    • [21] 采用了更几何的方法,并限制在轴对齐的高斯水平集上,提高了可解释性,但很难在带角度零件的形状上使用

  • 凸分解 Convex decomposition:

    • 将形状描述为凸对象的集合

    • 相关

      • 凸网格分解办法 [25, 52]

      • 将网格划分为精确的凸面通常会产生太多的碎片[13]

      • 是寻找少量近似于输入形状的凸面[22, 36, 38, 41, 40]

    • 本文方法与[68]和[21]相关,训练了一个占用函数,选择功能空间时要使它们的水平集近似为凸形,并将其用作构建基块

 

方法:CvxNet

综述

  • 物体由指示符Ο表示,?Ο表示表面;由指示符函数定义了物体的外部(=0)和内部(=1)

  • 将输入(图像、点云、体素等)通过编码器估计模板Ο^(K个图元)的表示参数 {βk}

  • 通过损失函数确保以下等式

  • 通过2D案例来叙述,并且是可微分的凸分解

    • 单个凸对象的可微表示

    • 自动编码器:创建低维凸集

    • 将对象表示为凸面的空间组成

    • 网络损失,和实现细节

可微凸指示器

半平面(half-plane):平面内的一条直线把这个平面分成两部分,每一部分都叫做半平面

符号距离函数(signed distance function):指在度量空间中的集合Ω,给定点到Ω边界?Ω的距离,并且由x是在Ω内还是Ω外确定其SDF的正负号

  • 定义了一个解码器,来构造(给定的半空间约束的集合)单个凸对象的指示函数

  • 定义符号距离函数

    • 参数 normal nh and offset dh

    • 超平面表示

  • 给定足够多的半平面,可以通过平面的最大符号距离函数来近似任何凸物体的符号距离函数

  • 为了方便梯度下降,使用平滑最大值函数LogSumExp(即文中的soft-max)得到近似符号距离函数

平滑最大值函数:使最大值处平滑,防止函数的可导性被破坏;ln(exp(x) + exp(y))

  • 将符号距离函数转换为指示函数C

  • 超平面参数的集合和整体参数集合

    • σ为超参数,其余为可学习参数

  • 总之,给定超平面参数的集合,该可微分模块会生成一个可以在任何位置x求值的函数

 

凸编码器/解码器

  • 参数之间是否存在相关性

    • 可解释性

    • 虽然理论上对H个超平面进行置换会生成相同的凸面,但解码器D会将特定的超平面与相应的方向相关联

  • 由于椭圆体和定向的长方体是凸面的,所以认为体系结构能够概括VP [68]和SIF [21]中提出的核心几何图元

显示表示

  • 网络所产生的凸面有一个明确的解释:可轻松将其转换为多边形网格

  • 只需要执行两个对偶变换,以及两个H点凸包的计算

    • 先将预测的半空间通过对偶变换转换为点,然后计算这些点的凸包,再通过对偶变换转换为多边形网格

多凸分解

  • 非凸对象表示为凸的组成

  • 编码器E输出所有K个凸面的低维表示,D将其解码为K个参数元组的集合 shape { βk } and location { Tk }

    • Tk(x) = x + ck 将点从世界坐标转换为局部坐标

训练

  • 损失函数

    • 对象 O 的近似损失

    • 分解损失(辅助)

      • 简约分解:尽量元素之间不重叠

    • 唯一的参数化损失(辅助)

      • 存在零空间的情况

      • 需要将原点移动到凸面内的另一个位置

      • 所以对偏移量的大小进行正则化

        • (如图8,保证超平面更贴合)

    • 引导损失(辅助)

      • 用离线采样来加快训练速度,但若是凸面存在与间隙时,会在学习过程中消失

      • 损失函数限制每个凸面负责至少代表N个最近的内部样本

    • 本地化损失(辅助)

      • 当凸点远离内点时,引导损失由于sigmoid函数而遭受梯度消失的困扰

    • 合并损失(引导损失+本地化损失)

 

  • 实现细节

    • 离线对地面真实形状上的一组点进行采样,预先计算地面真实量,然后在训练循环中从该集合中随机进行子采样

    • 使用 OccNet中的体积样本,SIF中的表面样本

    • 网络框架

      • Depth-3D任务,50个凸面,每个凸面具有50个超平面

      • RGB-3D任务,50个凸面和25个超平面

      • 编码器E:ResNet18

      • 全连接层生成256维潜在向量 λ

      • 解码器D:隐藏层(1024、1024、2048,| H |),输出尺寸为| H | = K(4 + 3H)

        • K 凸面数,H 超平面数

        • 4:3平移+1平滑度

        • 3H:法线、偏移量

      • 训练

        • BatchSize 32

        • Amda:lr=10-4,β1= .9,β2= .999

        • loss weight {1.0, 0.1, 0.001, 0.01, 1.0}

        • σ = 75

 

实验

  • 数据集

    • ShapeNet数据集、PartNet的标签

    • 体素化,渲染和数据拆分 [16]

  • 对比方法

    • 与自监督方法进行定量比较

    • 简单圆柱体组合VP [68]、结构隐式函数SIF [21]

    • 学习隐式函数的不可解释表示形式:OccNet [44]、P2M [71]、AtlasNet [26]

  • 度量指标

    • The Volumetric IoU

      • 100K uniform samples

    • The Chamfer-L1 distance

      • a smooth relaxation of the symmetric Hausdorff distance

      • 测量重建精度和完整性之间的平均值

    • Fscore

      • 正确重建的表面的百分比

抽象能力 Abstraction

  • 期望相同的第k个凸面代表相同的成分(图左)

    • (方法论述中参数的关联性中有提到)

    • 然后将最常见的关联标签分配给给定的凸面,从而获得相对较高的准确性(图右)

    • 利用语义结构

  • 通过改变组件的数量来评估形状的抽象能力

    • (简约性与重构精度之间的权衡)

    • k代表凸面数量

  • 基于零件的检索

    • 对应关系的进一步探索

重建 Reconstruction

  • 分别从深度图和彩色图作为输入,评估重建性能

    • 优于其他具有学习形状元素共同目标的零件分解方法(SIF,VP和SQ)

    • 接近于 OccNet [44]

消融实验 Ablation studies

  • 原始损失与合并损失

 

总结

  • 提出了适合学习的凸图元的可微表示

  • 本文的自我监督技术提供了更详细的重构

  • 将来,希望对模型进行泛化,以便能够预测可变数量的零件[68],理解对称性和建模层次结构[76],并包括旋转建模[68]

 

如有错误望指正,参考内容见论文。