基于半监督算法的工业图像缺陷检测方法:MemSeg

news2024/12/23 12:33:57

来源:投稿 作者:橡皮
编辑:学姐

论文:https://arxiv.org/ftp/arxiv/papers/2205/2205.00908.pdf

代码:https://github.com/TooTouch/MemSeg

主要贡献

  • 提出了一个精心设计的异常模拟策略,用于模型的自监督学习,该策略整合了目标前景、纹理和结构异常三个方面。

  • 提出了具有更高效的特征匹配算法的记忆模块,并创新性地在U-Net结构中引入了正常模式的记忆信息来辅助模型学习。

  • 通过以上两点,并结合多尺度特征融合模块和空间注意力模块,有效地将半监督式异常检测简化为端到端的语义分割任务,使半监督式图像表面缺陷检测更加灵活。

  • 通过大量的实验验证,MemSeg在表面缺陷检测和定位任务中具有较高的准确性,同时更好地满足了工业场景下的实时性要求。

背景

工业场景中产品表面异常的检测对于工业智能的发展至关重要。表面缺陷检测是一个定位图像中异常区域的问题,如划痕和污点。

基于半监督的方法,大多数图像表面缺陷检测模型试图有效探索正常样本的一般模式。但由于CNN强大的泛化能力,异常区域也可能在推理阶段被正确重建,这显然违反了重建模型的基本假设。

基于嵌入的方法显示出比基于重建的方法更好的异常检测性能,但在推理阶段需要进行复杂的特征匹配操作,这给模型的推理带来了过多的计算成本。

鉴于现有方法的缺陷,「本文提出了基于内存的端到端分割网络(MemSeg)来完成产品表面的缺陷检测。」模型能端到端确定图像中的异常区域。同时,模型不完全依赖预训练的模型进行特征提取,缓解了源域和目标域之间分布不一致的问题。

方法概览

MemSeg基于U-Net架构,使用预训练的ResNet18作为编码器。从差异和共性的角度出发,MemSeg引入了模拟异常样本和记忆模块,以更有导向性的方式辅助模型学习,从而以端到端的方式完成了半监督的表面缺陷任务。同时,为了将记忆信息与输入图像的高层特征充分融合,MemSeg引入了多尺度特征融合模块(MSFF模块)和新颖的空间注意力模块,大大提升了异常定位的模型精度。

3.1 异常模拟策略

在工业场景中,异常现象以各种形式出现,在数据采集时不可能涵盖所有的异常现象,这限制了使用监督学习方法进行建模。然而,在半监督框架下,只使用正常样本而不与非正常样本进行比较,是不足以让模型学习到什么是正常模式的。在本文设计了一个更有效的策略来模拟异常样本,并在训练过程中引入异常样本,以完成自监督学习。MemSeg通过比较非正常模式来总结正常样本的模式,以减轻半监督学习的弊端。如图所示,本文提出的异常模拟策略主要分为三个步骤。

  • 第一步,掩模图像M使用Perlin噪声和目标前景生成;

  • 第二步,在噪声图像I_n中提取由M定义的ROI,生成噪声前景图像 ;

  • 第三步,将噪声前景图像叠加到原始图像上,得到模拟的异常图像。

3.1 异常模拟策略步骤详解

第一步,生成二维佩林噪声P,然后通过阈值T对P进行二值化,得到掩码M_p。佩林噪声有几个随机峰值,由它产生M_p的可以提取图像中连续的区域块。同时,考虑到采集的图像中一些工业成分的主体比例较小,如果不经处理直接进行数据增强,容易在图像的背景部分产生噪声,增加了模拟异常样本与真实异常样本在数据分布上的差异,不利于模型学习有效的判别信息,所以我们对这类图像采取了前景增强策略。即对输入图像I进行二值化处理,得到掩码M_I,并利用开或关操作去除二值化过程中产生的噪声。之后,通过对两个获得的掩模进行元素范围乘积,得到最终的掩模图像M。

