当前位置:   article > 正文

Self-supervised Single-view 3D Reconstruction via Semantic Consistency论文笔记

Self-supervised Single-view 3D Reconstruction via Semantic Consistency论文笔记

Self-supervised Single-view 3D Reconstruction via Semantic Consistency

论文地址:https://arxiv.org/abs/2003.06473

作者:Xueting Li, Sifei Liu, Kihwan Kim, Shalini De Mello, Varun Jampani, Ming-Hsuan Yang, and Jan Kautz

发表: ECCV 2020

链接: https://github.com/NVlabs/UMR

笔记参考:https://zhuanlan.zhihu.com/p/464151329

Abstract

该模型通过收集二维图像和轮廓来预测目标物体的3D网格形状、纹理和相机姿势。该方法不需要三维监督,不需要人工标注关键点,也不需要对象的多视图图像或先前的三维模板。

1. Introduction

1.1 问题和挑战

(1)由于其固有的模糊性,从2D图像中恢复三维形状和纹理以及相机姿态是一个高度不适定的问题。

(2)现有的方法通过利用各种形式的监督来解决这个任务,如地面真实3D形状、2D语义关键点、阴影、类别级3D模板或每个对象实例的多个视图。这些类型的监督信号需要繁琐的人力工作,因此要推广到许多缺乏此类注释的对象类别具有挑战性。

(3)通过不使用任何3D形状、模板或关键点注释来学习重建,即只使用一组单视图图像和对象实例的轮廓,仍然具有挑战性。这是因为在没有上述监控信号的情况下学习到的重建模型会导致错误的三维重建。

1.2 关键思路

人类会直觉感知到一个物体包括各个部分,比如鸟有两只腿、两个翅膀、一个头,从而识别物体。类似的,cv受此启发,也可以将一个物体定义为多个可变形的部分的集合。

  1. 仅需要单张图片+轮廓mask,利用语义一致性(即网格表面上一个点的语义部件标签即使在网格形状变形时也不会改变),实现自监督3D重建模
  2. 思路:1. 每个物体可以看作由可变形的部分组成;2. 对同一类型的不同物体,它们的每一部分在语义上都是一致的
  3. 通过自监督学习大量同类的图片,可以建立重建的mesh模型与图片之间的语义一致性来学习自监督重建模型。这样在同时预测形状、相机位置和材质的时候,可以降低模糊性。
  4. 第一个做到不需要特定类别的template mesh模型、带注释关键点或多视图图像,就可以从单视角图像中实现3d重建模。因此,这个方法可以推广到各种物体类别,而不需要类别的标签
    在这里插入图片描述

2. Related Work

省略

3. Approach

从CMR中的现有网络开始作为基线重建网络。给定输入图像,CMR 使用编码器 E 提取图像特征,并通过**三个解码器 Dshape、Dcamera 和 Dtexture **联合预测网格形状、相机姿态和网格纹理。网格形状 V V V 通过预测顶点偏移 Δ V ΔV ΔV 到特定类别的形状模板 V ˉ \bar{V} Vˉ 来重建;相机姿态 θ θ θ 由弱透视变换表示;重建网格纹理,纹理解码器输出 UV 纹理流 ( I f l o w I_{flow} Iflow),将像素从输入图像映射到 UV 空间。预定义的映射函数 $ Φ $进一步将 UV 空间中的每个像素映射到网格表面上的点。

CMR方法为什么表现良好?

(1)利用了手动注释的语意关键点

(2)精确的预先计算每个实例的地面实况相机姿态

(3)预先估计类别级3D模版

但世界上大多数对象类别没有良好的定义,注释的关键点不可能泛化到新的类别 (这篇论文主要就是把它去掉了。去掉之后呢,会出现相机+形状同时预测时Ambiguity的问题,所以就想方设法解决这个问题。),因此提出了一种在更具可扩展性但具有挑战性的自监督设置中的方法,而不使用手动注释的关键点来估计相机姿势或先验模板。

本文提出了一个专为自监督网格重建学习而设计的框架,即仅使用图像和轮廓的集合作为监督()
在这里插入图片描述
该框架包括:

