OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试

分布外(OOD)检测对于开放世界智能系统的可靠运行至关重要,但目前面向对象的检测方法存在「评估不一致」(evaluation inconsistencies)的问题。

之前的工作OpenOOD v1统一了OOD检测的评估,但在可扩展性和可用性方面仍然存在限制。

最近开发团队再次提出OpenOOD v1.5,相比上一版本,新的OOD检测方法评估在确保准确、标准化和用户友好等方面得到显著提升。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试图片

paper: https://arxiv.org/abs/2306.09301

OpenOOD Codebase: https://github.com/Jingkang50/OpenOOD

OpenOOD Leaderboard: https://zjysteven.github.io/OpenOOD/

值得注意的是,OpenOOD v1.5将其评估功能扩展到ImageNet等大规模数据集,研究了重要但尚未开发的全谱OOD检测,并引入了新功能,包括在线排行榜和易于使用的评估器。

这项工作也有助于深入的分析和见解来自全面的实验结果,从而丰富了知识库的OOD检测方法。

通过这些增强,OpenOOD v1.5旨在推动OOD研究的进展,并为OOD检测研究提供更强大和更全面的评估基准。

研究背景

对于训练好的图像分类器,能让其可靠地在开放世界中工作的一个关键能力便是检测未知的、分布外的(out-of-distribution, OOD)样本。

例如我们利用一组猫狗照片训练出了一个猫狗分类器。对于分布内的(in-distribution, ID)样本,也就是这里的猫、狗图片,我们自然期待分类器能够准确地将它们识别到相应的类别中去。

而对于分布外的OOD样本,也就是除了猫狗之外的任何图片(例如飞机、水果等等),我们希望模型能够检测出它们是未知的、新颖的物体/概念,因而无法将它们判别到分布内的猫或狗任何一类中。

这个问题便是分布外检测(OOD detection),其近年来吸引了广泛的关注,新工作层出不穷。然而领域快速扩张的同时,追踪、衡量领域的发展现状却由于种种原因成了一件难事。

原因1:不一致的测试OOD数据集。

深度学习各个任务的快速发展都离不开统一的测试数据集(就像图像分类有CIFAR,ImageNet,物体检测有PASCAL VOC,COCO)。

然而不幸的是OOD检测领域一直以来都缺乏统一的、被广泛采用的OOD数据集。这就造成了在上图中,当我们回看已有工作的实验设定时,会发现所用的OOD数据十分不一致(例如对于CIFAR-10是ID数据的情况,有些工作使用MNIST,SVHN作为OOD,有些工作使用CIFAR-100,Tiny ImageNet作为OOD)。在这样的情况下,直接公平地比较全部方法面临巨大困难。

原因2:令人困惑的术语。

除了OOD检测外,另外一些术语比如“开集识别”(Open-Set Recognition, OSR),“新类检测”(Novelty Detection)也常常出现在文献中。

它们本质上都在关注同一个问题,仅在一些实验设定的细节上有着微小差别。然而不同的术语会导致方法之间形成不必要的分支,例如OOD检测和OSR就曾经被当作是两个独立的任务,而不同分支之间的方法(尽管在解决同一个问题)也很少被放在一起比较。

原因3:错误的操作。

在许多工作中,研究者们往往直接使用OOD测试集中的样本来调参甚至训练模型。这样的操作会对方法的OOD检测能力做出高估。

以上的问题显然是对领域的有序发展不利的,我们迫切需要一个统一的基准和平台来测试评估现有以及未来的OOD检测方法。

OpenOOD 在这样的挑战下应运而生。其第一版迈出了重要的一步,然而有着规模小、可用性有待提升的问题。

因此在OpenOOD全新版本v1.5中,我们进一步做了加强和升级,试图打造一个全面、准确、易用的测试平台供广大研究者使用。

总结来看,OpenOOD有着如下重要的特性和贡献:

1. 庞大、模块化的代码库。

该代码库将模型结构、数据预处理、后处理器、训练、测试等等进行了解藕及模块化,方便复用以及开发。目前OpenOOD实现了近40种最先进的针对图像分类任务的OOD检测方法。

OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试图片

2. 可一键测试的评估器。

如上图所示,仅用几行代码,OpenOOD的评估器就可以在指定的ID数据集上给出所提供的分类器、后处理器的OOD检测测试结果。

相应的OOD数据是由评估器内部所确定并提供的,这保证了测试的一致性和公平性。该评估器也同时支持标准OOD检测(standard OOD detection)和全谱OOD检测(full-spectrum OOD detection)两种场景(后文会有更多介绍)。

3. 在线排行榜。

利用OpenOOD,我们在CIFAR-10,CIFAR-100, ImageNet-200,ImageNet-1K四个ID数据集上比较了近40种OOD检测方法的性能,并将结果制作成了公开排行榜。希望能够帮助大家随时了解领域内最有效、最有潜力的方法。

4. 实验结果中的新发现。

根据OpenOOD全面的实验结果,我们在论文中提供了许多新发现。例如,尽管看起来与OOD检测关系不大,但数据增强(data augmentation)实际上能有效提升OOD检测的性能,且这方面提升与具体OOD检测手段带来的提升是正交、互补的。

