点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

作者:Mia Morton

编译:ronghuaiyang(AI公园)

导读

创建异常检测模型,实现生产线上异常检测过程的自动化。在选择数据集来训练和测试模型之后,我们能够成功地检测出86%到90%的异常。

介绍

异常是指偏离预期的事件或项目。与标准事件的频率相比,异常事件的频率较低。产品中可能出现的异常通常是随机的,例如颜色或纹理的变化、划痕、错位、缺件或比例错误。

异常检测使我们能够从生产流程中修复或消除那些处于不良状态的部件。因此,由于避免生产和销售有缺陷的产品,制造成本降低了。在工厂中,异常检测由于其特点而成为质量控制系统的一个有用工具,对机器学习工程师来说是一个巨大的挑战。

不推荐使用监督学习,因为:在异常检测中需要内在特征,并且需要在完整数据集(训练/验证)中使用少量的异常。另一方面,图像比较可能是一个可行的解决方案,但标准图像处理多个变量,如光线、物体位置、到物体的距离等,它不允许与标准图像进行像素对像素的比较。在异常检测中,像素到像素的比较是不可或缺的。

除了最后的条件外,我们的建议包括使用合成数据作为增加训练数据集的方法,我们选择了两种不同的合成数据,随机合成数据和相似异常合成数据。(详见数据部分)

这个项目的目标是使用无监督学习和合成数据作为数据增强方法来分类异常 — 非异常。

背景研究

异常检测与金融和检测“银行欺诈、医疗问题、结构缺陷、设备故障”有关(Flovik等,2018年)。该项目的重点是利用图像数据集进行异常检测。它的应用是在生产线上。在项目开始时,我们熟悉了自动编码器在异常检测中的功能和架构。作为数据计划的一部分,我们研究了包括合成噪声图像和真实噪声图像的重要性(Dwibedi et al, 2017)。

数据计划是这个项目的重要组成部分。选择一个数据集,有足够的原始图像和足够的真实噪声的图像。同时使用合成图像和真实图像。在处理真实图像时,这些数据需要对目标有全覆盖,但是在尺度和视角方面无法完全获得。“……要区分这些实例需要数据集对对象的视角和尺度有很好的覆盖”(Dwibedi et al, 2017)。合成数据的使用允许“实例和视角的良好覆盖”(Dwibedi et al, 2017)。合成图像数据集的创建,包括合成渲染的场景和对象,是通过使用Flip Library完成的,这是一个由LinkedAI创建的开源python库。“剪切,粘贴和学习:非常简单的合成实例检测”,通过这些数据的训练和评估表明,使用合成数据集的训练在结果上与在真实图像数据集上的训练具有可比性。

自动编码器体系结构“通常”学习数据集的表示,以便对原始数据进行维数缩减(编码),从而产生bottleneck。从原始的简化编码,产生一个表示。生成的表示(重构)尽可能接近原始。自动编码器的输入层和输出层节点数相同。“bottleneck值是通过从随机正态分布中挑选出来的”(Patuzzo, 2020)。在重构后的输出图像中存在一些重构损失(Flovik, 2018),可以通过分布来定义原始图像输入的阈值。阈值是可以确定异常的值。

去噪自动编码器允许隐藏层学习“更鲁棒的滤波器”并减少过拟合。一个自动编码器被“从它的一个损坏版本”来训练来重建输入(去噪自动编码器(dA))。训练包括原始图像以及噪声或“损坏的图像”。随着随机破坏过程的引入,去噪自编码器被期望对输入进行编码,然后通过去除图像中的噪声(破坏)来重建原始输入。用去噪自编码器提取和组合鲁棒特征,去噪自编码器应该能够找到结构和规律作为输入的特征。关于图像,结构和规律必须是“从多个输入维度的组合”捕获。Vincent等(2020)的假设引用“对输入的部分破坏的鲁棒性”应该是“良好的中间表示”的标准。

在这种情况下,重点将放在获取和创建大量原始和有噪声图像的能力上。我们使用真实数据和合成数据创建了大量的图像来训练我们的模型。

