【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-MAE
    FRGB = rgb_feature_extractor(RGB_image)  # 使用DINO
    return 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.mfbz.cn/a/885394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亲身体验Llama 3.1:开源模型的部署与应用之旅

文章目录 1 Llama 3.1系列的诞生2 大型模型的未来发展3 使用教程4 Llama 3.1在客户服务中的运用 1 Llama 3.1系列的诞生 在人工智能的浪潮中,大型语言模型(LLM)正以其独特的魅力和潜力,成为深度学习领域的一颗耀眼明星。 这些模…

大模型增量训练--基于transformer制作一个大模型聊天机器人

针对夸夸闲聊数据集,利用UniLM模型进行模型训练及测试,更深入地了解预训练语言模型的使用方法,完成一个生成式闲聊机器人任务。 项目主要结构如下: data 存放数据的文件夹 dirty_word.txt 敏感词数据douban_kuakua_qa.txt 原始语…

【算法篇】二叉树类(2)(笔记)

目录 一、Leetcode 题目 1. 左叶子之和 (1)迭代法 (2)递归法 2. 找树左下角的值 (1)广度优先算法 (2)递归法 3. 路径总和 (1)递归法 (2…

JavaScript类型转换和相等性详解

类型转换 10"objects" //10objects,数字10转换为字符串 "7"*"4" //28,两个字符串均转为数字,只要不是加,其他都按两个数字算 var n 1-"x"// NaN,字符串x无法转化为数字 n"objects"//…

大模型训练:K8s 环境中数千节点存储最佳实践

今天这篇博客来自全栈工程师朱唯唯,她在前不久举办的 KubeCon 中国大会上进行了该主题分享。 Kubernetes 已经成为事实的应用编排标准,越来越多的应用在不断的向云原生靠拢。与此同时,人工智能技术的迅速发展,尤其是大型语言模型&…

通信工程学习:什么是CSMA/CD载波监听多路访问/冲突检测

CSMA/CD:载波监听多路访问/冲突检测 CSMA/CD(Carrier Sense Multiple Access/Collision Detect),即载波监听多路访问/冲突检测,是一种用于数据通信的介质访问控制协议,广泛应用于局域网(特别是以…

rpm方式安装jdk1.8

1、查询系统中是否已经安装jdk rpm -qa |grep java 或 rpm -qa |grep jdk 2、卸载已有的openjdk rpm -e --nodeps java-1.7.0-openjdk rpm -e --nodeps java-1.7.0-openjdk-headless rpm -e --nodeps java-1.8.0-openjdk rpm -e --nodeps java-1.8.0-openjdk-headless3、安装j…

考拉悠然携手中国系统打造城市智能中枢,让城市更聪明更智慧

在21世纪的科技浪潮中,智慧城市建设已成为推动城市现代化进程的重要引擎。随着人工智能技术的飞速发展,AI正以前所未有的速度融入智慧城市管理的每一个角落,从交通出行到公共安全,从环境保护到城市管理,无一不彰显着智…

2.1 HuggingFists系统架构(二)

部署架构 上图为HuggingFists的部署架构。从架构图可知,HuggingFists主要分为服务器(Server)、计算节点(Node)以及数据库(Storage)三部分。这三部分可以分别部署在不同的机器上,以满足系统的性能需求。为部署方便,HuggingFists社区版将这三部…

生产环境升级mysql流程及配置主从服务

之前写到过mysql升级8.4的文章, 因此不再介绍mysql的安装过程 避免服务器安装多个mysql引起冲突的安装方法_安装两个mysql会冲突吗-CSDN博客 生产环境升级mysql8.4.x流程 安装mysql 参考之前文章: 避免服务器安装多个mysql引起冲突的安装方法_安装两个mysql会冲突吗-CSDN博客…

尚硅谷MyBatis笔记

Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“intern…

yolov8/9/10模型在仪表盘、指针表检测中的应用【代码+数据集+python环境+训练/应用GUI系统】

可视化训练系统 可视化应用系统 yolov8/9/10模型在仪表盘、指针表检测中的应用【代码数据集python环境训练/应用GUI系统】 背景意义 随着科学技术的快速发展,机器视觉以及人工智能等技术逐渐从理论走向实践,并在各个领域得到广泛应用。机器视觉检测系统…

使用powershell的脚本报错:因为在此系统中禁止执行脚本

1.添加powershell功能环境: 2.启动powershell的执行策略 因为在此系统中禁止执行脚本。 set-executionpolicy unrestricted

若依生成主子表

一、准备工作 确保你已经部署了若依框架,并且熟悉基本的开发环境配置。同时,理解数据库表结构对于生成代码至关重要。 主子表代码结构如下(字表中要有一个对应主表ID的字段作为外键,如下图的customer_id) -- ------…

springboot 集成 camunda

项目地址: stormlong/springboot-camundahttps://gitee.com/stormlong/springboot-camunda 官网集成引导 进入官网 https://camunda.com/ 选择 camunda7 滑倒页面底部 进入 getStart 页面 https://start.camunda.com/ 点击 GENERATE 下载导入 idea 即可 流程设计…

水波荡漾效果+渲染顺序+简单UI绘制

创建场景及布置 创建新场景Main,在Main场景中创建一个plane物体,命名为WaterWavePla,具体数值及层级面板排布如下: 编写脚本 创建一个文件夹,用于存放脚本,命名Scripts,创建一个子文件夹Effect,存放特效相关脚本,创建…

grafana全家桶-loki promtail收集k8s容器日志

loki是grafana旗下轻量级日志收集工具,为了减少loki对集群的影响,把loki的agent日志收集端promtail部署在k8s集群中,loki server部署在集群外面。这样简单做一个解耦,避免大量读写的应用影响到集群内业务服务。 一、promtail部署…

Transformer算法7个面试常见问题

1.Transformer为何使用多头注意力机制?(为什么不使用一个头) 英文论文中是这么说的: Multi-head attention allows the model to jointly attend to information from different representation subspaces at different position…

1.1.5 计算机网络的性能指标(上)

信道: 表示向某一方向传送信息的通道(信道!通信线路)一条通信线路在逻辑上往往对应一条发送信道和一条接收信道。 速率: 指连接到网络上的节点在信道上传输数据的速率。也称数据率或比特率、数据传输速率。 速率单…

(二)大模型调用

一、基本概念 1.1、Prompt 大模型的所有输入,即,我们每一次访问大模型的输入为一个 Prompt, 而大模型给我们的返回结果则被称为 Completion。 1.2、Temperature LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结…