【2024工业3D异常检测文献】CMDIAD: 基于跨模态蒸馏驱动的多模态工业异常检测

Incomplete Multimodal Industrial Anomaly Detection via Cross-Modal Distillation

1、Background

近年来,基于3D点云和RGB图像的多模态工业异常检测(IAD)研究强调了利用模态间的冗余性和互补性对于精确分类和分割的重要性。

在项目中,提出了CMDIAD方法,一个用于IAD的跨模态蒸馏框架,以证明多模态训练、少模态推理(Multi-modal Training, Few-modal Inference,MTFI)流程的可行性。

与典型的知识蒸馏(KD)方法不同,传统的方法涉及接受相同模态输入的教师和学生网络,而跨模态KD的学生网络试图基于额外的模态生成与教师相同的输出。

换句话说,跨模态KD能够通过建立一种模态与另一种模态之间的映射来估计缺失的信息。

通过跨模态KD来增强无监督IAD方法,开发一个多模态训练、少模态推理(MTFI)流程,使模型能够用多种检查方法的数据进行训练,但只使用其中一种方法进行推理。

CMDIAD基于IAD的跨模态蒸馏框架,学习生成缺失模态的跨模态幻觉,目标是调查MTFI流程的可行性以及可以跨模态传输的信息,并采用了基于无监督记忆库方法。

CMDIAD框架的 核心思想是训练可学习的跨模态KD网络,以模拟在训练阶段仅出现的给定模态的特权信息,如特征或输入,然后尝试在推理阶段生成其缺失的信息。

Supplement

跨模态KD网络(Cross-Modal Knowledge Distillation,简称KD)是指一种特殊的知识蒸馏方法,它用于处理多模态学习中缺失模态的情况。在多模态学习中,数据通常包含来自不同源(如视觉、声音、文本等)的多种类型的信息。理想情况下,模型训练和推理都希望能够利用所有这些模态的信息。然而,在现实世界的应用中,某些模态的数据可能不可用或不完整。

跨模态KD网络的核心思想是 利用一种模态的已知信息来估计或生成另一种模态的缺失信息。 这样,即使在缺少某些模态数据的情况下,模型也能够进行有效的推理。具体来说,跨模态KD网络通过以下步骤实现:

  • 教师网络和学生网络:在传统的知识蒸馏中,教师网络通常是预训练的深度神经网络,它能够处理完整的模态数据;学生网络则尝试学习教师网络的知识,但学生网络可能只接触到部分模态的数据。
  • 模态融合:在跨模态KD中,学生网络被训练来预测或生成那些在推理时可能不可用的模态的信息。这通常涉及到从一种模态(如RGB图像)生成另一种模态(如3D点云)的特征表示。
  • 蒸馏:通过训练,学生网络学习到了如何从一种模态映射到另一种模态。这种映射可以是直接的(如特征到特征的映射),也可以是间接的(如输入到输入的映射)。
  • 损失函数:在训练过程中,通常会定义一个损失函数来衡量学生网络生成的模态信息与真实模态信息之间的差异。通过最小化这个损失,学生网络能够学习到如何更好地估计或生成缺失的模态信息。
  • 推理:在推理阶段,即使某些模态的数据不可用,学生网络也能够利用它在训练阶段学到的知识来生成缺失模态的估计,从而进行有效的异常检测。

2、Method

核心思想:

  • 多模态训练,少模态推理(MTFI):模型在训练时使用来自多个检查方法的数据(多模态),但在推理时仅使用其中一种模态的数据。这样可以在实际应用中节省成本和时间,因为不是所有样本都需要通过所有检查方法进行评估。
  • 跨模态知识蒸馏(KD):通过跨模态KD,模型能够利用一种模态的信息来估计或生成另一种缺失模态的信息。例如,使用RGB图像信息来生成对应的3D点云信息。
  • 记忆库方法:使用记忆库来存储正常样本的特征,并在推理时比较测试样本与这些正常特征的差异,以识别异常。

在这里插入图片描述

