[异常检测]Deep One-Class Classfication(Deep-SVDD) 论文阅读源码分析

本文主要是介绍[异常检测]Deep One-Class Classfication(Deep-SVDD) 论文阅读源码分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文链接:http://proceedings.mlr.press/v80/ruff18a

文章目录

    • 论文阅读
      • 摘要
      • 相关工作
      • 模型结构
      • 实验
    • 源码分析
      • 数据集制作
      • 训练

论文阅读

摘要

“尽管deep learning在很多machine learning任务中取得成功,相对较少的deep learning方法被用在异常检测任务中。一些原本被用来做其他任务的深度模型例如生成模型或压缩模型尝试被用在异常检测任务中,但是没有基于异常检测目标训练的网络”

在18年的时候,anomaly detection这个任务还没有什么深度学习的方法,摘要中提到基于异常检测的目标进行训练是整篇论文的核心,也为后面的DL-based AD任务提供了一些思路。

相关工作

相关工作部分论文提到了基于传统方法和深度方法两个方向

  • One-class SVM & support vector data description(SVDD)

    One-class SVM
    m i n 1 2 ∣ ∣ w ∣ ∣ F k 2 − ρ + 1 v n ∑ i = 1 n ξ i s . t . ⟨ w , ϕ ( x i ) ⟩ ≥ ρ − ξ i , ξ i ≥ 0 min \frac{1}{2}||w||^2_{F_k}- \rho + \frac{1}{vn}\sum_{i=1}^n\xi_i \\ s.t. \left \langle w,\phi(x_i) \right \rangle \geq \rho - \xi_i, \xi_i \geq 0 min21wFk2ρ+vn1i=1nξis.t.w,ϕ(xi)ρξi,ξi0
    SVDD
    m i n R 2 + 1 v n ∑ i ξ i s . t . ∣ ∣ ϕ ( x i ) − c ∣ ∣ 2 ≤ R 2 + ξ i min \ R^2 + \frac{1}{vn}\sum_i\xi_i \\ s.t. ||\phi(x_i) - c||^2 \leq R^2 + \xi_i min R2+vn1iξis.t.ϕ(xi)c2R2+ξi
    其中 ϕ ( x i ) \phi(x_i) ϕ(xi)都是特征映射,OC-SVM是找一个间隔超平面使得数据与原点距离最大;SVDD是找到一个超球面,使得正常数据全部落在该超球面内,具体可参考网上的分析。

  • Deep learning method(Autoencoder GAN)

    基于深度学习的方法包括利用深度网络进行特征提取再与传统异常检测算法结合的,也有纯深度学习方法的,包括利用自编码器进行特征压缩和样本重构,将重构误差作为异常分数。
    s c o r e = ∣ ∣ x − x ^ ∣ ∣ 2 score = ||x - \hat{x}||^2 score=xx^2
    也有利用GAN网络在latent space对测试样本进行分析,这里不再赘述。

    这些方法的弊端统一有两点:1. 不是以anomaly detection为目标的(都是一些其他任务的副产物) 2. 压缩的dimension不好确定,是否能找到一个很好的低维latent space是决定性因素。

模型结构

在这里插入图片描述

  • 对于图像级数据,利用CNN进行特征提取,进行 X − F \mathcal{X} - \mathcal{F} XF的映射,在 F \mathcal{F} F空间中,尽可能希望大量normal样本被聚集在一个hypersphere中,而anomaly 样本在该hypersphere外。(思想与SVDD一致),这里的hypersphere中由两个参数确定(c, R),具体调整在后面会详解。
  • 论文提出了两个objective: soft-boundary & one-class

1 soft-boundary Deep SVDD

