ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Deep SVDD理解:Deep One-Class Classification

2026/8/13 11:43:11 拓冰建站 浏览量
Deep SVDD理解:Deep One-Class Classification 一、AutoEncoder的结构encoder的作用是学习一个好的特征将图片压缩为一个低维特征decoder的作用是逼迫encoder学到的特征包含图片的主要结构而不是随机特征autoencoder的loss函数是复现误差所以encoder学习到的特征必须包含图片特征否则无法经过decoder复现出来。autoencoder的起源假设你是一个早期的数学家一张人脸图片你手工提取了眼睛位置、鼻子形状、脸型或者光照等几十个变量来代表这张图片你看你在做一件事就是找一个低维表示同时保留数据的主要信息这个是早期的手搓特征。在数据分析界呆久了PCA主成分分析这个算法你肯定会听说过PCA的思想就是在原始空间中找到主要信息的方向然后将信息投影到这个主要方向上只保留前几个主要变量的维度就行将这个保留的信息重新投影回来尽可能接近原数据然后计算复现误差这个结构就是encoder decoder。混迹神经网络后word2Vec给你的启发是不要人工去设计特征使用神经网络通过任务逼近网络学习合适的特征使用几层网络搭建一个编码器encoder再搭建decoder在encoder提取的特征之上重建原始图片通过拉近重建图片和原始图片的距离逼迫encoder提取的特征包含主要信息。我们之前一直在研究yolov8m的P5特征这里使用autoEncoder中的encoder又可以提取到特征不仅要去思考二者特征的区别是什么。autoEncoder提取的特征是用来重建的所以这个特征必须要能够去描述整张图片才可以尽可能的重建原始图片但是yolov8m的P5是为了做车轮的目标检测所以P5需要去特征关注车轮钢轨车辆结构等不需要去关心背景变化整体相似性以及颜色细节。二、Deep SVDD既然autoencoder就可以提取重建的特征为什么不可以直接用来度量因为Deep SVDD发现autoEncoder学到的feature空间不一定适合距离的度量论文里有句是这样说的Autoencoders have the objective of dimensionality reduction and do not target AD directly. The main difficulty of applying autoencoders for AD is given in choosing the right degree of compression, i.e.dimensionality reduction. If there was no compression, an autoencoder would just learn the identity function. In the other edge case of information reduction to a single value, the mean would be the optimal solution. That is, the “compactness” of the data representation is a model hyperparameter and choosing the right balance is hard due to the unsupervised nature and since the intrinsic dimensionality of the data is often difficult to estimate (Bengio et al., 2013). In comparison, we include the compactness of representation into our Deep SVDD objective by minimizing the volume of a />什么意思呢就是使用autoencoder的encoder提取特征然后使用下面的目标函数进行二次训练看代码会更清楚写output是encoder提取的特征向量例如128维度self.c是提取所有的正常图片的特征向量从而求得的平均值dist是在128维的特征空间计算该图片与中心点的距离非软边界是比较极端直接把dist当成损失意思是让所有的特征向量都向中心点靠近越靠近损失值越小这种比较暴力第二种是软边界意思是该图片的特征只要在以self.c为中心点半径为R的球体中就行不需要和中心点非常靠近就行而且是在球体内在球体外的才产生损失才惩罚torch.mean(torch.max(torch.zeros_like(scores),scores))这句话就是这个意思损失的第二部分是让所有的点尽可能在球体内将球体外的那部分长度作为损失值当点在球体内dist Rloss 0这里有一个惩罚因子就是1 / self.nu在01范围内这控制允许多少异常点在球外。损失的第一部分是R的平方是让球体半径尽可能小第一部分负责让球体缩小第二部分负责惩罚跑出去的点outputsnet(inputs)disttorch.sum((outputs-self.c)**2,dim1)ifself.objectivesoft-boundary:scoresdist-self.R**2lossself.R**2(1/self.nu)*torch.mean(torch.max(torch.zeros_like(scores),scores))else:losstorch.mean(dist)loss.backward()optimizer.step()三、Deep SVDD的疑问Deep SVDD的第二个步骤就是为了把正常的图片的特征都拉近那么这里有一个疑问当出现一张异常图片比如故障图片障碍物图片等提取的特征真的可以将其分开么比如想做轨道上的障碍物检测那么正常轨道有直的弯的白天的晚上的不同光照的而异常只是在轨道上有个人有个石头有些泥石流等那么Encoder提取的异常特征真的会远离正常特征么我觉得这个是不一定的Deep SVDD要想有效果核心在于Encoder需要学习到正常图片的本质结构哪些视觉变化是正常的哪些视觉变化是异常的。其实你发现要想神经网络快速学习和约束最好是告诉它哪些是正常的同时也要告诉它哪些是异常的但是Deep SVDD最关键的一点是无法统一异常的形态但是我们人眼是可以分清楚哪些变化是属于一样哪些变化是属于异常这种特点要在特征空间中凸显出来。回过来再看Deep SVDDDeep SVDD希望正常的特征都集中在一个球里面如果我们做轨道异常检测那有一个问题轨道的形态光照等是否放在特征球里面呢另外我的障碍物有可能很小有障碍物的轨道的特征有是否在特征球体外呢。Deep SVDD是一种解题的思路但是这个方法不一定使用目前我想做的事情但是它让我学会了如何去控制特征的分布从而对特征进一步的理解同时虽然不适用这个问题但是有可能会在别的问题中给你带来解题思路。