赞
踩
初试Anomalib,发现了几个小问题:
以MVTec数据集为例,测试集中存在良性数据(test/good)和不存在良性数据训练出的模型有一定差距。但只需在test/good目录中随便加入一个良性数据,即便该数据非良性,训练出的模型就会一致。
查看模型检查点代码如下:
- import pytorch_lightning as pl
- from pytorch_lightning.plugins.io import TorchCheckpointIO as tcio
- ckpt_path = 'results/fastflow/mvtec/bottle/run/weights/lightning/model.ckpt'
- tc = tcio()
- ckpt_dict = tc.load_checkpoint(path=ckpt_path)
- ckpt_dict['state_dict']
自定义数据集若没有ground truth,无疑的是需修改配置文件,如下:
- dataset:
- task: classification
- model:
- early_stopping:
- metric: train_loss #不唯一
- metrics:
- # pixel: 该项必须注释掉
- # - F1Score
- # - AUROC
还需修改anomalib-main/src/anomalib/data/mvtec.py文件中的make_mvtec_dataset()方法,否则会抛出键值不匹配异常,主要原因是代码默认加载ground truth,但实际没有。若不修改,将全部测试样本均放入test/good目录中亦可,但不建议。make_mvtec_dataset()方法修改部分如下,将红框内代码注释掉即可:
训练时的测试集不同,可视化后的图像有很大差距,如下:
原因是测试集会影响训练保存的检查点ckpt_dict['state_dict']中的normalization_metrics.min和normalization_metrics.max,在推理时会直接采用上述两个预先保存的参数对异常图(anomaly_map)进行归一化,导致 训练集相同、测试集不同 保存的检查点可视化后的图像有很大差距,但生成的anomaly_map相同。
Tip: 模型训练时单个epoch中的迭代次数是训练+验证的总和。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。