(1)一个与CMR结构相同的重构网络(图像编码器E 和三个解码器Dshape、Dcamera和Dtexture)共同预测图像实例的网格变形 ∆ V ∆V V、纹理流 f l o w flow flow和摄像机姿态 θ θ θ

(2)语义一致性约束,正则化了模块(1)的学习,在自我监督设置下很大程度上解决了前面提到的“相机形状模糊”问题。

(3)一个从头开始学习规范语义UV映射和类别级模板的模块,该模块使用模块(1)进行迭代训练。

3.1 利用语义一致性解决相机形状歧义

由于自我监督学习模型只依赖于图像和轮廓,而不提供任何语义部分信息,同时预测形状、相机位置导致“相机形状模糊性”的问题。不正确的形状重建,与不正确的相机姿势相关联,可以产生与图像和轮廓观察相匹配的渲染。
在这里插入图片描述

关键是在3D和2D中使用对象实例的语义部分,基于:

自监督部件分割(SCOPS)为大多数对象实例提供了正确的部件分割,即使是那些具有较大形状变化的对象

在三维空间中,语义部件不受网格变形的影响,即在类别的所有重构实例中,网格表面上某一点的语义部件标签是一致的。因此允许我们构建一个所有实例可以共享的类别级语义UV映射——规范语义UV映射,反过来允许我们为网格上的每个点分配语义部件标签。

2D的部件分割SCOPS 一种自监督的方法,从一个对象类别的图像集合中学习语义零件分割,它们在不同的对象实例中语义一致。通过本文的方法,还可以反过来提升SCOPS的结果:利用生成的标准语义UV map作为伪标注反过来进行监督。
在这里插入图片描述

针对SCOPS估计的2D图像的语义部件分割,如何获得网格表面上每个点的语义部件标签?一种直观方法是获得从2D图像空间到3D形状空间的映射。如下

基于标准语义一致性进行3D的部件分割 通过重构网络学习到的纹理流 I f l o w I_{flow} Iflow,形成从2D图像空间到UV纹理空间的映射,然后通过预定义的映射函数 Φ \Phi Φ,进一步将UV空间的语义标签映射到网格表面。

理想情况下,所有实例都应该生成相同的语义UV映射——类别的规范语义UV映射,而不考虑实例的形状差异。这是因为:(i)语义部件的不变性表明分配给网格表面上每个点的语义部件标签在不同的实例之间是一致的;(ii)将像素从UV空间映射到网格表面的映射函数Φ是预先定义的,与3D空间中的变形(如面位置或区域变化)无关。因此,UV映射中像素的语义部分标签也应该在不同的实例中保持一致。
在这里插入图片描述

如果我们通过学习的纹理流 I f l o w I_{flow} Iflow直接对单个Pi进行采样,那么获得的语义UV映射在实例之间确实非常不同。这是由于(i)自监督SCOPS方法产生的部分分割预测是有噪声的,(ii)纹理流预测对于重构网格的不可见面具有高度的不确定性。。因此,通过聚合单个语义UV映射来近似规范语义UV映射 P ˉ u v \bar{P}_{uv} Pˉuv

P ˉ u v = 1 ∣ U ∣ ∑ i ∈ U I flow  i ( P i ) \bar{P}_{\mathrm{uv}}=\frac{1}{|\mathcal{U}|} \sum_{i \in \mathcal{U}} I_{\text {flow }}^{i}\left(P^{i}\right) Pˉuv=U1iUIflow i(Pi)

通过某种方法选择出训练集中效果比较好的子集 u u u ,对它们的结果进行加和,

选择样本的方式

  1. 首先选择最好的那一个样本,即 perceptual distance(3D投影到2D的图像与原始RGB图像的知觉距离?)最小的
  2. 然后选择K个跟这个最好的样本最接近的样本,即它们的语义UV map最接近

产生一个平均语义UV图,有效地消除了异常值(即不正确SCOPS的实例),以及有噪声的像素级预测。

2D和3D之间的语义一致性 相机模糊性虽然不容易仅通过比较渲染的重建图像和输入图像来识别,但是一旦网格表面上每个点的语义部分标签可用,就可以被识别出来。通过比较网格表面上的语义部分标签的渲染和二维SCOPS部分的分割,可以看出上上上图的(i)行重构是错误的。只有当相机的姿态和形状都正确时,渲染和SCOPS分割才会一致。

