在前几篇博文中,我使用Win11+Docker配置了anomalib,并成功的训练了我自己的一个火腿肠缺陷检测的数据集,其中使用的模型就是PatchCore。由于我的数据集比较大并且面临着跨域的问题(不同的火腿品种、不同设备采集),因此检测的效果不是很好,F1-Score为0.75。
为了排查是否代码存在问题,我重新运行了MVTecAD数据集的bottle类别,发现其精度也是0.7左右。这说明我的代码可能是存在问题的。
解决办法:
我重新使用CLI接口在MVTecAD数据集上训练了bottle类别,准确率达到99.7,这与API模式存在非常大的区别。之后我再次在我自己的训练集上进行了训练,这次我的准确率达到了99.4%,这远远超出了我的预期,推理速度大约为160ms(3070GPU)。以下图像分别为合格,缺陷类别1,缺陷类别2.可以看到,能够很好的识别到缺陷位置了。
在我的结果中存在这样一种缺陷,它是由合格品剪掉一块形成的,但这个没有被有效的检测到。我是这样理解的,这种产品的每个patch都是符合正常品特征的,但貌似模型没有能够充分的理解一个正常品应该包含的各个组成部分,从而使这种部分结构缺失的样本被漏掉。这应该更加属于一种逻辑缺陷。