第二步,掩膜图像M和噪声图像I_n进行元素求积,得到I_n中由M定义的感兴趣区域(ROI)。在这个过程中引入了一个透明度系数δ,以平衡原始图像和噪声图像的融合,使模拟异常的模式更接近真实异常。因此,噪声前景图像是用以下公式生成的:

对于噪声图像I_n ,希望其最大透明度更高,以增加模型学习的难度,从而提高模型的稳健性。所以对于公式中的δ,将从[0.15, 1]中随机地、均匀地取样。

第三步,将噪声前景图像叠加到原始图像上,得到模拟的异常图像I_A:

3.2 记忆模块和空间注意力图

  • 记忆模块:

对于人类来说,识别异常的前提是知道什么是正常的,而异常区域是通过将测试图像与记忆中的正常图像进行比较得到的。受人类学习过程和基于嵌入的方法的启发,使用少量的正常样本作为记忆样本,并使用预先训练好的编码器(ResNet18)提取记忆样本的高级特征作为记忆信息,以帮助MemSeg的学习。

为了获得记忆信息,首先从训练数据中随机选择N个正常图像作为记忆样本,并将其输入编码器,分别从ResNet18的block1,2,3中得到三种尺寸的特征。这些具有不同分辨率的特征共同构成了记忆信息MI。需要强调的是,为了保证记忆信息和输入图像的高级特征的统一,冻结ResNet18中block1、2、3的模型参数,其他部分仍然可以训练。

这些不同分辨率的特征共同构成了输入图像II的信息。之后,计算II和所有内存信息MI之间的L2距离,所以得到输入图像和内存样本之间的N差信息DI:

对于N差异信息,以每个DI中所有元素的最小和为标准,得到II与MI之间的最佳差异信息㼿DI*;即:

最后,串联后的信息将经过多尺度特征融合模块进行特征融合,融合后的特征通过U-Net的跳转连接流向解码器。

3.2 记忆模块和空间注意力图

  • 空间注意力图:

从具体的观察和实验中可以看出,最佳差异信息DI* 对异常区域的定位有重要影响。为了充分利用差异信息,我们利用DI* 提取三个空间注意图,用来加强对异常区域最佳差异信息的猜测。

对于DI* 中三个不同维度的特征,在通道维度上计算平均值,分别得到大小为16×16、32×32和64×64的三个特征图。16×16的特征图被直接用作空间注意图M3。在M3被上采样后,与32×32的特征图进行元素相乘运算,得到M2;而在M2被上采样后,与7个64×64的特征图进行元素相乘运算,得到M1。空间注意图M1-3分别对CI1-3得到的信息进行了加权处理。在数学上,解决M1、M2和M3的公式给出如下:

其中,C3表示DI3* 的通道数; DI3i* 表示DI3* 中通道i的特征图;M_3^UM_2^U分别表示上采样后得到的特征图M3和M2。

3.3 多尺度特征融合模块

在记忆模块的帮助下,我们得到了由输入图像信息II和最佳差异信息DI* 组成的串联信息CI。

直接使用CI,一方面有特征冗余的问题;另一方面,它增加了模型的计算规模,导致推理速度下降。鉴于多尺度特征融合在目标检测中的成功,一个直观的想法是在通道注意机制和多尺度特征融合策略的帮助下,将视觉信息和语义信息充分融合在串联的信息CI。

提出的多尺度特征融合模块如图所示:串联的信息最初由一个保持通道数的3×3卷积层进行融合。同时,考虑通道维度上两种信息的简单串联,用联合注意力来捕捉通道间的信息关系。然后,对于经坐标注意力加权的不同维度的特征,继续进行多尺度信息融合:首先利用上采样对不同维度的特征图进行分辨率对齐,然后利用卷积对通道数进行对齐,最后执行元素相加操作,实现多尺度特征融合。

3.4 训练约束