因此提出一种基于概率和一种基于顶点的约束,通过鼓励二维图像和网格表面中语义部分标签的一致性来促进相机的姿态和形状学习。

1. 基于概率的约束Probability-based constraint.

L s p = ∥ P i − R ( Φ ( P ˉ u v ) ; θ i ) ∥ 2 L_{\mathrm{sp}}=\left\|P^{i}-\mathcal{R}\left(\Phi\left(\bar{P}_{\mathrm{uv}}\right) ; \theta^{i}\right)\right\|^{2} Lsp= PiR(Φ(Pˉuv);θi) 2

规范语义UV映射 P ˉ u v \bar{P}_{uv} Pˉuv由预先定义好的映射函数 Φ \Phi Φ映射到3Dmesh表面,然后使用预测好的相机姿态 θ i \theta^{i} θi,用可微分渲染器R将3D模型渲染到2D,然后将结果与对应的SCOPS估计的部件分割概率图 P i P^{i} Pi做均方误差

注:由SCOPS生成的图像分割结果 P i P^{i} Pi做均是概率数值形式的
经验性的选择了均方误差(MSE)度量,比KullbackLeibler散度更鲁棒

2. 基于顶点的约束Vertex-based constraint.

将3D顶点用预测的相机姿态 θ i θ_{i} θi投影到2D域后,强制赋予其一个部件标签 p p p,并将其与输入图像中分配给该部件的区域对齐:

L S v = ∑ p = 1 N p 1 ∣ V ˉ p ∣ Chamfer ⁡ ( R ( V ˉ p ; θ i ) , Y p i ) L_{\mathrm{Sv}}=\sum_{p=1}^{N_{p}} \frac{1}{\left|\bar{V}_{p}\right|} \operatorname{Chamfer}\left(\mathcal{R}\left(\bar{V}_{p} ; \theta^{i}\right), Y_{p}^{i}\right) LSv=p=1Np Vˉp 1Chamfer(R(Vˉp;θi),Ypi)

N p N_{p} Np是零件语义部件的数量, V ˉ p \bar{V}_{p} Vˉp是已经学习好的某类别级模版 V ˉ \bar{V} Vˉ的对应部件标签 p p p的一组顶点, Y p i Y_{p}^{i} Ypi是从原始输入图像中的零件 P P P中采样的2D像素几何
在这里插入图片描述

注意:

用某类物体的类别级模版 V ˉ \bar{V} Vˉ,就可以让网络学习正确的相机姿势;反之,假如用每个实例重构 V V V的话,网络就仅仅会对3D物体的形状进行扭曲来满足Vertex-based constraint,不会学到正确的相机姿势了。

用Chamfer distance(倒角距离)是因为投影后的顶点和原始的像素点并不是严格一对一对应的关系。倒角距离(Chamfer Distance)是一种在计算机图形学和机器学习中常用的度量方法,主要用于测量两个形状之间的相似度。它是通过计算一个形状上的每个点到另一个形状上最近点的距离的总和,然后取平均值得到的。
在这里插入图片描述

3.2 渐进式训练Progressive Training

基于两个考虑因素,通过渐进式训练方法来训练图中的框架:

(1)构建规范语义UV映射需要可靠的纹理流 I f l o w I_{flow} Iflow来将SCOPS从2D图像映射到UV空间。因此,只有在重构网络能够较好地预测纹理流 I f l o w I_{flow} Iflow后才能获得规范语义UV图。

(2)需要规范的3D形状模板,一方面它加快了网络的收敛速度,另一方面可以用在前面提到的基于顶点的约束中。

但是,如果直接把类别级3D形状模版和实例级重构网络全都一起学习的话,效果不好;所以就提出了:EM训练步骤(expectation-maximization期望最大化),就是先固定一部分学习另一部分。在E-step中,我们使用当前模板和固定的正则语义UV映射训练重构网络;在M-step中,我们使用E-step中学习到的重构网络更新模板和正则语义UV映射。

E-step:学习具体实例的重建 固定标准语义UV map和template(初始是球体且不涉及概率及顶点约束),训练重建网络。200轮。

