当前位置:   article > 正文

异常检测Anomalib现存小bug记录_anomalib 视觉检测

anomalib 视觉检测

初试Anomalib,发现了几个小问题:

1. 相同训练数据,模型和seed均相同,但训练出的模型不一致

以MVTec数据集为例,测试集中存在良性数据(test/good)和不存在良性数据训练出的模型有一定差距。但只需在test/good目录中随便加入一个良性数据,即便该数据非良性,训练出的模型就会一致。

查看模型检查点代码如下:

  1. import pytorch_lightning as pl
  2. from pytorch_lightning.plugins.io import TorchCheckpointIO as tcio
  3. ckpt_path = 'results/fastflow/mvtec/bottle/run/weights/lightning/model.ckpt'
  4. tc = tcio()
  5. ckpt_dict = tc.load_checkpoint(path=ckpt_path)
  6. ckpt_dict['state_dict']

2. 数据类可移植性不强,若采用无标签的自定义数据集,需修改代码

自定义数据集若没有ground truth,无疑的是需修改配置文件,如下:

  1. dataset:
  2. task: classification
  3. model:
  4. early_stopping:
  5. metric: train_loss #不唯一
  6. metrics:
  7. # pixel: 该项必须注释掉
  8. # - F1Score
  9. # - AUROC

还需修改anomalib-main/src/anomalib/data/mvtec.py文件中的make_mvtec_dataset()方法,否则会抛出键值不匹配异常,主要原因是代码默认加载ground truth,但实际没有。若不修改,将全部测试样本均放入test/good目录中亦可,但不建议。make_mvtec_dataset()方法修改部分如下,将红框内代码注释掉即可:

3. 训练时的测试集会影响可视化效果

训练时的测试集不同,可视化后的图像有很大差距,如下:

                

原因是测试集会影响训练保存的检查点ckpt_dict['state_dict']中的normalization_metrics.min和normalization_metrics.max,在推理时会直接采用上述两个预先保存的参数对异常图(anomaly_map)进行归一化,导致 训练集相同、测试集不同 保存的检查点可视化后的图像有很大差距,但生成的anomaly_map相同。

Tip: 模型训练时单个epoch中的迭代次数是训练+验证的总和。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/371036
推荐阅读
相关标签
  

闽ICP备14008679号