基于深度学习的Lidar 3D点云表面缺陷检测方法

news/2025/1/23 12:04:27/

1. 点云缺陷检测

三维点云异常检测旨在从训练集中检测异常数据点,常用的点云异常检测方法通常采用多个特征记忆库来完全保留局部和全局表示,这种要考虑高昂的计算复杂度和特征间的不匹配问题。

2.实现方法

当前的异常检测方法大多是无监督的,主要针对二维图像,其模型通常在具有成熟架构的图像上进行训练。与二维图像相比,三维点云具有更丰富的结构信息,但也存在无序、高度稀疏和不规则分布的问题。

Real3D-AD

在这里插入图片描述
Real3D-AD一个大规模、高分辨率的三维异常检测数据集Real3D-AD被提出。该数据集中的对象具有0.001mm-0.0015mm的分辨率、360度覆盖范围和完美的原型。Real3D-AD将图像异常检测中的PatchCore应用于点云异常检测,并开发了一种通用的基于配准的点云异常检测器Reg3D-AD。Reg3D-AD采用双特征表示方法来保留训练原型的局部和全局特征,虽然检测精度显著,但推理速度较慢。当前的点云异常检测器主要分为两类:
(1)基于重建的方法,通过自动编码器重建输入点云数据,并通过比较原始数据和重建数据之间的偏差来识别异常。然而,这些方法对分辨率敏感,导致推理速度较慢且精度较低。
(2)基于记忆库的方法,其中记忆库用于存储代表性特征,以隐式构建正态分布并寻找分布外的缺陷。与前者相比,直接使用预训练的特征提取器构建记忆库具有训练速度快且不受点云分辨率影响的优点。
(3)现有的点云异常检测器通常采用多个特征记忆库来完全保留局部和全局表示,这会带来高昂的计算复杂度和特征间的不匹配问题。
在这里插入图片描述

3. PointCore

为优化当前点云异常检测算法存在的问题,如计算复杂、特征不匹配等,可参考PointCore框架对算法进行改进和升级。

3.1全局和局部配准

使用FPFH特征描述符和随机抽样一致性(RANSAC)算法来实现点云的全局配准。为了增强点云配准的稳定性,引入了点到平面ICP算法来对全局配准的输出进行局部优化。假设需要配准的两个点云分别为 X s X_s Xs(源点云)和 X t X_t Xt(目标点云),配准过程如下:

  1. 应用从全局配准获得的旋转矩阵和平移向量来变换 X s X_s Xs
  2. 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
  3. 假设最优旋转欧拉角 α \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\begin{bmatrix}1&-\gamma&\beta\\\gamma&1&-\alpha\\-\beta&\alpha&1\end{bmatrix} R 1γβγ1αβα1
  4. 假设最优平移向量为 t = [ t x , t y , t z ] t = [t_x, t_y, t_z] t=[tx,ty,tz]。损失函数通过Moore-Penrose逆表示为最小二乘问题: E ( R , t ) = ∑ i = 1 n ( ( R p i + t − q i ) T n i ) 2 E(R,t)=\sum_{i = 1}^{n}((Rp_i + t - q_i)^Tn_i)^2 E(R,t)=i=1n((Rpi+tqi)Tni)2
  5. 应用计算得到的旋转矩阵和平移向量来变换 X s X_s Xs,并重复,直到损失值低于预定义的阈值。注意,用于配准的目标点云(X_t)是固定的。
    在这里插入图片描述

3.2记忆库构建

  • 坐标采样:采用贪婪下采样算法对输入点云进行采样。给定输入点云(X)和点集 C a C_a Ca α \alpha α C a C_a Ca中的点数。我们的目标是从 C a C_a Ca中获得 S m a x S_{max} Smax个均匀分布的点。具体步骤如下:
    1. 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, \cdots, P_{S_{init}}\} Pinit={P1,P2,P3,,PSinit}
    2. 计算 C a C_a Ca P i n i t P_{init} Pinit之间的距离,得到维度为 a × S i n i t a\times 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}=\begin{bmatrix}d_{11}&\cdots&d_{1S_{max}}\\\vdots&\ddots&\vdots\\d_{a1}&\cdots&d_{aS_{min}}\end{bmatrix} d2d= d11da1d1SmaxdaSmin
    3. 计算矩阵 d 2 d d_{2d} d2d每行的平均值,得到 d 1 d = [ d 1 m e a n , d 2 m e a n , ⋯ , d a m e a n ] d_{1d} = [d_{1_{mean}}, d_{2_{mean}}, \cdots, d_{a_{mean}}] d1d=[d1mean,d2mean,,damean]
    4. 找到矩阵(d_{1d})中的最大值,并将对应的点添加到(P_{init})中。重复步骤2-4,直到(P_{init})中的元素数量等于(S_{max})。
  • 点特征插值:使用在ShapeNet数据集上预训练的点变换器(PointMAE)作为3D特征提取器。对于每个点云,使用坐标采样阶段的坐标作为分组的中心点。每个中心点形成一个记忆元素,该元素与坐标和PointMAE特征绑定。这些元素构成了图2中的记忆库。为了降低推理时PointMAE特征计算的复杂度,需要对记忆库中的点云坐标进行下采样。因此,进一步执行点特征插值,为记忆库中的每个坐标分配一个PointMAE特征值。特征插值方法如下图所示:
    在这里插入图片描述
    给定一个包含所有中心点坐标的点集 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]。得到 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

