Advertisement

2021年ICCV论文Deep Permutation Equivariant Structure from Motion论文阅读笔记

阅读量:

本文介绍了发表于ICCV 2021上的一篇名为《Deep Permutation Equivariant Structure from Motion》的论文。该论文采用图神经网络进行结构从运动计算(Structure from Motion, SFM),其输入为一个相机-二维点的张量,并输出包括恢复后的相机姿态以及三维稀疏场景点。作者在此研究中提出了利用深度学习方法解决SFM问题的新思路。

在这里插入图片描述

Abstract

1 Introduction

运动恢复结构(SFM),旨在从静止场景图像中恢复相机姿态和三维空间中的物体结构问题。传统的解决方法主要依赖于摄影几何理论与优化算法。随着深度学习技术的发展,在姿态估计与三维重建领域出现了一系列新型算法。这些算法能够有效编码合适的先验信息,并通过随机梯度下降等优化方法实现精确求解,在双目视图及多视点立体视觉等多种应用场景下均取得了最优效果。然而,在相机参数已知的前提条件下,在具有深度网络参与的多视图重构问题上仍面临诸多挑战。

本文提出了一种嵌入式深度神经网络架构,在经典框架内实现SFM功能。SFM的目标是从多个图像中的同一静态场景中推断出各点的三维位置及其对应的相机参数配置,并评估其重建质量的标准是重投影误差函数这一指标。该函数衡量的是预测点在图像平面上的位置与输入轨迹(即二维图像中的像素坐标)之间的接近程度。现有方法通常在重建过程中采用束调整技术以最小化该误差函数值(见第2节)。

我们的研究灵感来源于投影因子分解方法与深度矩阵填补网络理论框架。投影因子分解技术通过将轨迹位置矩阵分解为两个子矩阵的乘积形式来表示相机参数与三维点位置之间的关系;而深度矩阵填补方法则基于学习机制预测未知因素并填充原始数据中的缺失值部分。值得注意的是这类等变架构在处理图像数据时展现出显著优势:对输入矩阵进行行或列重新排列操作不会影响预测结果;同时这种架构所需的计算资源远低于标准全连接层设计;此外它还能够引入适当的归纳偏好从而提升模型泛化能力以达到高效学习目标需要较少数量训练样本的目的

在这里插入图片描述

以下是我们对原文的改写内容

2 Previous work

Classical Structure from Motion (SFM) methods.

Deep SFM methods. 深度神经网络的兴起带来了新的、基于网络的姿态估计和三维重建算法。具体来说,[56、58、69]恢复两个或三个输入图像的相机姿态,以及一个图像的密集深度贴图。BA net和DeepSFM旨在恢复多视图设置中的姿态,但由于内存限制(算法依赖于成本量(cost volume)的精细采样),他们的方法只能处理少数视图。后者还需要初始化姿态参数。IDR恢复姿态和密集结构(使用隐式神经表示),但它需要对相机姿态和masked的图像进行近乎精确的初始化,因此不适用于一般场景。NeuRoRA介绍了一种图形神经网络结构,用于根据噪声和不完整的相对成对方向集进行旋转平均。然而,他们的方法并不能恢复相机的位置。与此相关的还有Posenet,它被训练用于估计特定(训练)场景的绝对相机姿态。最后,[60]为涉及朝向大致相同方向的相机的设置启用免初始化相机和深度恢复。与之相反,我们的方法适用于一般场景,有数百幅图像,并且没有初始化。然而,与经典方法一样,它只产生稀疏重建。

Learning on sets and equivariance. 使用等变性作为设计原则是构建高效神经结构的一种流行方法,例如参见[9,63,46,29,12,34]。在这里,我们关注集合结构化数据的等变体系结构。
集合结构数据的学习是近年来一个突出的研究方向,其中每个数据点由若干项组成,学习任务对它们的顺序是不变或等变的。[45,68,44]率先提出了这一设置的第一个通用深度架构。[30]通过引入注意机制扩展了这些工作。与我们的工作更密切相关的是[16],它考虑了一种跨多个集合建模交互的设置:输入是一个矩阵(更一般地说,是一个张量),学习任务与其行和列的排列(以及一般情况下的其他维度)相同。本文描述了该装置的最大表达线性等变层,并将其用于构建等变深度模型。这些模型在矩阵补全和推荐系统应用中表现良好。这种学习设置后来被推广到任意对称元素集和层次结构。

