图像异常检测中Mean-Shift返回1簇的原因、核心参数及算法选型咨询
图像异常检测聚类问题解答
1. Mean Shift返回单聚类的原因及核心可调参数
返回单聚类的主要原因
- 代码逻辑错误:当前实现存在多处致命逻辑问题,是返回单聚类的核心诱因:
get_new_imagevectors方法中,self.images_new被错误赋值为PCA模型对象,而非降维后的图像特征矩阵,正确写法应为self.images_new = model2.transform(images_temp)clustering方法中错误调用make_blobs,将PCA模型作为centers参数输入,生成的模拟样本和原始图像特征完全无关__init__方法中n_clusters、use_imagenets两个变量未预先定义就赋值,运行时会直接报错
- 带宽设置过大:Mean Shift的带宽参数决定了聚类窗口的大小,带宽过大时所有样本都会被划入同一个聚类,当前
estimate_bandwidth使用的quantile=0.2取值不合理,会导致估算的带宽超出特征分布范围 - 特征区分度过低:如果提取的图像特征没有足够的区分度,所有样本的特征分布高度重叠,也会被判定为同一个聚类
Mean Shift核心可调参数
bandwidth:最核心的参数,决定均值漂移的窗口半径,直接影响聚类数量,值越大聚类数越少quantile:estimate_bandwidth方法的参数,用于估算带宽的分位数值,取值范围0~1,值越大估算得到的带宽越大bin_seeding:布尔值,开启后会将特征空间离散化分组生成初始种子点,大幅降低计算量,对聚类结果影响极小cluster_all:布尔值,开启后所有离群点都会被分配到最近的聚类,关闭后离群点会被标记为-1
2. 5000张图像异常检测场景的算法选型
Mean Shift的适用性判断
Mean Shift不是该场景的合理方案,原因如下:
- 时间复杂度为O(n²),随样本量增长计算效率急剧下降,5000样本+高维图像特征的组合下,运行耗时会达到不可接受的程度
- 对高维特征非常敏感,图像特征动辄上千维,Mean Shift的带宽参数极难调试,聚类结果不稳定
- 异常检测场景不需要预先对所有正常样本聚类,Mean Shift的聚类逻辑和异常检测的需求匹配度极低
推荐算法选型
按易用度和效果排序推荐:
- 专门的无监督异常检测算法:优先选
Isolation Forest(隔离森林)、One-Class SVM,两类算法不需要提前标注,不需要确定聚类数,对高维特征适配性好,处理5000样本速度极快 - 聚类类替代方案:如果一定要用聚类逻辑实现,优先选
HDBSCAN,不需要预先设定聚类数,比Mean Shift效率高3~10倍,对高维特征适配性更好,同时可以直接输出离群点作为异常样本;手肘法无法确定K值可以换用轮廓系数法计算最优K值 - 工业级图像异常检测方案:如果精度要求高,可选用当前工业界的SOTA方案,比如PatchCore、SPADE,基于预训练特征的距离度量实现异常检测,对小样本、无标注场景适配性极强
内容的提问来源于stack exchange,提问作者Karl Hurt
相关产品推荐
相关产品推荐

