斯坦福提出高速视频目标检测系统NoScope:速度超现有CNN上千倍

卷积神经网络在目标检测任务上已经取得了优良的表现,但它们的计算成本比较高、速度比较慢,不适用于大规模的实时视频处理。为了解决这个问题,斯坦福大学的几位研究者提出了一个名叫 NoScope 的系统,将目标检测的速度提升了数千倍。该研究的相关论文和代码也已发布,本文是这些研究者对该项目的介绍文章,机器之心对其进行了编译介绍。

论文地址:https://arxiv.org/abs/1703.02529

项目地址:https://github.com/stanford-futuredata/noscope

这个时代,视频数据正在爆发式增长。光是在英国就有多达 400 万个 CCTV(闭路电视监控系统),而每分钟被用户上传到 YouTube 的视频就长达 300 小时。近来深度学习的发展让我们可以自动分析这些越来越大量的视频数据——让我们可以查询感兴趣的目标、检测罕见和异常事件、筛选这些几辈子也看不完的也没人想看的视频。但是,这些深度学习方法的计算成本都很高:当前最佳的目标检测方法在当前最先进的英伟达 P100 GPU 上的处理速度是 10-80 帧每秒。如果只有一个视频的话,这还好说,但这却无法实现大规模的部署应用。举个例子,如果要实时分析英国所有的 CCTV,光是硬件就要花 50 亿美元。

为了弥合我们获取视频的能力和分析这些视频的成本之间的鸿沟,我们开发了一个名叫 NoScope 的系统。该系统处理视频流的速度可以比当前方法快上数千倍。我们的关键见解是:视频是高度冗余的,包含了大量时间局部性(temporal locality,即在不同的时间是相似的)和空间局部性(spatial locality,即在不同场景中看起来是相似的)。为了利用这种局部性,我们针对高效处理视频流的任务而从零开始设计了 NoScope。NoScope 采用了一系列利用了视频局部性的特定于视频的优化方法,从而能极大地减少每一帧的计算量,同时还能保持普通查询方法的高准确度。

在这篇文章中,我们将了解 NoScope 的每种优化方法的案例,并描述 NoScope 是如何将它们端到端地堆叠到一个模型级联(model cascade)中以获得多倍加速的——在真实世界的网络摄像头视频流上可以实现多达 1000 倍的加速!

来自台北的原型案例

假设我们想查询以下的网络摄像头视频流,以确定台北的公交车在何时通过一个给定的路口(比如,可用于交通分析):

台北路口的两段视频

对于这样的查询,当前最顶级的视觉模型会怎样回答?

我们可以运行一个目标检测卷积神经网络(CNN),比如 YOLOv2 或 Faster R-CNN。通过在视频的每一帧上运行该 CNN 来检测公交车:

使用 YOLOv2 标记后的台北路口的两段视频

这种方法的效果非常好——尤其是当我们使视频中出现的标签平滑过渡时,所以问题出在哪里呢?这些模型的成本高昂。这些模型每秒可以处理 10-80 帧视频,如果监控的是单个视频流,这还行;但如果要监控数千个视频流,这可就不够用了。

机会:视频中的局部性

为了做到更好,我们可以了解一下视频流本身的性质。具体来说,视频内容是高度冗余的。让我们回到台北的那个路口的视频流,看看一些公交车:

从这个视频流上,这些公交车看起来都差不多;我们把这种局部性称为特定于场景的局部性(scene-specific locality),因为在这个视频流中,我们关注的目标之间彼此差别并不大(比如相对于另一个不同角度的摄像头)。

此外,在这个台北路口,可以很容易看出在每帧基础上的变化并不大,即便公交车在移动:

我们称之为时间局部性(temporal locality),因为临近的帧看起来是类似的,含有类似的内容。

NoScope:利用局部性