MTFI流程(只使用PCs进行推理):

  • 多模态训练阶段:
    • 在这个阶段,模型使用来自多个模态(例如,RGB图像和点云)的数据进行训练。
    • 利用跨模态知识蒸馏技术,模型学习如何从一种模态(如RGB图像)生成另一种模态(如点云)的特征表示。
    • 通过这种方式,模型能够理解不同模态之间的关系,并学习如何利用一种模态的信息来补充另一种模态的缺失信息。
  • 少模态推理阶段:
    • 在这个阶段,模型仅使用一种模态的数据(在Figure 2的情况下,只使用点云数据)来进行推理。
    • 即使在训练时使用了多模态数据,模型也能够在推理时只使用点云数据来检测异常。
    • 通过在训练阶段学习的跨模态映射,模型能够生成缺失模态(如RGB图像)的幻觉,并利用这些幻觉来进行有效的异常检测。

直观解释:

  • 训练阶段:模型像“学生”一样学习如何从多种类型的数据中提取和生成有用的特征。
  • 推理阶段:模型像“老师”一样应用学到的知识,即使在缺少某些数据类型的情况下也能做出决策。

pseudo-code

# point_cloud_feature_extractor 和 rgb_feature_extractor 是预训练的模型,用于从点云和RGB图像中提取特征。
# F2F_network、F2I_network 和 I2F_network 是跨模态蒸馏网络,用于不同模态间的特征转换。
# select_coreset 是一个函数,用于从正常样本特征中选择一个代表性的子集来构建记忆库。
# compute_anomaly_score 是一个函数,用于计算给定测试样本相对于记忆库的异常分数。
# fuse_scores 是一个函数,用于融合不同模态的异常分数,以得到一个综合的异常检测结果。
# threshold 是一个阈值,用于判断测试样本是否异常。# 步骤1: 特征提取
def feature_extraction(PCs, RGB_image):FP_C = point_cloud_feature_extractor(PCs)  # 使用Point-MAEFRGB = rgb_feature_extractor(RGB_image)  # 使用DINOreturn FP_C, FRGB# 步骤2: 跨模态蒸馏
def cross_modal_distillation(FP_C, FRGB):# 特征到特征蒸馏H_fRGB = F2F_network(FP_C)H_FP_C = F2F_network(FRGB)# 特征到输入蒸馏HiRGB = F2I_network(FP_C)HfRGB = RGB_feature_extractor(HiRGB)# 输入到特征蒸馏HfRGB = I2F_network(PCs)return H_fRGB, H_FP_C, HfRGB# 步骤3: 记忆库构建
def build_memory_bank(FP_C, FRGB, normal_samples):M_P_C = select_coreset(FP_C, normal_samples)M_RGB = select_coreset(FRGB, normal_samples)return M_P_C, M_RGB# 步骤4: 推理与异常检测
def anomaly_detection(FP_C, M_P_C, H_fRGB, M_RGB):# 计算异常分数anomaly_score_PCs = compute_anomaly_score(FP_C, M_P_C)anomaly_score_RGB = compute_anomaly_score(H_fRGB, M_RGB)# 融合异常分数final_score = fuse_scores(anomaly_score_PCs, anomaly_score_RGB)# 阈值判断异常return final_score > threshold# 主流程
def main(PCs, RGB_image, normal_samples):FP_C, FRGB = feature_extraction(PCs, RGB_image)H_fRGB, H_FP_C, HfRGB = cross_modal_distillation(FP_C, FRGB)M_P_C, M_RGB = build_memory_bank(FP_C, FRGB, normal_samples)anomaly_detected = anomaly_detection(FP_C, M_P_C, H_fRGB, M_RGB)return anomaly_detected