loss包括:

  1. 用于形状学习的渲染轮廓和地面真实轮廓(3D投影到2D的图像与gt剪影)之间的负 IoU 目标

  2. 用于纹理学习的渲染和输入 RGB 图像(3D投影到2D的图像与原始RGB图像)之间的感知距离目标

  3. 前面提到的基于概率的约束和基于顶点的约束

  4. 纹理循环一致性 Texture cycle consistency:见后文,以促进准确的纹理流学习

  5. 还有写在附录里的两个loss:

    graph Laplacian constraint 来鼓励mesh表面平滑(从pixel-mesh中来的)

    edge regularization 来惩罚大小不规则的面 代码里似乎是flatten loss

    对抗训练loss

M-step:规范 UV 贴图和模板学习 利用训练好的重建网络,计算标准语义UV映射(3.1中介绍)并学习类别级模板(从球体开始)。第一个从零开始学习类别级模版的方法

模板一开始是一个球体,每训练K轮更新一次。

V ˉ t = V ˉ t − 1 + D shape  ( 1 ∣ Q ∣ ∑ i ∈ Q E ( I i ) ) \bar{V}_{t}=\bar{V}_{t-1}+D_{\text {shape }}\left(\frac{1}{|\mathcal{Q}|} \sum_{i \in \mathcal{Q}} E\left(I^{i}\right)\right) Vˉt=Vˉt1+Dshape (Q1iQE(Ii))

其中 V ˉ t \bar{V}_{t} Vˉt V ˉ t − 1 \bar{V}_{t-1} Vˉt1分别是更新后的模板和当前的模板, I i I^{i} Ii是输入给图像编码起E的输入图像, D s h a p e D_{shape} Dshape是形状解码器, Q \mathcal{Q} Q是经过某种方式选择出来的部分样本,

  1. 首先选择最好的那一个样本,即与ground truth轮廓的IoU最小的
  2. 然后选择K个跟这个最好的样本最接近的样本,即这些样本的gt轮廓与最好的样本的gt轮廓的IoU越小则越接近

这样的话,模板 V ˉ t \bar{V}_{t} Vˉt是当前时代某个类别中实例的平均形状,它强制执行一个有意义的形状(例如,模板看起来像一只鸟),而不是类别的任意形式。

整个训练过程会包括两轮,每轮都包括一个E和一个M(两轮分别是代码中的train_s1和train_s2)。在E中,训练200 epoch 重建网络,然后在M中用训练好的网络更新template和标准语义UV map。注意在第一轮中(一轮包括一个E和M),只训练重建模网络,而没有语义一致性约束。

3.3 纹理循环一致性 Texture cycle consistency

在这里插入图片描述

学习纹理流 I f l o w I_{flow} Iflow的一个问题是,类似颜色(如黑色)的3D网格面纹理可能从图像的单个像素位置被错误采样。因此,我们引入了纹理循环一致性目标来正则化预测的纹理流 I f l o w I_{flow} Iflow(即2D→3D),使其与摄像机投影(即3D→2D)一致。

