Zero-Shot Learning on 3D Point Cloud Objects and Beyond
3D 点云对象及其他对象的零样本学习
摘要
零样本学习(即学习识别训练期间未见过的新类别的任务)在 2D 图像分类中受到了相当多的关注。然而,尽管 3D 传感器越来越普遍,但相应的 3D 点云分类问题尚未得到有意义的探索,并带来了新的挑战。在本文中,我们确定了一些挑战,并在 3D 领域应用 2D 零样本学习 (ZSL) 方法来分析现有模型的性能。然后,我们提出了一种新颖的方法来解决 3D ZSL 的特定问题。我们首先提出归纳 ZSL 过程,然后将其扩展到用于 3D 点云分类的传导 ZSL 和广义 ZSL (GZSL) 设置。为此,开发了一种新颖的损失函数,该函数同时将所见语义与点云特征对齐,并利用未标记的测试数据来解决一些已知问题(例如,领域适应、中心性和数据偏差问题)。针对3D点云的特殊性,该方法被证明也适用于 2D 图像分类的更常见用例。我们进行了一系列广泛的实验,在合成(ModelNet40、ModelNet10、McGill)和真实(ScanObjectNN)3D 点云数据集上建立了最先进的 ZSL 和 GZSL。
关键词 零样本学习 3D 点云 传导学习 Hubness 问题
1 简介
越来越容易获得和廉价的 3D 深度相机技术促进了从复杂场景中捕获 3D 点云数据。这反过来又扩大了人们对可对此类数据进行操作的 3D 对象分类方法的兴趣和需求。然而,大部分(如果不是大部分)收集的数据将属于分类系统可能尚未明确训练的类别。为了识别这些以前“未见过”的类,有必要在 3D 点云分类领域开发零样本学习 (ZSL) 方法。虽然此类方法通常在一组所谓的“已见过”类上进行训练,它们也能够对某些“看不见的”类别进行分类。有关看不见的类别的知识通过语义特征向量引入到网络中,这些语义特征向量可以从在图像属性或非常大的文本语料库上预先训练的网络中导出[37, 3、1、74、65]。与应用于 2D 图像的 ZSL 相比,执行用于 3D 对象分类的 ZSL 是一项更具挑战性的任务 [43,74,1,3,37,25,65]。我们在这方面确定了三个特殊挑战。
1. 高质量预训练模型的可用性:2D 领域的 ZSL 方法通常利用预训练模型,例如 ResNet [18],已经接受了数百万张带有数千个类别的标记图像的训练。因此,提取的 2D 特征聚类得很好。相比之下,3D点云领域则没有可比性;带标签的 3D 数据集往往很小,并且只有有限的类集。例如,像 PointNet [38] 这样的预训练模型仅在少数类别的几千个样本上进行训练。这会导致3D 特征质量较差,其簇的分离程度不如视觉特征。
2.枢纽问题:在高维数据中,一些点|称为枢纽|频繁出现在其他点的k近邻集中。这是与最近邻 (NN) 搜索相关的维数灾难的结果 [41]。在 ZSL 中,轮毂问题的发生有两个原因 [51]。首先,输入和语义特征都驻留在高维空间中。其次,众所周知,在 ZSL 中广泛使用的岭回归可以诱发中心度。因此,它会导致预测出现偏差,无论查询如何,大多数时间只预测少数类别。 3D 特征质量相对较差,加剧了中心性问题,使得将这些特征与其相应的语义联系起来变得更加困难 [74]。
3. 域转移问题:从已见样本中学习的函数对这些样本有偏差,并且不能很好地泛化到未见过的类。在归纳学习方法中,在训练期间仅使用可见类,投影语义向量倾向于向可见特征向量移动,使得相应的未见语义向量和特征向量之间的类内距离变大。与 hubness 类似,当在可见的合成 3D 点云对象(ModelNet40 [63])上进行训练,但在看不见的真实世界 3D 扫描数据(ScanObjectNN [56])上进行测试时,域转移问题会加剧。
图 1:tSNE [57] (a) ModelNet10 [63] 和 (b) ScanObjectNN [56] 数据集的未见 3D 点云特征的可视化,以及 (c) AwA2 [65] 和d) CUB [59] 未见的 2D 图像特征数据集。2D 特征空间中的簇结构定义得更好,比 3D 点云中的簇更紧密、更分离
关于这些挑战的一些直觉可以通过可视化各自的预训练特征空间来获得,如图 1 所示,3D 数据集 (a) ModelNet10 [63] 和 (b) ScanObjectNN [56] 以及 2D 数据集 (c) AwA2 [24] 和 (d) CUB [59]。图像特征的质量远高于点云特征,具有更可分离的簇结构。当集群没有很好地分离时,中心和域转移问题就会恶化。在本文中,我们针对 3D 点云数据上的 ZSL 解决了以下问题:(a) 标准 ZSL 方法如何在低质量 3D 点云特征上执行?我们利用四种流行的传统结构进行了一系列实验通常用于 3D 点云中的特征提取。
它们是 PointNet [38]、DGCNN [61]、PointConv [62] 和 PointAugment [30]。在这些基础架构的帮助下,我们构建了一个 ZSL 结构,它将点云特征与词向量语义特征相结合,从而能够对以前未见过的 3D 类进行分类。该组合过程遵循 ZSL 的标准方法,将点云特征映射到语义向量空间。通过这种方法获得的性能表明,由于特征质量差、中心性和域转移问题,ZSL 任务在 3D 数据上的复杂性。然而,它为 3D 点云数据上的任何 ZSL 模型建立了合适的基线。
(b) 域转移可以减轻多少?在本文中,我们尝试使用传导学习来解决域转移问题。我们的目标是设计一种策略,减少偏差并鼓励投影的语义向量与其真实的特征向量对应物对齐,从而最小化平均类内距离。在 2D ZSL 中,传导设置已被证明是有效的 [15,76,53],但是,在 3D 点云数据的情况下,这是一项更具挑战性的任务。
3D点云领域与2D领域相比,带标签的 3D 数据集规模往往很小,且只有有限的类集,导致预训练模型提取到的 3D 特征质量较差,其簇的分离程度不如视觉特征;
从已见样本中学习的函数对已见过的类有偏差,并且不能很好地泛化到未见过的类,使得相应的未见语义向量和特征向量之间的类内距离变大
预训练的 3D 特征聚类较差,并且类内距离较大。为了利用 3D 点云零样本学习的转导式学习方法,我们提出了一种转导式 ZSL 方法,该方法使用以无监督方式采用的新型三元组损失。与传统的三元组公式 [50, 40] 不同,我们提出的三元组损失适用于未标记(测试)数据,并且可以在不需要地面实况监督的情况下运行。这种损失适用于未标记的数据,使得类内距离最小化,同时还最大化类间距离,减少偏差问题。除了三元组损失之外,我们还采用基于距离的无偏损失来平衡可见和不可见的预测分数。结果,学习到了对未见过的类具有更强泛化能力和有效性的预测函数。
(c) 我们如何解决 3D 数据的中心度问题?当模型偏向于预测大多数测试实例的一小部分标签时,就会出现中心性问题。 2D 图像数据上流行的 ZSL 方法通常将语义特征投影到视觉特征空间来处理中心度问题。在本文中,我们首先遵循相同的趋势来设计我们的架构,并观察应用反向投影技巧的性能增益。其次,为了进一步提高性能,我们为传导设置提出了一个新的损失,以明确缓解中心问题。我们通过以无监督的方式评估每个未标记的测试数据元素,并计算每个类在批次中被预测的次数来计算此损失。这用于估计中心度的度量:当前预测的偏度。我们最小化每批的偏度以降低中心度。
除了 3D 点云数据之外,我们提出的方法也适用于 2D ZSL 的情况,这证明了我们的方法对其他传感器模态的泛化强度。我们的主要贡献是:
(1)通过采用归纳和传导学习设置来评估用于 3D 点云分类的零样本学习(ZSL)和广义零样本学习(GZSL)任务;
(2)一种新颖的三元组损失,利用未标记的测试数据,适用于 3D 点云数据和 2D 图像;
(3)一种解决转导环境中 G/ZSL 的中心性和偏差问题的方法;
(4)3D 点云上 ZSL 方法的新评估协议,由来自数据集 ModelNet40 [63]、ModelNet10 [63]、McGill [52] 和 ScanObjectNN [56] 的可见和不可见的数据分割组成,并执行广泛的操作实验,在四个 3D 数据集上建立最先进的技术。
本文的初步部分之前已发表[9,8,10]。在这里,我们将贡献封装在一个统一的框架中,并将之前的工作扩展如下:(1)我们解决了转导设置中的中心问题,并提出了一种新的损失来平衡可见和不可见的分数; (2)我们通过新的消融研究详细分析了该框架,并将其置于相关工作的背景下; (3) 我们对 3D 点云数据上的八种已建立的 ZSL 和 GZSL 方法进行了广泛的评估; (4) 我们为现实世界提出了一种新的可见/不可见的划分扫描 3D 对象数据集 (ScanObjectNN) 并在此数据集上进行评估。
2 相关工作 3D 点云对象识别架构:早期利用深度学习对 3D 点云进行操作的方法使用体积 [63] 或多视图 [55] 表示来处理 3D 数据。
最近,该领域的趋势已转向直接使用原始点云[39,61,28],无需任何预处理步骤。这些方法不会像体积表示那样受到可扩展性问题的影响,并且它们不会像基于视图的方法那样,对点云应该投影到哪些 2D 平面以及多少个 2D 平面上做出任何先验假设。 PointNet [38] 是第一个直接在网络输入处对原始点云进行操作的工作。 PointNet 使用多层感知器(mlp)[46] 从点集中提取特征,并使用最大池层来消除点云排列的其他固有问题。后来,许多方法[39,61,28,62,30,7]被提出来克服PointNet的局限性,它不利用局部特征或比最大池化更先进的池化操作。在 3D 点云数据的情况下,已考虑了在训练时看到所有感兴趣类别的传统识别。当前文献并未完全解决 3D 识别问题的零样本版本 [9,8,10]。在本文中,我们对 3D 点云对象执行传导式和感应式 ZSL 和 GZSL。
零样本学习:对于 ZSL 任务,已经取得了重大进展,包括图像识别 [43, 74, 1, 3, 37, 25,65]、多标签 ZSL [26, 42] 和零样本检测[44]。尽管取得了这些进展,这些方法还是解决了测试实例仅限于未见类的约束问题,而不是来自已见或未见的类。这种在测试时同时考虑可见类和未见类的设置称为广义零样本学习(GZSL)。为了解决这个问题,一些方法将已见类别产生的分数降低一个恒定值[5],而另一些方法则执行单独的训练阶段,旨在平衡已见类别和未见类别的概率[43]。此外,近年来提出了一些基于生成对抗网络(GAN)的方法[66,20,49,29,36,58,31,16]来解决 ZSL 和 GZSL 问题。 Schonfeld 等人[49]基于特定模态的 VAE 模型学习了图像特征和语义表示的共享潜在空间。
在我们的工作中,我们提出了新颖的损失函数(对于归纳和传导情况)来解决偏差问题,从而获得更好的 GZSL 结果。
转导式零样本学习:除了标记的可见样本之外,转导式学习方法还利用未标记的测试样本。
例如,Rohrbach 等人 [45] 使用基于图的学习算法来利用未见类的流形结构,以利用未见类内的邻域结构。 Fu等人[15]提出了一种多视图转换设置来解决投影偏移并利用视觉特征的各种语义表示。 Yu等人[71]提出了一种通过迭代精炼过程预测类标签的转导方法。郭等人[17]提出了一种联合学习方法,该方法学习共享模型空间,以联合使用语义属性在可见类和未见类之间共享知识。所有这些方法都试图提高转导设置中看不见的类的准确性。最近,转导式 ZSL 方法开始探索如何提高广义 ZSL 任务中可见类和未见类的准确性 [76,53]。赵等人[76]提出了一种领域不变投影方法,将视觉特征投影到语义空间,并从语义表示中重建相同的特征,以缩小领域差距。在另一种方法中,Song 等人 [53] 发现了归纳学习的模型偏差问题,即经过训练的模型为已见类别分配的预测分数高于未见类别的预测分数。为了解决这个问题,他们提出了一种准全监督学习方法来解决 GZSL 任务。 Xian等人[67]提出了f-VAEGAN-D2,它利用VAE和GAN来学习未标记数据的特征分布。 Narayan 等人 [36] 遵循与基线 f-VAEGAN-D2 [67] 中提出的相同设置。高等人[16]使用K最近邻和分类概率为未标记的未见特征提供伪标签。所有这些方法都是为 2D 图像数据上的传导 ZSL 任务而设计的。相比之下,我们探索传导式 ZSL 设置在多大程度上有助于提高 3D 点云识别。
枢纽问题:高维最近邻搜索空间中的枢纽问题首先在[41]中进行了研究,其中说明枢纽问题与高维空间中的数据分布有关。在后来的研究中[12,51,74],研究了ZSL中的轮毂问题。 Dinu 等人[12]提出了一种服务器托管网算法,除了测试实例之外,还使用更多未标记的可见数据来纠正中心度问题。 Shigeto 等人[51]提到,用于最小二乘正则化的投影函数会对中心度问题产生负面影响,因此引入了反向正则化函数以削弱中心性问题。与上述工作相反,Zhang 等人[74]提出通过将特征空间视为嵌入空间来处理中心度问题。在本文中,我们解决了 ZSL 在 3D 点云分类上的中心问题。
使用 Triplet Loss 进行学习:Triplet Loss 已广泛应用于计算机视觉中 [50,40,14,19,13]。
Schroff 等人 [50] 演示了如何从批次内的视觉特征中选择正锚点和负锚点。 Qiao 等人[40]介绍了使用三元组损失来训练归纳 ZSL 模型。最近,Do 等人
[13] 通过使用类质心将其线性化,提出了三元组损失的严格上限,Zakharov 等人 [72] 探索了流形学习中的三元组损失,Srivastava 等人 [54] 研究了对硬负样本的权重大于简单服务器托管网负样本的权重,以及赵群等人[32]提出了角度三元组中心损失,这是一种减少特征之间相似距离的变体。三重态损失相关方法通常在归纳设置下工作,其中锚点的真实标签在训练期间仍然可用。相反,我们描述了转导环境中的三重态形成技术。我们的方法利用测试数据而不知道其真实标签。此外,我们从词向量而不是特征中选择锚点的正样本和负样本。
3 3D 点云的零样本学习
相对缺乏具有许多对象类别的大规模 3D 数据集,这意味着 3D 特征不如 2D 特征那样稳健和可分离。因此,将 3D 特征与其对应的语义向量关联起来比 2D 情况更困难。针对典型 3D 数据集特征质量较差的问题,我们在传导和归纳设置中研究了合适的 3D 点云架构和损失函数。我们的方法专门解决了不良特征(例如来自 3D 特征提取器的特征)与语义向量的对齐问题。因此,虽然我们的方法改善了 2D 和 3D 模态的结果,但在 3D 情况下观察到最大增益。
3.1 问题表述
设 X, xi 表示 3D 点云。
还令 Y s和 Y u表示不相交 (Y s Yu = 0) 可见和不可见的类标签集,其大小分别为 S 和 U,并且 E s 和 E u 表示嵌入函数 () 的关联语义嵌入向量集 。然后我们定义看到的 ns 的集合实例为 Z s 。 nu 未见实例集的定义类似于 Z u,其中 X u i 是未见集的第 i 个点云,带有标签 lu 和语义向量e u。
我们在这项工作中考虑了两个学习问题:零样本学习及其广义变体。每个问题的目标定义如下。
{ 零样本学习(ZSL):给定未见点云 X u ,根据未见标签集预测类标签 ^y u ∈ Y u 。
{ 广义零样本学习 (GZSL):根据给定点云 X 的已见或未见标签集预测类标签 ^y ∈ Ys 。
在本文中,我们解决了归纳和传导设置中的 ZSL 和 GZSL 问题。传导设置允许在训练阶段使用未标记的未见点云实例 X u ,而归纳设置不允许访问此未标记信息。
3.2 点云特征提取器
给定一个无序点集,表示来自可见类的对象 X s,定义了一个集合函数,使得点集的任何排列都是无关的。特征提取函数 h从更高维度的点云中提取更丰富的表示。例如,在 PointNet [38] 中,由于每个点都是单独考虑的,因此提取的特征向量包含全局信息。另一个例子,在 DGCNN [61] 中,提取局部特征和全局特征,在这种情况下,点集由动态图表示,并计算基于 k 最近邻的边缘特征。由于点集本质上是无序的,因此需要一个对排列不变的函数来将点特征池化到特征向量中。这里,g能够消除点云排列的影响。最后,通过h的集合,可以计算出相应的f值,形成向量’(X s ) 得到的特征向量从点云中去除排列。在下一步中,将一些全连接层应用于特征向量’(X s ),以便将特征转换到标签空间,其中使用交叉熵损失来训练点云主干。我们在图 2 中说明了点云特征提取器架构。
图 2:点云架构的总体框架。传统的3D点云识别系统由特征提取模块、池化模块和分类器组成。我们使用这样的框架来设计我们的主干。
3.3 点云数据上的归纳
ZSL 我们的模型以完全监督的方式进行训练,仅使用来自集合 Z s 的可见实例。令 N 为批次中的实例数量,'(X s i )为与点云 X s i 相关的点云特征向量。对于ZSL,点云特征’(X)和语义E向量都需要嵌入到相同的嵌入空间中。在 ZSL 文献中,这是通过两种方式完成的,我们在 3D 点云对象的背景下研究这两种方式。
特征到语义(F2S):使用权重为 W1 的非线性投影函数 1() 将点云特征 ’(X s i ) 投影到语义嵌入空间 E 中。网络计算以下损失:
其中参数 1 控制正则化量。
语义到特征(S2F):使用非线性投影函数 2() 权重 W2 将语义向量 e s i 投影到点云特征空间中。网络计算以下损失:
其中参数 2 控制正则化量。
张等人[74]认为,基于语义到特征(S2F)投影的 ZSL 模型比特征到语义(F2S)投影模型表现出更少的中心性。在我们的实验中,我们添加了证据证明这也是正确的对于 3D 数据。对于此处理的其余部分,我们对 ZSL 遵循 S2F 嵌入(即使用 2(.) 进行投影)。
图 3:ZSL 和 GZSL 的拟议架构。对于归纳学习,输入点云和语义表示分别为 X = X s 和 e = (y)。对于传导学习,输入点云和语义表示分别为 X = X s 和 e。我们将点云特征投影到语义空间(F2S)或将语义向量投影到特征空间(S2F)并计算特征和语义之间的距离。我们提出的损耗最大限度地减少了感应和传导设置中的距离。
3.4 点云数据上的传导式 ZSL 传导式 ZSL 解决了感应式 ZSL 方法中固有的投影域偏移问题 [15]。在 ZSL 中,可见类和不可见类是不相交的,而且通常相关性非常弱。由于可见类和不可见类的底层分布可能有很大不同,因此对于可见类和不可见类,语义嵌入空间和点云特征空间之间的理想投影函数也可能不同。因此,使用仅从可见类学习的投影函数而不考虑未见类将导致未知偏差。
Transitive ZSL 通过在训练期间使用未标记的看不见的类实例来减少域差距和由此产生的偏差,从而提高泛化性能。 ZSL 中域转移的效果如图 4 所示。然而,当使用归纳学习时 (a),投影的未见语义嵌入向量远离关联点云的聚类中心,特征向量会更接近聚类中心。
图 4:基于 ModelNet10 上的 (a) 归纳学习和 (b) 转导学习,看不见的点云特征向量(圆圈)和投影语义特征向量(正方形)的 2D tSNE [57] 可视化。与归纳 ZSL 相比,直推式 ZSL 的投影语义特征向量更接近点云特征向量的聚类中心,这表明直推式方法能够缩小可见类和不可见类之间的域差距。
无监督三元组损失:我们提出了一种对未标记的测试数据进行操作的无监督三元组损失。为了计算三元组损失,需要为每个锚样本找到正样本和负样本[50]。
在完全监督的设置中,选择正样本和负样本并不困难,因为所有训练样本都有真实标签。然而,在无监督的环境中,这更具挑战性,因为地面真相标签不可用。对于转导式 ZSL,我们使用伪标记方法定义正样本 [27]。对于每个锚点 X u ,我们分配一个伪标签,该伪标签在投影 2() 后在语义嵌入向量中选择最接近锚点特征向量’(X u )的正样本 e + ,如下所示
这种伪标签与通常的做法不同[27],因为它选择语义向量作为三元组形成中的正样本,而不是合理的真实标签。对于GZSL,未标记数据X c 为c 2 fs; ug 可以来自训练期间见过或没见过的课程。因此,必须为未标记的可见样本和未标记的未见样本找到伪标签。重要的是,如果伪标签指示未标记的样本来自可见的类,则该样本将被丢弃。这减少了错误的、嘈杂的伪标签对所见类别模型的影响。来自所见类别(带有真实标签)的样本将反而影响监督损失函数。因此,我们在可能的情况下使用真正的监督(见过的类),并且只在没有其他选择的情况下使用伪监督(看不见的类)。因此,GZSL 的正样本选择如下
负样本是从 ZSL 和 GZSL 的可见语义嵌入集合 E 中选择的,因为该集合的所有元素都将具有与未见锚点不同的标签。我们选择负样本作为所见语义嵌入向量,其投影最接近锚向量’(X u )
最后,与 ZSL 和 GZSL 任务的未标记实例相关的无监督损失函数 Lt 定义如下:
其中 m 是鼓励簇之间分离的边距,N0 是未标记实例的批量大小。
这种提出的三重态损失在两个方面与最近的文献 [50, 40] 不同。 (1)流行的三元组形成方法选择与输入特征相似的特征作为正样本,而我们为此选择语义词向量。这有助于更好地将 3D 点云特征与语义向量对齐。 (2)我们在传导设置中采用三元组损失来利用未标记(测试)数据,而已建立的方法仅考虑归纳训练的三元组损失。这将三元组损失的作用扩展到归纳学习之外。
监督的枢纽损失:基于距离的 ZSL 解决方案经常陷入枢纽问题的陷阱。
我们观察到这个问题对于 3D ZSL 来说更加严重。为了计算最近邻搜索问题中的中心度,可以使用经验分布 j 的偏度 [51, 41]。分布 j 计算第 i 个点(称为原型)位于测试样本的前 j 个最近邻中的次数 (j (i))。该分布的偏度定义为:
其中 n 是测试原型的数量。大的偏度值表明特征空间受到轮毂度问题的严重影响。在本文中,我们减轻了归纳和传导训练期间的中心问题。如前所述,S2F 策略可以有效地减少归纳训练期间的中心化状态。我们通过设计基于方程7的偏度损失将其扩展到转导训练。
为大小为 N 的批次中第 i 个未标记实例预测的伪标签定义为:
然后,对于批次中的所有实例,我们预测它们的伪标签,并定义一个集合
我们使用直方图函数 H(^yi) 计算 T^c 中每个类别的频率,该函数使用预测特定已见/未见类别的次数计数。该函数具有
的属性。我们使用预测的伪标签来查找置信度分数。我们将偏度损失定义为
其中H(^T c )表示所有实例的预测统计量,即每个输出无论真假都被预测了多少次。损失 L 0 h 尝试平衡批次内预测特定类的次数,并帮助模型预测不同的类集。对于较大且随机的批次,特定类实例的数量在该批次中并不占主导地位。因此,这种损失在大批量时表现更好。
损失 L 0 h 可能会影响正确的预测,同时平衡预测的类别分布。为了解决这个问题,受焦点损失[33]的启发,我们根据预测的置信度对批次中的每个样本进行加权。更具体地说,如果批次中的一个示例有信心预测伪标签,那么它对 hubness 损失的贡献应该较小,反之亦然:
最终的无监督枢纽损失由下式给出
无监督无偏损失:该模型在归纳训练期间观察到许多标记实例,并且看到类语义与 3D 特征完美匹配。因此,在转导学习过程中,看到的语义和特征之间的距离仍然很近,但看不见的语义和特征之间的距离却很远。这使模型偏向于已见的类,从而混淆了未见的实例和已见的实例。与之前的工作[53]类似,我们采用无监督的无偏损失来最小化这种影响。
给定已见和未见类别的未标记示例,这种损失通过增加根据距离计算的未见概率来帮助我们的模型。模型逐渐学会将看不见的语义拉近看不见的实例
这种损失平衡了可见类和未见类的语义向量和数据特征之间的平均距离。因此,此过程有助于模型减少对已见类别的偏差,从而提高未见类别的准确性。
总体传导损失:总体损失由无监督三元组、集线器损失和无偏损失之和给出,如下所示:
其中超参数1、2和3分别控制Lt、Lh和Lu的重要性。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
分享一下本周SQL优化的两个场景。 如果能对读者有一定的启发,共同探讨,不胜荣幸。 版本信息:mysql,5.7.19 引擎: innodb 场景1 我们有一张常口表,里面的数据由各种数据源合并而来,所以人员可能有多个手机号其中还包括座机号。这点在这篇文章里也…