3.3推理模块

  • 多特征异常分数计算:记忆库由元素集组成,即:
    M t r a i n = { ( M 1 c , M 1 p ) , ( M 2 c , M 2 p ) , ⋯ , ( M n c , M n p ) } M_{train}=\{(M_{1_c}, M_{1_p}), (M_{2_c}, M_{2_p}), \cdots, (M_{n_c}, M_{n_p})\} Mtrain={(M1c,M1p),(M2c,M2p),,(Mnc,Mnp)},其中 M i c M_{i_c} Mic表示第(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}), \cdots, (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)Slistmin(Slist)
    区间缩放方法将消除两种异常分数之间的尺度差异,但无法解决分布差异。当坐标异常分数有两个异常值时,最终的异常分数将远小于PointMAE异常分数。这对基于算术运算的集成策略有重大影响。为了解决这个问题,设计了一种基于排序的归一化方法,其中 S o r t r a n k ( S l i s t ) Sort_rank(S_{list}) Sortrank(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(S_{list})}{len(S_{list})} Snorm=len(Slist)Sortrank(Slist)

http://www.ppmy.cn/news/1565478.html

相关文章

matlab构造线性相位FIR滤波器

文章目录 前言一、构造一组声音二、采用FIR滤波器做频率筛选 前言 用生成的一组音频文件举例 一、构造一组声音 模拟钢琴音乐,采用逐渐衰减振荡的正弦波 FFT的频域展示: 源代码: function sound_firFs 1000; % 采样频率freq [200, 230…

STM32CubeIDE使用笔记(一)

IDE 窗口布局介绍 《STM32MP1 M4裸机CubeIDE开发指南》第四章 STM32CubeIDE的使用 - 知乎 1.恢复IDE窗口默认布局 2.Packages Manager 3.Generate Code :ctrls 或Pro>G C 4.编译工程

AF3 ConditionedTransitionBlock类源码解读

ConditionedTransitionBlock类的核心功能是对输入特征进行非线性变换,并通过条件输入(s)自适应地调整特征的表示。 主要模块包括: 自适应层归一化(ada_ln):用于动态调整特征分布。两组线性变换(hidden_gating_linear 和 hidden_linear):用于构造特征空间中的非线性变…

AI对齐与开源发展:多学科融合创新之路

标题:AI对齐与开源发展:多学科融合创新之路 文章信息摘要: 本文分析了AI对齐研究中多学科融合的重要性及开源AI领域的最新发展。文章指出,AI对齐问题需要计算机科学与社会选择理论等学科深度结合,特别是在RLHF领域的应…

Anthropic 正计划为其聊天机器人 Claude 推出“双向语音模式”和一个新的记忆功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

pytorch torch.vmap函数介绍

torch.vmap 是 PyTorch 提供的一个高效矢量化映射函数,用于对批量数据上的操作进行自动矢量化。它可以显著提高代码的性能和可读性,避免显式使用循环来操作批量数据。 torch.vmap 的核心功能 对函数进行批量化操作。自动扩展函数,使其可以作用于批量输入(即 N 个样本)。提…

数据结构学习记录-算法

1、算法的概念 算法(Algorithm)的概念在计算机科学领域中几乎无处不在,在各种计算机系统的实现中,算法的设计往往处在核心的位置。计算机的问世是20世纪算法是计算机科学的重要基础,就像算盘一样,人们需要为计算机编制各种各样的…

.hex 文件和.bin 文件的区别?

.bin 文件是一种二进制文件格式,它包含了以二进制形式存储的数据或程序代码。对于微控制器或嵌入式系统而言,.bin 文件通常包含了可以直接被处理器执行的机器码。 .hex也是一种常用的存储可执行代码的文件格式,与 .bin 文件不同的是&#xff…