步骤:

  1. 首先给定一个三角形面 j j j,定义了 C i n j \mathcal{C}_{\mathrm{in}}^{j} Cinj C o u t j \mathcal{C}_{\mathrm{out}}^{j} Coutj分别是中通过纹理流 I f l o w I_{flow} Iflow被映射到 j j j的输入图像一定数量像素点集合 Ω in  j \Omega_{\text {in }}^{j} Ωin j和从三角形面j渲染回2D图像时对应的一定数量像素点集合 Ω out j \Omega_{\text {out}}^{j} Ωoutj的几何中心。
    C i n j = 1 N c ∑ m = 1 N c Φ ( I flow  ( G m ) ) j ; C out  j = ∑ m = 1 H × W W j m × G m ∑ m = 1 H × W W j m \mathcal{C}_{\mathrm{in}}^{j}=\frac{1}{N_{c}} \sum_{m=1}^{N_{c}} \Phi\left(I_{\text {flow }}\left(\mathcal{G}^{m}\right)\right)_{j} ; \quad \mathcal{C}_{\text {out }}^{j}=\frac{\sum_{m=1}^{H \times W} \mathcal{W}_{j}^{m} \times \mathcal{G}^{m}}{\sum_{m=1}^{H \times W} \mathcal{W}_{j}^{m}} Cinj=Nc1m=1NcΦ(Iflow (Gm))j;Cout j=m=1H×WWjmm=1H×WWjm×Gm
    其中 G ∈ R ( H × W ) × 2 \mathcal{G} \in \mathbb{R}^{(H \times W) \times 2} GR(H×W)×2是投影图像的标准坐标网络(包含了像素的坐标(u, v)), Φ Φ Φ是固定的UV映射,它与纹理流 I f l o w I_{flow} Iflow将像素从2D输入图像映射到网格面 j j j N c N_{c} Nc为输入图像中映射到每个三角形面上的像素数, W \mathcal{W} W是可微分渲染时生成的概率映射, W j m \mathcal{W}_{j}^{m} Wjm表示网格面 $ j $被投影到像素 m m m 上的概率, × × ×表示两个标量的乘法。

    把重建mesh模型渲染成2D图像,用的是 Soft Rasterizer,而不是CMR中用的 Neural Mesh Renderer,因为前者可以提供概率map,供texture cycle consistency使用

  2. 那么,材质循环一致性就是让 C i n j \mathcal{C}_{\mathrm{in}}^{j} Cinj接近 C o u t j \mathcal{C}_{\mathrm{out}}^{j} Coutj
    L t c y c = 1 ∣ F ∣ ∑ j = 1 ∣ F ∣ ∥ C i n j − C o u t j ∥ F 2 L_{\mathrm{tcyc}}=\frac{1}{|F|} \sum_{j=1}^{|F|}\left\|\mathcal{C}_{\mathrm{in}}^{j}-\mathcal{C}_{\mathrm{out}}^{j}\right\|_{F}^{2} Ltcyc=F1j=1F CinjCoutj F2

4. Experimental Results

4.1 实验设置

数据集 PASCAL3D+中的车和摩托车、CUB-200-2011中的鸟、ImageNet中的马 斑马 牛、OpenImages中的企鹅

训练 使用循序渐进的训练方法(章节3.2)来学习模型参数。在每个E-step中,重构网络被训练200个epoch,然后在M-step中用来更新模板和规范语义UV映射。唯一的例外是在第一轮(一轮由一个E和m步组成),我们在没有语义一致性约束的情况下训练重构网络。这是因为,在训练的开始, I f l o w I_{flow} Iflow是不太可靠的,这反过来又使规范语义UV映射不那么准确。

4.2 定性实验结果

在这里插入图片描述
在这里插入图片描述

三维网格的类别模版和部件分割 学习过的鸟、马、摩托车和汽车类别的模板,这些模板捕捉了每个类别的形状特征,包括鸟的嘴和脚等细节。我们还通过显示指定给模板表面上每个点的语义部件标签来可视化标准语义UV映射。

实例三维重建 第一张图(b)-(d)和第二张图 (b)中展示了每个单视图图像的3D重建结果。我们的模型可以重建形状高度不同的相同类别的实例,例如(b)中的一只瘦鸟,©是一只鸭子,(d)是一只飞鸟。我们的模型还正确地将每个输入图像的纹理映射到它的3D网格上,例如,每只鸟的眼睛以及鸟的背部的精细纹理。此外,在预测的相机位姿下的重建网格的渲染图(图7和图8中的第二和第三列)与第一列的输入图像匹配良好,说明我们的模型准确预测了原始的相机视图。

通过三维重建改进SCOPS

4.3 定量试验结果

从非刚性物体(bird)和刚性物体(car)的形状、纹理和相机位姿预测方面对重建网络进行了定量评估。

5. Conclusion

在这项工作中,我们学习了一个模型,可以从单视图图像中重建 3D 形状、纹理和相机姿势,仅使用特定类别的图像和轮廓集合作为监督。自监督框架增强了重建网格和图像之间的语义一致性,并大大减少了根据 2D 观察联合预测 3D 形状和相机姿态的模糊性。它还创建了类别级模板和规范语义UV图,分别捕获每个类别中对象最具代表性的形状特征和语义部分。实验结果证明了我们提出的方法与最先进的监督类别特定重建方法相比的有效性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/189490
推荐阅读
相关标签
  

闽ICP备14008679号