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技术改变*,新骗局来袭,*成功率接近100%  华为发布大模型时代AI存储新品  从医疗康复外骨骼到通用人形机器人,傅利叶智能推动核心技术升级  IBM CEO克里希纳:人工智能潜在创新无法被监管  扎克伯格吐槽苹果Vision Pro:社交落后Meta太多,无法建设元宇宙  第四范式“式说”大模型入选《2025年通用人工智能创新应用案例集》  微软大牛加入ZOOM,AI人才大战打响  微软bing聊天推出AI购物工具 可进行比价并查看历史最低价  苹果推出全新沉浸式 AR 体验应用“Deep Field”  石头扫拖机器人 G20 618 福利来袭:4999 元,超值配件领到手软  兆讯传媒率先全面拥抱AI 数智广告内容焕发新生机  NTU、上海AI Lab整理300+论文:基于Transformer的视觉分割最新综述出炉  再也不怕「视频会议」尬住了!谷歌CHI顶会发布新神器Visual Captions:让图片做你的字幕助手  七大主流AI企业包括OpenAI、谷歌等联合承诺:引入水印技术,并允许第三方审核AI内容  2025WRC世界机器人大赛锦标赛(烟台)收官!斯坦星球勇夺VEX赛项冠亚军!  小米9号员工李明宣布创业:打造首款安卓桌面机器人  助力人工智能产业高质量发展 龙岗区算法训练基地正式启用  掌阅科技申请阅爱聊商标 掌阅科技申请AI相关商标  如何利用AI工具写好本科论文:科技助你一臂之力  眼球反射解锁3D世界,黑镜成真!马里兰华人新作炸翻科幻迷  微软 Copilot 团队主管呼吁用户与 AI 交流时应使用恰当的礼貌用语  微盟宣布联合腾讯云共建行业大模型:加快激活AI大模型智能应用  陈丹琦ACL学术报告来了!详解大模型「*」数据库7大方向3大挑战,3小时干货满满  网易加速行业AI大模型应用,将覆盖100多个应用场景  家电行业观察:AI加持下,全屋智能将成为智能家电未来?  AI成政客博弈工具,美国大选真假难辨,律师们的生意来了  李开复官宣新公司「零一万物」,进军 AI 2.0  以计算机视觉技术为基础的库存管理如何改革零售行业  重塑未来生活的五项技术趋势  MiracleVision视觉大模型上线时间  美图公司影像节或发布AI设计新品  Intel酷睿Ultra发布会官宣!迈向全新的AI时代  机器人加速!稀土永磁也被带火,持续性如何?  定义人工智能的十个关键术语  阿里大文娱CTO郑勇:生成式AI将引发内容行业巨变,*制作机会挑战并存  给小朋友最好的科技礼物:乐天派桌面机器人  如布AI口袋学习机S12 将亮相综艺节目《好样的!国货》  AI工具助力公司实施每周4.5天工作制,带来巨大效益  售价14.99万起!小米汽车部分信息疑遭AI曝光,内部人士回应:网传图片明显经过处理,不可轻信  人工智能在重症监护室的未来  70年前他本想逃避考试,却影响了整个互联网  解决导航“最后50米”难题 高德地图升级AR步行导航找终点功能  物联网“僵尸网络DDos攻击”增长惊人,威胁全球电信网络  Unity发布Sentis和Muse AI工具,助力创作游戏和3D内容  特斯拉门店可能启动机器人卖车?也许不是你想的那样  如何利用物联网技术提高企业生产线智能化水平,提升生产效率  Meta 为打造元宇宙不惜下血本:VR 开发者年薪高达百万美元  人工智能领域,突破难题:国产大模型“无源之水”问题得到解决。  为AI而服务设计:构建以人为本的AI创新方法  国产医疗企业的人工智能 

400 128 6709
E-mail

contact@tlftec.cn

扫一扫,添加微信

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

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