Out-of-distribution Detection系列专栏(二)

目录

前言

A baseline for detecting misclassified and out-of-distribution examples in neural networks

ID与OOD

OOD研究中常用的数据集以及实验构造方式

OOD实验的基本设置

Max-Softmax方法的主要思想

评价指标

AUROC与AUPR的计算方法

Max-Softmax检测效果

模型改进


前言

这是OOD检测专栏的第二篇文章,也是OOD检测比较正式的开篇之作,在此篇文章中,关于OOD检测任务的描述,衡量指标以及一些实验构造方法都被详细的定义,为后续关于OOD的研究奠定了基础。

A baseline for detecting misclassified and out-of-distribution examples in neural networks

论文链接:https://arxiv.org/pdf/1610.02136.pdf

本篇文章是使用深度学习方法做OOD检测的开篇之作,在介绍文章之前,我们先说明一下什么是OOD,什么是ID。

ID与OOD

ID指的是in-distribution数据,也就是我们熟悉的训练数据;OOD指的是out-of-distribution,在不同的领域也可能被叫做outlier或者是anomaly data,说的是与ID分布不一致的数据。其实ID和OOD的界定比较模糊,通常我们是将语意信息相差较大的两个数据集构成ID和OOD。例如,我们在CIFAR-10上训练好了一个图像分类网络,那么对于这个网络来讲,CIFAR-10数据集的图像就是ID数据,而MNIST,或者是SVHN,以及LSUN等数据集就可以看做是OOD。通常一个比较难以回答的问题就是,在CIFAR-100上训练好的网络,那么CIFAR-10对于网络来说是OOD吗?因为二者相似性很高。在我看来,我们构造验证试验的时候,还是需要尽量选取语义信息具有差异性的两个数据集构成ID与OOD。

OOD研究中常用的数据集以及实验构造方式

在OOD研究中,常用的数据集主要是一些小规模数据,超大规模数据集目前还没有在研究中大范围的看到,这里介绍一下经常使用的几个并说明实验的构造方法。

MNIST,Fashion- MNIST,Omniglot:这是三个单通道的灰度数据集。MNIST与Fashion-MNIST大家都比较熟悉,一个是手写数字,一个是服装图像。Omniglot是一个在小样本学习中经常使用的数据集,它里面包含了1623个类别,每个类别仅有20个样本。在OOD检测中,通常是使用MNIST作为ID数据,将Fashion-MNIST与Omniglot的混合作为OOD数据;或者是将Fashion- MNIST作为ID数据,将MNIST与Omniglot的混合作为OOD数据。由于Omniglot并不适合训练常规的分类网络,因此通常不作为ID数据。

CIFAR-10,CIFAR-100,TinyImageNet,LSUN,SVHN:这是5个RGB三通道的彩色数据集。CIFAR-10与CIFAR-100大家应该都比较熟悉,在分类网络的评测中经常看到它们。TinyImageNet是类似于ImageNet数据集的一个规模较小的数据集,它里面包含有200个种类的数据。LSUN是一个大规模的场景识别数据集,包含厨房、客厅、卧室等等之类的图像。SVHN是街景数字识别,主要是一些门牌号上的数字。这些数据集的下载链接都比较容易找到,我把它们列在文章的最后。在OOD实验设计中,通常是有以下几种设计方法,当然这些组合方案并不绝对,只是为了方便与大家常用的组合进行比较:

  • CIFAR-10作为ID数据,SVHN、LSUN、TinyImageNet作为OOD数据
  • CIFAR-100作为ID数据,SVHN、LSUN、TinyImageNet作为OOD数据
  • SVHN作为ID数据,LSUN、CIFAR-10、TinyImageNet作为OOD数据

因为需要在ID数据上训练分类网络,因此,在设计实验时,通常会选择不太复杂的数据集作为ID,而将其他数据作为OOD数据。

OOD实验的基本设置

在OOD检测中,我们通常约定不可以使用任何形式的OOD数据,我们能接触到的只有ID数据,这也是符合OOD研究的目的的。在实际使用中,网络不可能会见到所有的OOD图像,因此,如果在网络接触到的OOD数据上评测它的拒识能力是没有意义的。在一些方法中,作者使用了OOD数据来finetune网络,这样得到的指标结果是偏高的,并且说服力不强。

Max-Softmax方法的主要思想

在后续的专栏中,我们使用Max-Softmax来指代本文章中提出的方法。在实验中,作者发现了虽然卷积神经网络会赋予OOD样本很高的置信度,但是从统计规律来看,ID数据的置信度是要高于OOD样本的置信度的。这里的置信度指的是Softmax激活函数输出的所有类别的置信度的最大值。用这个最大的置信度来判断样本是ID还是OOD就是所谓的Max-Softmax方法。因此,这篇文章是直接使用传统的卷积神经网络来检测OOD样本的,检测的依据是网络输出的置信度的最大值。

评价指标

如何评价方法检测OOD的能力需要统一的标准。在本文中,作者巧妙的规避了显式的设定置信度阈值的评价方法,而是采用了两个阈值无关的评价准则,AUROC与AUPR。值得说明的一点是,虽然这两个评价指标不需要定义阈值,但是在实际应用中,需要在ROC曲线或者PR曲线上选择合适的点,也就是合适的置信度阈值来进行OOD判断。