objective function:
m i n R 2 + 1 ν n ∑ i = 1 n m a x { 0 , ∣ ∣ ϕ ( x i ; W ) − c ∣ ∣ 2 − R 2 } + λ 2 ∑ l = 1 L ∣ ∣ W l ∣ ∣ F 2 min \ R^2 + \frac{1}{{\nu} n}\sum_{i=1}^nmax \left \{ 0,||\phi(x_i;W)-c||^2 -R^2 \right \} + \frac{\lambda}{2}\sum_{l=1}^L||W^l||_F^2 min R2+νn1i=1nmax{0,ϕ(xi;W)c2R2}+2λl=1LWlF2
软边界Deep-SVDD的核心思想是通过假设训练数据中不全是normal数据(因此强迫所有样本聚于超球面内是不合适的,但是从源码来看,训练的时候还是用的one-class数据,不过这样的假设更软,更适合实际场景), 因此利用 ν ∈ ( 0 , 1 ] \nu \in (0,1] ν(0,1]在超球体体积和超出边界的程度进行一个trade-off control. (这个参数控制着允许超出球面的样本比例)。

2 one-class Deep SVDD

objective function:
m i n 1 n ∑ i = 1 n ∣ ∣ ϕ ( x i ; W ) − c ∣ ∣ 2 + λ 2 ∑ l = 1 L ∣ ∣ W l ∣ ∣ F 2 min \frac{1}{n}\sum_{i=1}^{n}||\phi(x_i;W) - c||^2 + \frac{\lambda}{2}\sum_{l=1}^L||W^l||_F^2 minn1i=1nϕ(xi;W)c2+2λl=1LWlF2

一类Deep SVDD是在一个较强的假设,训练数据大部分都为normal数据,也就是处在一个one-classification的情境下,不用优化参数R,超球体的体积通过函数第一项进行隐式的压缩。该损失相较于soft-boundry是一种更硬的目标,要求所有样本离超球体中心更近,因此这种方法一定要在训练集大部分为normal下进行,否则测试阶段的异常样本也会被认为正常(因为把所有数据一起压缩了)。

3 测试

定义异常分数
s ( x ) = ∣ ∣ ϕ ( x ; W ∗ ) − c ∣ ∣ 2 s(x) = ||\phi(x;W^*) - c||^2 s(x)=ϕ(x;W)c2
对于soft-boundary来说可以利用
∣ ∣ ϕ ( x ; W ∗ ) − c ∣ ∣ 2 − R > 0 ||\phi(x;W^*) - c||^2 - R > 0 ϕ(x;W)c2R>0
进行判断。

4 优化

Adam作为优化器优化网络权重。当用soft-boundary损失时,因为要优化 W W W R R R, 两个参数优化是不同的尺度,因此利用alternating minimization/block coordinate descent approach,先将R固定住,训练k epoch 的W参数,之后的每个epoch先更新W,再利用最新的W,训练R。

5 性质

论文提到了该模型的四个性质,前三个性质为可能产生平凡解的情况,最后一个为参数 ν \nu ν的性质。

球心c的选择

当所有权重为零,得到的网络输出 ϕ ( x n ; W ) = ϕ ( x m ; W ) = c 0 \phi(x_n;W) = \phi(x_m;W) = c_0 ϕ(xn;W)=ϕ(xm;W)=c0时,即当权重为零时,所有样本映射至一个常数,则此时的loss为零,即达到一个最优解,但该解是无意义的,因此必须避免这种情况。

偏置项

传统的深度网络中往往有偏置项,但是该模型中不能有偏置项。

如果某个hidden layer有bias,则该层输出为 z l ( x ) = σ l ( W l z l − 1 ( x ) + b l ) z^l(x) = \sigma^l(W^lz^{l-1}(x) + b^l) zl(x)=σl(Wlzl1(x)+bl),则当权重全为零时,所有样本的输出同样相同即 z l ( x i ) = z l ( x j ) = σ l ( b l ) z^l(x_i) = z^l(x_j) = \sigma^l(b^l) zl(xi)=zl(xj)=σl(bl),最后的结果跟1一样,同样会输出到同一个点,使得R = 0。因此避免该情况就需要所有层不包含bias项,包括batch normal层($ x = \frac{x-mean}{\sqrt{var}}*\gamma + \varepsilon $)。

