tensorflow2 目标检测_基于光流的视频目标检测系列文章解读

6dc008416d3794a3e441dacc36133457.png
作者:平凡的外卖小哥
全文5747字,预计阅读时间15分钟

1 简介

目前针对于图片的目标检测的方法大致分为两类:

faster R-CNN/R-FCN一类:
此类方法在进行bbox回归和分类之前,必须通过region proposal network(RPN)得到RoI,因此被称作是two-stage的方法。YOLO/SSD一类:
此类方法不需要RPN,直接在输入图片上进行bbox回归和分类,因此是一种one-stage的方法。


总的来说,第一种方法的准确率要比第二种方法要高,但是第二种方法的速度要快。在实际应用中,摄像头的数据以视频的方式产生。为了处理这些视频数据,目前普遍的做法是对每一帧进行目标检测和语意分割。然而,如图1所示,这样的处理方式有两种问题:1)帧与帧之间有大量的冗余计算,导致满足不了实时需求(fps>=15);2)由于移动目标存在失焦,遮挡等情况,导致目标在单帧上不能被检测到。为了解决这两个问题,在处理视频的时候需要利用帧与帧之间的上下文信息。因此,如何利用视频的时序信息来提高检测精度/速度,如何平衡accuracy speed tradeoff,是一个比较热门的研究方向。本文主要调研了使用光流来利用视频中时序信息的方法。

094ba7bd943cb337198a522e17e87ac2.png
图1:视频中的相邻两帧。图(a)中,相邻两帧的语义分割在大部分都是相同的,单帧分割会导致大量的冗余计算。图(b)中,由于目标的运动模糊,很可能会导致单帧目标检测的失败。

2 数据集

2.1 视频目标检测


从2015年起,ImageNet新增了视频目标检测的任务,object detection from video (VID)。其数据集标注了30类目标,是检测(DET)数据集200类的一个子集。训练集共有3862个视频片段,总帧数超过112万。性能衡量的metric是mean average precision(mAP)。

4e73a87d80aa81b2cdeea60ff6c150f9.png

2.2 视频语义分割


目前比较流行的是Cityscape的数据集。每个视频片段包含30帧,但只有其中的第20帧有ground truth标注。标注包含了30个语义分类。使用的metric是mean intersection-over-union(mIOU)。

17ee323730a195c6060646f4279ff3fa.png

3 Optical flow(光流)

3.1 光流简介


光流常用于计算图像中各个位置的瞬时移位,是依据视频帧与帧之间的各像素相关性而计算得到的。输入时序相邻的两帧

,光流计算帧上每个像素点的移位,使得移位过后,各像素点的位置在下一时刻和
一致。下图给出了在驾驶环境中的一个例子,光流由不同颜色的移位向量表示,且移位向量所代表的速度快慢由长短和颜色表示。可以看到,图片左侧的大货车和其他位置的移位向量不一样,因为大货车比其他静止物体(如路面)以更快的速度迎面而来。

8b2079348dba8ffbaa1955a9d44f51ed.png
图2: 光流的可视化。可以看到,图片左侧的大货车和其他位置的移位不一样,因为大货车比其他静止物体(如路面)以更快的速度迎面而来。

3.2 FlowNet


传统计算光流的方法不在此赘述,可以参考其wikipedia页面。传统方法计算光流通常是在CPU上实现的,速度较慢。并且如果想在计算机视觉中应用光流的话,用传统方法不能够end-to-end训练网络。因此,FlowNet [1] 提出了用neural network来计算光流的方法。如下图所示,其输入是视频片段中的两帧,由于时间间隔较短,图片之间具有强相关性。输出是各个像素点的移位,通过移位,可以得知上一帧各目标在下一帧的位置。

c23ae1b4fa0a2ae6df6f626b0ba24625.png
图3: FlowNet示意图。输入是视频片段的两帧,输出为光流。输出的光流是color-coded。


