使用自动编码器进行半监督异常检测

这篇具有很好参考价值的文章主要介绍了使用自动编码器进行半监督异常检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测
使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测
使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入YOLO系列专栏、自然语言处理
    专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

前提条件

  • 熟悉Python

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
  • PyTorch 是一个深度学习框架,封装好了很多网络和深度学习相关的工具方便我们调用,而不用我们一个个去单独写了。它分为 CPU 和 GPU 版本,其他框架还有 TensorFlow、Caffe 等。PyTorch 是由 Facebook 人工智能研究院(FAIR)基于 Torch 推出的,它是一个基于 Python 的可续计算包,提供两个高级功能:1、具有强大的 GPU 加速的张量计算(如 NumPy);2、构建深度神经网络时的自动微分机制。

Semi-supervised Anomaly Detection using AutoEncoders

  • 异常检测是指从正常数据中发现异常实例的任务。在一些应用中,这些异常值或异常实例比正常实例更令人感兴趣。特别是在工业光学检测和基础设施资产管理的情况下,发现这些缺陷(异常区域)是极其重要的。
  • 传统上,甚至今天,这个过程都是手工进行的。与正常纹理相比,人类依靠缺陷的显着性来检测缺陷。然而,人工检查是缓慢、乏味、主观的,容易受到人类偏见的影响。因此,缺陷检测的自动化是可取的。但对于缺陷检测来说,缺乏大量异常实例和标记数据的可用性是一个问题。
  • 在本论文《Semi-supervised Anomaly Detection using AutoEncoders》中,提出了一种卷积自编码器架构,用于异常检测,仅在无缺陷(正常)实例上进行训练。对于测试图像,通过从自编码器输出中减去原始图像获得的残差掩码被阈值化,以获得缺陷分割掩码。该方法在两个数据集上进行了测试,获得了令人印象深刻的平均F1分数0.885。即使在训练过程中没有使用缺陷图像,网络也学会了检测缺陷的实际形状。
  • 论文地址:https://arxiv.org/abs/2001.03674
  • 官方源代码地址:https://github.com/msminhas93/anomaly-detection-using-autoencoders
  • 有兴趣可查阅论文和官方源代码地址。

使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测

Python实现的自编码器网络架构,代码如下。

import torch.nn as nn
import torch.nn.functional as F
import torch


class AnomalyAE(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 48, (11, 11), stride=(1, 1), padding=5)
        self.bn1 = nn.BatchNorm2d(48)

        self.conv2 = nn.Conv2d(48, 48, (9, 9), stride=(2, 2), padding=4)
        self.bn2 = nn.BatchNorm2d(48)

        self.conv3 = nn.Conv2d(48, 48, (7, 7), stride=(2, 2), padding=3)
        self.bn3 = nn.BatchNorm2d(48)

        self.conv4 = nn.Conv2d(48, 48, (5, 5), stride=(2, 2), padding=2)
        self.bn4 = nn.BatchNorm2d(48)

        self.conv5 = nn.Conv2d(48, 48, (3, 3), stride=(2, 2), padding=1)
        self.bn5 = nn.BatchNorm2d(48)

        self.conv_tr1 = nn.ConvTranspose2d(
            48, 48, (5, 5), stride=(2, 2), padding=2, output_padding=1)
        self.bn_tr1 = nn.BatchNorm2d(48)

        self.conv_tr2 = nn.ConvTranspose2d(
            96, 48, (7, 7), stride=(2, 2), padding=3, output_padding=1)
        self.bn_tr2 = nn.BatchNorm2d(48)

        self.conv_tr3 = nn.ConvTranspose2d(
            96, 48, (9, 9), stride=(2, 2), padding=4, output_padding=1)
        self.bn_tr3 = nn.BatchNorm2d(48)

        self.conv_tr4 = nn.ConvTranspose2d(
            96, 48, (11, 11), stride=(2, 2), padding=5, output_padding=1)
        self.bn_tr4 = nn.BatchNorm2d(48)

        self.conv_output = nn.Conv2d(96, 1, (1, 1), (1, 1))
        self.bn_output = nn.BatchNorm2d(1)

    def forward(self, x):
        slope = 0.2
        # print(x.shape)
        x = F.leaky_relu((self.bn1(self.conv1(x))), slope)
        # print(x.shape)
        x1 = F.leaky_relu((self.bn2(self.conv2(x))), slope)
        # print(x1.shape)
        x2 = F.leaky_relu((self.bn3(self.conv3(x1))), slope)
        # print(x2.shape)
        x3 = F.leaky_relu((self.bn4(self.conv4(x2))), slope)
        # print(x3.shape)
        x4 = F.leaky_relu((self.bn5(self.conv5(x3))), slope)
        # print(x4.shape)

        x5 = F.leaky_relu(self.bn_tr1(self.conv_tr1(x4)), slope)
        # print(x5.shape)
        x6 = F.leaky_relu(self.bn_tr2(
            self.conv_tr2(torch.cat([x5, x3], 1))), slope)
        # print(x6.shape)
        x7 = F.leaky_relu(self.bn_tr3(
            self.conv_tr3(torch.cat([x6, x2], 1))), slope)
        # print(x7.shape)
        x8 = F.leaky_relu(self.bn_tr4(
            self.conv_tr4(torch.cat([x7, x1], 1))), slope)
        # print(x8.shape)

        output = F.leaky_relu(self.bn_output(
            self.conv_output(torch.cat([x8, x], 1))), slope)
        # print(output.shape)
        return output