另外,我们发现已有方法在全谱OOD检测上的表现并不尽如人意,这也将是未来领域内一个重要的待解决问题。

问题描述

这一部分会简略、通俗地描述标准与全谱OOD检测的目标。对于更详细、正式的描述,欢迎大家阅读我们的论文。

OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试图片

首先讨论一些背景。在我们所考虑的图像分类场景下,分布内(ID)数据是由相应的分类任务所定义的。例如对于CIFAR-10分类,ID分布就对应着它的10个语义类别。

OOD的概念是相对于ID形成的:ID语义类别之外的、与ID类别不同的任何语义类别所对应的图片都是分布外OOD图片。与此同时,我们需要讨论如下两种类型的分布偏移(distributional shift)。

Semantic Shift:深层语义层面上的分布变化,对应上图横轴。例如训练时语义类别是猫、狗,测试时语义类别是飞机、水果。

Covariate Shift:表层统计层面上的分布变化(而语义不变),对应上图纵轴。例如训练时是猫、狗的干净自然照片,测试时是加了噪声或手绘的猫、狗图片。

有了上述背景,再结合上图就可以很好理解标准以及全谱OOD检测。

标准OOD检测

目标(1):在ID分布上训练一个分类器,使其能够准确对ID数据进行分类。这里假设测试ID数据与训练ID数据不存在covariate shift。

目标(2):基于训练好的分类器,设计OOD检测方法使其能够对任意样本进行ID/OOD的二分类区分。在上图中对应的是将(a)和(c) + (d)区分开来。

全谱OOD检测

目标(1):与标准OOD检测类似,但区别在于考虑了covariate shift,也就是无论测试ID图片相比训练图片是否有covariate shift,分类器都需要精准分类到相应的ID类别中(例如猫狗分类器不仅应该准确分类“干净”猫狗图片,还应当能泛化到带噪、模糊的猫狗图片上)。

目标(2):同样考虑covariate-shifted ID样本,需要将其与正常(没有covariate shift)的ID样本一同与OOD样本判别开来。对应上图中区分(a) + (b)和(c) + (d)。

为什么全谱OOD检测很重要?

熟悉的小伙伴可能已经发现,全谱OOD检测中的目标(1)实际上对应着另一个很重要的研究课题——分布外泛化(OOD generalization)。

需要澄清一下,OOD泛化中的OOD指的是存在covariate shift的样本,而OOD检测中的OOD指的是存在semantic shift的样本。

这两种偏移(shift)都是现实世界中十分常见的,然而现有的OOD 泛化和标准OOD检测都仅仅只考虑了其中一种而忽略了另一种。

与之相反,全谱OOD检测在同一场景下将两种偏移自然地考虑在了一起,更准确地反映了我们对于一个理想分类器在开放世界中表现的预期。

实验结果及新发现

在1.5版本中,OpenOOD对近40种方法在6个基准(benchmark)数据集(4个针对标准OOD检测,2个针对全谱OOD检测)上做了统一、全面的测试。

论文中对所实现的方法及数据集都进行了描述,欢迎大家查阅。全部实验也都可以在OpenOOD的代码库中复现。这里我们直接讨论从对比结果中得到的发现。

OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试图片

发现1:没有赢家通吃(no single winner)。

在上表中,不难发现并没有任何一个方法能够在全部基准数据集上持续地给出突出表现。

例如后处理的方法(post-hoc inference methods)ReAct和ASH在大数据集ImageNet上表现优异,但在CIFAR上相比其他方法并没有优势。

与之相反,一些在训练中加入约束的方法(training methods),例如RotPred和LogitNorm,在小数据集上要优于后处理方法,但在ImageNet上并不突出。

发现2:数据增强有效(data augmentations help)。

如上表所示,尽管数据增强并不是专门为OOD检测所设计的,但它们却能有效提升OOD检测的表现。更令人惊喜的是,数据增强带来的提升与具体OOD后处理方法带来的提升是互相放大的。

这里以AugMix为例,当它与最简单的MSP后处理器结合时,在ImageNet-1K near-OOD检测率上达到了77.49%,仅比不适用数据增强的交叉熵损失(corss-entropy loss)训练的检测率77.38%高1.47%。

然而当AugMix与更先进的ASH后处理器结合时,相应的检测率比交叉熵基线高了3.99%,并达到了我们测试中最高的82.16%。这样的结果显示了数据增强与后处理器的结合对于未来进一步提升OOD检测能力是非常有潜力的。

发现3:全谱OOD检测对现有方法提出了挑战(full-spectrum detection poses challenge for current detectors)。

从上图中可以清晰的看出,当场景从标准OOD检测切换为全谱OOD检测时(也即在测试ID数据中加入了covariate-shifted ID图片),绝大多数方法的性能都表现出了显著的退化(大于10%的检测率的下降)。

这代表着当前方法倾向于将实际语义未发生变化的covariate-shifted ID图片标记为OOD。

