- 论文题目:UBnormal: New Benchmark for Supervised Open-Set Video Anomaly Detection
- 论文链接:https://arxiv.org/pdf/2111.08644.pdf
- 代码链接:https://github.com/lilygeorgescu/UBnormal

检测视频中的异常事件通常被定义为二分类任务,其中训练视频仅包含正常事件,而测试视频包含正常和异常事件。在这种情况下,异常检测是一个开放集问题。然而,一些研究将异常检测等同于动作识别。这是一个封闭的场景,无法测试系统检测新异常类型的能力。
为此,我们提出了UBnormal,一种新的有监督的开放集基准,由多个虚拟场景组成,用于视频异常检测。与现有数据集不同,我们在训练时引入了像素级注释的异常事件,这是第一次使用完全监督学习方法进行异常事件检测。为了保留典型的开集公式,我们确保在视频的训练和测试集合中包含不相交的异常类型集。据我们所知,UBnormal是第一个视频异常检测基准,允许在一类开集模型和监督闭集模型之间进行公平的面对面比较;此外,我们还提供了实证证据,表明UBnormal可以在两个重要数据集(Avenue和ShanghaiTech)上提高最先进的异常检测框架的性能。
在近几年的文献及研究中,对于异常检测的方法任务无非通过两种形式:
一是将异常检测视为二分类任务(或离群值检测任务),在这种情况下,模型框架在训练时只训练正常事件的数据集,而测试数据则包含正常事件和异常事件。模型方法从测试数据中学习到一个正态分布模型,在测试时遇到“不熟悉”的数据时会将其标记为异常;
二是将异常检测视为弱监督的动作识别任务,其中训练视频包含正常和异常事件,但异常视频标注是在video-level(视频级别)提供的,不是帧级别。此方法对应于一个封闭集评估场景,其中训练和测试异常属于相同的动作类别,无法测试系统检测未发现异常类型的能力。
为了解决这些问题,我们提出了一种新的范式——将视频异常检测作为一个有监督的开集分类问题进行框架化。在此方法中,正常和异常事件在训练时都可用,但在测试推理阶段发生的异常属于一组不同的异常类型(类别),即训练时是一种异常类别,测试时又是另一种类别。将异常检测视为一个有监督的开集问题的主要优点是:(i)由于训练时异常的可用性,可以使用完全有监督的模型,(ii)能够在测试和训练时使用不同的异常动作类别情况下评估模型在“遇到”其它异常行为的性能;(iii)实现了一类开集方法和弱监督闭集方法之间的公平比较。对于一类问题的公式,监督开集公式的一个问题在于难以从现实世界中收集异常数据。
为了缓解这个问题,我们提出了UBnormal数据集,这是一个新的基准测试,它包含用于视频异常检测的多个虚拟场景。我们的场景是在Cinema4D中使用虚拟动画角色和放置在现实世界背景中的对象生成的,如下图所示。

本文作者对于异常检测任务的贡献有三个:
我们将视频异常检测作为一项有监督的开放集任务,引入了UBnormal,一个包含29个虚拟场景的新数据集,其中包含236902个视频帧;
我们表明,对异常事件加入训练集有助于各种最先进的异常事件检测模型性能提升;
我们进行了一项以数据为中心的研究,表明UBnormal数据可以为两个自然场景数据集(Avenue和Shanghai Tech)的最新技术方法带来性能提升。
UBnormal基准是使用Cinema4D软件生成的,它允许我们使用2D背景图像和3D动画创建场景。我们总共选择了29幅自然图像,代表街道场景、火车站、办公室等。在选定的背景图像中,我们确保消除应该属于前景的人、车或其他对象。从每个自然图像中,我们创建一个虚拟3D场景,每个场景平均生成19个视频。对于每个场景,我们生成正常和异常视频。在整个UBnormal数据集中,正常视频与异常视频的比例接近1:1。
在数据集中,我们包含了多达20多种异常,其中测试集、验证集及训练集中的异常类别都是不相同的。为了增加数据集的多样性,我们包括多个对象类别,例如人、汽车、滑板、自行车和摩托车;场景包括但不限于雾场景、夜间场景、火灾场景等等,如下图所示。
不同类别数据集
二分类开集模型
我们采用了论文A Background-Agnostic Framework with Adversarial Training for Abnor-mal Event Detection in Video.中介绍的最先进的框架。这是一种object-level方法,它将异常检测视为二分类任务。该框架由三个自动编码器和三个分类器组成。为了提高异常检测方法的性能,Georgescu等人为自动编码器提出了一种对抗性学习方法。为了克服训练期间缺乏异常样本的问题,他们创建了一组与场景无关的伪异常。伪异常样本在对抗训练过程中用作对抗样本,在二进制分类器的训练中用作异常样本。
监督闭集模型
我们采用Sultani等人在论文Real-World Anomaly Detection in Surveillance Videos.中提出的监督闭集模型。在这个框架中,正常和异常视频都表示为bags,视频片段是多实例学习中的实例。他们使用预处理C3D模型提取的特征表示每个视频。使用视频特征表示法,他们训练了一个前馈神经网络,使得来自异常bags的实例的最大得分高于来自正常bags的实例最大得分。它们还将稀疏性和平滑性约束合并到损失函数中,以进一步提高框架的性能。
动作识别框架
我们基准的第三个基线是动作识别模型。我们选择了Bertasius等人提出的最先进的模型Timesformer。其体系结构通过从帧序列中学习时空特征,将标准transformer体系结构调整为视频域。TimeSformer使用分散注意力,即分别学习空间和时间注意力图。我们训练TimeSformer模型来区分正常和异常行为。该模型预测了一系列帧异常的概率。
自监督多任务模型
我们使用Georgescu等人在论文Anomaly Detection in Video via Self-Supervised and Multi-Task Learning.中提出的的最先进的多任务学习框架来证明UBnormal可以用于提高两个重要异常检测数据集的性能。


在上图中,我们可以观察到,基于该数据集提出的不同最先进方法可以准确定位和检测异常。
在这项工作中,我们引入了UBnormal,一种新的视频异常检测基准。据我们所知,这是监督开集异常检测的第一个也是唯一一个基准。UBnormal的唯一限制可能是它由虚拟角色和模拟动作组成。然而,我们展示了几个证明UBnormal重要性的重要优点:
(i)它可以对开集模型和闭集模型进行公平和直接的比较;
(ii)它可以缓解现实数据集中缺乏训练异常的情况,与当前最先进的模型相比有了显著的改进。
卡通虚拟人物跟现实人物还是有区别的,容易出现问题或者检测不准确
其模拟场景与自然场景属于不同的数据分布。因此,在现实场景中,完全监督模型的行为可能不清楚。

数据集中的卡通人物

数据集中的异常种类
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
我们如何捕获或/和处理ruby中所有未处理的异常?例如,这样做的动机可能是将某种异常记录到不同的文件或发送电子邮件给系统管理。在Java中我们会做Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandlerex);在Node.js中process.on('uncaughtException',function(error){/*code*/});在PHP中register_shutdown_function('errorHandler');functionerrorHandler(){$error=error_
如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si