FlowNet的网络结构和用于semantic segmentation的网络结构类似,由两部分构成。FlowNet将之称为contracting部分和refinement部分,分别用于downsampling提取特征和upsampling恢复分辨率,由conv和deconv操作实现。和semantic segmentation的输入是一张图片不同,此网络输入是两张图片。作者提出了两种方式来处理,不过在后续工作中用的比较多的方法是直接将两张图片堆在一起作为一个有3+3=6个channel的图片输入给网络。

4 基于光流的视频识别

通过光流,我们能够得知上一时刻的物体在下一时刻的位置,能否应用光流来更好地解决视频识别中的accuracy speed tradeoff呢?答案是肯定的。当前计算机视觉使用到的神经网络从功能上可以分为两部分:


也就是说,一个网络由多层的,提取特征的

和浅的,负责具体任务输出的
构成。当前state-of-the-art的图片语义分割和目标检测的网络通常使用ResNet-101作为
,相比较而言,
却只有几层甚至一层。根据以上分析可知,网络的绝大部分的计算量在
上。


在上一节中,我们得知能够通过光流得到上一时刻的物体在当前时刻的位置,即光流表达了在pixel space上的对应关系。那么光流在feature space上,是否也保持同样的对应关系呢?如果是的话,就可以不用重复计算每一帧的特征,而是将上一帧的特征传播到当前帧,从而大大减少计算量。如下图所示,当前帧通过ResNet-101得到的两个特征图(第二行),和通过光流将关键帧特征传播而得到的特征图(第三行)是非常相似的,因此可以假设是成立的,即可以通过光流来传播feature。

acf16a2d9cc579d78c6cb201377df2b6.png
图4: 通过光流传播feature。可以看到,current frame通过ResNet-101得到的两个feature maps(第二行),和通过optical flow将key frame传播而得到的feature maps(第三行)是非常相似的。

4.1 更快


为了提高处理视频的速度,首先将视频中的各帧分为关键帧和非关键帧,且关键帧的数量远远小于非关键帧。在目标检测时候,只需要对关键帧通过

来提取特征,然后通过光流将关键帧的特征传播到非关键帧,从而达到减少计算量而提高速度的目的。Deep feature flow(DFF) [2] 就是基于这样的思想。假设当前帧的index为i,前一关键帧的index为k,则当前帧的feature可以通过下式得到:


其中,

是通过FlowNet得到的optical flow,
是point-wise scale coefficients,通过在原始FlowNet的最后一层增加层数得到。W 表示特征传播函数,实际上通过bilinear interpolation和point-wise multiplication实现,所以它是可微分的。DFF的工作流程如下图所示:

c376148af43ef3099c03ff113f8befa2.png
图5: DFF的工作示意图。选定关键帧过后,当前帧的特征由关键帧的特征通过光流传播得到。


DFF的计算量和传统对每帧进行特征提取的方法的计算量比值为:


上式中两个网络的复杂度可以根据它们的FLOPs来测量,下表列出了不同

的1/r值:

ae0648b2aa60699c1cd7b88b6068a76a.png


假设每隔 l 帧选择一次关键帧,则DFF的整体加速为:


DFF和传统基于每帧的方法在CityScape和ImageNet VID的表现如下表。可以看到,DFF在精度损失小于1%的情况下,能够对语意分割和目标检测分别达到3.7和5倍的加速。

6d8f789399a0ca104830340e789a5ee8.png

4.2 更准
如本文开头所述,由于视频中可能存在运动模糊,镜头失焦,遮挡等问题,导致在单帧上的目标检测失败。Flow-Guided Feature Aggregation (FGFA) [3] 提出了聚合相邻帧的特征来提升当前帧的检测效果的方法。其主要思想是,对当前帧进行目标检测的时候,

不仅考虑当前帧通过
得到的feature,也考虑相邻帧传播到此帧所得到的传播特征。假设考虑到的相邻帧的范围为K,当前帧的index为i,则输入到
的feature为:

其中


是一个衡量传播特征和此帧特征相似度的系数。下图展示了FGFA的工作流程:

