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


相关推荐: 多家欧洲企业签署公开信,批评欧盟 AI 法案草案限制产业发展  腾讯汤道生:大模型只是起点,产业落地是AI更大的应用场景  13万个注释神经元,5300万个突触,普林斯顿大学等发布首个完整「成年果蝇」大脑连接组  郭帆谈ChatGPT:电影行业需要创新,否则人工智能将让电影变得平庸  生成式人工智能来了,如何保护未成年人? | 社会科学报  陈根教授:离人形机器人时代还有10年吗?  NVIDIA垄断AI市场90%份额:AMD性能追上80% 软件太不能打  人形机器人概念集体爆发,能买吗?  抢占新赛道 加快机器人产业集聚发展  智能机器人正在彻底改变客户服务  三星加速AR眼镜进程,预计明年上半年亮相  石头扫拖机器人 G20 618 福利来袭:4999 元,超值配件领到手软  谷歌新安卓机器人logo曝光:头更大了  软银、淡马锡、沙特阿美突击入股,“协作机器人第一股”节卡股份:强敌环伺,持续失血是常态  即时 AI再次升级 30秒生成自带动效的网页 生成速度提升100%  马斯克:将来机器人比人类多!特斯拉机器人亮相人工智能大会  2025年深圳举办的SUSECON 创新峰会开始接受报名  AIGC 风潮刮到游戏产业,巨人网络与阿里云达成“游戏 +AI ”合作  长宁这家企业在世界人工智能大会上荣获“蓝鼎奖”  百度文心一言App上架苹果商店,人工智能创作引发热议  发布最新版本的 PICO OS 5.7.0:支持VR头盔录屏并跨平台分享至微信  马斯克预测:特斯拉全自动驾驶将在今年实现 对AI深度变化感到担忧  「模仿学习」只会套话?解释微调+130亿参数Orca:推理能力打平ChatGPT  AI智能室内效果图设计软件效果,确实惊到我了!  谷歌借AI打破十年排序算法封印,每天被执行数万亿次,网友却说是最不切实际的研究?  亚马逊确认今年不会举办 re:MARS 机器人和人工智能大会  禁止艺术家使用 AI 创作《龙与地下城》游戏插图的决定已在 D&D Beyond 生效  AI取代人工先拿教育行业开刀?美版“作业帮”启动裁员  构建人机交互创新模式,微美全息研究AIGC智能交互界面生成技术  AI成政客博弈工具,美国大选真假难辨,律师们的生意来了  创新科学家成功研发FAST激光靶标维护机器人  万兴播爆桌面端上线,支持AI数字人搜索、视频编辑等功能  在心理治疗中用VR技术,治疗成效显著提高  笔神作文声讨学而思AI大模型 称用“爬虫”技术盗取数据  南京制造的国产工业机器人:在外资品牌竞争中突围,年销售1.8万台  鉴智机器人发布基于地平线征程5的标准视觉感知产品  Win11 AI 助手 Windows Copilot 被吐槽:套皮的 Edge 浏览器  洞穴探险神器?可自主导航的单旋翼自旋无人机,效率更高!  美图影像节演讲实录:191次提及AI,发布7款影像生产力工具  硅谷人工智能研究院创始人皮埃罗·斯加鲁菲:Transformer模型演讲  企业软件行业更将被AI全面重构!Moka李国兴:未来优秀组织和个人将一定是善于使用AI生产力的  《上古卷轴5》AI高清材质包优化游戏中所有怪物  AI大模型产品集体奔赴高考考场,教育赛道的讯飞星火能赢吗?  利用AI技术更好地发展农村电商  “聚智启新,‘蓉’力同行” 成都市人工智能产业融通对接会成功举办  美图秀秀发布七款 AI 工具:修图一样修视频、打造电影级上镜脸  小米9号员工李明宣布创业:打造首款安卓桌面机器人  提升工作效率的智能工具:Zapier 让工作变得更简单!  套娃不可取:研究人员证实用AI生成的结果训练AI将导致模型退化  清华系面壁智能开源中文多模态大模型VisCPM :支持对话文图双向生成,吟诗作画能力惊艳 

400 128 6709
E-mail

contact@tlftec.cn

扫一扫,添加微信

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

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