视频物体检测(VID) NoScope:1000x的视频检索加速算法

本文是视频中单种目标的二分类器。木有检测,木有进行多目标分类,主要是为了保证速度性能。

paper:https://arxiv.org/abs/1703.02529 
code:https://github.com/stanford-futuredata/noscope

计算机视觉的进展,特别是近期深度神经网络的进展,使得在不断增长的视频数据中进行检索成为可能。但是,基于神经网络去做大规模视频检索,直接的问题就是计算量激增。比如现在最快的物体检测器能达到1~2.5x real time的效率(30~80fps),前提是买一个$4000的GPU。

我们来算一笔账,英伟达的K80 GPU,售价是$4000左右,处理视频的速度为50fps,那么跑1000h的视频(e.g., 25fps)就需要500h,P100 GPU更快一点,能达到80fps,也更贵$4600,跑1000h的视频需要312.5h。300~500h如果租云主机去处理的话($0.7~0.9/h)就是$300左右。

而现在图像和视频的传感器那么便宜,一个640*480的VGA CMOS传感器只要不到$0.65,这就造成了数据获取和数据处理开销的极大的不平衡,将近3个数量级的差异了。说明现在这个时代做视频相关的算法已经不是穷人可以玩的起的了。

所以斯坦福大学提出了NoScope,就是为了减小基于NN的video query的计算量而设计的系统,它能够达到1000x的视频检索加速。

NoScope支持对视频检索一种特定物体是否存在,也就是单种物体的二值分类器。其结构主要包含3个相互集联的module,如下图。

  1. difference detector主要负责监测帧间的差异,如果差异很小,则无需再做检测,之前用之前的结果即可。如果差异大,则进入第2步;
  2. 输入到第二层级联,specialized model。这是一个专门针对目标物体和目标视频训练的分类器,通过牺牲泛化能力达到在特定场景下对特定物体的识别效果接近于reference model(见下文),非常小而快速,如果specialized model对其分类的预测结果很自信,则输出,如果不自信,则进入第3步;
  3. 输入到第三层级联,也就是reference model,这个模型是一个state-of-the-art的物体检测器,检测效果杠杠的,就是速度慢,所以只有前两个条件不满足的情况下才用它。

这里写图片描述

所以发现了吧,NoScope通过这种级联的方式,在前两级处理了大量的视频帧,像difference detector速率可以达到100k fps,specialized model可以达到27k fps。而只有在前两级都不靠谱的情况下才会使用最耗时的reference model(30~80 fps),这就是NoScope能够达到1000x的视频检索加速的原因。而传统的方法是直接在每帧使用reference model,这个速率一比较就立分高下了。

NoScope的整个流程是这样的。给定一个待检索视频和目标物体,以及一个事先训好的reference model(如YOLOv2),NoScope首先进入训练阶段:它会自动训练difference detector和specialized model,并查找最佳参数;然后再进行inference,利用事先确定好的参数去跑上图的pipeline。所以真是一条龙的服务啊,你只要按照一贯的方法训练一个精度为主的物体检测器,就可以直接拿到这个框架里达到1000x的加速了。

有几个问题需要提醒:NoScope是针对单种物体的二值分类器,为什么没有做检测是因为检测的开销比分类要大得多,为什么做单种物体是因为保证精度不让specialized model”分心”。

算法细节

1. Model Specialization

针对特定场景特定物体训练的轻量级CNN模型,层数和Channel都降到最低。这是牺牲泛化能力以达到效率的提升。在训练的时候用精度很高的reference model跑一遍目标视频的一小段时间,得到的标签作为gt去训练specialized model。这个specialized model是一组类似于AlexNet但是比它还要浅的网络,一组的意思是训练了多个,改变了不同的网络参数如卷积层数(2,4 or 6),卷积层filter个数(32 or 64),全连接层neurons个数(32,64,128 or 256)。在后面Model Search的部分会提到NoScope会进行自动的模型搜索,为每个视频和query找到最适合的model。 
这里写图片描述

2. Difference Detection

NoScope的difference detector提供了两个版本,一个是当前帧和reference image整图求特征(i.e.,HOG, SIFT, ColorHistogram, RawImage)然后算最小均方差,另一个是blocked版本,即把图分成多个block,然后在block里算最小均方差,然后通过训练一个逻辑回归分类器来weight每个block对于最终判断两张图片的差异的重要性。可以看出blocked的版本计算量更大一些。

另外关于reference image也有两个选择,一种是给定一个reference图,其他帧都和这个图做比较;另一种是给定一个t_diff值,表示每一帧都和其前t_diff时刻的那一帧做比较。具体采用哪个difference model是video-dependent的。比如一个大部分时间是没人的人行道,它很容易就能找到一个空的人行道作为reference image,这样检测器可以很容易地通过和这张图片的对比把所有空的帧skip掉。相反,对于一个公园的场景来说,总是会存在有移动物体,比如人们躺在草地上之类的,但是这些物体如果移动得非常缓慢,比如和1s前相比也还是差不太多,那么通过一个earlier frame的reference image就比较合适。 
这里写图片描述

3. Cost-based Model Search

模型参数搜索首先需要指定两个目标精度值,FP*和FN*,然后模型的搜索就是在满足false positive rate< FP*且false negative rate< FN*的情况下通过grid search不同的参数(e.g., difference detector threshold, specialized model threshold..)来最大化E,E在这里是inference时所需时间的倒数,即目标是达到所需时间最短。

NoScope发现,自动搜索来为每个视频个性化地配置cascade的参数对于性能是非常重要的。

算法局限

这个部分一定要特别拎出来说,不好好看论文是会吃亏的,因为NoScope的局限性还是比较大的。

  1. 只适用于fixed-angle的视频。NoScope是针对监控视频做的物体分类框架,所以呢,目前的difference detector是针对固定视角的相机捕获到的视频流去做帧间差异检测的,同样specialized model也是针对固定视角的。
  2. 二分类的任务。前文也提到了,NoScope是针对一种物体的二分类器。
  3. 输入是batch of images. NoScope为了效率的提升,是将一个batch的视频帧作为输入的。这对于现有的视频是可以接受的,但对于实时的那种视频,则会存在一定的延时。

总的来说,NoScope做了很多的预设条件,才有了1000x的视频检索加速。

实验

这里写图片描述

这里写图片描述

参考:

[1]https://blog.csdn.net/elaine_bao/article/details/78824357

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值