那么如何计算AUROC与AUPR呢?OOD检测本质上是一个二分类问题,对于测试样本,我们是知道它们的真实标签的,也就是0-1标签,表示是ID样本还是OOD样本。同样的,我们的模型利用Softmax输出的最大置信度作为当前样本是ID数据的概率。利用这两组数值,我们就可以计算AUPR与AUROC。在计算AUPR的时候,作者将ID看作正样本计算AUPRin,将OOD样本看作正样本计算AUPRout,这两个指标分别反映了网络检测ID的能力与检测OOD的能力。AUPR以及AUROC这两个指标都是越大越好。

AUROC与AUPR的计算方法

我们用target来表示样本的真实标签,也就是0-1标签,0代表是OOD样本,1代表是ID样本。用prob来表示Max-Softmax的预测结果,也就是Softmax映射函数输出的最大置信度。置信度越接近于1,代表模型越确信输入样本为ID数据。有了target与prob,我们便可以计算AUROC以及AUPR。

from sklearn.metrics import roc_auc_score, average_precision_score

def get_metric(target, prob):
    au_roc = roc_auc_score(target, prob)
    au_pr_in = average_precision_score(target, prob)
    au_pr_out = average_precision_score(1 - target, -1 * prob)
    return au_roc, au_pr_in, au_pr_out

注意,在计算AUPR out的时候,需要将OOD数据看作是正样本,也就是交换正负样本标签,同时将置信度数值的大小关系交换,也就是变为原来的相反数。

Max-Softmax检测效果

在文章中,作者给出了直接使用卷积神经网络来检测OOD的指标结果,内容如下:

可以看出,相对于真实数据集,高斯噪声以及均匀噪声是很容易被检测出来的,它们被模型赋予了很低的置信度,对应的,它们的AUROC以及AUPR指标都很高。总而言之,AUROC是综合反应模型检测效果的,AUPRin反应的是模型检测ID数据的能力,AUPRout反应的是模型检测OOD数据的能力,较高的指标寓意着性能更好的检测模型。

模型改进

在文章最后,作者提出了一种基于自编码器的网络结构,用于提升OOD检测的性能。作者在真实图像也就是ID数据的基础上,添加噪声,并把得到的新图像认为是OOD数据。

 上图中的蓝色部分在ID数据上训练,蓝色部分的下半部分结构是一个decoder,负责重构输入图像,上半部分是一个分类器,用于对输入进行分类。在训练完这一部分之后,冻结住权重,再训练红色部分。红色部分是一个二分类结构,输入有三个:第一阶段的重构误差,第一阶段的分类结果,第一阶段的隐空间特征向量。输出使用\sigma(\cdot)函数进行映射,0代表是OOD样本,1代表是ID样本。由于蓝色部分仅在ID数据上训练过,因此输入OOD数据时,会导致较大的重构误差以及具有区分度的隐空间特征,这是后续的红色模块能够顺利训练并区分ID与OOD的基础。

值得说明的一点是,这里作者使用的OOD数据是ID数据添加噪声得到的,并不是其他的OOD数据集,因此,这并没有违背OOD检测的基本设置。通过使用这种自编码器的两阶段结构,模型检测OOD的能力也得到了明显提升,效果如下:

 上图中的Softmax代表的就是直接使用卷积神经网络检测的效果,AbMod是作者提出的基于自编码器结构的两阶段模型检测效果。可以看出,模型的检测能力要远远好于Max-Softmax,AUPRin、AUPRout以及AUROC等指标均有了明显的提升,说明模型对ID样本的检测能力和对OOD样本的检测能力均有大幅提升。


### 关于Out-of-Distribution (OOD) 检测 #### OOD概念定义 在机器学习领域,尤其是深度学习中,模型通常被训练用于识别来自特定数据分布的样本。然而,在实际应用场景下,输入的数据可能并不遵循训练集中的分布模式。这些不遵循预期分布规律的新颖或者异常样例被称为Out-of-Distribution(OOD)[^1]。 #### 处理方法概述 为了有效应对OOD问题,研究人员提出了多种策略和技术来增强模型对于未知类别或异常情况下的鲁棒性和泛化能力: - **基于置信度的方法**:通过评估模型给出的概率分布特性(如熵),可以判断测试实例是否属于已知分类之外。当预测结果显示出较高的不确定性时,则认为该样本可能是OOD [^3]。 - **证据理论驱动的学习框架**:引入狄利克雷先验作为不确定性的表示形式,并调整网络结构使其能够显式地估计这种不确定性水平。这种方法允许区分高可信度的正常类成员与其他潜在的异常点 。 - **对比学习与自监督机制**:利用未标记的大规模数据集构建辅助任务,从而让特征提取器学会捕捉更广泛而稳定的语义信息,有助于提高对不同域间变化的适应力 [^2]。 #### PyTorch实现案例 针对上述提到的技术路线之一——基于置信度的OOD检测方案,下面提供了一个简单的Python代码片段展示如何计算并筛选出疑似OOD样本的过程: ```python import torch.nn.functional as F def detect_ood(logits, threshold=0.9): probs = F.softmax(logits, dim=-1) max_probs, _ = torch.max(probs, dim=-1) ood_mask = max_probs < threshold return ood_mask.cpu().numpy() ``` 此函数接收神经网络最后一层输出logits以及设定好的阈值参数threshold,默认情况下取值为0.9;返回布尔数组指示哪些位置对应着可能存在的OOD项。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值