ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Anomalib 实验管理实战:使用 MLflow Logger 跟踪异常检测训练与评估全流程

Anomalib 实验管理实战:使用 MLflow Logger 跟踪异常检测训练与评估全流程 Anomalib 实验管理实战使用 MLflow Logger 跟踪异常检测训练与评估全流程【免费下载链接】anomalibAn anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference.项目地址: https://gitcode.com/GitHub_Trending/an/anomalib本文以 Anomalib 官方 notebookexamples/notebooks/05_loggers为主线系统讲解如何在异常检测项目中接入 MLflow 实验管理从安装依赖、启动 Tracking Server、配置AnomalibMLFlowLogger到完成训练、测试、图像记录、模型保存与加载的完整闭环。读完本文你将掌握在 Python API 与命令行两种模式下使用 MLflow 追踪异常检测实验的方法并能结合源码理解其底层实现原理。一、为什么异常检测需要实验管理异常检测模型的迭代通常伴随大量超参数组合与数据集实验骨干网络选择、阈值策略、损失函数权重、数据增强方案等。若缺乏统一记录实验的可复现性与横向对比会变得非常困难。Anomalib 为此在 src/anomalib/loggers 中内置了对四类实验管理/可视化后端的一等支持AnomalibCometLoggerComet MLAnomalibMLFlowLoggerMLflowAnomalibTensorBoardLoggerTensorBoard默认AnomalibWandbLoggerWeights Biases本文聚焦其中的MLflow Logger它对应 05_loggers notebook官方笔记本将其组织为 11 个递进环节Installation安装Run MLFlow Server启动服务Dataset Directory数据集目录Imports导入Data Module数据模块Model模型MLFlow Logger日志器Training训练Testing测试Demo Track Figure演示图像记录Save Model to MLFLow保存模型Load Model from MLFlow加载模型下文按此脉络逐节展开并用仓库源码与示例文件深化每个环节。二、Installation安装 MLflow 依赖Anomalib 将 MLflow 声明为可选依赖。在 pyproject.toml 的[project.optional-dependencies]中loggers分组统一收纳了所有日志后端loggers [ comet-ml3.31.7, gradio4, tensorboard, wandb, mlflow 3.15.0, ]因此按 notebook 的第一步安装有两种等价方式# 方式一只安装 mlflow uv pip install mlflow # 方式二安装 anomalib 的全部日志后端 uv pip install anomalib[loggers]提示仓库还在 pyproject.toml 中为 MLflow 追加了一条override-dependenciescryptography50.0.0用于规避 MLflow 3.15.1 对cryptography50的上限约束使用uv安装时会被自动应用。值得一提的容错设计若环境中未安装 mlflowsrc/anomalib/loggers/mlflow.py 会兜底构造一个 Dummy MLFlowLogger 占位类在实例化时抛出明确的安装指引mlflow is not installed. Please install it using: uv pip install mlflow or uv pip install anomalib[loggers]从源码结构看这是一种延迟报错策略——只有真正用到 MLflow logger 时才提示缺失避免未安装可选依赖的用户在导入anomalib.loggers时直接崩溃。三、Run MLFlow Server启动 Tracking ServerMLflow 的核心是Tracking Server所有实验的指标、参数、产物artifact都会写入它管理的实验仓库。notebook 的第二步是启动本地服务mlflow ui默认情况下该命令会监听http://127.0.0.1:5000并将实验数据写入本地./mlruns目录。之后可以通过浏览器访问该地址查看所有 run 的指标曲线、参数与产物。Anomalib 的 logger 通过tracking_uri与 server 对接其默认解析逻辑位于 src/anomalib/loggers/mlflow.pytracking_uri: str | None os.getenv(MLFLOW_TRACKING_URI), save_dir: str | None ./mlruns,也就是说tracking_uri的取值优先级是显式传入的tracking_uri参数环境变量MLFLOW_TRACKING_URI兜底为file:save_dir本地文件仓库默认./mlruns。这意味着你完全可以不启动独立 Server让 MLflow 以本地文件模式运行但当需要多台机器汇总实验、或多人协作共享实验结果时应启动 Server 并把tracking_uri指向http://host:5000。四、Dataset Directory 与 Data Module准备数据Notebook 的第三、四、五步分别处理数据集目录、导入语句、数据模块。在 Anomalib 中数据加载统一走anomalib.data提供的 DataModule 抽象以官方示例examples/api/04_advanced/loggers.py中的 MVTec AD 为例from pathlib import Path from anomalib.data import MVTecAD datamodule MVTecAD( rootPath(./datasets/MVTecAD), categorybottle, )数据模块会负责数据集下载/定位、训练/验证/测试划分、预处理与变换等。也可以按 02_data 的方式使用本地Folder数据模块加载自备图片目录from anomalib.data import Folder datamodule Folder( rootPath(./datasets/my_data), normal_dirgood, # 正常样本目录 abnormal_dirdefect, # 异常样本目录 normal_test_dirNone, )五、Model选择异常检测模型Notebook 第六步为选择模型。Anomalib 提供了 30 种 SOTA 模型配置见 examples/configs/model如Patchcore、Padim、EfficientAD、Fastflow、Stfpm等。以示例中的 PatchCore 为例from anomalib.models import Patchcore model Patchcore()模型实例与 DataModule 随后都会作为Engine.fit()的入参与 logger 共同参与一次完整的实验。六、MLFlow Logger核心配置深入Notebook 第七步是创建 MLflow logger。Anomalib 提供的是增强版AnomalibMLFlowLoggersrc/anomalib/loggers/mlflow.py它同时继承ImageLoggerBasesrc/anomalib/loggers/base.pyanomalib 自定义的图像记录统一接口PyTorch Lightning 原生的MLFlowLogger。构造签名与默认值如下AnomalibMLFlowLogger( experiment_name: str | None anomalib_logs, run_name: str | None None, tracking_uri: str | None os.getenv(MLFLOW_TRACKING_URI), save_dir: str | None ./mlruns, log_model: Literal[all] | bool | None False, prefix: str | None , **kwargs, # 例如 tags、artifact_location 等 )各参数含义与 mlflow.py docstring 一致参数默认值说明experiment_nameanomalib_logs实验名称未提供时使用默认名run_nameNonerun 名称内部存储为mlflow.runName标签若tags中已存在同名标签会被run_name覆盖tracking_uri环境变量MLFLOW_TRACKING_URI否则file:save_dir本地或远程 tracking server 地址save_dir./mlruns本地实验保存目录当提供tracking_uri时不生效log_modelFalse是否将ModelCheckpoint产生的 checkpoint 作为 artifact 记录all表示训练期间逐个记录True表示训练结束时记录save_top_k -1时例外会训练期间全部记录False表示不记录prefix追加到指标键名前的字符串前缀**kwargs—透传给MLFlowExperiment的额外参数如tags、artifact_locationPython API 中的典型用法同 examples/api/04_advanced/loggers.pyfrom anomalib.engine import Engine from anomalib.loggers import AnomalibMLFlowLogger mlflow_logger AnomalibMLFlowLogger( experiment_nameanomalib, tracking_urilogs/mlflow, ) engine Engine(loggermlflow_logger, max_epochs1)若使用命令行可通过--trainer.logger及其子参数完成等价配置examples/cli/04_advanced/loggers.shanomalib train \ --model patchcore \ --trainer.logger mlflow \ --trainer.logger.experiment_name anomalib \ --trainer.logger.tracking_uri logs/mlflow七、Training 与 Testing训练与评估Notebook 第八、九步依次执行训练与测试对应Engine的两个核心方法engine.fit(modelmodel, datamoduledatamodule) # 训练 engine.test(modelmodel, datamoduledatamodule) # 测试训练过程中Lightning 的Trainer会自动将每个 step 的损失、学习率、验证指标如 pixel/Image 级 AUROC、F1 等推送给AnomalibMLFlowLogger写入当前 run测试阶段则记录最终评估指标。所有指标键名会带上prefix前缀若配置了的话。提示同一个实验可组合多个 logger。例如同时输出到 TensorBoard 与 MLflowexamples/api/04_advanced/loggers.pyEngine(logger[logger_a, logger_b], ...)。八、Demo Track Figure记录可视化图像Notebook 第十步演示了记录一张演示轨迹图。这正是AnomalibMLFlowLogger相比原生 Lightning MLFlowLogger 的关键增强——图像记录接口add_imagesrc/anomalib/loggers/mlflow.pyrank_zero_only def add_image(self, image: np.ndarray | Figure, name: str | None None, **kwargs) - None: if isinstance(image, Figure): self.experiment.log_figure(run_idself.run_id, figureimage, artifact_filename, **kwargs) else: self.experiment.log_image(run_idself.run_id, imageimage, artifact_filename)该接口有两个要点同时支持 numpy 数组与 matplotlib Figure二者分别路由到 MLflow 的log_image与log_figure。Figure场景下多余的**kwargs会透传给log_figurenumpy 数组场景下**kwargs不生效。rank_zero_only装饰器在分布式训练DDP 等多进程场景下只有 rank 0 进程执行图像记录避免同一张图被重复写入。该接口的抽象契约定义在 src/anomalib/loggers/base.py 的ImageLoggerBase.add_image四个 loggerComet/MLflow/TensorBoard/WandB均实现它因此自定义可视化代码可以以统一方式跨后端复用import numpy as np from anomalib.loggers import AnomalibMLFlowLogger logger AnomalibMLFlowLogger(experiment_nameanomalib) image np.random.rand(256, 256, 3) # 示意实际应传可视化结果图 logger.add_image(imageimage, namedemo_track)在 Anomalib 中这类可视化图通常来自Visualizer见 src/anomalib/visualization例如输入图像与分割掩膜叠加的结果图。九、Save Model to MLFlow保存模型到实验仓库Notebook 第十一步涉及模型保存。在 Anomalib 中模型保存主要有两条路径路径一checkpoint 自动记录log_modelModelCheckpoint在训练中产出的.ckpt文件可作为 MLflow artifact 入库。按前文参数表logger AnomalibMLFlowLogger( experiment_nameanomalib, log_modelall, # 训练期间逐个记录 checkpoint )路径二显式记录本地导出产物Anomalib 的导出模块src/anomalib/deploy/export.py支持将模型导出为 Torch、ONNX、OpenVINO 等格式配合 CLI 可在训练时一并导出examples/cli/04_advanced/loggers.shanomalib train \ --model patchcore \ --trainer.logger mlflow \ --trainer.logger.experiment_name anomalib \ --trainer.default_root_dir results \ --export.format onnx \ --export.export_root exported_models之后可调用 MLflow 的log_artifact将导出的模型文件记录到当前 run作为实验产物集中归档。十、Load Model from MLFlow从实验仓库恢复模型Notebook 第十二步为从 MLflow 加载模型。在 Anomalib 流程中推荐通过checkpoint 恢复推理完成从 MLflow Tracking UI 或 API 定位目标 run下载其 checkpoint artifact或记录run_id使用Engine.test(ckpt_path...)或推理脚本加载。Anomalib 提供了现成的推理入口tools/inference例如 Torch 推理脚本tools/inference/torch_inference.py以及Engine.predict()接口可将从 MLflow 取回的.ckpt直接用于对新样本的异常打分与可视化。一个完整的闭环可归纳为训练(记录指标/图像/checkpoint) → MLflow 实验仓库(归档) → 取回 checkpoint → 测试/推理 → 新的迭代十一、从源码看 MLflow 集成设计最后从源码层面总结 Anomalib MLflow 集成的设计要点多态继承mlflow.py 的class AnomalibMLFlowLogger(ImageLoggerBase, MLFlowLogger)将图像记录能力与Lightning 原生指标记录能力合二为一对上层Engine完全透明可选依赖容错通过module_available(mlflow)条件导入mlflow.py未安装时以占位类延迟报错统一导入入口anomalib.loggers包src/anomalib/loggers/init.py在依赖齐全时导出全部四个 logger否则打印安装提示To use any logger install it using anomalib install -vrank 安全add_image仅 rank 0 执行保证分布式训练下 artifact 不重复mlflow.py。十二、小结围绕 05_loggers notebook 的完整链路本文覆盖了从安装、启动 MLflow Server、配置AnomalibMLFlowLogger到训练、测试、图像记录、模型保存与加载的每一步。你可以在此基础上将 MLflow 与 Anomalib 的多 logger 组合TensorBoard/WandB/Comet配合使用并结合 examples/api/04_advanced/loggers.py 与 examples/cli/04_advanced/loggers.sh 两个完整示例把实验管理真正落地到自己的异常检测项目中。【免费下载链接】anomalibAn anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference.项目地址: https://gitcode.com/GitHub_Trending/an/anomalib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表