fe210e2c56e9e0720ea9e57c5ceb770c.png
图6: FGFA的工作流程。当前帧输入给检测网络的特征是它自己的特征和相邻帧通过光流得到的传播特征的加权平均。

基于ResNet-101的FGFA在ImageNet VID上的表现如下表:

2d3ba33524246b7612db273c6fcee68e.png

可以看到,FGFA虽然提高了精度,但是相对于per-frame的方法速度降低了接近3倍。
4.3 更快+更准
以上两小节分别讨论了如何利用光流提高视频目标检测的速度和精度,但是都不能在速度和精度上两全其美。实际上,同时提高速度和精度也是可能的。首先,Impression Network(ImpNet) [4] 提供了一种思路。其主要思路是:
FGFA在任意帧都聚合了其邻近的2K+1帧的传播特征,导致计算量增大。同时,因为相邻帧的差异往往很小,这样密集的计算的信息冗余度也很高。因此ImpNet只对关键帧进行特征聚合,而对非关键帧只计算由关键帧传播得到的特征。
FGFA需要考虑当前帧之前的K帧和之后的K帧的特征,而在实际应用场景中是没有当前帧之后的K帧的信息的。因此,ImpNet并不直接应用Eq. 1,而是使用它的递归形式来聚合关键帧之间的特征。

ImpNet通过对关键帧维持一个叫

的特征来实现上述两点。对于相邻的关键帧k和k’,对非关键帧,输入到task网络的特征为关键帧通过光流得到的传播特征:


通过以上方式,ImpNet不仅通过光流传播特征提高速度,也用多帧特征聚合提高了精度。其在ImageNet VID上的表现总结如下:

13af7694441ca652c522b721b317be1d.png

另一篇文章 [5] 提出了思路和ImpNet类似的方法,其主要特点是:

和ImpNet一样,在关键帧上以递归的方式进行特征聚合。
对非关键帧,使用空间适应(spatially-adaptive)的特征传播,保证了传播特征的质量,减少因为光流不准确带来的误差。具体实现是在FlowNet上增加了预测传播质量的输出,
如果某位置上的传播质量高于一定的界限,则使用传播特征,否则使用自身的特征。

目前讨论的方法在选择关键帧的时候,都是单纯地每隔一定数量(通常为10)的帧就选择当前帧为关键帧。此方法提出了使用时间适应(temporally-adaptive)的关键帧选择策略。此策略也依赖于FlowNet的传播质量输出。如果关键帧到当前帧的传播质量小于一定界限的位置占比达到全部位置的一定比例的时候,则把当前帧设为关键帧:

此方法的示意如下图所示:

2f366de680f799bffbba3355d4fa3fd5.png
图7: 方法示意图。(a)对应于DFF,(b)对应于FGFA,(c1-c3)分别对应上一段的1,2,3。

此方法在ImageNet VID数据集上的表现如下:

0c093aaad27d7fd4d1670f4a7847db9a.png

可以看到,此模型在保证速度的情况下,精度也达到最高,是后期工作的重点模型。

5 其他方法


目前在对视频的识别任务中,除了使用光流以外,还有一些其他有意思的方法。下面例举一二:

patially variant convolution [6].
此方法和本文所讲用光流进行特征传播不一样的是,它通过被称为Spatially variant convolution的操作来进行特征的传播。非关键帧上某一位置的特征是由关键帧上其邻近位置的特征的加权平均Tubelet proposal network [7].得到,且这些加权值由一个小型网络得到。同时,其关键帧选择也是通过一个小型网络动态确定,其网络输入为两帧的低层特征,输出为两帧的偏离值。如果偏离值高于一定界限,则将当前帧设为关键帧。此方法在Cityscape上语意分割的表现在精度和速度上均比DFF要好。Tubelet proposal network [7].
此方法首先生成某帧上的检测结果,然后用视觉跟踪得到bbox的tubelet proposals。对这些proposals进行重新打分后得到目标的bbox轨迹。此方法步骤太多,不能end-to-end training,不是特别看好。Spatio-temporal CNN (stf-CNN) [8].
此方法在传统FCN的基础上,在特征提取网络之后对特征图上的每一个位置增加了一个LSTM模块,从而让空间特征融合了时序信息变成空间-时序特征(故称spatio-temporal CNN)。此方法对精度有提升,但是因为对每一个位置都用LSTM,计算上开销很大。

