400 128 6709

行业新闻

【论文复现】STFPM-Paddle:基于Paddle实现用于异常检测的师生网络

发布时间:2025-07-29点击次数:
本文介绍基于PaddlePaddle复现的STFPM算法,该算法通过师生网络特征金字塔匹配实现异常检测。教师网络预训练,学生网络学习无异常图像分布,多尺度特征匹配增强鲁棒性。在MvTec数据集实验中,image-level AUC均值0.937,pixel-level AUC均值0.967,优于参考项目,适用于工业缺陷检测等场景。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

【论文复现】stfpm-paddle:基于paddle实现用于异常检测的师生网络 -

STFPM-Paddle:基于Paddle实现用于异常检测的师生网络

1.1 简介

本项目利用 PaddlePaddle 复现了 BMVC 2025 论文:
       

Student-Teacher Feature Pyramid Matching for Anomaly Detection

【论文复现】STFPM-Paddle:基于Paddle实现用于异常检测的师生网络 -        

STFPM算法由预先培训的教师网络和结构相同的学生网络组成。学生网络通过将特征与教师网络中的对应特征相匹配来学习无异常图像的分布。多尺度特征匹配用于增强鲁棒性。这种分层特征匹配使学生网络能够从特征金字塔接收多层次知识的混合,从而允许各种大小的异常检测。 在推理过程中,比较了教师网络和学生网络的特征金字塔。差异越大,异常发生的概率越高。

本项目基于PaddlePaddle框架复现了STFPM,并在MvTec数据集上进行了实验。

论文:

  • [1] Wang, G. and Han, S. and Ding, E. and Huang, D. Student-Teacher Feature Pyramid Matching for Anomaly Detection

项目参考:

  • anomalib
  • STFPM

核心代码:很简单的思想,算teacher模型和student模型的不同尺度的特征差异。

def predict(teacher, student, img_path, transform):
    img = Image.open(img_path).convert('RGB')
    orishape = img.size
    img = transform(img)
    img = img.unsqueeze(0)
    teacher.eval()
    student.eval()
    with paddle.no_grad():
        t_feat = teacher(img)
        s_feat = student(img)
    score_map = 1.
    for j in range(len(t_feat)):
        t_feat[j] = F.normalize(t_feat[j], axis=1)
        s_feat[j] = F.normalize(s_feat[j], axis=1)
        sm = paddle.sum((t_feat[j] - s_feat[j]) ** 2, 1, keepdim=True) # core code
        sm = F.interpolate(sm, size=(64, 64), mode='bilinear', align_corners=False)
        # aggregate score map by element-wise product
        score_map = score_map * sm # layer map
    score_map = score_map.squeeze().cpu().numpy()
    anomaly_map = cv2.resize(score_map, (orishape[0],orishape[1]))
    return anomaly_map

       

1.2 复现精度

本项目在MvTec数据集的测试效果如下表。

Image-Level AUC


Avg Carpet Grid Leather Tile Wood Bottle Cable Capsule Hazelnut Metal Nut Pill Screw Toothbrush Transistor Zipper
论文参考项目anomalib(Pytorch) 0.893 0.954 0.982 0.989 0.949 0.961 0.979 0.838 0.759 0.999 0.956 0.705 0.835 0.997 0.853 0.645
本项目Paddle 0.937 0.972 0.988 0.999 0.992 0.993 1.000 0.933 0.817 1.000 0.984 0.933 0.856 0.772 0.946 0.866

Pixel-Level AUC


Avg Carpet Grid Leather Tile Wood Bottle Cable Capsule Hazelnut Metal Nut Pill Screw Toothbrush Transistor Zipper
论文参考项目anomalib(Pytorch) 0.951 0.986 0.988 0.991 0.946 0.949 0.971 0.898 0.962 0.981 0.942 0.878 0.983 0.983 0.838 0.972
本项目Paddle 0.967 0.992 0.988 0.994 0.959 0.954 0.988 0.954 0.979 0.987 0.974 0.970 0.982 0.989 0.817 0.982

image-level auc的Mean为0.937。 pixel-level auc的Mean为0.967。

1.3 数据集

数据集网站:MvTec数据集

AiStudio上的数据集:MVTec-AD

MVTec AD是MVtec公司提出的一个用于异常检测的数据集。与之前的异常检测数据集不同,该数据集模仿了工业实际生产场景,并且主要用于unsupervised anomaly detection。数据集为异常区域都提供了像素级标注,是一个全面的、包含多种物体、多种异常的数据集

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 123 查看详情 简小派

数据集包含不同领域中的五种纹理以及十种物体,且训练集中只包含正常样本,测试集中包含正常样本与缺陷样本,因此需要使用无监督方法学习正常样本的特征表示,并用其检测缺陷样本。这是符合现实的做法,因为异常情况不可预知并无法归纳。下图分别展示了几类图片的正常样本与缺陷样本,以及缺陷样本中的缺陷特写:

【论文复现】STFPM-Paddle:基于Paddle实现用于异常检测的师生网络 -        

快速开始

In [ ]
%cd /home/aistudio/data/
!tar xvf data116034/mvtec_anomaly_detection.tar.xz
   

2.1 依赖安装

In [ ]
!pip install scikit-image
   

2.2 训练

一共有15个类别,这里需要对15个类别分别训练,最后取平均值作为验证指标.随机数种子42,follow anomalib.

预训练模型在/home/aistudio/data/data138329/output.zip 可以解压到/home/aistudio/STFPM-main/output42目录下进行后续验证部分的直接验证

unzip /home/aistudio/data/data138329/output.zip
mv output42 /home/aistudio/STFPM-main/
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category carpet  --train_val=True --model_s*e_path=./output_42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category grid --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category leather --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category tile --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category wood --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category bottle --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category cable --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category capsule --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category hazelnut --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category metal_nut --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category pill --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category screw --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category toothbrush --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category transistor --epochs 100 --train_val=True --model_s*e_path=./output42 --seed 42
    In [ ]
%cd /home/aistudio/STFPM-main/
!python train.py train --mvtec_ad=/home/aistudio/data/ --category zipper --epochs 100 --train_val=True --model_s*e_path=./output
   

2.3 验证

In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category carpet --checkpoint=output42/carpet/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category grid --checkpoint=output42/grid/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category leather --checkpoint=output42/leather/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category tile --checkpoint=output42/tile/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category wood --checkpoint=output42/wood/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category bottle --checkpoint=output42/bottle/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category cable --checkpoint=output42/cable/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category capsule --checkpoint=output42/capsule/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category hazelnut --checkpoint=output42/hazelnut/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category metal_nut --checkpoint=output42/metal_nut/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category pill --checkpoint=output42/pill/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category screw --checkpoint=output42/screw/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category toothbrush --checkpoint=output42/toothbrush/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category transistor --checkpoint=output42/transistor/best.pdparams
    In [ ]
!python val.py --depth=18 --mvtec_ad=/home/aistudio/data/ --category zipper --checkpoint=output42/zipper/best.pdparams
   

2.4 预测

In [ ]
!python predict.py --checkpoint=output42/carpet/best.pdparams --image_path=/home/aistudio/data/carpet/test/color/000.png --s*e_path=predict.png
   

可以得如下的类似结果:

【论文复现】STFPM-Paddle:基于Paddle实现用于异常检测的师生网络 -    

2.5 导出

In [ ]
!python export_model.py --depth 18 --img_size=256 --model_path=output/carpet/best.pdparams --s*e_dir=./output
   

2.6 推理

In [ ]
!python infer.py --use_gpu=True --model_file=output/model.pdmodel --input_file=/home/aistudio/data/carpet/test/color/000.png --params_file=output/model.pdiparams
   

2.7 TIPC

注意:本部分为论文复现赛内容,只是为了验证整个项目的训练推理的正确性。学习目的可以不进行这部分的运行,即这部分非项目必要部分。

首先安装auto_log,需要进行安装,安装方式如下: auto_log的详细介绍参考https://github.com/LDOUBLEV/AutoLog。

git clone https://github.com/LDOUBLEV/AutoLog
cd AutoLog/
pip3 install -r requirements.txt
python3 setup.py bdist_wheel
pip3 install ./dist/auto_log-1.2.0-py3-none-any.whl
       

进行TIPC:

bash test_tipc/prepare.sh test_tipc/configs/STFPM/train_infer_python.txt 'lite_train_lite_infer'bash test_tipc/test_train_inference_python.sh test_tipc/configs/STFPM/train_infer_python.txt 'lite_train_lite_infer'
   

复现心得和相关信息

复现心得

工业缺陷检测是本次论文复现赛新加入的赛道,我也是第一次复现相关论文。感觉很有意思,不像其他领域的算法需要长时间的训练,这个领域基本上都是无监督的方法。对GPU的需求也很友好,也很实用。这篇论文用教师网络和学生网络的特征金字塔的特征差异为基本思路(代码也就几行),差异越大,异常发生的概率越高,很朴实有效。

相关信息

信息 描述
作者 xbchen
日期 2025年4月
框架版本 PaddlePaddle==2.2.1
应用场景 异常检测
硬件支持 GPU、CPU

本项目为第六届论文复现赛项目,为新加入的异常检测赛道相关算法。

以上就是【论文复现】STFPM-Paddle:基于Paddle实现用于异常检测的师生网络的详细内容,更多请关注其它相关文章!