3 Approach

3.1 Problem definition

在运动恢复结构中,我们假设一个静止的场景由m个未知的相机矩阵P1,…,Pm观察。每个相机由一个3×4矩阵表示,该矩阵表示投影空间Pi: P3→ P2。在未校准设置中,这些是一般矩阵,依据尺度进行定义,而在校准设置中,这些矩阵表示相机位置和方向,格式为Pi=[Ri | ti],其中Ri∈ SO(3)表示相机方向和ti∈R3,所以相机位置可以由-RiTti给定。设X表示在齐次坐标中的三维场景点,表示为X=(X1, X2, X3, 1)T∈P3。它在第i幅图像上的投影由x = (x1, x2, 1)T ∝ PX ∈ P2给出,其中符号∝表示按比例相等。
与常见的SFM算法一样,在给定静态场景的图像中,我们在检测和匹配特征点后,以及通过鲁棒恢复图像对之间的基础或本质矩阵来消除异常匹配后,解决了SFM问题。我们算法的输入包括一组轨(图像上的二维点)T1,…,Tn,其中每个轨迹是一组二维点位置,Tj={xij}i∈Cj和Cj⊆ [m] 表示检测到Xj的图像。轨迹集合以大小为m×n×2的矩阵M(通常为稀疏的)测量方式排列,即(Mij1, Mij2, 1)T=xij,或者如果在图像Ii中未检测到Xj,则这些项为空。给定M,我们的目标是恢复各个点轨迹的相机矩阵P={P1,…,Pm}和三维位置X={X1,X2,…,Xn}。

3.2 Model

我们基于核心设计理念构建了一个新的框架来重新评估该任务中的对称特性。接下来我们将详细阐述这些对称特性及其相关性质,并在此基础上构建一个合适的模型架构,并深入探讨其实现优势。

在这里插入图片描述

任务对称性分析 我们的网络基于稀疏的m×n×2张量作为输入,并生成两个矩阵:P∈R{m×12}表示一组相机,X∈R{n×3}表示一组平面点。关键在于我们希望网络能够尊重输入张量中相机和平面点的顺序关系。为此我们引入置换组的概念:设S_d为d元素上的置换群,则令τ_{cam} ∈ S_m, τ_{pts} ∈ S_n为相机和平面点之间的置换操作。具体而言我们可以将这些置换操作视为定义了相机和平面点的具体排列顺序。这些置换操作会通过排列矩阵的操作影响到我们的测量张量M(图2)。值得注意的是由于相机和平面点的选择具有任意性因此我们的网络设计应当能够根据任何给定的输入顺序进行相应的重排处理。这一论点表明对于所有可能的τ_{cam} ∈ S_m, τ_{pts} ∈ S_n以及测量张量M∈R^{m×n×2}我们的网络F应满足以下变换特性:

F  · M =  · F .

换句话说,在网络中实现两个群直接相乘的作用应当满足G=Sm×Sn这一条件。其中,在输出空间上其作用可视为(τcams, τpts)⋅P = τcam
s⋅P以及(τcam
s, τpts)⋅X = τpts⋅X两部分运算共同作用的结果。值得注意的是,在此过程中置换操作仅影响每个输出矩阵的一个维度。通过图2可以看出这种操作方式下各矩阵之间的关系具有良好的对称性特点。此外,在文献[16]中首次系统地探讨了置换群直接相乘操作下的等变性问题。

