【2023工业3D异常检测文献】CPMF: 基于手工制作PCD描述符和深度学习IAD结合的AD方法

news2024/10/4 6:00:10

Complementary Pseudo Multimodal Feature for Point Cloud Anomaly Detection

1、Background

早期的点云异常检测(PCD)表示是手工制作的,依赖于启发式设计。随着深度学习的发展,最近的方法采用了基于学习的PCD特征。尽管与基线相比有相当大的改进,但其性能仍然很差。BTF揭示了PCD异常检测中特征描述性的重要性。与预期相反,结果表明,经典的手工制作PCD描述符优于基于学习的预训练特征

BTF将这种现象归因于目标对象和预训练数据集之间的域分布差距,导致预训练的PCD特征转移能力低。然而,尽管经典的手工特征取得了令人印象深刻的性能,但它们仅限于使用局部结构信息,无法访问全局语义上下文。由于全局语义上下文在检测语义异常中至关重要,将其与手工特征的几何建模能力结合起来可能会带来改进。

本研究提出了一种统一的PCD表示方法,即互补的伪多模态特征(CPMF),以充分利用PCD中的局部几何结构和全局语义上下文。该方法基于手工制作的PCD描述符,进一步利用生成的伪2D模态中的描述性预训练2D神经网络来丰富PCD描述符的语义内容。

在技术上,对于3D模态特征提取,CPMF利用经典的手工描述符来捕获PCD中的精确局部几何信息。进一步结合了2D模态特征提取模块,该模块利用预训练的2D神经网络的高级描述能力来开发和补充PCD中隐藏的语义信息。具体来说,该模块利用3D到2D的投影和渲染将原始3D PCD转换为包含多视图2D图像的伪2D模态。然后该模块利用预训练的2D神经网络来提取这些多视图图像的强大语义特征图。随后,在2D到3D的对齐和聚合过程中,根据各个视图中的2D-3D投影对应关系,将特征图映射到点状特征。这些单视图点状特征进一步聚合以获得最终的2D模态点状特征,这些特征来自不同视图的线索。

提取的3D和2D模态特征具有高度的互补性,因为1) 3D手工特征擅长描述局部结构,但不能利用全局语义信息。2) 2D预训练网络包含来自大规模图像数据集的深刻知识,并且能够捕获语义属性,但无法精确表示局部结构。因此,CPMF开发了一个聚合模块来融合3D和2D模态特征,并获得了包含全局语义和局部几何信息的特征。

2、Method

CPMF算法框架:

  • 3D模态特征提取器
    • 使用手工制作的描述符(如FPFH)直接从3D点云中提取局部几何信息。这些描述符能够捕捉点云中每个点周围的局部结构特征。
  • 2D模态特征提取器
    • 3D到2D投影和渲染:将原始的3D点云从不同角度投影并渲染成多视图2D图像。
    • 预训练特征图提取:利用预训练的2D神经网络(如ResNet)提取这些多视图图像的特征图。
    • 2D到3D对齐和聚合:将2D特征图映射回3D空间,得到点状的2D模态特征。然后,对不同视图的点状特征进行聚合,得到最终的2D模态特征。
  • 特征聚合
    • 将3D模态特征和2D模态特征进行归一化处理,然后进行融合,得到互补的伪多模态特征。这样,特征既包含了局部的几何信息,又包含了全局的语义信息。
  • 异常检测
    • 使用PatchCore方法,通过最近邻搜索来计算测试点云的异常分数。
    • 训练阶段:使用正常点云数据构建记忆库,存储训练数据的CPMF特征。
    • 测试阶段:提取测试点云的CPMF特征,并通过与记忆库中的特征进行比较,计算每个点的异常分数。

在这里插入图片描述

pseudo-code

# 输入:点云数据 PCD
# 输出:异常分数列表 anomaly_scores

# 步骤1:预处理点云数据
def preprocess(PCD):
    # 去除背景和噪声
    cleaned_PCD = remove_background_and_noise(PCD)
    return cleaned_PCD

# 步骤2:3D模态特征提取
def extract_3D_features(PCD):
    # 使用手工制作的3D点云描述符提取特征
    return handcrafted_descriptors(PCD)

