概述
三维点云异常检测旨在从训练集中检测出异常数据点,是工业检测、自动驾驶等众多应用的基础。然而,现有的点云异常检测方法通常采用多个特征存储库来充分保留局部和全局特征表示,这带来了高昂的计算成本以及特征之间的不匹配问题。为解决这些问题,我们提出了一种基于联合局部 - 全局特征的无监督点云异常检测框架PointCore。具体而言,PointCore仅需一个存储库来存储局部(坐标)和全局(PointMAE)特征表示,并为这些局部 - 全局特征分配不同的优先级,从而降低推理过程中的计算成本和不匹配干扰。此外,为了增强对异常值的鲁棒性,我们引入了一种归一化排序方法,不仅可以将不同尺度的值调整到一个统一的尺度,还能将密集分布的数据转换为均匀分布。在Real3D - AD数据集上进行的大量实验表明,与最先进的Reg3D - AD方法及其他几种竞争方法相比,PointCore在推理时间上具有竞争力,并且在检测和定位方面均取得了最佳性能。
论文地址:https://arxiv.org/html/2403.01804v1
一、引言
异常检测旨在找出产品的异常区域,在工业质量检测、自动驾驶等多个领域发挥着重要作用。当前的异常检测方法大多是无监督的,主要针对二维图像,这些模型通常在具有成熟架构的图像上进行训练。对于基于三维点云的异常检测任务,目前相关文献的研究还相对较少。与二维图像相比,三维点云具有更丰富的结构信息,但同时也存在无序、高度稀疏和分布不规则的问题。为了有效地处理点云数据,人们应用了各种不同尺度的手工制作或基于深度学习的特征描述符。
最近,出现了一个大规模、高分辨率的三维异常检测数据集Real3D - AD。Real3D - AD数据集中的物体分辨率为0.001mm - 0.0015mm,具有360度覆盖范围和完美的原型。在相关研究中,作者将图像异常检测中的PatchCore方法应用于点云异常检测,并开发了一种基于通用配准的点云异常检测器Reg3D - AD。Reg3D - AD采用双特征表示方法来保留训练原型的局部和全局特征,检测精度较高,但推理速度较慢。目前的点云异常检测器主要可分为两类:
(1)基于重建的方法,这类方法通过自动编码器重建输入的点云数据,并通过比较原始数据和重建数据之间的偏差来识别异常。然而,这些方法对点云分辨率较为敏感,导致推理速度较慢且精度较差。
(2)基于存储库的方法,存储库可用于存储代表性特征,以隐式构建正态分布并查找分布外的缺陷。与前者相比,直接使用预训练的特征提取器构建存储库训练速度快,且不受点云分辨率的影响。除此之外,现有的点云异常检测器通常采用多个特征存储库来充分保留局部和全局特征表示,这带来了高昂的计算成本以及特征之间的不匹配问题。
图1:几种方法在Real3D - AD数据集上获得的异常得分热图。从可视化结果可以看出,与其他方法相比,本文提出的方法能够更准确地检测和定位异常数据点。
为解决上述问题,我们提出了一种基于联合局部 - 全局特征的无监督点云异常检测框架PointCore。具体而言,我们的贡献总结如下:
- PointCore仅需一个存储库来存储局部 - 全局特征表示,并为这些局部 - 全局特征分配不同的优先级,以降低推理过程中的计算成本和不匹配干扰。
- 我们提出了一种基于排序的归一化方法,以消除各种异常得分之间的分布差异,并应用点到平面迭代最近点(point - plane ICP)算法对 点云配准结果进行局部优化,从而做出更可靠的决策。
- 在Real3D - AD数据集上进行的大量实验表明,与最先进的Reg3D - AD方法及其他几种竞争方法相比,PointCore在推理时间上具有竞争力,并且在检测和定位方面均取得了最佳性能。
二、方法
2.1 全局和局部配准
与Reg3D - AD模型类似,我们应用快速点特征直方图(FPFH)特征描述符和随机抽样一致性(RANSAC)算法来实现点云的全局配准。为了增强点云配准的稳定性,引入了点到平面迭代最近点(point - plane ICP)算法对全局配准的输出进行局部优化。假设需要配准两个点云 X s X_{s} Xs(源点云)和 x t x_{t} xt(目标点云),具体步骤如下:
- 应用从全局配准获得的旋转矩阵和平移向量对 X s X_{s} Xs进行变换。
- 在 x t x_{t} xt中搜索与 X s X_{s} Xs中 p i p_{i} pi距离最近的点 q i q_{i} qi,其中 q i q_{i} qi的法向量记为 n i n_{i} ni。
- 假设最优旋转欧拉角 α \alpha α, β \beta β, γ \gamma γ趋近于0,此时 cos ( θ ) → 1 \cos(\theta)\to1 cos(θ)→1, sin ( θ ) → 0 \sin(\theta)\to0 sin(θ)→0, θ → 0 \theta\to0 θ→0。旋转矩阵 R R R可近似表示为: R ≈ [ 1 − γ β γ 1 − α − β α 1 ] R \approx\left[\begin{array}{ccc}1 & -\gamma & \beta \\ \gamma & 1 & -\alpha \\ -\beta & \alpha & 1\end{array}\right] R≈ 1γ−β−γ1αβ−α1
- 假设最优平移向量为 t = [ t x , t y , t z ] t=[t_{x}, t_{y}, t_{z}] t=[tx,ty,tz] 。通过摩尔 - 彭罗斯逆将损失函数表示为最小二乘问题: E ( R , t ) = ∑ i = 1 n ( ( R p i + t − q i ) T n i ) 2 E(R, t)=\sum_{i=1}^{n}\left(\left(R p_{i}+t-q_{i}\right)^{T} n_{i}\right)^{2} E(R,t)=i=1∑n((Rpi+t−qi)Tni)2
- 应用计算得到的旋转矩阵和平移向量对 X s X_{s} Xs进行变换,并重复步骤2 - 5,直到损失值低于预定义的阈值。需要注意的是,用于配准的目标点云 X t X_{t} Xt是固定的。
2.2 存储库构建
- 坐标采样:我们采用贪心下采样算法对 点云进行采样。给定 点云 X X X和点集 C a C_{a} Ca( α \alpha α为 C a C_{a} Ca中的点数),我们的目标是从 C a C_{a} Ca中获取 S m a x S_{max} Smax个均匀分布的点。具体步骤如下:
- 从 C a C_{a} Ca中随机选择 S i n i t S_{init} Sinit个点构建初始点集 P i n i t = P 1 , P 2 , P 3 , … , P S i n i t P_{init }={P_{1}, P_{2}, P_{3}, \ldots, P_{S_{init }}} Pinit=P1,P2,P3,…,PSinit 。
- 计算 C a C_{a} Ca与 P i n i t P_{init } Pinit之间的距离,得到一个维度为 a × S i n i t a×S_{init } a×Sinit的矩阵 d 2 d d_{2d} d2d : d 2 d = [ d 11 ⋯ d 1 S m a x ⋮ ⋱ ⋮ d a 1 ⋯ d a S m i n ] d_{2d}=\left[\begin{array}{ccc} d_{11} & \cdots & d_{1 S_{max }} \\ \vdots & \ddots & \vdots \\ d_{a 1} & \cdots & d_{a S_{min }}\end{array}\right] d2d= d11⋮da1⋯⋱⋯d1Smax⋮daSmin
- 计算矩阵 d 2 d d_{2d} d2d每一行的平均值,得到 d 1 d = [ d 1 m a n , d 2 m a n ⋯ , d a m a n ] d_{1d}=[d_{1_{man }}, d_{2_{man }} \cdots, d_{a_{man }}] d1d=[d1man,d2man⋯,daman] 。
- 找到矩阵 d 1 d d_{1d} d1d中的最大值,并将对应的点添加到 P i n i t P_{init } Pinit中。重复步骤2 - 4,直到 P i n i t P_{init } Pinit中的元素数量等于 S m a x S_{max} Smax。
- 点特征插值:我们使用在ShapeNet数据集上预训练的点变换器(PointMAE)作为三维特征提取器。对于每个点云,我们将坐标采样阶段得到的坐标作为组中心点。每个中心点形成一个存储元素,将其与坐标和PointMAE特征绑定。这些元素构成了图2中的存储库。为了降低推理过程中计算PointMAE特征的计算复杂度,需要对 点云坐标进行下采样。因此,我们进一步进行点特征插值,为特征库中的每个坐标分配一个PointMAE特征值。特征插值方法如图3所示。
给定包含所有中心点坐标的点集 P c e n t r a l P_{central } Pcentral,其对应的PointMAE特征集为 M i n i t M_{init } Minit 。以一个非中心点 P e P_{e} Pe为例,我们使用k近邻算法在点集 P c e n t r a l P_{central } Pcentral中获取三个最近邻点 [ P k 1 , P k 2 , P k 3 ] [P_{k1}, P_{k2}, P_{k3}] [Pk1,Pk2,Pk3] 。它们对应的欧氏距离和PointMAE特征值分别为 [ D k 1 , D k 2 , D k 3 ] [D_{k1}, D_{k2}, D_{k3}] [Dk1,Dk2,Dk3]和 [ M k 1 , M k 2 , M k 3 ] [M_{k1}, M_{k2}, M_{k3}] [Mk1,Mk2,Mk3] 。通过公式(3),我们可以得到 P e P_{e} Pe的PointMAE特征 M e M_{e} Me 。重复此过程,直到所有非中心点都获得其对应的PointMAE特征。 M e M_{e} Me的计算公式为: M e = D k 1 D k 2 M k 3 + D k 1 D k 3 M k 2 + D k 2 D k 3 M k 1 D k 1 D k 2 + D k 1 D k 3 + D k 2 D k 3 M_{e}=\frac{D_{k1} D_{k2} M_{k3}+D_{k1} D_{k3} M_{k2}+D_{k2} D_{k3} M_{k1}}{D_{k1} D_{k2}+D_{k1} D_{k3}+D_{k2} D_{k3}} Me=Dk1Dk2+Dk1Dk3+Dk2Dk3Dk1Dk2Mk3+Dk1Dk3Mk2+Dk2Dk3Mk1
2.3 推理模块
- 多特征异常得分计算:存储库由元素集组成,即 M t r a i n = { ( M 1 c , l M 1 p ) , ( M 2 c , M 2 p ) , … , ( M n c , M n p ) } M_{train }=\{(M_{1_{c}}, l M_{1_{p}}),(M_{2_{c}}, M_{2_{p}}), \ldots,(M_{n_{c}}, M_{n_{p}})\} Mtrain={(M1c,lM1p),(M2c,M2p),…,(Mnc,Mnp)} ,其中 M i c M_{i_{c}} Mic表示第 i i i个点的坐标, M i p M_{i_{p}} Mip表示第 i i i个点的PointMAE特征。测试特征库定义为 F t e s t = { ( F 1 c , F 1 p ) , ( F 2 c , F 2 p ) , … , ( F m c , F m p ) } F_{test }=\{(F_{1_{c}}, F_{1_{p}}),(F_{2_{c}}, F_{2_{p}}), \ldots,(F_{m_{c}}, F_{m_{p}})\} Ftest={(F1c,F1p),(F2c,F2p),…,(Fmc,Fmp)} ,其中 F j c F_{j_{c}} Fjc是第 j j j个点的坐标, F j p F_{j_{p}} Fjp是第 j j j个点的PointMAE特征。对于 F t e s t F_{test } Ftest中的一个元素 ( F j c , F j p ) (F_{j_{c}}, F_{j_{p}}) (Fjc,Fjp) ,我们使用其坐标信息 F j c F_{j_{c}} Fjc在 M t r a i n M_{train } Mtrain中找到三个最近邻点,记为 ( M i c , M i p ) (M_{i_{c}}, M_{i_{p}}) (Mic,Mip) , ( M o c , M o p ) (M_{o_{c}}, M_{o_{p}}) (Moc,Mop) , ( M u c , M u p ) (M_{u_{c}}, M_{u_{p}}) (Muc,Mup) 。使用欧氏距离,得到它们的坐标距离 { D C 1 , D C 2 , D C 3 } \{DC_{1}, DC_{2}, DC_{3}\} {DC1,DC2,DC3}和特征距离 { D P 1 , D P 2 , D P 3 } \{DP_{1}, DP_{2}, DP_{3}\} {DP1,DP2,DP3} 。最终的坐标异常得分 S c = m e a n ( D C 1 , D C 2 , D C 3 ) S_{c}= mean(DC_{1}, DC_{2}, DC_{3}) Sc=mean(DC1,DC2,DC3),PointMAE异常得分 S p = m i n ( D P 1 , D P 2 , D P 3 ) S_{p}=min (DP_{1}, DP_{2}, DP_{3}) Sp=min(DP1,DP2,DP3) 。
- 排序模块:由于两种异常得分在尺度和分布上存在差异,因此需要对它们进行归一化处理。传统的归一化方法通常采用区间缩放法。对于一组数据 S l i s t S_{list } Slist,区间缩放过程为 S n o r m = S l i s t − m i n ( S l i s t ) m a x ( S l i s t ) − m i n ( S l i s t ) S_{norm }=\frac{S_{list }-min (S_{list })}{max (S_{list })-min (S_{list })} Snorm=max(Slist)−min(Slist)Slist−min(Slist) 。如图4所示,区间缩放法可以消除两种异常得分之间的尺度差异,但无法解决分布差异问题。当坐标异常得分存在两个异常值时,最终的异常得分会远小于PointMAE异常得分,这对基于算术运算的集成策略有显著影响。为解决这一问题,我们设计了一种基于排序的归一化方法,其中 S o r t _ r a n k ( S l i s t ) Sort\_rank (S_{list }) Sort_rank(Slist)用于获取 S l i s t S_{list } Slist中每个值的排名, l e n ( S l i s t ) len(S_{list }) len(Slist)是 S l i s t S_{list } Slist的长度,即: S n o r m = S o r t _ r a n k ( S l i s t ) l e n ( S l i s t ) S_{norm }=\frac{ Sort\_rank \left(S_{list }\right)}{len\left(S_{list }\right)} Snorm=len(Slist)Sort_rank(Slist)
三、实验
3.1 实验细节
- 数据集:Real3D - AD数据集总共包含1254个样本,分布在12个不同的类别中。每个特定类别的训练集仅包含四个样本,类似于二维异常检测中的少样本场景。这些类别包括飞机、糖果棒、鸡肉、钻石、鸭子、鱼、宝石、海马、贝壳、海星和太妃糖。Real3D - AD数据集中的所有类别均为生产线的玩具。数据集中的物体分辨率为0.001mm - 0.0015mm,具有360度覆盖范围和完美的原型。
- 基线方法:我们与BTF、M3DM、PatchCore进行比较,以评估我们方法的性能。根据所使用的点云特征,它们可以分为7种不同的基线方法,即BTF(Raw)、BTF(FPFH)、M3DM(PointMAE)、PatchCore(FPFH)、PatchCore(FPFH + Raw)、PatchCore(PointMAE)、PatchCore(PointMAE + RAW),其中Raw表示使用坐标信息。PointMAE和FPFH是两种不同的特征描述符。
- 评估指标:所有评估指标与相关研究中的完全相同。我们通过接收者操作特征曲线下面积(AUROC)和精确率 - 召回率曲线下面积(AUPR/AP)来评估对象级异常检测性能和点级异常检测性能。AUROC和AUPR越高,异常检测性能越好。所有实验均在第12代英特尔酷睿i9 - 12900K CPU、64G DDR4 SDRAM和英伟达GeForce RTX 3090平台上进行。
3.2 Real3D - AD数据集上的异常检测
我们将我们的方法与Real3D - AD数据集上的几种方法进行比较,表1展示了对象级AUROC(O - AUROC)的异常检测结果。FPFH和PointMAE特征分别与Raw特征结合。结果表明,基于PointMAE的组合表现更好。对于所提出的PointCore架构,点云的坐标信息是不可或缺的。表2展示了我们的模型与最先进方法之间更全面的比较。PointCore在所有指标上都取得了有竞争力的性能,包括在O - AUROC指标上提升了17.75%。点级AUROC(P - AUROC)、对象级AUPR(O - AUPR)和点级AUPR(P - AUPR)的性能进一步证明了我们方法在异常检测方面的优越性能。表3列出了BTF、M3DM和PatchCore之间推理时间的比较。可以看出,表3中的BTF虽然速度快,但在O - AUROC和P - AUROC方面表现一般甚至较差。除BTF外,我们的方法是最快的。
3.3 消融实验
在本节中,我们在表4的3视图设置下对基于Reg3D - AD的设计选择进行消融实验。
- 局部优化(LO)的有效性:Reg3D - AD模型采用FPFH + RANSAC方法进行配准,其中RANSAC算法通过迭代寻找最优位姿矩阵。然而,RANSAC每次迭代中随机选择点的方式会导致最终配准结果存在显著差异。我们对太妃糖数据集中的一对点云进行了20次实验,结果表明即使参数相同,也会有很大的变化。引入局部优化算法是为了提高配准过程的稳定性。欧拉角的方差从1.1058°降至 ( 7.7796 × 1 0 − 6 ) c (7.7796×10^{-6})^{c} (7.7796×10−6)c ,得分达到0.642±0.01。关于局部优化方法,我们在不同程度的高斯噪声下对点点ICP和点面ICP算法进行了配准误差测试。结果表明,在较低噪声水平下,点面ICP配准方法通常能得到更准确的结果。Reg3D - AD数据集中的异常样本类似于低噪声水平的点云,因此选择点面ICP作为局部优化方法。
- PointCore架构的有效性:与Reg3D - AD架构相比,PointCore架构可以更好地利用点云的坐标信息,实现更快、更准确的点云异常检测。在速度方面,我们通过绑定点的坐标信息和PointMAE特征信息加速了推理过程,减少了后续PointMAE寻找最近邻时引入的大量计算成本。相比之下,Reg3D - AD架构将坐标信息和PointMAE特征信息分别存储在不同的存储库中,推理时每个坐标和PointMAE都必须在相应的存储库中寻找最近邻,这带来了巨大的计算挑战,尤其是PointMAE特征有1154维。在准确性方面,我们增强了坐标信息的主导地位,避免了PointMAE特征中明显的不匹配。具体来说,在Reg3D - AD架构中,测试点云的PointMAE特征必须在不利用任何坐标信息的情况下在PointMAE存储库中寻找最近邻,这会导致局部相似组之间的错误匹配。通过严格限制坐标的匹配范围,我们显著降低了不匹配的概率。
- 排序模块(RB)的有效性:从表4可以看出,排序模块显著提高了对象级AUROC和对象级AUPR,但在点级指标上的提升有限。这是因为排序模块主要用于减轻异常值对不同异常分数分布的重大影响。它在对象级异常分数中起着重要的平衡作用,因为对象级异常分数的样本量相对较小。相比之下,点级异常分数本身样本众多,异常值的影响极小。
四、结论
我们提出了一种无监督点云异常检测器 PointCore,它基于单存储库开发,利用局部 - 全局特征来存储输入点云的多尺度信息。在 Real3D - AD 数据集上进行的大量实验表明,我们的方法具有更高的召回率和更低的误报率,在需要精确检测缺陷样本的实际应用中更具优势。此外,由于局部 - 全局特征存储库和多特征异常分数计算方法都降低了计算成本,所提出的框架效率较高。