1、Background
随着3D传感器的发展,最近发布了具有2D图像和3D点云数据的MVTec-3D AD数据集,促进了多模态工业异常检测的研究。
无监督异常检测的核心思想是找出正常表示与异常之间的差异。当前的2D工业异常检测方法可以分为两类:
(1)基于重建的方法。图像重建任务在异常检测方法中被广泛使用,以学习正常表示。对于单一模态输入(2D图像或3D点云),重建方法易于实现。但对于多模态输入,很难找到重建目标。
(2)基于预训练特征提取器的方法。直观的方法是将提取的特征映射到正常分布,并找到分布之外的一个作为异常。基于归一化流的方法使用可逆变换直接构建正常分布,记忆库方法存储一些代表性特征以隐式构建特征分布。
与基于重建的方法相比,直接使用预训练特征提取器不涉及设计多模态重建目标,对于多模态任务是更好的选择。此外,当前的多模态工业异常检测方法直接连接两种模态的特征。然而,当特征维度很高时,多模态特征之间的干扰将非常激烈,并导致性能下降。
为了解决上述问题,提出了一种基于RGB图像和3D点云的新型多模态异常检测方案Multi-3D-Memory (M3DM)。与现有方法直接连接两种模态的特征不同,提出了一种混合融合方案,以减少多模态特征之间的干扰并鼓励特征交互。
提出了无监督特征融合(UFF)来融合多模态特征,它使用分块对比损失进行训练,以学习相同位置的多模态特征块之间的固有关系。为了鼓励异常检测模型保持单一域推理能力,分别为RGB、3D和融合特征构建了三个记忆库。
对于最终决策,构建了决策层融合(DLF),以考虑所有记忆库进行异常检测和分割。异常检测需要包含全局和局部信息的特征,其中局部信息有助于检测小缺陷,全局信息关注所有部分之间的关系。基于这一观察,使用Point Transformer进行3D特征和Vision Transformer进行RGB特征。进一步提出了点特征对齐(PFA)操作,以更好地将3D和2D特征对齐。
2、Method
Multi-3D-Memory (M3DM)方法采用3D点云和RGB图像作为输入,进行3D异常检测和分割。
采用特征混合融合方案,以促进跨域信息交互,同时保持每个单一域的原始信息。
利用两个预训练的特征提取器,DINO用于RGB和PointMAE用于点云,分别提取颜色和3D表示。
M3DM由三个重要部分组成:
(1)点特征对齐(PFA):为了解决颜色特征和3D特征之间的位置信息不匹配问题,提出了点特征对齐,将3D特征对齐到2D空间,这有助于简化多模态交互并提高检测性能。
(2)无监督特征融合(UFF):由于多模态特征之间的交互可以产生对异常检测有帮助的新表示,提出了一个无监督特征融合模块,以帮助统一多模态特征的分布并学习它们之间的内在联系。
(3)决策层融合(DLF):尽管UFF有助于提高检测性能,但发现信息丢失是不可避免的,并提出使用多个记忆库进行最终决策。
算法流程:
- 输入数据
- 3D点云
- RGB图像
- 特征提取
- 使用Point Transformer处理3D点云,提取每个点的特征(形状)
- 使用Vision Transformer处理RGB图像,提取图像中每个块的特征(纹理和颜色)
- 特征融合
- 点特征对齐(PFA):因为3D点云和彩色图片的空间对应关系可能不一致,所以需要一个对齐过程,让3D形状信息和2D颜色信息能在同一个坐标系下比较。将3D点云特征投影到2D平面上,以便与RGB图像特征对齐。
- 无监督特征融合(UFF):将对齐后的3D和2D特征进行融合,使用一种特殊的学习方法(分块对比学习),让两种特征互相学习,增强彼此的信息。
- 决策层融合(DLF)
- 首先,使用多个记忆库(Memory Bank)分别存储RGB特征、3D特征和融合后的特征。
- 然后,对于每个记忆库,系统都会计算出一个异常分数和一个分割图,这些分数和图基于学习到的正常产品特征。
- 最后,通过一个叫做One-Class SVM的模型,综合这些分数和图,给出最终的异常检测结果和异常区域的定位。
pseudo-code
python
# 定义函数进行特征提取
def extract_features(data):
if isinstance(data, RGB_image):
features = vision_transformer(data)
elif isinstance(data, PointCloud):
features = point_transformer(data)
return features
# 定义函数进行无监督特征融合
def unsupervised_feature_fusion(rgb_features, point_features):
fused_features = some_fusion_method(rgb_features, point_features)
return fused_features
# 定义函数进行异常检测
def anomaly_detection(features, memory_bank):
distances = calculate_distances(features, memory_bank)
anomaly_score = sum(distances) # 简化的异常评分计算
return anomaly_score
# 主流程
def main(new_rgb_image, new_point_cloud, memory_bank_rgb, memory_bank_point, memory_bank_fused):
# 特征提取
rgb_features = extract_features(new_rgb_image)
point_features = extract_features(new_point_cloud)
# 特征融合
fused_features = unsupervised_feature_fusion(rgb_features, point_features)
# 异常检测
score_rgb = anomaly_detection(rgb_features, memory_bank_rgb)
score_point = anomaly_detection(point_features, memory_bank_point)
score_fused = anomaly_detection(fused_features, memory_bank_fused)
# 综合决策
final_score = (score_rgb + score_point + score_fused) / 3
if final_score > threshold:
return "异常"
else:
return "正常"
# 假设的记忆库数据
memory_bank_rgb = ...
memory_bank_point = ...
memory_bank_fused = ...
# 新样本数据
new_rgb_image = ...
new_point_cloud = ...
# 调用主函数进行异常检测
result = main(new_rgb_image, new_point_cloud, memory_bank_rgb, memory_bank_point, memory_bank_fused)
print("检测结果:", result)
3、Experiments
🐂。。。
4、Conclusion
提出了一种基于点云和 RGB 图像的 多模态混合特征融合
工业异常检测方法 Multi-3D-Memory 。