# 步骤3:2D模态特征提取
def extract_2D_features(PCD):
    # 渲染点云为多视图2D图像
    multiview_images = render_multiview(PCD)
    
    # 使用预训练的2D神经网络提取语义特征
    semantic_features = extract_semantic_features(multiview_images)
    return semantic_features

# 步骤4:特征聚合
def aggregate_features(geo_features, semantic_features):
    # 归一化并聚合3D和2D模态特征
    normalized_geo_features = normalize(geo_features)
    normalized_semantic_features = normalize(semantic_features)
    
    # 融合特征
    aggregated_features = concatenate(normalized_geo_features, normalized_semantic_features)
    return aggregated_features

# 步骤5:异常检测
def anomaly_detection(aggregated_features, memory_bank):
    # 使用最近邻搜索计算异常分数
    anomaly_scores = calculate_anomaly_scores(aggregated_features, memory_bank)
    return anomaly_scores

# 主流程
def CPMF(PCD):
    cleaned_PCD = preprocess(PCD)
    
    # 提取3D和2D模态特征
    geo_features = extract_3D_features(cleaned_PCD)
    semantic_features = extract_2D_features(cleaned_PCD)
    
    # 聚合特征
    aggregated_features = aggregate_features(geo_features, semantic_features)
    
    # 训练阶段:构建记忆库
    memory_bank = build_memory_bank(geo_features)
    
    # 测试阶段:异常检测
    anomaly_scores = anomaly_detection(aggregated_features, memory_bank)
    return anomaly_scores

# 使用CPMF方法进行异常检测
anomaly_scores = CPMF(raw_PCD_data)

3、Experiments

🐂🐎。。。

在这里插入图片描述

4、Conclusion

提出了互补的伪多模态特征(CPMF)的点云异常检测方法,CPMF结合了复杂的手工制作的PCD描述符和最近开发的预训练2D神经网络的描述性特征,以全面描述PCD数据。

具体来说,手工制作的PCD描述符直接应用于3D模态以提取局部几何信息。为了利用预训练的2D神经网络,CPMF开发了一个2D模态特征提取模块。该模块通过3D到2D的投影和渲染将PCD数据渲染成多视图图像。然后它使用预训练的2D神经网络提取图像特征图,这些特征图随后被对齐和聚合以获得最终的2D模态特征,包含丰富的全局语义。由3D和2D模态特征组成的CPMF特征利用了局部几何和全局语义线索,提供了更好的描述性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

欧几里得算法--(密码学基础)

根基:gcd(a,b)gcd(b,a mod b) 先举个例子吧,gcd(16,6)gcd(6,4)gcd(4,2)gcd(2,0)2 学习这个定理的时候我想了几个问题. 第一个问题:为什么求出的就一定是他们两个数的公约数? 这个问题很简单我们只需要通过几何来计较即可&#x…

MyBatis——ORM

MyBatis——ORM 验证映射配置ResultType本质是ResultMap具体的转换逻辑 概括的说,MyBatis中,对于映射关系的声明是由开发者在xml文件手动完成的。比如对查询方法而言,你需要显式声明ResultType或ResultMap,这里其实就是在定义数据…

Java JUC(三) AQS与同步工具详解

Java JUC(三) AQS与同步工具详解 一. ReentrantLock 概述 ReentrantLock 是 java.util.concurrent.locks 包下的一个同步工具类,它实现了 Lock 接口,提供了一种相比synchronized关键字更灵活的锁机制。ReentrantLock 是一种独占…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull ? 119.探测存活 pod 状态为 CrashLoopBackOff ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。…

uniapp使用字体图标 ttf svg作为选项图标,还支持变色变图按

在staic目录下有一些ttf文件,如uni.ttf,iconfont.ttf 这些文件中保存这字体svg的源码们,我们也可以在网上找其他的。这些就是我们要显示的突图标的 显示来源。这样不用使用png图标,选中不选中还得用两个图片 我的具体使用如下 &q…

Python入门--循环语句

目录 1. while循环基础语法 2. while循环的嵌套 3. while实现九九乘法表 4. for循环基础语法 5. for循环的嵌套 6. for循环实现九九乘法表 7. 循环中断:break和continue 循环普遍存在于日常生活中,同样,在程序中,循环功能也…

