续接:Anomalib学习(1. 入门-快速上手训练自己的数据集)
Engine的相关参数以及作用:
Engine(callbacks=None,
normalization=NormalizationMethod.MIN_MAX,
threshold='F1AdaptiveThreshold',
task=TaskType.SEGMENTATION,
image_metrics=None,
pixel_metrics=None,
logger=None,
default_root_dir='results',
**kwargs)
callbacks:list[Callback], 回调函数列表。用于在训练或推理过程中触发特定的操作。常见的回调包括模型保存、日志记录、学习率调整等。用户可以通过传递自定义的回调对象,来监控和控制模型训练的各个阶段。
normalization :归一化的方式,默认是最大最小归一化
threshold:阈值方法选择(非常规意义上的设置阈值),默认是F1AdaptiveThreshold(作用是根据 F1 分数自适应地计算阈值,使得模型能够在精度(Precision)和召回率(Recall)之间取得平衡,从而优化模型性能。)
task:设置任务,默认是SEGMENTATION任务
image_metrics:指定图像级别的评估指标
pixel_metrics:指定像素级别的评估指标
logger:用于传递日志记录工具,说白了就是个日志记录器
default_root_dir:指定存储模型训练和推理结果的目录
- threshold
除了默认的F1AdaptiveThreshold方式,还可以使用 ManualThreshold(0.5)的方式传递具体的值,参考源码定义:
_initialize_thresholds(F1AdaptiveThreshold())
_initialize_thresholds((ManualThreshold(0.5), ManualThreshold(0.5)))
我的理解是此处要么传递一个方法名,比如 F1AdaptiveThreshold,源码中会自己计算并分配好image_threshold与pixel_threshold两个阈值;
要么以tuple的方式 (ManualThreshold(0.5), ManualThreshold(0.5)) 传递 image_threshold与pixel_threshold两个确定的阈值。
当然还有第3种传递threshold的方式,有点复杂,懒得解析;前两个基本够用了。
image_threshold:判断整张图象是否异常的图像级阈值
pixel_threshold:判断像素点是否异常的像素级阈值
- task
SEGMENTATION:分割任务
CLASSIFICATION:分类任务 - image_metrics
参数为None的时候,默认为AUROC、F1Score两个指标 - pixel_metrics
参数为None的时候,默认为AUROC、F1Score两个指标 【仅针对SEGMENTATION任务】
task、image_metrics、pixel_metrics这3个参数有关联
还有其他一些使用事项,后续再继续在本文上补充