if __name__ == "__main__":
    x = torch.rand([16,1,512,512])
    model = AnomalyAE()
    y = model(x)
    # print(x.shape, x.dtype)
    # print(y.shape, y.dtype)

项目结构

使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测
使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测

训练模型

python main.py --train_dir ./data/Train --val_dir ./data/Test --train_batch_size 1 --val_batch_size 1 --save_graph --epochs 25

使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测

测试模型

使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测

python test.py

使用自动编码器进行半监督异常检测,Python日常小操作,OpenCV-Python小应用,python,pytorch,半监督学习,深度学习,异常检测

参考

[1] Manpreet Singh Minhas, John Zelek. Semi-supervised Anomaly Detection using AutoEncoders. 2022
[2] https://github.com/msminhas93/anomaly-detection-using-autoencoders
[3] https://arxiv.org/abs/2001.03674文章来源地址https://www.toymoban.com/news/detail-735462.html

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入YOLO系列专栏、自然语言处理
    专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

到了这里,关于使用自动编码器进行半监督异常检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自编码器简单介绍—使用PyTorch库实现一个简单的自编码器,并使用MNIST数据集进行训练和测试

    自编码器是一种无监督学习算法,用于学习数据中的特征,并将这些特征用于重构与输入相似的新数据。自编码器由编码器和解码器两部分组成,编码器用于将输入数据压缩到一个低维度的表示形式,解码器将该表示形式还原回输入数据的形式。自编码器可以应用于多种领域

    2023年04月27日
    浏览(64)
  • AE(自动编码器)与VAE(变分自动编码器)的区别和联系?

    他们各自的概念看以下链接就可以了:https://blog.csdn.net/weixin_43135178/category_11543123.html  这里主要谈一下他们的区别? VAE是AE的升级版,VAE也可以被看作是一种特殊的AE AE主要用于数据的 压缩与还原 ,VAE主要用于 生成 。 AE是将数据映直接映射为数值 code(确定的数值) ,而

    2024年02月03日
    浏览(44)
  • LabVIEW编码器自动校准系统

          简介    在工作中,精确的角度测量和校准对于保持设备精度至关重要。开发了一套自动化角度编码器校准系统,利用了LabVIEW的强大功能。该系统以全圆连续角度标准装置为基础,配合二维导轨装夹系统,实现了空心轴角度编码器的高效自动校准, 01 系统功能​  

    2024年01月17日
    浏览(37)
  • 【深度学习】采用自动编码器生成新图像

            你知道什么会很酷吗?如果我们不需要所有这些标记的数据来训练 我们的模型。我的意思是标记和分类数据需要太多的工作。 不幸的是,大多数现有模型从支持向量机到卷积神经网,没有它们,卷积神经网络就无法训练。无监督学习不需要标注。无监督学习从未

    2024年02月13日
    浏览(36)
  • 机器学习:自动编码器Auto-encoder

    不用标注数据就能学习的任务,比如Bert之类的。但最早的方法是Auto-encoder。 encoder输出的向量,被decoder还原的图片,让输出的图片与输入的图片越接近越好。 将原始的高维向量变成低维向量,将该新的特征用于下游任务。 相关的类似方法: PCA: youtu.be/iwh5o_M4BNU t-SNE: yout

    2024年02月14日
    浏览(43)
  • 【深度学习】在 MNIST实现自动编码器实践教程

            自动编码器是一种无监督学习的神经网络模型,主要用于降维或特征提取。常见的自动编码器包括基本的单层自动编码器、深度自动编码器、卷积自动编码器和变分自动编码器等。         其中,基本的单层自动编码器由一个编码器和一个解码器组成,编码器

    2024年02月14日
    浏览(41)
  • 自动编码器的数学基础:概率论与线性代数

    自动编码器(Autoencoders)是一种深度学习模型,它通过学习压缩输入数据的低维表示,然后再将其重新解码为原始数据形式。自动编码器的主要目的是学习数据的特征表示,从而可以用于降维、生成新数据、数据压缩等应用。在这篇文章中,我们将讨论自动编码器的数学基础,

    2024年02月20日
    浏览(42)
  • 【计算机视觉 | 目标检测】术语理解9:AIGC的理解,对比学习,解码器,Mask解码器,耦合蒸馏,半耦合,图像编码器和组合解码器的耦合优化

    AIGC指的是使用人工智能技术自动生成的各类数字内容,包括文本、图像、音频、视频等。它利用机器学习模型进行智能化内容生成。 主要的技术手段包括: 自然语言生成(NLG):使用RNN、GPT等语言模型生成文本。 生成对抗网络(GAN):使用GAN生成高质量图片。 自动语音合成(TTS):使用

    2024年02月04日
    浏览(61)
  • 机器学习笔记 - 利用自动编码器神经网络构建图像去噪器

            传统的图像噪声去除主要是基于各种滤波器,但它们不是特定于数据的,因此可能会损失很多图像的细节,或者噪声去除的效果不是很理想。基于神经网络的自动编码器可以用于学习数据集的噪声去除滤波器。         关于自动编码器的介绍,可以参考下面的链

    2024年02月05日
    浏览(40)
  • 在 CelebA 数据集上训练的 PyTorch 中的基本变分自动编码器

    摩西·西珀博士         我最近发现自己需要一种方法将图像 编码到潜在嵌入中, 调整 嵌入,然后 生成 新图像。有一些强大的方法可以创建嵌入 或 从嵌入生成。如果你想同时做到这两点,一种自然且相当简单的方法是使用变分自动编码器。

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包