总结光流对视频识别任务的帮助很大,特别是自从FlowNet提出后,将光流纳入整个神经网络的设计之中来进行end-to-end的训练,对视频识别任务的精度和速度都有显著提升。而且基于光流的方法对具体的识别任务不敏感,它在视频目标检测和视频语意分割上都能使用。因此,可以考虑将光流应用于目前使用的深度模型当中,来提高模型的性能。

参考文献

  1. FlowNet: Learning Optical Flow With Convolutional Networks
  2. Deep Feature Flow for Video Recognition
  3. Flow-Guided Feature Aggregation for Video Object Detection
  4. Impression Network for Video Object Detection
  5. Towards High Performance Video Object Detection
  6. Low-Latency Video Semantic Segmentation
  7. Object Detection from Video Tubelets with Convolutional Neural Networks
  8. STFCN: Spatio-Temporal FCN for Semantic Video Segmentation

感谢阅读

本文首发于微信公众号【美团无人配送】,欢迎大家搜索关注,微信后台回复"书单",给你一份美团技术团队书单合集

作者的其他文章:

美团无人配送:PointNet系列论文解读​zhuanlan.zhihu.com
91325b9b40b926bb9a84d9fdffb16659.png

觉得好看,点个赞吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sts集成jboss_如何为JBoss Developer Studio 8设置集成和SOA工具

sts集成jboss最新的JBoss Developer Studio(JBDS)的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中,我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进行…

C 多线程的互斥锁应用RAII机制

什么是RAII机制RAII是Resource Acquisition Is Initialization(翻译成 “资源获取即初始化”)的简称,是C 语言的一种管理资源、避免资源泄漏的惯用法,该方法依赖构造函数资和析构函数的执行机制。RAII的做法是使用一个类对象&…

c iostream.源码_通达信《K线上画趋势线预警》精选指标(附源码)

