异常检测Anomalib现存小bug记录

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

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

以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']

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

自定义数据集若没有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()方法修改部分如下,将红框内代码注释掉即可:

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

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

                

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值