算法流程:

  • 特征提取
    • 使用预训练的深度学习模型(如DINO和Point-MAE)分别对RGB图像和3D点云进行特征提取。
  • 跨模态蒸馏
    • 特征到特征蒸馏(F2F):直接从一种模态的特征图生成另一种模态的特征图。
    • 特征到输入蒸馏(F2I):从一种模态的特征图中生成另一种模态的输入数据。
    • 输入到特征蒸馏(I2F):从一种模态的输入数据生成另一种模态的特征图。
  • 优化
    • 通过最小化真实特征和生成特征之间的距离来训练跨模态蒸馏网络。
  • 记忆库构建
    • 使用核心集选择方法来构建记忆库,确保记忆库尽可能全面且不包含重复特征。
  • 决策层融合
    • 在推理时,使用单类支持向量机(OCSVM)比较测试样本的特征与记忆库中的特征,以计算异常分数。
  • 推理
    • 根据计算出的异常分数,模型对测试样本进行分类和分割,以识别异常。

3、Experiments

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、Conclusion

开发了一个基于跨模态蒸馏驱动的多模态工业异常检测(IAD)的有效框架。

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

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

相关文章

如何在算家云搭建MVSEP-MDX23(音频分离)

一、MVSEP-MDX23简介 模型GitHub网址:MVSEP-MDX23-music-separation-model/README.md 在 main ZFTurbo/MVSEP-MDX23-音乐分离模型 GitHub 上 在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有…

js列表数据时间排序和取唯一值

1.取唯一值[...new Set(array)] const array [1, 2, 3, 2, 4, 5, 3, 5]; // 使用Set去除重复元素 const uniarray [...new Set(array)]; console.log(uniarray); // 输出: [1, 2, 3, 4, 5] 2.排序 var u [1,3,2,5,4]; var uu u.sort(); console.log(uu); var u [1,3…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第四篇-着色器投影-接收阴影部分】

上一章中实现了体积渲染的光照与自阴影,那我们这篇来实现投影 回顾 勘误 在开始本篇内容之前,我已经对上一章中的内容的错误进行了修改。为了确保不会错过这些更正,同时也避免大家重新阅读一遍,我将在这里为大家演示一下修改的…

如何培养稀缺的创新能力

在早几年的业务红海阶段,自己就意识到了创新能力对于业务的重要性。原本在前段时间就想分享给大家,但自己也有一些顾虑。 一方面是个人私心,自己多年实操总结的经验,不想这么轻易的就发布到社交网站上;其次是此类的知…

算法分析——《二分查找》

🛩《二分查找》 🎨题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 …

matlab入门学习(四)多项式、符号函数、数据统计

