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)
目标: 结合两个专家模型的输出,对测试样本进行异常检测。
- 特征提取: 对测试样本使用PointNet和ResNet提取SDF和RGB特征。
- 最近邻搜索: 对于每个SDF,从SDF记忆库中找到最近的邻居,构建字典,并使用稀疏表示法重构特征。
- 计算SDF分数图: 使用重构的特征计算SDF分数图。
- 构建RGB字典: 根据SDF的最近邻,从RGB记忆库中获取对应的RGB字典。
- 计算RGB分数图: 使用重构的RGB特征计算RGB分数图。
- 分数图对齐: 对SDF和RGB分数图进行对齐,确保两个分数图的值在可比较的范围内。
- 融合分数图: 通过取每个像素点上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
提出了一个以形状为指导的专家学习框架,实现的 双记忆库和形状引导推理
显著降低了计算和内存成本。