【2023工业3D异常检测文献】Shape-Guided: 基于形状引导和双记忆库的异常检测方法

news2024/11/27 14:33:57

Shape-Guided Dual-Memory Learning for 3D Anomaly Detection

1、Background

提出了一个以形状为指导的专家学习框架,用于解决无监督3D异常检测的问题。

该方法建立在两个专门的专家模型及其协同作用的基础上,以从颜色和形状模态中定位异常区域。

第一个专家利用几何信息通过建模局部形状周围的隐式距离场来探测3D结构异常。

第二个专家考虑与第一个专家相关联的2D RGB特征,以识别局部形状上的颜色外观不规则性。

使用这两个专家从无异常训练样本中构建双记忆库,并执行形状引导的推理,以在测试样本中精确定位缺陷。

2、Method

状引导的专家学习 (Shape-Guided Expert Learning)

目标: 开发两个专家模型来分别处理3D形状信息和2D颜色信息,以提高异常检测的准确性。

  • 形状专家 (Shape Expert):
    • 点云分割: 将完整的点云分割成多个局部3D补丁。
    • 特征提取: 使用PointNet对每个补丁进行特征提取,获取局部几何特征向量。
    • 隐式函数建模: 使用神经隐式函数(NIF)模型,基于PointNet的特征向量,预测查询点的有符号距离,构建局部表面的有符号距离函数(Signed Distance Field,SDF)。
    • 记忆库构建: 将所有补丁的特征向量存储到SDF记忆库中。
  • 外观专家 (Appearance Expert):
    • RGB特征提取: 使用预训练的ResNet模型从2D RGB图像中提取特征。
    • 形状引导映射: 根据SDF和对应的RGB特征之间的映射关系,为每个SDF追踪其对应的RGB特征。
    • 记忆库构建: 构建形状引导的记忆库,包含与SDF相对应的RGB特征字典。

在这里插入图片描述

形状引导的推理 (Shape-Guided Inference)

目标: 结合两个专家模型的输出,对测试样本进行异常检测。

  1. 特征提取: 对测试样本使用PointNet和ResNet提取SDF和RGB特征。
  2. 最近邻搜索: 对于每个SDF,从SDF记忆库中找到最近的邻居,构建字典,并使用稀疏表示法重构特征。
  3. 计算SDF分数图: 使用重构的特征计算SDF分数图。
  4. 构建RGB字典: 根据SDF的最近邻,从RGB记忆库中获取对应的RGB字典。
  5. 计算RGB分数图: 使用重构的RGB特征计算RGB分数图。
  6. 分数图对齐: 对SDF和RGB分数图进行对齐,确保两个分数图的值在可比较的范围内。
  7. 融合分数图: 通过取每个像素点上SDF和RGB分数的最大值,生成最终的异常分数图。

在这里插入图片描述

pseudo-code

# 步骤1: 训练形状专家和外观专家
def train_experts(training_data):
    point_clouds, rgb_images = training_data
    sdf_memory_bank = {}
    rgb_memory_bank = {}

    for point_cloud, rgb_image in zip(point_clouds, rgb_images):
        # 提取3D特征
        features = pointnet(point_cloud)
        
        # 计算SDF
        sdfs = nif(features)
        
        # 存储SDF对应的3D特征
        sdf_memory_bank.update({id(point_cloud): features})
        
        # 构建RGB特征字典
        rgb_features = build_rgb_dictionary(sdfs, rgb_image)
        
        # 存储RGB特征字典
        rgb_memory_bank.update({id(point_cloud): rgb_features})

    return sdf_memory_bank, rgb_memory_bank

# 步骤2: 形状引导推理
def shape_guided_inference(test_data, sdf_memory_bank, rgb_memory_bank):
    test_point_cloud, test_rgb_image = test_data
    test_features = pointnet(test_point_cloud)
    sdfs = nif(test_features)
    
    # 计算SDF分数图
    sdf_scores = compute_scores(test_features, sdf_memory_bank, use_nif=True)
    
    # 计算RGB分数图
    rgb_scores = compute_scores(test_rgb_image, rgb_memory_bank, use_nif=False)
    
    # 融合SDF和RGB分数图
    final_scores = fuse_scores(sdf_scores, rgb_scores)
    
    return final_scores