为了确保MemSeg的预测值接近其真值GT,使用L1损失和focal损失来保证图像空间中所有像素的相似性。与L2损失相比,L1损失约束下预测的分割图像保留了更多的边缘信息。同时,focal损失缓解了图像中正常和异常区域的面积不平衡问题,使模型更加关注困难样本的分割,以提高异常分割的准确性。

具体来说,利用(8)和(9)分别使模拟图像中的异常区域的真实值S和模型的预测值之间的L1 loss和focal loss最小。

最后,我们将所有这些约束条件合并为一个目标函数,得出以下目标函数:

在训练过程中,我们的优化目标是最小化由上式的目标函数。

4.实验

关注下方《学姐带你玩AI》🚀🚀🚀

回复“异常检测”获取全部论文PDF合集

码字不易,欢迎大家点赞评论收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缓存雪崩问题及解决思路

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。为了解决这个问题,我们可以采取以下几种方案。 1. 给不同的Key的TTL添加随机值 在设置缓存的过期时间(TTL)时…

PhpStudy靶场首页管理

PhpStudy靶场首页管理 一、源码一二、源码二三、源码三四、源码四 一、源码一 index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>靶场访问首页</title><style>body {background-color: #f2f2f2;colo…

一个月学通Python(二十三):RESTful架构和DRF入门

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…

【字符流】案例:集合到文件(改进版)

案例&#xff1a;集合到文件&#xff08;改进版&#xff09; 1.需求&#xff1a; 把ArrayList集合中的学生数据写入到文本文件。要求&#xff1a;每一个学生对象的数据作为文件中的一行数据 ​ 格式&#xff1a;学号&#xff0c;姓名&#xff0c;年龄&#xff0c;居住地 2.思…

python与深度学习(五):CNN和手写数字识别

目录 1. 说明2. 卷积运算3. 填充4. 池化5. 卷积神经网络实战-手写数字识别的CNN模型5.1 导入相关库5.2 加载数据5.3 数据预处理5.4 数据处理5.5 构建网络模型5.6 模型编译5.7 模型训练、保存和评价5.8 模型测试5.9 模型训练结果的可视化 6. 手写数字识别的CNN模型可视化结果图7…

HideSeeker论文阅读

文章目录 3.1 Overview of Our System HideSeeker3.2 Visual Information Extraction3.3 Relation Graph Learning3.4 Hidden Object Inference 4 EVALUATIONS4.7 Summary 6 DISCUSSIONS AND CONCLUSION 3.1 Overview of Our System HideSeeker 我们设计了一种名为“HideSeeke…

【Selenium+Pytest+allure报告生成自动化测试框架】附带项目源码和项目部署文档

目录 前言 【文章末尾给大家留下了大量的福利】 测试框架简介 首先管理时间 添加配置文件 conf.py config.ini 读取配置文件 记录操作日志 简单理解POM模型 简单学习元素定位 管理页面元素 封装Selenium基类 创建页面对象 简单了解Pytest pytest.ini 编写测试…

保护数字世界的壁垒

随着科技的不断发展和互联网的普及&#xff0c;我们的生活日益依赖于数字化的世界。然而&#xff0c;随之而来的是网络安全威胁的不断增加。网络攻击、数据泄露和身份盗窃等问题已经成为我们所面临的现实。因此&#xff0c;网络安全变得尤为重要&#xff0c;我们需要采取措施来…

MySQL常见的几种约束

系列文章目录 后续补充 文章目录 系列文章目录前言一、主键约束二、非空约束三、唯一约束四、检查约束五、默认值约束六、字段值自动增加约束七、外键约束总结 前言 为防止不符合规范的数据存入数据库&#xff0c;在用户对数据进行插入、修改、删除等操作时&#xff0c;MySQL提…

新架构网易云音乐UI风格大变身,更像Apple Music?

继QQ的NT版本出来后&#xff0c;掀起了一番热潮&#xff0c;不少科技资讯的UP开始评测采用全新架构的QQ的性能以及内存占用情况&#xff0c; 文末中&#xff0c;苏音也提到了&#xff0c;是否在QQ新版本的发布下&#xff0c;会有越来越多的产品向Electron架构靠近&#xff1f;…

优雅的使用CLion开发STM32 2023最新版本~

1.下载资料 一共需要的资料如下 ✈代表需要魔法 没有标注可直接访问 Clion下载链接 cubemx下载链接 mingw 下载连接 ✈安装完直接解压到文件夹 并且把bin文件的路径存入path环境变量 gcc下载链接✈安装完直接解压到文件夹 并且把bin文件的路径存入path环境变量 openocd下…

详细解析黑马微信小程序视频--【思维导图知识范围】

其实总目录集链接在此&#xff1a; 如何0元学微信小程序–【浅入深出系列000】 先列前几辑&#xff0c;后面的更新在 系列000里 专辑及链接难度&#xff08;五星制&#xff09;详细解析黑马微信小程序视频–【浅入深出系列-001】难度★✫✰✰✰让别人的小程序长成自己的样子…

仿写SpringMVC中的注解和方法映射功能

本项目已开源&#xff0c;欢迎各位大佬访问并指正&#xff1a;仿写SpringMVC中的注解和方法映射功能 文章目录 一、仿写流程1、初始化2、测试 二、代码实现1、自定义注解Controller和RequestMapping2、扫描本项目下Controller下所有的java文件3、识别注解&#xff0c;完成映射4…

【算组合数】CF1833 F

少见地秒了这道1700&#xff0c;要是以后都这样就好了.... Problem - F - Codeforces 题意&#xff1a; 给定一个数列&#xff0c;让你在这个数列里找一个大小为M的子集&#xff0c;使得极差不超过M 思路&#xff1a; 子集&#xff0c;不是子序列&#xff0c;说明和顺序无…

【算法与数据结构】101、LeetCode对称二叉树

文章目录 一、题目二、递归法三、迭代法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、递归法 思路分析&#xff1a;这道题目标就是要对比左右两半的树是否对称&#xff0c;因此对比不是左右节点是否相等&…

ThreadPoolExecutor自定义线程池|拒绝策略|线程工厂|统一捕获异常

线程池的7大参数含义介绍 corePoolSize&#xff1a;池中一直保持的线程的数量。 maximumPoolSize&#xff1a;池中允许的最大的线程数。 keepAliveTime&#xff1a;当线程数大于核心线程数的时候&#xff0c;线程在最大多长时间没有接到新任务就会终止释放&#xff0c; 最终…

点击加号添加新的输入框

实现如上图的效果 html部分&#xff1a; <el-form-item class"forminput" v-for"(item,index) in formdata.description" :key"index" :label"描述(index1)" prop"description"><el-input v-model"formdata…

STM32入门之创建工程模板

1.STM32固件库的结构图如下。从图中可以看出&#xff0c;我们在配置STM32的固件库时需要配置用户层、CMSIS层的文件。配置库文件即正确的配置这些函数的文件。CMSIS(Cortex Microcontroller Software Interface Standard)是ARM公司提供的微控制器软件接口标准&#xff0c;所有使…

栈和队列(基础知识和基本操作)

栈&#xff1a; 1.栈&#xff1a;在表尾进行插入和删除的操作受限的线性表。 2.逻辑结构&#xff1a;线性结构【一对一的关系】 3.存储结构&#xff1a;顺序存储【顺序栈】、链式存储【链栈】 4.栈的特点&#xff1a;先进后出【first in last out FILO表】 后进先出【last…

消息队列 CKafka 跨洋数据同步性能优化

导语 本文主要介绍了 CKafka 在跨洋场景中遇到的一个地域间数据同步延时大的问题&#xff0c;跨地域延时问题比较典型&#xff0c;所以详细记录下来做个总结。 一. 背景 为了满足客户跨地域容灾、冷备的诉求&#xff0c;消息队列 CKafka 通过连接器功能&#xff0c;提供了跨…