资讯动态

Anomalib 中的 CFA 模型:耦合超球面特征适配实现目标导向异常定位实战指南

发布时间:2026/9/17 1:59:51 来源:尧图企业网站定制
Anomalib 中的 CFA 模型耦合超球面特征适配实现目标导向异常定位实战指南【免费下载链接】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/anomalibCFACoupled-hypersphere-based Feature Adaptation耦合超球面特征适配是一种面向目标数据集做特征适配的异常分割模型在 Anomalib 中以anomalib.models.Cfa提供完整实现。本文基于 模型文档 展开结合仓库源码深入讲解其核心原理、配置参数、训练/推理流程与 MVTec AD 基准表现帮助你快速上手并在自己的数据集上复现与调优。模型概览与核心原理CFA 由 Lee、Lee 与 Song 于 2022 年提出论文 arXiv:2206.04325模型类型为Segmentation分割。与直接使用通用预训练特征的方案不同CFA 的核心思想是让特征适应目标数据集本身从而提升异常的可区分度。其整体由两大组件构成详见 架构图可学习的 Patch Descriptor补丁描述器从预训练 CNN 提取的多尺度特征中学习并嵌入目标导向特征与目标数据集规模无关的可扩展 Memory Bank记忆库存储正常样本的典型特征规模不随数据集增大而线性膨胀。配合预训练 CNNCFA 采用迁移学习增大正常特征密度使异常特征更易被区分。训练时正常特征被约束在耦合超球面内吸引力损失L_att异常特征被推离超球面排斥力损失L_rep测试时则通过最近邻搜索计算每个 patch 的异常分数生成像素级定位结果。仓库实现结构CFA 在 Anomalib 中的实现位于 src/anomalib/models/image/cfa/由以下模块组成torch_model.py底层 PyTorch 模型CfaModel包含特征提取器、描述器、记忆库与距离计算lightning_model.pyPyTorch Lightning 模块Cfa负责训练/验证流程、优化器与预处理器配置loss.pyCfaLoss损失函数实现吸引力与排斥力双项损失anomaly_map.pyAnomalyMapGenerator将距离张量转换为平滑的异常热力图。特征提取与多尺度融合CfaModel使用torchvision的create_feature_extractor从预训练骨干网络提取特征。根据 get_return_nodes各骨干网络返回以下层骨干网络返回节点resnet18 / wide_resnet50_2layer1,layer2,layer3vgg19_bnfeatures.25,features.38,features.52efficientnet_b5未实现触发NotImplementedErrorDescriptor网络首先对每层特征做avg_pool2d池化再将不同层特征通过双线性插值对齐到同一分辨率后沿通道拼接最后经过一个CoordConv2d1×1 卷积层完成降维嵌入。CoordConv 额外注入归一化的 x/y 坐标通道可选径向通道r使描述器能感知 patch 的空间位置这一点在细粒度异常定位中尤为关键。记忆库初始化与压缩记忆库在训练开始前通过 initialize_centroid 初始化遍历训练集仅正常样本提取目标导向特征并计算均值作为初始质心随后按gamma_c参数决定是否用 K-Means 压缩gamma_c 1不压缩保留全部特征gamma_c 1以scale[0]*scale[1] // gamma_c为聚类数执行 K-Means将记忆库压缩为聚类中心。该机制保证了记忆库规模与数据集大小解耦正是可扩展记忆库的源码级体现。若在调用forward时记忆库尚未初始化维度为 0模型会抛出ValueError提示先运行initialize_centroid。训练流程lightning_model.py 中的Cfa类将CfaModel与CfaLoss组装为 Lightning 模块on_train_start调用initialize_centroid初始化记忆库质心training_step前向得到距离张量后计算CfaLossbackward由于计算图需求使用loss.backward(retain_graphTrue)configure_optimizers使用 AdamW 优化器学习率1e-3、权重衰减5e-4、amsgradTruetrainer_argumentsgradient_clip_val0禁用梯度裁剪、num_sanity_val_steps0跳过验证 sanity 检查learning_type返回LearningType.ONE_CLASS表明这是一类分类one-class任务。损失函数与异常图生成CfaLoss 由两项组成最终乘以 1000 放大吸引力损失l_att取前num_nearest_neighbors个最近邻距离与radius²比较超出半径的部分被惩罚将正常特征拉入超球面排斥力损失l_rep取后num_hard_negative_features个硬负样本距离小于radius² - 0.1的部分被惩罚将困难异常特征推出超球面。AnomalyMapGenerator 在推理阶段对距离张量开方后取最近邻距离用softmin加权得到 patch 分数重排为特征图尺度后上采样回原图尺寸最后用GaussianBlur2d(sigma4)平滑生成热力图图像级分数取异常图最大值torch.amax。快速开始训练与推理命令行方式在 Anomalib 中训练 CFA 最直接的方式是 CLIanomalib train --model Cfa --data MVTecAD --data.category category其中category为 MVTec AD 数据集的类别名如bottle、cable、screw等。该命令会自动完成数据下载、预处理、训练与评估。Python API 方式lightning_model.py 给出了等价的 Python 写法from anomalib.data import MVTecAD from anomalib.models import Cfa from anomalib.engine import Engine # 初始化模型与数据 datamodule MVTecAD() model Cfa() # 使用 Engine 训练 engine Engine() engine.fit(modelmodel, datamoduledatamodule) # 获取预测结果 predictions engine.predict(modelmodel, datamoduledatamodule) # 按论文设置配置预处理器先缩放到 256x256再做 224x224 中心裁剪 pre_processor Cfa.configure_pre_processor( image_size(256, 256), center_crop_size(224, 224) )注意CLI 方式执行的是文档给出的标准训练命令configure_pre_processor用于在自定义流程中复现论文的预处理设置。预处理配置细节Cfa.configure_pre_processor封装了论文中的预处理方式默认将图像Resize至256x256antialiasTrue若指定center_crop_size则额外执行CenterCrop如 224×224并在裁剪尺寸超过图像尺寸时抛出ValueError随后使用 ImageNet 统计值mean[0.485, 0.456, 0.406]、std[0.229, 0.224, 0.225]归一化。配置参数详解官方配置示例位于 examples/configs/model/cfa.yaml可直接作为训练配置文件的模板model: class_path: anomalib.models.Cfa init_args: backbone: wide_resnet50_2 gamma_c: 1 gamma_d: 1 num_nearest_neighbors: 3 num_hard_negative_features: 3 radius: 1.0e-05 trainer: max_epochs: 30 callbacks: - class_path: lightning.pytorch.callbacks.EarlyStopping init_args: patience: 5 monitor: pixel_AUROC mode: max各参数含义如下默认值与 lightning_model.py 中的构造函数一致参数默认值说明backbonewide_resnet50_2骨干网络可选resnet18、wide_resnet50_2、vgg19_bnefficientnet_b5未实现gamma_c1质心记忆库损失权重参数大于 1 时启用 K-Means 压缩记忆库gamma_d1距离损失权重参数同时决定描述器输出通道数dim // gamma_dnum_nearest_neighbors3异常分数计算与吸引力损失所用的最近邻数量num_hard_negative_features3排斥力损失使用的硬负样本特征数量radius1e-5超球面决策边界初始半径可学习参数torch.ones(1, requires_gradTrue) * radius配置文件的 trainer 部分还演示了早停回调以pixel_AUROC为监控指标、mode: max最大化、patience: 5这与 README 中使用早停patience5产出基准数据的说明一致。参数调优建议radius源码中半径是可学习参数但初始值影响收敛起点若训练初期损失异常可尝试调整num_nearest_neighbors / num_hard_negative_features二者之和决定了损失中参与 top-k 采样的距离数量值过小可能导致负样本挖掘不足gamma_c在显存受限或数据集较大时调大gamma_c启用 K-Means 压缩可显著减小记忆库规模。MVTec AD 基准表现README 报告了 seed0 下、使用早停patience5在 MVTec AD 15 个类别上的完整结果涵盖图像级 AUC、图像 F1、像素级 AUC、像素级 AUPRO 与像素 F1 五类指标分别评测ResNet-18与Wide ResNet50两种骨干。图像级指标Image-Level AUC / F1类别AUC (ResNet-18)AUC (WRN50)F1 (ResNet-18)F1 (WRN50)Bottle0.9910.9980.9830.984Cable0.9470.9790.9070.962Capsule0.8580.8720.9380.946Carpet0.9530.9780.9560.961Grid0.9470.9610.9460.957Hazelnut0.9951.0000.9961.000Leather0.9990.9900.9950.973Metal_nut0.9320.9950.9580.984Pill0.8870.9460.9200.952Screw0.6250.7030.8580.855Tile1.0000.9991.0000.994Toothbrush0.9941.0000.9841.000Transistor0.8950.9570.7950.907Wood1.0000.9941.0000.983Zipper0.9190.9670.9490.975Average0.9300.9560.9460.962像素级指标Pixel AUC / AUPRO / F1类别AUC (R18)AUC (WRN50)AUPRO (R18)AUPRO (WRN50)F1 (R18)F1 (WRN50)Bottle0.9860.9890.9400.9470.7510.789Cable0.9840.9880.9020.9400.6610.674Capsule0.9870.9890.9460.9390.5070.500Carpet0.9700.9800.9100.9190.5490.578Grid0.9730.9540.9110.8620.3160.280Hazelnut0.9870.9850.9310.9300.5980.561Leather0.9920.9890.9740.9550.4610.378Metal_nut0.9810.9920.9120.9310.8190.874Pill0.9810.9880.9350.9470.6890.679Screw0.9730.9790.8840.9060.2120.301Tile0.9780.9850.8920.9060.7400.768Toothbrush0.9900.9910.8950.8990.6090.627Transistor0.9640.9770.8950.9300.5700.666Wood0.9640.9740.8980.8930.5640.627Zipper0.9780.9900.9250.9580.5610.668Average0.9790.9830.9170.9240.5740.598结果解读Wide ResNet50 整体更优图像级 AUC 平均 0.956vs 0.930、像素级 AUC 平均 0.983vs 0.979、像素级 AUPRO 平均 0.924vs 0.917说明更强的骨干能带来一致的定位精度收益类别差异显著Screw的图像级 AUC 最低0.625/0.703而Tile、Wood、Hazelnut、Toothbrush等类别接近或达到满分这与目标纹理复杂度、缺陷形态有关早停影响README 明确指出所有数字均在早停patience5下产生增大 patience 可能获得更高指标复现或调优时可据此调整。README 同时提供了三张样例可视化结果图 1、结果图 2、结果图 3每张图按列展示原始图像、真实掩码、预测热力图、预测掩码与分割叠加结果直观验证了 CFA 的像素级定位能力。引用复现或使用 CFA 时可引用论文article{lee2022cfa, title{CFA: Coupled-hypersphere-based Feature Adaptation for Target-Oriented Anomaly Localization}, author{Lee, Sungwook and Lee, Seunghyun and Song, Byung Cheol}, journal{arXiv preprint arXiv:2206.04325}, year{2022} }原始参考实现可查阅 sungwool/cfa_for_anomaly_localization外部仓库供对照研究使用。小结本文从 Anomalib 的 CFA 实现出发系统梳理了耦合超球面特征适配的原理、CfaModel/Cfa/CfaLoss/AnomalyMapGenerator的源码级分工、CLI 与 Python 两种训练方式、全部超参数含义以及 MVTec AD 上的五类基准指标。如果你想快速验证效果直接运行anomalib train --model Cfa --data MVTecAD --data.category category若要追求更高指标可从增大早停 patience、更换wide_resnet50_2骨干或调整gamma_c/radius入手。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价