本文是曹云康24年投稿至《Patten Recognition》的文章,是目前在MVTec 3D-AD数据集上的3D异常检测SOTA。之所以被分类到3D异常检测类别,是因为这篇文章中仅使用了点云数据进行检测,未使用RGB模态。同样,文章中也指出了它所使用的多模态其实是“伪模态”,是将点云投影到2D形成的“伪2D”模态。从我的另一篇论文汇总博客多模态工业异常检测算法整理-CSDN博客中也可以看到,虽然我把这篇文章同时放入了点云和多模态两个类别中,但其数据是一样的。
文章所提出的模型名为CPMF,在之前的两篇博客中CPMF复现笔记(1):docker环境配置+数据预处理-CSDN博客,CPMF复现笔记(2):训练MVTecAD-3D数据集, 精度SOTA_mvtec itodd数据集使用-CSDN博客我记录了复现这篇文章的过程。这里真的要为曹云康老师点赞,提交的代码非常清晰,几乎不用费力调试就可以运行起来了,并且复现的数据与文章几乎完全一致,与那些不提交代码或者提交了代码不能运行再或者运行了结果与文章不一致的学者们形成了鲜明对比!
思路:在BTF这篇文章中指出,点云的特征提取至关重要,但因为预训练点云特征网络的训练与使用的域差异,导致这些网络的性能甚至不如手工制作的特征提取方法。手工制作的特征具有很好的局部描述能力,但缺乏全局语义。同时,图像领域的特征提取要先进的多,在大规模数据集上训练的预训练网络具有很好的全局语义特征。因此,作者产生了将二者结合起来的思路。
关键组成:三维特征提取、二维特征提取、聚合、检测;
问题描述:输入点云包含N个点,期望的输出是N个对应的异常值,越大的异常值代表了异常的点。在训练阶段只能够获取到正常点云,在测试阶段输入未知的点云并输出异常分数。
总体结构:输入的点云被同时用于提取3D和2D模态特征。2D的模态特征通过将3D点云投影至不同角度,通过预训练图像网络特征提取2D特征后,重新将2D特征对齐到3D点云上。将2D和3D特征合并后,使用Memory Bank作为以异常检测方式。
3D特征提取:基于学习的3D特征提取在很多任务上取得了很好的效果,但在异常检测问题上,经典的手工特征提取目前阶段具有更好的效果。文章使用了手工特征。
2D特征的提取:是本文的重要创新点。
首先需要将3D点云投影到2D并渲染。这里文中虽然讲的比较细,但也仅包含常规的透视几何公式,具体的实践过程还要包含有点云到表面的渲染,如三角化等。这部分内容偏向于实践,还需要在代码中找一找对应的实现过程。
之后使用预训练网络提取特征,并将输出特征图上采样至与原图相同的分辨率,这样每一个像素就都有了对应的特征。之后,根据投影过程的对应关系,可以将每个像素的2D特征赋给对应的3D点,并使用平均值池化进行聚合,也就是一个3D点的特征是它对应的不同视角下所得到的这些2D特征的平均。
特征聚合:将2D特征和3D特征分别归一化为单位向量,并连接起来。
异常检测:使用与PatchCore相同的内存库方式。
实验过程:
预处理:去除地面,并对点云进行聚类,保留主要的区域,去除掉其他的干扰;
3D特征提取:使用FPFH特征。先对PCD进行了降采样,输出特征维度为33;
2D特征提取:使用Open3D进行渲染,渲染输出的分辨率是224x224。2D特征提取器是ResNet18,使用前3个块,2D特征维度是448,每张图像投影27次;
消融实验:
视角数量:结论是更多的视角能够提高性能。下图是一些某视角下不显著的缺陷在另外视角下更加显著的示例。
2D和3D特征:从一些示例中看出,2D异常区域和3D异常区域具有明显的不同,从统计数据上看,单独使用的效果显著低于结合使用,证明了特征的互补性作用;
骨干网络:结论是骨干网络对性能影响不大,取得综合最佳性能的反而是ResNet18。
不足:点云噪声对渲染图像的影响可能导致异常误判。点云存在噪声是非常普遍的,或许这也是一个值得研究的方向。另外对于在MVTec 3D-AD上进行3D异常检测的算法,其评判标准有失偏颇,因为一些缺陷是仅能通过RGB判断的,这对统计3D异常检测算法的性能是不充分的。
个人总结:曹云康的文章我一直都在跟,总是讲述的清晰又有条理,而且不会仅仅局限于学术领域,他的路线真的有考虑到工程实际情况。这篇文章是一种很典型的从特征提取角度进行创新的方法,利用了FPFH和PathCore这种经典又好用的结构,结合自己提出的CPMF特征,最后取得了非常高的性能。总体来说这篇文章非常值得仔细阅读,也是自己进行工程应用和学术创新的一个非常好的模板。
标签:2D,Complementary,特征,Pseudo,Detection,特征提取,点云,异常,3D From: https://blog.csdn.net/gaooolianggg/article/details/142165612