根据Huszar(2016)的说法,扩张卷积自动编码器“支持感受野的指数扩展,而不丢失分辨率或覆盖范围。“保持图像的分辨率和覆盖范围,对于通过扩大卷积自动编码器重建图像和使用图像进行异常检测是不可或缺的。这使得自动编码器在解码器阶段,从创建原始图像的重建到更接近“典型”自动编码器结构可能产生的结果。Dilated Convolutional Autoencoders Yu et al.(2017),“Network Intrusion Detection through Stacking Dilated Convolutional Autoencoders”,该模型的目标是将无监督学习特征和CNN结合起来,从大量未标记的原始流量数据中学习特征。他们的兴趣在于识别和检测复杂的攻击。通过允许“非常大的感受野,而只以对数的方式增加参数的数量”,Huszar (2016),结合无监督CNN的特征学习,将这些层堆叠起来(Yu et al., 2017),能够从他们的模型中获得“卓越的性能”。

技术

Flip Library (LinkedAI):https://github.com/LinkedAi/flip

Flip是一个python库,允许你从由背景和对象组成的一小组图像(可能位于背景中的图像)中在几步之内生成合成图像。它还允许你将结果保存为jpg、json、csv和pascal voc文件。

Python Libraries

在这个项目中有几个Python库被用于不同的目的:

可视化(图像、指标):

  • OpenCV

  • Seaborn

  • Matplotlib

处理数组:

  • Numpy

模型:

  • TensorFlow

  • Keras

  • Random

图像相似度比较:

  • Imagehash

  • PIL

  • Seaborn (Histogram)

Weights and Biases

Weights and bias是一个开发者工具,它可以跟踪机器学习模型,并创建模型和训练的可视化。它是一个Python库,可以作为import wandb导入。它工作在Tensorflow, Keras, Pytorch, Scikit,Hugging Face,和XGBoost上。使用wandb.config配置输入和超参数,跟踪指标并为输入、超参数、模型和训练创建可视化,使它更容易看到可以和需要更改的地方来改进模型。

模型&结构

我们基于当前的自动编码器架构开始了我们的项目,该架构专注于使用带有卷积网络的图像(见下图)。经过一些初步的测试,基于研究(参见参考资料)和导师的建议,我们更改为最终的架构。

自编码器的典型结构

使用扩张特征

扩张特征是一种特殊的卷积网络,在传统的卷积核中插入孔洞。在我们的项目中,我们特别的对通道维度应用了膨,不影响图像分辨率。

最终的结构

图像相似度

这个项目的关键点之一是找到一个图像比较的指标。利用图像比较度量对模型进行训练,建立直方图,并计算阈值,根据该阈值对图像进行异常和非异常的分类。

我们从逐个像素的L2欧氏距离开始。结果并不能确定其中的一些差异。我们使用了带有不同散列值(感知、平均和差异)的Python Imagehash库,对于相似的图像,我们得到了不同的结果。我们发现SSIM(结构相似度指数度量)度量为我们提供了一对图像之间相似度的度量,此外,它是Keras库的一个内置损失。

直方图

在对模型进行训练和评估后,利用其各自的数据集,对重建后的图像和原始图像之间的相似度进行识别。当然,由于原始图像的多样性(如,大小,位置,颜色,亮度和其他变量),这种相似性有一个范围。我们使用直方图作为图的表示,以可视化这个范围,并观察在哪个点会有不同的图像。

直方图的例子

数据

使用的数据从Kaggle下载:表面裂纹检测数据集:https://www.kaggle.com/arunrk7/surface-crack-detection和铸造产品质量检查图像数据:https://www.kaggle.com/ravirajsinh45/real-life-industrial-dataset-of-casting-product?select=casting_data。

第一个是裂缝数据集,包含20,000张负样本墙图像(无裂缝)和20,000张正样本墙图像(有裂缝)。在这种情况下,裂缝被认为是异常的。所有数据都是227x227像素的RGB通道。下面显示了每个组的示例。

![](Anomaly Detection with Computer Vision.assets/0_wkppduibzb5UMKe4.png)

我们从没有异常的组中选取了10,000张图像来生成不同的合成数据集。然后合成的数据集被分为两种类型:一种是带有类似异常的噪声(51张图像是用Photoshop创建的),另一种是使用水果、植物和动物等随机物体。所有用作噪声的图像都是png格式的,背景是透明的。下面是用于模型训练的两种类型的数据集的一些例子。