# 相关信息  # 种植体推广营销策划  # 南山seo教程  # 吴忠营销短视频推广  # 日料食材电商网站推广  # 廊坊网站建设课程代码  # 小企业网站建设推广方案  # 搜狗营销推广好干嘛的呢  # 济南seo公司优选火星  # 珀莱雅营销推广评价  # 企业网站建设培训学习  # 都是  # 官网  # 越高  # 越大  # python  # 均值  # 这部  # 也很  # 一言  # 中文网  # fig  # whee  # udio  # follow  # igs  # red  # ai  # git 


相关栏目: 【 行业新闻62819 】 【 科技资讯67470


相关推荐: 华为云盘古大模型3.0发布 AI云服务同时上线:200亿亿次性能  宇宙探索下一阶段,机器代替人类,AI会在太空探索中取代人类吗?  麦肯锡:到 2045 年左右,将有 50% 工作被 AI 接管  美的推出 AI 双视精准避障的自动集尘扫拖机器人 V12,售价仅为2999元  软银、淡马锡、沙特阿美突击入股,“协作机器人第一股”节卡股份:强敌环伺,持续失血是常态  中国联通发布图文AI大模型,可实现以文生图、视频剪辑  工业机器人及非标自动化设备集成服务提供商  如何用Transformer BEV克服自动驾驶的极端情况?  关于开展“与AI共创未来”——2025年全国青少年人工智能创新实践活动的通知  时间、空间可控的视频生成走进现实,阿里大模型新作VideoComposer火了  苹果推出全新沉浸式 AR 体验应用“Deep Field”  “踩油门,也要会踩刹车” 互联网企业高管谈人工智能发展  腾讯AI首次模拟拼接三星堆文物,工作取得阶段性的成果  羊驼家族大模型集体进化!32k上下文追平GPT-4,田渊栋团队出品  特斯拉门店可能启动机器人卖车?也许不是你想的那样  微软为 AI 初学者推出免费网课:为期 12 周,共 24 节课  华为云天筹AI求解器荣获世界人工智能大会最高奖  助力人工智能产业高质量发展 龙岗区算法训练基地正式启用  插画师对AI绘画软件的态度是怎样的?  人工智能时代 数字文明对话向“尼”走来  大疆 DJI Mini 4 Pro 无人机曝光:流线设计,有望迎来功能性提升  尼康尼克尔 Z 180-600mm f/5.6-6.3 VR 镜头发布,12499 元  AI生成新闻网站数量激增,正在疯狂赚取广告收入  陈根教授:离人形机器人时代还有10年吗?  可按用户语气自动回复消息,Zoom 推出基于生成式 AI 的新功能  物联网“僵尸网络DDos攻击”增长惊人,威胁全球电信网络  甲骨文与Cohere合作为企业提供生成式人工智能服务  构建人机交互创新模式,微美全息研究AIGC智能交互界面生成技术  GPT-4 模型架构泄露:包含 1.8 万亿参数、采用混合专家模型  联想举办2025创新开放日,展出260余项算力及AI产品技术  华为即将推出HarmonyOS 4,再度领先行业的AI技术  微软宣布为 Azure AI 添加男性声线,增强文本转语音功能  美军AI无人机“误杀”操作员,人工智能要在军事领域毁灭人类?  构建数字文旅新高地!洛阳涧西区开启元宇宙时代  人手一部「*」!视频版Midjourney免费可用,一句话秒生酷炫大片惊呆网友  联合国秘书长称支持建立全球人工智能监管机构  鸿蒙智能座舱的AI大模型革新,引领智能座舱领域的变革吗?  清华朱军团队新作:使用4位整数训练Transformer,比FP16快2.2倍,提速35.1%,加速AGI到来!  小米发布CyberDog2 - 他们的第二代仿生四足机器人展示  全国体育人工智能大会举办,专家聚焦体育人工智能领域人才培养  AI创作广告文案等同2.47年工作经验,且消费者无法区分|AI营销前沿  联想戴炜:以全栈AI加速CT与IT融合,共建高质量算力网络  360发布AI数字人广场,可同孙悟空、爱因斯坦等古今中外角色对话  工信部信通院发布《2025大模型和AIGC产业图谱》 360智脑覆盖全产业链  自己动手使用AI技术实现数字内容生产  到中国科技馆体验“一滴油的奇妙旅行”,线上元宇宙展厅同步开启  阿里达摩院向公众免费开放100项AI专利许可  国内AI大模型“安卓时刻”到来!阿里云通义千问免费、开源、可商用  聚焦人工智能大模型、AIGC 徐汇十余场重磅论坛等你来  厂商陆续公布AI进展 完美世界游戏展示复合应用AI in GamePlay 

400 128 6709
E-mail

contact@tlftec.cn

扫一扫,添加微信

©  云南淘乐房科技有限公司 版权所有  滇ICP备2025071560号  

云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司 云南淘乐房科技有限公司