一、多项式 %多项式(polynomial)%创建 p[1,2,3,4] %系数向量,按x降幂排列,最右边是常数(x的0次幂) f1poly2str(p,x) %系数向量->好看的字符串 f x^3 2 x^2 3 x 4(不能运算的式子&#xf…

BI 和 AI 有什么区别?

BI 和 AI 中都有个 I,对应的英文单词都是 Intelligence,看起来是同一个意思。 其实不然,即使我们只限定商业决策领域中讨论问题,BI 和 AI 中的 I 也有很大的不同。 广义地来看,根据数据来辅助商业决策的事务都可以叫 B…

Nginx部署前端Vue项目的深度解析

目录 一、准备工作 1.1 开发环境 1.2 服务器环境 1.3 Nginx安装 二、构建Vue项目 三、上传静态文件到服务器 四、配置Nginx 五、测试并重新加载Nginx 六、访问Vue应用 七、高级配置 7.1 启用HTTPS 7.2 启用Gzip压缩 7.3 缓存控制 八、常见问题与解决方案 8.1 40…

Java基础(Arrays工具类)(asList()方法)(详细)

目录 一、Arrays工具类 (1)引言 (2)基本介绍 (3)主要功能(提供的方法) (I)排序(Arrays.sort()) (II)搜索(查找…

怎么给视频加片头片尾和字幕

在这个视觉内容爆炸的时代,一段精心制作的视频不仅能吸引眼球,更能传达深刻的情感与信息。而一个引人入胜的片头、一个温馨感人的片尾,以及恰到好处的字幕,无疑是提升视频质感的关键。那么新人要怎么给视频加片头片尾和字幕效果呢…

Springboot项目-实战2-实现

文章目录 接口接收数据并进行数据清洗mysql读取到redis接口返回参数对象java函数使用备注返回参数分析stream操作Thread线程队列集合存储统计加密日志以及aspect对接口的时间影响?war包和jar包的区别?filter、interceptor、aspect区别?探针Gs…

如何在 Kubernetes 上部署和配置开源数据集成平台 Airbyte?

在 Kubernetes 上部署和配置 Airbyte 是一个复杂但非常有价值的过程,特别是对于需要强大数据集成和数据处理能力的企业或团队。Airbyte 是一个开源的数据集成平台,允许用户从各种来源提取数据并加载到目标存储中。其强大的插件系统支持多种数据源与目标&…

C语言 | Leetcode C语言题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; #define MIN(x, y) ((x) < (y) ? (x) : (y))int getSteps(int curr, long n) {int steps 0;long first curr;long last curr;while (first < n) {steps MIN(last, n) - first 1;first first * 10;last last * 10 9;}return …

前端——测试与打包时静态资源引用路径

1.测试与打包构建目录说明 &#xff08;1&#xff09;说明&#xff1a; public路径&#xff1a;/xx 绝对路径&#xff1a;/public/xx 相对路径&#xff1a;./xx public路径与绝对路径说明&#xff0c;原理&#xff1a; 在Vite中&#xff0c; / 开头的绝对路径默…

QT使用qss控制样式实现动态换肤

文章目录 设计QSS样式表动态加载QSS文件主函数调用QT提供了一种非常灵活的方式来使用QSS(Qt Style Sheet,类似于 CSS 的样式表),实现界面的动态换肤功能。QSS可以改变Qt应用程序中几乎所有可视组件的外观,包括颜色、字体、边框等。下面介绍一下如何通过QSS实现动态换肤。 设…

诗画紫砂壶

大家详细解答一首网络上流传的顺口溜&#xff0c;其中包含了很多的紫砂壶型。 // 紫砂壶型 // 秦权汉瓦唐羽仙&#xff0c;西施文旦美人肩。 逸公德钟对却月&#xff0c;仿鼓虚扁望方山。东坡提梁卧井栏&#xff0c;供春提璧看柿圆。荷花海棠吹松段。掇只君乐奏合欢&#xff…

vue3中< keep-alive >页面实现缓存及遇到的问题

vue3中< keep-alive >页面实现缓存及遇到的问题 实现原理&#xff1a;keep-alive 是 Vue 的内置组件&#xff0c;当它包裹动态组件时&#xff0c;会缓存不活动的组件实例&#xff0c;而不是销毁它们。实现不同路由是否缓存只需要设置对应路由参数keepAlive为true&#xf…

Spring Boot 实现动态配置导出,同时支持公式和动态下拉框渲染和性能优化案例示范

在业务系统中&#xff0c;数据导出是一个非常常见且重要的功能&#xff0c;本文将详细介绍如何在 Spring Boot 中实现这一功能&#xff0c;并结合 MySQL 数据库、MyBatis 作为数据访问层&#xff0c;EasyExcel 作为导出工具&#xff0c;展示如何在电商交易系统中搭建灵活、可扩…

BUG项目管理

最近只要改项目就有可能产生bug。 目前这项目&#xff0c;从一开始我就参与开发。 很长一段时间都是敏捷开发&#xff0c;有时候连UI图都是后出。 随着时间加长&#xff0c;需求复杂度增加&#xff0c;有时候动下代码就伤筋动骨&#xff0c;事故不断&#xff0c;主要是影响口…

64.【C语言】再议结构体(下)

本文衔接第63篇63.【C语言】再议结构体(上) 目录 目录 6.复习 7.修改默认对齐数 8.结构体传参 01.传递非指针参数 02.传递指针参数(传递地址) 03.对比 9.结构体实现位段 01.位段的定义 02.格式 03.例题 答案速查 分析 10.位段跨平台问题 11.位段的应用 12.其他…