为了用上上面的观察结果,我们一直在开发一个新的查询引擎 NoScope,其可以极大地加速视频分析查询。给定一个或一组要查询的视频流、要查询的相关目标(比如:找到上述台北路口视频流中的公交车帧)和一个目标 CNN(比如 YOLOv2,NoScope 可以输出根据 YOLOv2 得到的目标所出现的帧。但是,NoScope 比输入的 CNN 快得多:NoScope 并不是简单地运行计算成本高的目标 CNN,而是学习一系列利用了局部性的低计算成本模型,并且在任何时候都运行这些更便宜的模型。下面我们描述了两类更便宜的模型:特定于给定视频流和目标的模型(要利用特定于场景的局部性)和检查差异的模型(要利用时间局部性)。端到端地堆叠起来后,这些模型的速度可以超过原 CNN 的 100-1000 倍。

通过专用模型利用特定于场景的局部性

NoScope 可以使用专用模型(specialized models)来利用特定于场景的局部性,即被训练从特定视频流的角度检测相关目标的快速模型。今天的 CNN 已经可以识别大量目标了,其中包括猫、滑雪板或厕所。但是如果我们只想检测台北的公交车,我们就不需要关心猫、滑雪板或厕所;相反,我们可以训练一个只会从台北的摄像头视频中检测公交车的模型。

为了说明,下面给出了来自 MS-COCO 数据集的真实样本。这些是我们不关心,不需要检测的:

三张来自 MS-COCO 数据集的非公交车图像样本

两张来自 MS-COCO 数据集的公交车图像样本

NoScope 的专用模型也是 CNN,但它们比一般的目标检测 CNN 要简单得多(即更浅),也更快得多。这有什么用呢?NoScope 的专用模型每秒可以处理 15000 帧,相比而言 YOLOv2 每秒仅有 80 帧。我们可以使用这些模型作为原有 CNN 的替代。

通过差异检测器利用时间局部性

NoScope 使用差异检测器(difference detector)来利用时间局部性,即被设计用来检测目标变化的快速模型。在许多视频中,标签(比如「公交车」和「无公交车」)的变化比帧变化要慢得多(比如,公交车在视频中出现了 5 秒,而该视频每秒都有 30 帧)。为了说明,下面给出了两段各 150 帧的视频,但它们的标签没有任何变化!


每段视频都有 150 帧,但标签没有变化。右图的视频没有暂停!

相比而言,今天的目标检测模型是逐帧运行的,与帧之间的实际变化无关。这种设计决策的原因是比如 YOLOv2 这样的模型是在静态图片上训练的,因此是将视频当作是图像序列处理的!因为 NoScope 可以访问特定的视频流,所以它可以训练出具有时间依存性(temporal dependency)的差异检测模型。NoScope 目前的差异检测器是使用 logistic 回归模型来计算逐帧的差异。这些检测器的运行速度非常快,在 CPU 上就能达到每秒 10 万帧。和专用模型类似,NoScope 无需调用昂贵的 CNN 就能运行这些差异检测器。

将它们放到一起

NoScope 通过一种级联(cascade)的方式将专用模型和差异检测器堆叠到了一起,即形成缩减了计算的模型的序列。如果其差异检测器确信没有任何变化,那么 NoScope 就会舍弃那一帧;否则,如果专业模型对其标签有信心,那么 NoScope 就输出该标签。而且,对于特别困难的帧,NoScope 总是可以退回到完整的 CNN。

为了配置这种级联以及确定每个模型的置信水平,NoScope 提供了一个优化器,可以在准确度和速度之间平滑地权衡。想要更快的执行速度?NoScope 将会使更少的帧通过这个端到端的级联。想要更准确的结果?NoScope 将提高用于缩减分类决策的阈值。如下图所示,最终结果在当前方法的基础上实现了 10000 倍的提速。


左图为 NoScope 的系统示意图。右图给出了一段代表视频的速度-准确度曲线

差异检测器和专用模型都有助于这个结果。我们执行了一个因素分析:首先我们仅使用 YOLOv2,然后向该级联分别加入这两种快速模型。两者都用了必需的最大性能:


NoScope 系统的因素分析

为了总结 NoScope 的级联策略,其优化器首先在一段给定视频流上运行了缓慢的参考模型(YOLOv2、Faster R-CNN 等)以获得基准标签。根据这些标签,NoScope 训练了一组专用模型和差异检测器,并使用了一个 holdout set 来选择使用哪个专用模型和差异检测器。最后,NoScope 将这些训练后的模型级联在一起,并且在不确定的时候还可以调用原来的慢模型。

总结

总体来说,视频数据的内容是非常丰富的,但要使用现代神经网络来查询却非常慢。在 NoScope 中,我们将差异检测和专用 CNN 结合到了一个特定于视频的流程中,利用时间局部性将 CNN 查询提速了超过 1000 倍。结果得到的处理流程每秒能够处理 8000 帧视频。我们将继续改进 NoScope,使之支持多类别分类、无固定角度摄像机和更复杂的查询。

理论图像识别斯坦福大学NoScope理论应用视频
暂无评论
暂无评论~