![](Anomaly Detection with Computer Vision.assets/0_QOK2rwxMoVZiFd5Q.png)

第二个数据集,cast数据集分为两组,一组为512x512像素的图像(有异常的781张,无异常的519张),另一组为300x300像素的图像(有异常的3137张,有异常的4211张)。所有图像都有RGB通道。使用的是300 x 300像素的图像。后者,来自Kaggle,91.65%的数据被分为训练,其余的测试。对于该数据集,异常包括:边缘碎片、划痕、表面翘曲和孔洞。下面是一些有和没有异常的图像示例。

我们使用1,000张属于训练组的无缺陷图像来生成合成数据数据集。在前面的例子中,我们创建了两种类型的数据集:一种带有类似于异常的噪声(51张图像是用Photoshop创建的),另一种带有随机对象的噪声,如动物、花朵和植物(裂缝数据集中使用的相同的80张图像)。下面是一些在模型训练中使用的图像示例。

所有合成数据都是使用Flip库创建的。在每个生成的图像中,选择两个对象并随机放置。对象应用了三种类型的转换:翻转、旋转和调整大小。生成的图像保存为jpg格式。项目使用的数据集如下表所示:

实验

根据上述表格说明,我们的主要目的是研究数据集的哪些变化可能呈现最好的结果,我们用这些数据和获得的结果训练了模型(见下面的图表)。

对于每个数据集,我们评估了几个指标,如(SSIM)损失、召回、精度、F1和精度。在每一次实验中,我们将评估代表这组噪声图像和重建图像之间图像相似性的直方图。

为了跟踪和比较我们的结果,我们使用了library Weight & bias,它允许一种简单的方式来存储和比较每个实验的结果。

训练

为了在我们的环境中保持少量的变量,我们决定总是使用一个有1000个样本的数据集,而不管真实数据和合成数据之间的关系。

在算法中,我们将各自的数据集分割为95%进行训练,5%进行测试结果。除此之外,我们的评估只使用了真实的数据。

评估和结果

下面是一些实验的主要结果。你可在以下连结找到所有的结果:

裂缝数据集:https://wandb.ai/heimer-rojas/anomaly-detector-cracks?workspace=user-

裂缝直方图

裂缝数据集的异常检测

对于裂纹数据集,实验结果也很好(91% ~ 98%),实验之间没有显著差异。与无异常的图像相比,其行为主要取决于裂纹大小和颜色等变量。

铸造工件数据集:https://wandb.ai/heimer-rojas/anomaly-detector-cast?workspace=user-heimer-rojas

铸造工件数据集的准确率和召回率

铸造件E1&E3

铸造件数据集的异常检测

挑战

  • 训练时间长,在谷歌Colab和专业版中使用GPU训练。

  • 通过上传压缩后的zip格式的数据来解决长时间的数据加载问题,这样每个数据集上传一个文件,大大减少了时间。

  • 最初的提议是使用哥伦比亚汽车生产线的数据集,不幸的是,正样本和负样本图像的质量和数量都不足以创建一个合适的机器学习模型。这种情况促使我们决定使用Kaggle的数据集,与生产线生产的条件类似。

  • 每个数据集在异常情况下的可视化差异是不同的,需要考虑正常的图像结构,如图像的颜色、亮度等内在特征

  • 需要人类的专业知识来根据真实数据或合成数据的阈值选择适当的阈值。这可能要视情况而定。

讨论

实现一个真正的机器学习项目需要几个步骤,从想法到模型的实现。这包括数据集的选择、收集和处理。

在使用图像的项目中有“调试脚本”是很重要的。在我们的例子中,我们使用了一个允许我们可视化的脚本:原始数据集、新的合成图像和自编码器去噪之后的图像,使我们能够评估模型的性能。

—END—

英文原文:https://medium.com/linkedai/anomaly-detection-production-line-b8340e1eca43

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