# 辅助函数
def pointnet(point_cloud):
    # 使用PointNet模型提取3D特征
    pass

def nif(features):
    # 使用NIF模型计算SDF
    pass

def build_rgb_dictionary(sdfs, rgb_image):
    # 根据SDF和2D图像构建RGB特征字典
    pass

def compute_scores(features, memory_bank, use_nif):
    # 使用内存银行和特征计算分数图
    if use_nif:
        # 计算SDF分数
        pass
    else:
        # 计算RGB分数
        pass

def fuse_scores(sdf_scores, rgb_scores):
    # 融合SDF和RGB分数图
    pass

# 主流程
training_data = load_training_data()  # 加载训练数据
test_data = load_test_data()  # 加载测试数据

sdf_memory_bank, rgb_memory_bank = train_experts(training_data)
final_scores = shape_guided_inference(test_data, sdf_memory_bank, rgb_memory_bank)

# 根据final_scores进行异常检测
detect_anomalies(final_scores)

3、Experiments

🐂🐎。。。

在这里插入图片描述

在这里插入图片描述

4、Conclusion

提出了一个以形状为指导的专家学习框架,实现的 双记忆库和形状引导推理 显著降低了计算和内存成本。

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

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

相关文章

vue项目-仿知乎页面的路由跳转

这篇文章记录一下该项目的路由跳转,首先是登录页 登录页路由跳转到首页也就是index文件夹中 然后展示contentleft组件和contentright组件,他们在页面上的显示是这样的 然后每一个功能部分也会有另一个url,去跳转更详细的界面 有时间继续…

python-斐波那契词序列/最大回文乘积/求最大最小k个元素

一:斐波那契词序列题目描述 编写一个程序,生成斐波那契词序列的前n个元素。 斐波那契词序列是一个词序列,其中每个词是通过连接前两个词形成的。 它以斐波那契序列命名,因为它是以类似的方式创建的,但是我们不是加数字&#xff0c…

美国游戏玩家的文化偏好

美国游戏市场是世界上最大、最多样化的市场之一,受到一系列文化、社会和经济因素的影响。美国游戏玩家通常以参与技术和娱乐为特征,表现出由个人主义、竞争和社交互动驱动的偏好。主要趋势和偏好在这个市场中脱颖而出: 游戏类型多样 美国玩…

毕业设计选题:基于ssm+vue+uniapp的教学辅助小程序

开发语言:Java框架:ssmuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:M…

Resdis中关于字符串类型的基础命令

本文主要详解key-value中vaule为字符串类型的情况,value属于其他的数据类型不适应;有几个命令是通用命令 目录 1.set和get 2.keys 3.exists 4.del 5.expire 6.ttl 7.type 8.object encoding key 9.加减操作 10.字符串操作 11.命令小结 1.se…

拿下奇怪的前端报错:SyntaxError: Unexpected token ‘??=‘或‘xxx‘ - 浅谈Nodejs版本过高过低的部分问题

在前端开发时,如果同时维护多个项目,跨越的年度又比较大,难免会使用多个Nodejs版本。有时候版本不对,不仅仅是安装会报错 1 依赖无法安装 一般情况下nodejs又向后兼容较好(除了部分三方包),所…

day03-js 作业

js基础 一.选择 1C 2C 3D 4C 5B 6B 7C 8A 二.编程 2 函数 数组与对象 一.选择 1D 2C 3D 4A 5D 6B 7B 8A 二.编程 1 2 4

Linux驱动开发(速记版)--设备树插件

