BACK TO THE FEATURE: CLASSICAL 3D FEATURES ARE (ALMOST) ALL YOU NEED FOR 3D ANOMALY DETECTION
1、Background
BTF(Back to the Feature),一种 结合手工制作的3D表示(FPFH)和基于深度颜色特征提取(PatchCore)
的方法。
手工制作的3D点云异常检测方法是 基于预先定义的几何规则和手工编码的算法来从3D点云数据中识别异常模式
的技术。这些方法不依赖于数据驱动的模型(如深度学习算法),而是使用数学和几何原理来提取特征并识别异常。
手工制作的异常检测方法首先需要从3D点云中提取出有助于异常识别的特征。这些特征通常包括:
- 几何特征:如点云的曲率、法线(垂直于局部表面的向量)、局部凹凸性等。
- 拓扑特征:考虑点云中点与点之间的空间关系,如点的邻域结构。
- 描述符:如FPFH(Fast Point Feature Histograms),它综合了点的位置、法线和曲率等信息,生成一个可用于后续处理的描述符。
手工制作的3D点云异常检测可以很好的利用 旋转不变特性
。
在3D异常检测和分割中,旋转不变性是指算法能够识别和处理的3D形状特征与对象的方向无关。换句话说,不论对象如何旋转,算法都能够以相同的方式识别出对象的特征。这对于3D点云异常检测具有以下几个优势:
- 鲁棒性:旋转不变性使得异常检测算法对对象的方向变化不敏感,因此可以在不同方向的多个视图中可靠地识别出相同的特征。
- 简化计算:由于算法不需要考虑每个可能的方向,因此可以减少计算量,提高算法的处理速度。
- 提高准确性:在异常检测中,我们通常关心的是局部的几何变化,如凹陷或凸起,这些变化与方向无关。旋转不变的特征允许算法集中于这些局部特征,而不是背景噪声或非相关的变化。
- 泛化能力:旋转不变的特征有助于算法更好地泛化到新的、未见过的数据。因为训练时学到的特征在新数据的不同方向上仍然有效。
- 减少假阳性:在异常分割任务中,旋转不变性有助于减少由于对象方向变化导致的假阳性检测。例如,如果算法仅对特定方向的特征敏感,那么在其他方向上可能会出现误报。
- 特征比较:在比较测试样本和训练样本时,旋转不变性允许直接比较特征,而无需复杂的对齐或归一化步骤。
- 数据增强:在训练机器学习模型时,可以通过旋转训练数据来增强数据集,而不用担心影响模型的性能。
FPFH(Fast Point Feature Histograms)就是一种旋转不变的3D点云描述符。它通过计算点云中每个点周围的几何特征,并将这些特征量化到一个直方图中,来实现对3D形状的描述。由于FPFH描述符与点云的旋转无关,因此它在3D异常检测中非常有用,能够提供一种有效的方式来识别和分割异常。
手工制作的3D点云异常检测方法的优势和局限
- 优势:计算效率高,易于理解和解释,不需要大量的训练数据。
- 局限:
可能不如数据驱动的方法灵活,对于复杂的异常模式可能不够敏感。
2、Method
算法流程:
- 预处理
- 对点云和RGB图像进行下采样以降低计算复杂度。
- 对点云执行背景移除,以减少无关信息的干扰。
- 特征提取
- 提取3D形状特征(例如FPFH)以捕捉几何信息。
- 提取颜色特征(使用预训练的CNN模型如PatchCore)以捕捉颜色和纹理信息。
- 特征融合
- 将3D形状特征和颜色特征进行拼接,形成综合特征向量。
- 异常检测
- 使用k-最近邻(kNN)或其他方法计算测试样本的综合特征向量与训练样本特征向量之间的距离。
- 根据距离计算异常得分,得分越高表示异常的可能性越大。
- 异常分割
- 根据异常得分对测试样本进行像素级的异常分割,将超过阈值的像素标记为异常。
pseudo-code
# 输入:训练集点云和RGB图像,测试集点云和RGB图像
# 输出:测试样本的异常分割结果
# 步骤1:预处理
function preprocess(point_cloud, rgb_image):
# 下采样点云和图像
downsampled_point_cloud = downsample(point_cloud)
downsampled_rgb_image = downsample(rgb_image)
# 移除点云背景
processed_point_cloud = remove_background(downsampled_point_cloud)
return processed_point_cloud, downsampled_rgb_image
# 步骤2:特征提取
function extract_features(point_cloud, rgb_image):
# 提取3D形状特征
shape_features = extract_3d_features(point_cloud)
# 提取颜色特征
color_features = extract_color_features(rgb_image)
return shape_features, color_features
# 步骤3:特征融合
function fuse_features(shape_features, color_features):
# 融合3D形状特征和颜色特征
fused_features = concatenate(shape_features, color_features)
return fused_features
# 步骤4:异常检测
function anomaly_detection(fused_features, train_features):
# 计算测试样本与训练样本之间的距离
distances = compute_distances(fused_features, train_features)
# 计算异常得分
anomaly_scores = compute_anomaly_scores(distances)
return anomaly_scores
# 主流程
function BTF(train_point_clouds, train_rgb_images, test_point_cloud, test_rgb_image):
# 预处理
processed_test_point_cloud, test_rgb_image = preprocess(test_point_cloud, test_rgb_image)
# 特征提取
test_shape_features, test_color_features = extract_features(processed_test_point_cloud, test_rgb_image)
# 特征融合
test_fused_features = fuse_features(test_shape_features, test_color_features)
# 训练特征融合(假设已经完成特征提取和融合)
train_fused_features = fuse_features(extract_features(train_point_clouds), extract_features(train_rgb_images))
# 异常检测
anomaly_scores = anomaly_detection(test_fused_features, train_fused_features)
# 根据得分进行异常分割
segmented_result = segment_anomalies(anomaly_scores)
return segmented_result
3、Experiments
4、Conclusion
提出了BTF,一种 结合手工制作的3D表示(FPFH)和基于深度的颜色特征提取(PatchCore)
的方法。