使用计算机视觉来做异常检测相关推荐

  1. 使用计算机视觉来做异常检测!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Mia Morton,来源:AI公园 导读 创建异常检测模型,实现 ...

  2. 用计算机视觉来做异常检测

    点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:AI公园 作者:Mia Morton  |  编译:ronghuaiyang 导读 ...

  3. 以实时风控场景为例,阿里云实时计算如何来做异常检测?

    内容来源:本文内容由阿里云实时计算,流计算团队提供.IT 大咖说(微信id:itdakashuo)作为独家合作方,经授权发布. 阅读字数:3102 | 8分钟阅读 前言 DT时代,数据是最重要的生产资 ...

  4. 关于如何使用机器学习来做异常检测的7个问题

    导读 异常检测的一些入门问题. 问问题是学习的好方法之一.但有时你不知道从哪里开始,或者该问什么 -- 尤其是在你还比较熟悉的异常检测之类的话题上.在这种情况下,最好倾听别人的问题,让他们的思路来指导 ...

  5. 【机器学习基础】关于如何使用机器学习来做异常检测的7个问题

    作者:David Sweenor    编译:ronghuaiyang 导读 异常检测的一些入门问题. 问问题是学习的最好方法之一.但有时你不知道从哪里开始,或者该问什么 -- 尤其是在你还比较熟悉的 ...

  6. 妙不可言,Sklearn 做异常检测这么简单

    文章目录 离群检测 与 新奇检测 Sklearn 中支持的方法 孤立森林 IsolationForest Local Outlier Factor OneClassSVM Elliptic Envel ...

  7. 不仅仅生成图片,用GAN做无监督的异常检测

    原文:https://zhuanlan.zhihu.com/p/32505627 GAN被LeCun赞为继CNN之后最为重要的一个工作,其原因在于让各位惊呼"这才有点人工智能的样子" ...

  8. 杜伦大学提出GANomaly:无需负例样本实现异常检测

    杜伦大学提出GANomaly:无需负例样本实现异常检测 本期推荐的论文笔记来自 PaperWeekly 社区用户 @TwistedW.在异常检测模块下,如果没有异常(负例样本)来训练模型,应该如何实现 ...

  9. 最新研究总结:工业图像异常检测

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 异常检测,GAN如何gan ? 作者丨小小理工男@知乎 来源丨https://zh ...

最新文章

  1. 职责链模式里面必须要知道的事情
  2. 继承SectionIndexer,实现联系人侧边栏
  3. ansible 配置文件优先级
  4. linux恢复fat文件系统,使用‘fsck’修复Linux中文件系统错误的方法
  5. 结构体在固件库中的应用
  6. Cocos2d-x-使用脚本概述
  7. 视频html5播放器代码实例
  8. Re-ranking Person Re-identification with k-reciprocal Encoding笔记
  9. docker命令push,pull等设置代理
  10. 木兰编程语言,当事人最新回复来了
  11. CodeForces55A - Flea travel 解题报告
  12. WPS文字 JSA 学习笔记 - 转PDF后要带自定义目录
  13. 关于笔记本连接显示器检测不到的问题(NoVideoInput)
  14. 重卡自动驾驶进入“正规战”
  15. 【BDTC 2017】最后两天!BDTC大会抢票倒计时!
  16. 创造与魔法java语言_创造与魔法 | 最新魔法使用大全
  17. P5837 [USACO19DEC]Milk Pumping G
  18. C++ Google代码风格
  19. 关注ERP项目中的隐含成本
  20. 总结2023Android开发面试题(含答案)

热门文章

  1. BaaS_后端即服务 RESTful
  2. 史上讲解最好的Docker教程,从入门到精通(建议收藏的教程)
  3. python 爬取糗百
  4. ZBrush的用途是什么
  5. wps2019数据分析加载项_《07版office办公软件中的excle中,为什么在加载项里选择了分析工具库,数据分析还是显示不出来?》 wps数据分析加载项...
  6. Postfix邮箱部署
  7. 在 Linux 下安装 GNU ARM 工具链
  8. Android最新最全100余款开源App(对应Github开源项目)
  9. 微型计算机基础知识答案,第1章 微型计算机基础知识 题库和答案.doc
  10. 阿里云对运营10多年来持续最久的故障发布复盘说明