第六十八章 设备树插件介绍 Linux 4.4之后引入了动态设备树,其中的设备树插件(Device Tree Overlay)是一种扩展机制,允许在运行时动态添加、修改或删除设备节点和属性。 设备树插件机制通过DTS(设备树源文件&#xff0…

50.哀家要长脑子了!

1.1705. 吃苹果的最大数目 - 力扣(LeetCode) 贪心贪在哪里,用一个优先队列(小根堆)存储腐烂日期和该日期苹果腐烂的数量。优先吃掉距离腐烂日期最近的苹果。吃苹果分为两个阶段,第一个是在1-n天内&#xff…

MySQL 中的 LAST_INSERT_ID()函数详解

在 MySQL 数据库中,LAST_INSERT_ID()是一个非常有用的函数。它可以帮助我们获取最近一次插入操作所生成的自增 ID 值。本文将详细解释 MySQL 中的LAST_INSERT_ID()函数及其用途。 一、函数介绍 LAST_INSERT_ID()是 MySQL 中的一个内置函数,它返回最近一…

跨平台音乐播放器Feishin

什么是 Feishin ? Feishin 是一款现代的自托管音乐播放器,支持多种音乐来源和功能。它是由Sonixd 的重构版本发展而来,能够与 Navidrome 或 Jellyfin API 音乐服务器兼容,目前还不支持 Subsonic API 。Feishin 具有现代化的用户界…

【mmsegmentation】Loss模块详解(入门)以调用FocalLoss为例

1、mmdet中损失函数模块简介 1.1. Loss的注册器 先来看段代码:mmseg/models/builder.py # mmseg/registry/registry.py # mangage all kinds of modules inheriting nn.Module # MODELS Registry(model, parentMMENGINE_MODELS, locations[mmseg.models])from mm…

风格迁移项目一:如何使用

前言 由于我不太会pr,所以直接新建的项目, 原项目地址:https://github.com/Optimistism/Style-transfer 原项目代码的讲解地址:https://www.bilibili.com/video/BV1yY4y1c7Cz/ 本项目是对原项目的一点点完善。 项目地址&…

C语言复习概要(一)

本文 C语言入门详解:从基础概念到分支与循环1. C语言常见概念1.1 程序的基本结构1.2 变量作用域和存储类1.3 输入输出1.4 编译与运行 2. C语言中的数据类型和变量2.1 基本数据类型2.2 变量的声明与初始化2.3 常量与枚举 3. C语言的分支结构3.1 if语句3.2 if-else语句…

Python笔记 - 函数、方法和类装饰器

前言 装饰器最早出现是Python2.4版本,为什么这个版本开始存在?这是因为最早标记类方法的做法是: def foo(self):perform method operation foo classmethod(foo)当方法体过长的时候很容易让人忽略掉最后的语句classmethod(foo)&#xff0c…

Win10之解决:设置静态IP后,为什么自动获取动态IP问题(七十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

域内密码喷洒 Password Spray 实验

password spray 1. 实验网络拓扑 kali: 192.168.72.128win2008: 192.168.135.129 192.168.72.139win7: 192.168.72.149win2012:(DC) 192.168.72.131 2. 简单原理 Kerberos针对同一个用户,多次的密码尝试请求有锁定保护策略。 但是我们可以切换用户,…

【Streamlit案例】制作销售数据可视化看板

目录 一、案例效果 二、数据分析 三、加载数据 四、网站前端 (一)网页标题和图标 (二)侧边栏和多选框 (三)主页面信息 ​(四)主页面图表 (五)隐藏部…

基于四种网络结构的WISDM数据集仿真及对比:Resnet、LSTM、Shufflenet及CNN

在上节中,我们已经详细介绍了WISDM数据集及如何使用CNN网络训练,得到了六个维度的模型仿真指标及五个维度的可视化分析,那么现在我们将训练模型推广到其他网路结构中去,通过仿真实验来对比一下不同网络之间对于WISDM数据集的训练效…

【docker笔记8-镜像推送】

docker笔记8-镜像推送 一、基本命令二、案例1.Java demo2.打包镜像 一、基本命令 (1)推送镜像到远程仓库 docker tag local-image:tagname new-repo:tagname docker push new-repo:tagname这里首先要登录到docker,然后需要输入登录用户名和…