激活函数的选择

论文提到如果选择的激活函数包含上下界,则也会陷入hypersphere collapse。例如sigmoid函数,如果一个神经元对应所有样本输入都为正,则模型会朝着将其他神经元输出置零,该神经元输出继续增大,直到接近上界。那么也就和前述一样,所有样本输出为常数。

针对上述三点,论文的解决方案为:采用将网络进行初始化后的所有样本输出均值作为球心;所有层不添加bias;激活函数选择单侧无界函数(论文里使用的是leaky relu)

v-property

该性质与soft-boundary中的 ν \nu ν相关,较为复杂,暂没看懂,后续会专门结合OC-SVM中的性质一起总结。

实验

论文在MNIST 和 CIFAR10上进行实验,每个实验分别选择一类为normal类,其他为anomaly类。比较的方法包括传统方法OS-SVM/ 核密度估计 KDE/ isolation forest,深度方法 DCAE/ AnoGAN。

在提出的方法的实验中,具体实现是先用DCAE进行预训练,将encode部分作为网络权重,learning_rate为两阶段分别是1e-4, 1e-5; R的学习每5个epoch利用line search进行。

实验结果:
在这里插入图片描述

源码分析

源码地址:https://github.com/lukasruff/Deep-SVDD-PyTorch

数据集制作

利用L1-norm进行 全局对比度标准化global contrast normalization, 计算图像中所有像素的均值和标准差,然后每个像素分别减去权值并除以标准差。

def global_contrast_normalization(x, scale = 'l1'):assert scale in ('l1', 'l2')n_features = int(np.prod(x.shape)) # 所有维度特征数量和 n * w * hmean = torch.mean(x)x -= meanif scale == 'l1':x_scale = torch.mean(torch.abs(x)) if scale == 'l2':x_scale = torch.sqrt(torch.sum( x**2 )) / n_features # 这个是对比度x /= x_scalereturn x

训练集选择只选择某一类

def get_target_label_index(labels, targets):return np.argwhere(np.isin(labels, targets)).flatten().tolist() # 返回某一类的索引

训练

论文特意定义了一个trainer类。正式训练之前,将初始化网络的输出均值作为目标函数中的c

def init_center_c(self, train_loader, net, eps = 0.1):n_samples = 0c = torch.zeros(net.rep_dim, device = self.device)net.eval()with torch.no_grad():for data in train_loader:inputs, _ = datainputs = inputs.to(self.device)outputs = net(inputs)n_samples += outputs.shape[0]c += torch.sum(outputs, dim = 0)c /= n_samplesc[(abs(c) < eps) & (c < 0)] = -eps # 为了避免初始化后输出过小(前面提到输出的常数值,用relu的话不能输出零)c[(abs(c) > eps) & (c > 0)] = epsreturn c

loss部分参考源码自己写了一个函数

def Compute_loss(objective, outputs, r, c, v):assert objective in ('soft-boundry', 'one-class')dist = torch.sum((outputs-c)**2, dim = 1) # 行求和 N * 1if objective == 'soft-boundry':scores = dist - r**2 # 也是测试用的异常分数loss = r ** 2 + (1/v) * torch.mean(torch.max(scores, torch.zeros_like(scores)))else:loss = torch.mean(dist)return dist, loss

R的更新。论文中写的是line search,代码中给出的方法是:

def Get_radius(dist, v): # 参数\nureturn np.quantile(np.sqrt(dist.clone().data.cpu().numpy()), 1-v)
if (self.objective == 'soft-boundary') and (epoch >= self.warm_up_n_epochs):self.R.data = torch.tensor(get_radius(dist, self.nu), device=self.device) # 一个batch中的距离计算出来的

这篇关于[异常检测]Deep One-Class Classfication(Deep-SVDD) 论文阅读源码分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742995

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57