通达信《K线上画趋势线预警》精选指标K线上画趋势线预警源码:N:5;MA5:EMA(C,5)COLORWHITE;MA13:EMA(C,13)COLORCYAN;MA21:EMA(C,21)COLORMAGENTA;MA34:EMA(C,34)COLORYELLOW;MA55:EMA(C,55)COLORRED;{画线}A1:REF(H,N)HHV(H,2*N1);B1:FILTER(A1,N);C1:BACKSET(B1,N1…

linux module原理,NodeJS的模块原理

最近一直在使用Node JS,在网上看到了一段代码我觉得完美的诠释了Node JS模块加载的原理,其实深究下去,它还诠释了许多东西:Js模块化编程、闭包的真正强大之处等等。闲话不说,先看看这段代码:// - hello.jsv…

C 20 协程初探

【导读】:C 20 终于引入了协程特性,给库作者提供了一个实现协程的机制,让用户方便使用协程来编写异步逻辑,降低了异步并发编程的难度。结合我最近协程的学习,在这里记录一下相关内容。以下是正文使用场景协程和普通函数…

如何写一个简单的node.js C 扩展

node 是由 c 编写的,核心的 node 模块也都是由 c 代码来实现,所以同样 node 也开放了让使用者编写 c 扩展来实现一些操作的窗口。如果大家对于 require 函数的描述还有印象的话,就会记得如果不写文件后缀,它是有一个特定的匹配规则…

在线画 有穷状态自动机 的软件_怎么画思维导图?不用下载软件,在线就能操作...

怎么画思维导图?在工作中,除了流程图,脑图也是很重要的一个存在:流程图帮助我们快速完成任务,而脑图告诉我们任务本质。画思维导图是一个积累的过程,急不来,对于新手来说还是有一定难度的。由于…

Spring Boot Actuator:在其顶部具有MVC层的自定义端点

Spring Boot Actuator端点允许您监视应用程序并与之交互。 Spring Boot包含许多内置端点,您也可以添加自己的端点。 添加自定义端点就像创建一个从org.springframework.boot.actuate.endpoint.AbstractEndpoint扩展的类一样容易。 但是Spring Boot Actuator也提供了…

422器件与lvds接收器的区别_SPI、I2C、UART三种串行总线的原理、区别

SPI、I2C、串口、我相信如果你是从事的是嵌入式开发,一定会用到这三种通信协议,串口的话因为和波特率有关,所以一般的CPU或者MCU只会配有两个或者三个串口,而数据的传输,的话SPI和I2C用得会比较多区别:1、U…

C 的 6 种内存顺序,你都知道吗?

原子操作的内存顺序有六个内存顺序选项可应用于对原子类型的操作:1. memory_order_relaxed2. memory_order_consume3. memory_order_acquire4. memory_order_release5. memory_order_acq_rel6. memory_order_seq_cst。除非你为特定的操作指定一个顺序选项&#xff0…

易语言 网页用什么编码_通常提到的编码器是干什么用的

编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。编码器把角位移或直线位移转换成电信号,前者成为码盘,后者称码尺.按照读出方式编码器可以分…

如何优雅地实现 C 编译期静态反射

部门请来了软件专家袁英杰咨询师指导我们软件开发,从中我也学到了很多姿势,在此记录下来宝贵的经验。苹果的 mbp 品控真是差劲,写这个东西把 LShift 键 按坏了,真是难受。反射能做什么最近和大师聊软件设计,其中一个点…

香草 jboss 工具_如何为JBoss Developer Studio 8设置BPM和规则工具

香草 jboss 工具最新的JBoss Developer Studio(JBDS)的发布带来了有关如何开始使用尚未安装的各种JBoss Integration和BPM产品工具集的问题。 在本系列文章中,我们将为您概述如何安装每套工具并说明它们支持哪些产品。 这将有助于您在着手进…

局域网steam联机_适合和基友联机一起玩的单机游戏(1)

GTA5还有什么比在GTA中,和几个好基友一起,组建帮派,联机打砸抢,组队完成任务,和其他帮派火并更有意思的呢?游戏丰富的内容,各式各样的玩法,广袤的可探索空间,不愧是史上最…

C/C assert()函数用法总结与注意事项

1. 简介assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行。原型定义:#include void assert( int expression );assert的作用是先计算表达式 expression ,如果其值为假(即为0)&#xff…

ppt flash倒计时器_PPT三大神器之iSlide插件

本文约1200字,阅读预计需要4分钟。为了提升PPT制作效率,我们有必要使用一些插件来提升工作效率,而PPT有三大插件神器,分别是iSlide、PA口袋动画,Onekey Tool(俗称OK插件),今天我们就…

C 语言中std::array的神奇用法总结

std::array是在C 11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能。也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素是直接存放在实例内部,而不是在堆上分配空间&…

java线程池并发_线程池之外:Java并发并不像您想象的那样糟糕

java线程池并发Apache Hadoop,Apache Spark,Akka,Java 8流和Quasar: 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多,但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff…

网络营销理论模型_网络营销:课堂笔记(第四章下)

网络营销产品策略(续上篇)本章知识清单三、网络品牌如何打造?什么是品牌目前为止,对品牌的含义一直没有一个统一的、权威的解释。如果从品牌的构成要素和基本功能方面来界定品牌的话,最具有代表性和最经典的表述当属美国市场营销协会的定义。…

ios多线程Android,iOS 关于多线程

一.进程和线程1.什么是进程进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内比如:同时打开QQ,Xcode,系统就会分别启动2个进程通过”活动监视器”可以查看Mac系统中所开启…