该行为与人类的感知(同时也是全谱OOD检测的目标)是相悖的:假设一个人类标记员在标记猫狗图片,此时给他/她出示带噪、模糊的猫狗图片,他/她应当仍会识别出那是猫/狗,是分布内ID数据而不是未知的分布外OOD数据。

总的来看,目前方法无法有效地解决全谱OOD检测,而我们相信这将是未来领域内的一大重要问题。

此外还有许多发现没有列在这里,例如数据增强对于全谱OOD检测仍旧有效等等。再次欢迎大家阅读我们的论文。

展望

我们希望OpenOOD的代码库、测试器、排行榜、基准数据集以及详实的测试结果能够汇集各路研究人员的力量一起来推动领域发展。十分期待大家使用OpenOOD进行OOD检测的开发、测试。

我们也欢迎任意形式的对OpenOOD的贡献,包括但不限于提出反馈,将最新的方法添加到OpenOOD代码库和排行榜中,扩展未来版本OpenOOD等等。

闪念贝壳 闪念贝壳

闪念贝壳是一款AI 驱动的智能语音笔记,随时随地用语音记录你的每一个想法。

闪念贝壳 218 查看详情 闪念贝壳

参考资料:https://arxiv.org/abs/2306.09301

以上就是OpenOOD更新v1.5:全面、精确的分布外检测代码库及测试平台,支持在线排行榜、一键测试的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/974116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
苹果高管谈iPhone 16拍照按钮:设计从用户出发,实现靠团队协作
上一篇 2025年12月1日 20:11:38
SQL语言动态执行函数怎样实现灵活查询 SQL语言在运行时SQL构建的安全实践
下一篇 2025年12月1日 20:11:40

相关推荐

  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • 如何让动态追加元素的类事件生效?

    如何在追加元素后使其绑定类事件生效 在页面中引入三方 JavaScript 类并通过添加相应 class 来调用事件方法是一种常见的做法。然而,如果通过 JavaScript 追加标签元素,即使添加了对应的 class,事件也可能无法生效。 为了解决这个问题,可以尝试以下步骤: 检查追加的标签是否为…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100
  • 创建指定大小并填充特定数据的Golang文件教程

    本文将介绍如何使用Golang创建一个指定大小的文件,并用特定数据填充它。我们将使用 `os` 包提供的函数来创建和截断文件,从而实现快速生成大文件的目的。示例代码展示了如何创建一个10MB的文件,并将其填充为全零数据。掌握这些方法,可以方便地在例如日志系统或磁盘队列等场景中,预先创建测试文件或初始…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000
  • 使用 WebCodecs VideoDecoder 实现精确逐帧回退

    本文档旨在解决在使用 WebCodecs VideoDecoder 进行视频解码时,实现精确逐帧回退的问题。通过比较帧的时间戳与目标帧的时间戳,可以避免渲染中间帧,从而提高用户体验。本文将提供详细的解决方案和示例代码,帮助开发者实现精确的视频帧控制。 在使用 WebCodecs VideoDecod…

    2026年5月10日
    000
  • Discord.py 交互按钮超时与持久化解决方案

    本教程旨在解决Discord.py中交互按钮在一段时间后出现“This Interaction Failed”错误的问题。我们将深入探讨视图(View)的超时机制,并提供通过正确设置timeout参数以及利用bot.add_view()方法实现按钮持久化的具体方案,确保您的机器人交互功能稳定可靠,即…

    2026年5月10日
    000
  • Debian Copilot的社区活跃度如何

    debian copilot是codeberg社区维护的ai助手,旨在为debian用户提供服务。尽管搜索结果中没有直接提供关于debian copilot社区支持活跃度的具体数据,但我们可以通过debian社区的整体活跃度和特点来推断其活跃性。 Debian社区的一般情况: Debian拥有详尽的…

    2026年5月10日
    000
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200
  • c++如何实现UDP通信_c++基于UDP的网络通信示例

    UDP通信基于套接字实现,适用于实时性要求高的场景。1. 流程包括创建套接字、绑定地址(接收方)、发送(sendto)与接收(recvfrom)数据、关闭套接字;2. 服务端监听指定端口,接收客户端消息并回传;3. 客户端发送消息至服务端并接收响应;4. 跨平台需处理Winsock初始化与库链接,编…

    2026年5月10日
    100
  • JavaScript函数中插入加载动画(Spinner)的正确方法

    本文旨在解决在JavaScript函数中插入加载动画(Spinner)时遇到的异步问题。通过引入async/await和Promise.all,确保在数据处理完成前后正确显示和隐藏加载动画,提升用户体验。我们将提供两种实现方案,并详细解释其原理和优势。 在Web开发中,当执行耗时操作时,显示加载动画…

    2026年5月10日
    100
  • 使用 Pydantic v2 实现条件性必填字段

    本文介绍了如何在 Pydantic v2 模型中实现条件性必填字段。通过自定义验证器,可以根据模型中其他字段的值来动态地控制某些字段是否为必填项,从而满足 API 交互中数据验证的复杂需求。本文提供了一个具体的示例,展示了如何确保模型中至少有一个字段被赋值。 在 Pydantic v2 中,虽然没有…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信