图像异常检测应从明确目标、选对工具、小步验证入手,核心是结合场景定义“异常”,人工标注总结视觉共性,再依异常占比与是否允许未知类选择方法;优先尝试GMM、One-Class SVM或Autoencoder等经典模型。

图像异常检测不是先学一堆理论再动手,而是从明确目标、选对工具、小步验证开始。核心在于理解“什么是异常”在你手头数据里的具体含义,而不是套用通用模型。
搞清楚你的“异常”到底长什么样
异常没有标准定义,它完全取决于你的场景。工业质检中划痕、缺料是异常;医学影像里微小结节可能是异常;而监控视频中突然出现的物体也可能是异常。别急着跑模型,先花半天时间人工翻100张图,标出你认为的异常样本,总结共性:是纹理突变?形状不规则?亮度异常?还是位置不合常理?这个过程比调参重要十倍。
- 用Excel或简单标注工具(如CVAT轻量版)记下每类异常的视觉特征和出现条件
- 统计异常占比——如果少于0.1%,得优先考虑采样策略或损失函数设计
- 确认是否允许“未知类异常”(比如训练没见过的缺陷类型),这直接决定该用监督、半监督还是无监督方法
从经典方法起步,别一上来就堆深度学习
很多实际项目用高斯混合模型(GMM)、One-Class SVM 或 Autoencoder 就能解决80%的问题,速度快、可解释、容易调试。尤其当样本少、类别模糊、计算资源有限时,传统方法更稳。
- 先用OpenCV提取纹理特征(LBP、GLCM)+ PCA降维,喂给One-Class SVM,50行代码就能跑通baseline
- Autoencoder适合重建误差明显的场景(如规则背景下的异物),重点调重建loss权重和latent维度,不必追求SOTA结构
- 对比不同方法在验证集上的PR曲线,特别看低误报率(FPR
用预训练模型做迁移,但要剪得干净
ImageNet预训练主干(ResNet18、ViT-Tiny)确实好用,但别直接接大分类头。异常检测的关键是捕捉细微差异,所以建议:
- 冻结前两层,只微调后半部分;特征图取layer3或layer4输出,接一个轻量注意力模块(如CBAM)增强局部敏感性
- 用Patch-based策略:把图切成64×64块,分别提取特征再聚合,比整图输入更能定位异常区域
- 损失函数别只用MSE,加一项“特征分布一致性约束”(比如最小化正常块特征的方差),防止模型“假装学会”
部署前必须做的三件事
模型离线指标好看≠线上能用。真实场景里光照变化、相机抖动、脏镜头都会让性能跳变。
- 在测试集上模拟常见退化:加高斯噪声、随机遮挡、对比度衰减,看AUC掉多少——掉超5%就得加鲁棒预处理
- 导出为ONNX格式,在目标设备(Jetson、RK3588、甚至树莓派)实测单帧耗时,超过50ms要考虑蒸馏或量化
- 设置两级告警:一级是模型输出置信度阈值,二级是后处理规则(如连续3帧异常才触发,排除噪点干扰)
基本上就这些。异常检测不是拼模型深度,而是拼你对数据、产线逻辑和落地瓶颈的理解深度。跑通第一个可用版本可能只要两天,后续迭代才是真功夫。