thinkphp6入门(25)-- 分组查询 GROUP_CONCAT

假设表名为 user_courses,字段为 user_id 和 course_name,存储每个用户选修的课程,想查询每个学生选修的所有课程 SQL 原生查询 SELECT user_id, GROUP_CONCAT(course_name) as courses FROM user_courses GROUP BY user_id; ThinkPHP 代码…

python常用库总结(argparse、re、matlpotlab.plot)

文章目录 1.argparse库字符串(str)布尔值(bool)选择(choices)计数(count)常量(store_const 和 store_true)多个值(nargs)可选参数&…

用Python实现运筹学——Day 9: 线性规划的灵敏度分析

一、学习内容 1. 灵敏度分析的定义与作用 灵敏度分析(Sensitivity Analysis) 是在优化问题中,分析模型参数变化对最优解及目标函数值的影响。它帮助我们了解在线性规划模型中,当某些参数(如资源供应量、成本系数等&a…

SQLServer CXPACKET等待事件

文章目录 SQL Server 中的 CXPACKET 等待类型是最容易被误解的等待统计之一。CXPACKET 这个术语来源于 “Class Exchange Packet”(类交换包)。其本质可以描述为在单个进程的两个并行线程之间交换数据行的过程。其中一个线程是“生产者线程”&#xff0c…

理解Matplotlib构图组成

介绍 Matplotlib 是 Python 中最流行的数据可视化库之一。它提供了一系列丰富的工具,可以绘制高度自定义且适用于各种应用场景的图表。无论你是数据科学家、工程师,还是需要处理数据图形表示的任何人,理解如何操作和定制 Matplotlib 中的图表…

ElasticSearch 备考 -- 备份和恢复

一、题目 备份集群下的索引 task,存储快照名称为 snapshot_1 二、思考 这个涉及的是集群的备份,主要是通过创建快照,涉及到以下2步骤 Setp1:注册一个备份 snapshot repository Setp2:创建 snapshot 可以通过两种方…

Ubuntu18.04安装cuda11.1(出现c++版本问题)

一、概述 需要使用到ubuntu18.04进行cuda的配置,最新版本的cuda跟pytorch的版本不太适配,所以为了能够复现,我选择了一些老版本的cuda11,其使用的范围更加广泛。将自己 二、具体操作 (一)安装流程 1.官网…

为什么疾风气象大模型比传统天气预报更准?

近年来,气象大模型逐渐成为天气预报的核心工具,其预测精度和可靠性远超传统天气预报方法。本文将探讨气象大模型为何比传统天气预报更加准确的原因,分析其优势以及在气象预测领域的应用前景。 1. 传统天气预报的局限性 传统天气预报通常依赖…

win11/win10/windows下快安装并使用git

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Git 的特点?二、GIT安装方法1.打开GIT官网2.下载git安装程序整个安装过程基本上直接用默认选项就可以 总结 前言 提示:GIT介绍 GI…

十一不停歇-学习ROS2第一天 (10.2 10:45)

话题通信 1.1 发布第一个节点: import rclpy #导入此类模块 rcl类型 from rclpy.node import Node #从这个子模块中导入这类函数 def main(): #定义这个函数 rclpy.init() #使用初始化函数 node Node(hello_python) 将类函数里面的内容调给…

Pikachu- SQL Inject - http header 头注入

header 头注入,是一种场景;跟以往的没区别,只是发生在 header 响应头; 有些时候,后台开发人员为了验证客户端头信息(比如常用的cookie验证),或者通过http header头信息获取客户端的一些信息,比…

帝国CMS系统开启https后,无法登陆后台的原因和解决方法

今天本地配置好了帝国CMS7.5,传去服务器后,使用http访问一切正常。但是当开启了https(SSL)后,后台竟然无法登陆进去了。 输入账号密码后,点击登陆,跳转到/e/admin/ecmsadmin.php就变成页面一片…

【Kubernetes】常见面试题汇总(五十四)

目录 120.创建 init C 容器后,其状态不正常? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 属于【Kubernetes】的生产…

java版基于Spring Boot + Mybatis在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码

一、项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,…