Equivariant Layers. 线性等变映射是等变网络的核心组成部分。参考文献[16]中所述, 当一个输入与输出通道数量相同时, 与群G等价的线性映射所形成的四维空间包含了恒等变换、行求和、列求和以及矩阵求和四个基本操作。扩展而言, 对于包含多个输入与输出通道的情况, 任何群G上的等变仿射映射L可以从特征空间R{m×n×d}映射至特征空间R{m×n×d'}的形式为:

在这里插入图片描述

其中,对于输入张量Mij,它是一个Rd空间向量,Wi ∈Rd’xd,其中i=1,…,4和b∈Rd’是可学习的参数。等价地,L可以表示为一个mnd’×mnd的由(1)控制的参数共享方案的矩阵(参见[46,34]了解等变和参数共享之间的关系)以及可能的附加偏差项。在这里,我们用M的非空值的平均值替换总和,以保持对缺失数据的无差异性。

Network architecture. 该网络由三个关键组成部分构成(参考图1)。其中包含一个共享特征编码器E以及两个子模块HEAD(即Hcams和Hpts),这两个子模块通过E编码后的特征分别重建相应的相机参数和三维点坐标。值得注意的是,在实现这一架构时我们遵循了一些通用的设计原则:首先设计了一个基于空间变换的操作来处理数据;随后通过多层感知机引入非线性激活函数以增强模型表达能力;最后通过优化算法对模型参数进行训练以达到预期效果。

在这里插入图片描述

在式中,
Li,
i=1,…,k
代表G-对称层,
如公式(1)所示,
σ则是一个逐点定义的非线性函数。
值得注意的是,
这些逐点非线性函数必须保持置换下的对称性,
从而确保整个系统保持了对称特性。

Discussion.

3.3 Loss function

我们的网络最小化了由两项组成的损失函数:重投影损失和hinge损失。与束调整类似,在恢复3D点Xk时(如图1所示),重投影损失使得其在图像中的投影位置与检测到的位置之间的距离达到最小值。此外,在未校准条件下正确估计投影深度的过程中,我们采用hinge损失来防止恢复出的深度值消失或变为负值。
令xij表示图像Ii中轨迹Tj的一个点坐标;令未知的Pi表示各个相机;令Xj代表轨迹Tj中各点的未知三维位置坐标。为了在非标定状态下正确估计投影深度值d_ij(如前所述),我们对每个相机矩阵Pi进行归一化处理:具体而言,在未校准的情况下使每个相机矩阵Pi满足左上角3×3子矩阵具有正行列式,并将第三行归一化为单位向量。(这些条件均基于相机标定过程得以满足)

在这里插入图片描述

其中rij的表达式如上所述,在相机矩阵Pi第k行的基础上进行定义。进而计算出图像Ii中Xj点的重投影误差值。随后我们设定一个函数变量hij其计算公式为max(0 h−Pi3Xj)并取值为正值的小常数(在我们的设置中取值为0.0001)。该函数变量能够反映图像Ii中Xj点深度值偏离正确值的程度即所谓的深度估计损失函数。
接下来我们将上述两个量进行加权求和以构建最终的目标损失函数

在这里插入图片描述

最终的损失被定义为:

在这里插入图片描述

假设我们有m台相机和n个检测点。基于此,在每一个检测点x_{i,j}上进行处理时:

  • 如果恢复的深度值大于等于给定阈值h,则采用重投影误差作为损失;
  • 否则(即当恢复得到的深度为负值或者接近于零时),则采用Hinge损失作为衡量标准。
    值得注意的是,在计算重投影误差时采用了L2范数这一指标来衡量差异程度。同时观察到,在这种情况下(当深度等于h时),我们的损失函数存在不连续性现象。然而,在网络参数训练的过程中(即权重更新的过程中),该函数在几乎所有位置都呈现出良好的可微特性。
3.4 Optimization and learning strategies

我们在两个设置中应用我们的模型。在单场景设置中,我们使用随机权重初始化网络,并使用反向传播最小化损失函数(3)。最后,我们使用三角化来估计3D点的位置,并应用束调整。
在学习场景中,我们使用来自多个场景的轨迹来训练模型。在训练时,我们将损失函数(3)最小化,同时在输入场景之间切换。我们在验证集上评估成功率,并使用提前停止(early stopping)来保持模型在该集上达到最佳重投影误差。为了在新场景上测试模型,给定测量张量,我们要么将网络应用于张量以获得初始重建,要么通过运行预定次数的反向传播对模型进行微调。我们通过束调整来完成这些。网络的推断速度非常快,在DGX机器上大约需要百分之一秒,因此总测试时间主要由可选的微调和束调整时间决定。

4 Experimental setup

我们在单一场景、学习场景以及校准与未校准设置下的不同数据集上进行了模型测试。

4.1 Datasets and baselines
4.1.1 Uncalibrated setting

我们可以采用Olsson’s[39]和VGG[57]的数据集来获取大量扫描数据。这些扫描中所包含的图像数量在10至400之间变化广泛;轨迹传感器所记录的数据点则分布在3百到15万之间。为了验证我们的方法的有效性及性能表现,在此之前我们将该方法与现有的几种基线模型进行了系统对比分析。

VARPRO[21] 将基于变量投影(VarPro)的无初始化优化策略应用于射影束调整。

GPSFM[26] 基于均值基础矩阵的全局方法。该方法尽量减少了代数损失量,并寻求能通过投影相机实现的最接近的基础矩阵集合。

PPSFM[33] 一种基于渐进优化的序列方法,用于投影结构和相机,同时考虑对所寻求的投影深度的约束。

4.1.2 Calibrated setting

在此设置下

GESFM[25]与GPSFM具有相似性,并被视为一种基于基础矩阵平均的全局优化方法,在计算过程中综合考虑所有基础矩阵。这种全局优化方法旨在最小化代数损失,并通过Euclidean相机实现获得尽可能接近的基础矩阵集合。

Linear[23] 该算法在最小化近似几何误差的同时,增强了相机三元组的一致性。(对于该算法,我们无法找到一组适用于所有数据集的阈值参数,因此对于每次扫描,我们报告最佳运行结果。)

COLMAP[47, 48, 49] 一种最前沿的基于增量式的视觉定位算法

4.2 Implementation details

Framework. 我们的系统在NVIDIA Quadro RTX 8... 上实现稳定运行。基于PyTorch深度学习框架,并采用标准化梯度的AdamW优化算法进行参数更新。针对第7.... 的图像处理任务, 我们引入了OpenCV辅助模块.

Training. 在校准和未校准设置中,我们将数据集随机分为三部分:10个场景用于测试,3个场景用于验证,其余用于训练。在训练期间,我们在不同的训练场景之间交替进行,在每个epoch中,我们对场景中10-20幅图像的随机子集进行训练。我们使用validation来提前停止(early stopping)。对整个场景进行了验证和测试。

Optimization. 在反向传播机制中应用归一化处理以避免由除以Pi3Xj引起的梯度爆炸现象,在每一步对PiXj的梯度进行归一化处理以维持数值稳定性

Architecture details. 输入包含经过归一化的点轨迹xij。在标定配置中,我们采用已知固有参数对点进行归一化.而在未标定配置中,我们采用Hartley归一化方法.为了提高计算效率,我们将编码器设计为更适合稀疏矩阵运算的结构.共享特征编码器E由3个层次组成,每个层次分别在单个场景和训练配置下,结合ReLU激活函数运行并拥有256或512个特征通道.相机头Hcams和3D点头Hpts则各自由2个层次构成,分别具有256或512个通道,用于优化和训练过程.在E中的每个层次之后,我们通过从每层特征中减去均值来进行归一化处理.

Hyper-parameter search. 我们通过多种超参数对我们的模型进行了测试。具体而言,在(1)部分中我们设置了不同的学习率设置:{1e−2, 1e−3, 1e−4};在(2)部分中我们调整了编码器E和heads的网络宽度设置为{128, 256, 512};在(3)部分中我们设置了这些网络中的层数为{2, 3};在(4)部分中我们设定深度阈值h∈{1e−2, 1e−3, 1e−4};而在(5)部分中我们对上述各点中的输出层进行了经过标准化处理的处理。

Bundler optimization technique 在本研究中被采用。为了提升算法的鲁棒性, 本文采用了带Huber损失函数(参数设置为0.1)的方法, 并设定最大迭代次数为100次以确保计算收敛性。

4.3 Evaluation

在未经校准的配置下采用平均重投影误差作为精度衡量指标,并以像素单位表示。

在这里插入图片描述

对于详细说明,请参阅第3.3节。在标定条件下,我们进一步评估了相机外参预测的效果。具体而言,我们通过测量角度偏差(以度表示)以及位置误差(以米表示),将我们的相机方向估计与基准真实方向进行对比分析。为了确保公平比较,在实验中,我们将所有方法运行在同一套点轨迹上,并进行了最终的束调整优化步骤。

5 Results

随后我们将呈现我们的实验成果。重点展示了单模态恢复与多模态学习的实验结果。接着, 我们开展了一项去噪研究, 并将其与现有的新型神经架构进行了系统对比分析。

5.1 Single scene recovery
在这里插入图片描述
在这里插入图片描述

如表1所示为未校准设置下的结果数据表格;表2则展示了经过校准后的结果数据表格。在大多数实验条件下(除少数特殊情况外),我们所提出的方法均能达到亚像素级的精度水平;这与现有的经典先进算法(如VARPRO和COLMAP)相比具有相当竞争力。值得注意的是,在完成基础几何优化(BA)之前,我们的方法通常就已经达到了亚像素级的精度水平,并显著优于GPSFM算法。此外,在所有被保留的相机参与评估的情况下,在完成基础几何优化(BA)之前能够持续获得稳定的收敛效果。然而,在这些特殊情况下(即收敛失败的场景),观察到部分相机的位置估计接近真实值;而其余相机则似乎经历了另一个全局变换的影响。这可以通过顺序优化来解决更多细节及具体实验结果请参见补充材料中的相关内容

5.2 Learning from multiple scenes
在这里插入图片描述
在这里插入图片描述

表3与表4展示了我们在不同标定模式下进行的实验研究,并分别报告了对应的测试指标。我们不仅利用我们的模型进行预测,并且通过额外的500个epoch微调以进一步优化(两种模式均采用了BA方法)。为了全面评估该方法的表现,在每一种情况下我们还将其与其他算法进行了对比分析:包括基于随机初始化的单场景优化方案、以及最先进的VarPro和Colmap算法(如图3所示展示了几个典型的重建案例)。经过对比实验可以看出,在大多数情况下我们的网络达到了亚像素级别的精度水平,并且表现上与当前最先进的方法相当。

在这里插入图片描述

我们观察到,在我们的模型中完成一次推理所需的时间仅占总运行时间的一小部分。

5.3 Ablation study

为了进一步验证我们的方法的有效性, 我们进行了消融研究. 在实验中, 我们测试了我们的单场景方法(a)作为一个简单的元素特征编码器, 即直接移除权重参数W2、W3和W4; (b)采用Adam优化器直接对损失函数(3)进行优化, 并将相机坐标和三维点坐标视为可调节的自由变量; 以及(c)在第三种方案中采用了随机初始化的标准束调整技术. 表5展示了未校准设置下的实验结果. 实验结果表明, 在未校准的情况下, 权重参数W2、W3和W4所提取的全局特征具有重要意义. 此外, 令人出乎意料的是, 只使用Adam优化器与我们的损失(3)相结合, 就能够实现比标准捆绑调整更显著的提升.

在这里插入图片描述
5.4 Comparison to alternative deep architectures

我们对SFM的两套新型深层架构进行了对比研究。其中一套架构以集合神经网络[68]为基础模块,在该架构中采用集合神经网络[68]作为基础模块,并将其与相机头Hcams进行对比分析。具体而言,在该架构中将3D点位置参数化处理,并旨在最小化损失函数(3)。这种设计可视为是我们提出方法的一个简化版本。另一套创新性设计则通过引入成对关系模型来关联各个相机视角,并利用从点轨迹计算的基础矩阵作为输入特征进行优化训练。通过标准图神经网络[15]实现损失函数(3)的有效最小化这一目标达成后,在附录部分可获得详细的技术实现方案。

6 Conclusion

我们介绍了一种基于深度的新多视图SFM方法,并支持校准与非校准配置。该方法从点轨迹的稀疏度量张量出发, 通过最小化重投影损失来实现相机参数与稀疏三维重建的同时恢复, 并注意到所采用的方法具有对称性 preserved架构, 即考虑了测量张量行(相机)或列(3D点)的等变排列。我们在两种不同场景下进行了实验验证, 单场景优化以及基于预训练模型的一体化推理流程, 实验结果表明该方法能够实现精确的姿态与结构恢复, 其性能与经典及前沿技术相媲美。未来工作重点在于将该框架扩展至端到端稠密重构 pipeline, 并评估其实际性能表现

Appendix

下面, 我们将介绍本文中测试的基准方案及其替代的深层架构的具体实现细节. 同时包含其他实验结果, 并以我们方法重构实例为例进行展示.

A Baselines

本研究采用的基准方法为Colmap Baseline. 在校准实验(见表2)中 为了确保公平比较 在校正过程中 将本研究直接应用到Olsson的研究所给出的点轨迹 并将相机内参作为真实值固定不变

基于线性基准的方法(Linear Baseline)。我们对Jiang等人提出的方法[23]进行了测试,在分析过程中,默认会忽略那些匹配点数量低于设定阈值的viewing图中的边。为了全面评估其性能,在实验中采用了多个不同的匹配点阈值(包括30、200和500),并记录下在束调整前达到最低重投影误差的结果。

B Alternative deep architectures

在本文表格5中呈现的最后一栏分别展示了两项新提出的深度架构及其相应的性能指标。这些新架构的设计初衷在于通过对比分析来评估其相对于现有深度网络的表现。具体细节将在下文逐一说明。

Construct a neural network in the context of multi-camera scenarios. Each input to the network consists of m independent random feature vectors, each assigned a unique identifier to distinguish between cameras. Drawing inspiration from [44,68], our proposed set network is composed of three sub-networks, each representing an equivariant set network instance. The first sub-network processes each individual feature vector to extract local camera-specific features. The second sub-network then operates on these local features to capture pairwise relationships. By aggregating outputs across all cameras, we obtain a global scene-level feature vector. Finally, the third sub-network combines both local and global features to predict camera parameters. In summary, the set network prediction for camera i is defined as follows:

在这里插入图片描述

每个Sk是一个全连接的网络,vi是相机i的初始随机向量。

Graph neural network. 在这个框架中,默认情况下相机的每个节点对应于viewing图中的一个顶点。当两个图像共享至少30条轨迹时,在viewing图中对应的两个顶点之间添加一条边。通过计算得到基础矩阵作为边连接的输入特征。与集合网络模型类似,在每个节点处生成随机向量作为其输入特征。为了实现信息传播功能,在每一步迭代中应用消息传递机制(message-passing scheme)并融合全局特征信息。具体而言,在每一步信息传递层中:

在这里插入图片描述

其中z_i,l表示层l中节点i的局部特征;N_i表示节点i的所有邻居;F_{i,j}代表相机对(i,j)的基础矩阵。在集合模型和图形模型中,我们假设所有相机参数都是可学习的;此外,在这一假设下,默认所有的3D点均为自由变量。针对这两种情况,在公式(3)的基础上,我们提出了一个改进的目标函数。

C Results

Single-scene recovery. In the single-scene recovery mode, given a single tensor that encodes the point correspondence relationships on a specific scene's image, we aim to minimize the reprojection loss, with the network being used to parameterize the loss function. The experimental results shown in Tables 6 and 7 indicate that our method achieves better performance under both uncalibrated and calibrated settings before bundle adjustment. Since incremental methods apply bundle adjustment at each iteration, we only compare our results with those obtained using a global method before bundle adjustment. Notably, our method typically achieves sub-pixel accuracy before bundle adjustment, outperforming GPSFM under uncalibrated conditions and significantly outperforming GESFM and Linear under calibrated conditions. Figures 4–6 illustrate the 3D reconstruction and camera parameter recovery results under the calibrated setting. Additionally, Figure 7 presents an example of a faulty case, while Figure 8 shows the evolution of structural and camera parameters during optimization.

Sequence optimization. 在一些实验测试中(见表7所示),我们的单场景重建程序未能达到高度精确的效果。对于这些情况(当重投影误差超过2像素时),我们采用了基于顺序的方法进行了优化。依据图像与前一幅图像共有的点轨迹数量进行贪婪排序后,在初始阶段仅限于前两个图象,并仅进行了500次迭代周期。每隔500次迭代周期后,则依次加入下一个图象到当前集合中进行处理(见表8所示)。这种优化策略显著提升了所有失败案例的数据重投影质量,并在多数情况下达到了与Colmap相当的效果

Learning from multiple scenes. 图9和图10呈现了三种不同情况下的重建结果对比:第一种情况采用本研究提出的模型进行推理;第二种情况是对模型进行了微调后再进行推理;第三种情况则是采用了短期优化策略。实验数据显示经过训练的模型具有良好的执行效率。值得注意的是,在短时间内通过推断即可生成理想的初始配置。进一步研究表明,在精度上微调方案优于其他方法,并且运行效率与Colmap相当;相比之下短期优化方案难以提供令人满意的重建效果,并且其运行效率略低于前者,在一定程度上凸显了对模型进行系统性训练的重要性

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

*部分翻译或理解可能会存在偏差,仅供参考,欢迎讨论。

全部评论 (0)

还没有任何评论哟~