Video Object Detection with an Aligned Spatial

Wesley13
• 阅读 286

摘要

  本文针对视频目标检测问题提出时空记忆网络(STMN)。它的核心是时空记忆模块,作为一种递归计算单元去建模长时间目标外观和运动信息。STMN可以用一个预训练的CNN backbone进行初始化,这对提高检测精度非常重要。本文为了建模目标运动提出匹配变换去对齐帧到帧的特征。本文的方法在VID数据集上获得了state-of-the-art的结果,我们的消融学习清楚地证明了本文设计架构的有效性,代码和模型都公开在:http://fanyix.cs._ucdavis.edu/project/stmn/project.html._

1.简介

视频目标检测的问题在于视频中的运动模糊、遮挡和极端视角等情况会使得静态图像检测器出问题,但是视频提供了丰富的时空和运动信息,应当学习去利用这些信息,使得视频目标检测器更加鲁棒。

Video Object Detection with an Aligned Spatial

  从Fig1可以看出图像检测器在模糊、遮挡和极端视角下出现了误检,但是本文模型会聚合前两帧质量较好的图像所以检测成功率会高一些。最近,很多研究者开始研究视频目标检测问题,比较有名的微软的DFF和FGFA,商汤的T-CNN,2016年代的SEQ-NMS,牛津VGG组的D&T,其实视频目标检测的研究最早约在2015年左右,ImageNet用VID数据集进行比赛。其中有很多工作是通过后处理的方式,不能避免单帧检测器所存在的问题,D&T,FGFA,THPVOD等开在在模型的训练中,通过预测帧间的平移,将帧与帧之间的特征聚合起来。然而这些方法处理的是固定长度窗口的图像,不能建模较长的依耐性,Tubelet Proposal Network开始考虑建模长时间的信息,但是速度较慢,对tubelet的初始化依赖严重。

  为了解决这些问题,本文提出Spatial-Temporal memory Network(STMN),用一个网络统一建模长时间的外观和运动。它的核心为Spatial-Temporal Memory Module(STMM),一种卷积递归计算单元,可以集成到从静态图像训练得到的预训练模型中。这种设计在实际应用中是有用的,因为一个一百万张图像的图片数据集多样性要比一百万张图片的视频数据集好很多。本文显示这种设计比标准的ConvGRU要好。考虑到图像数据的二维特性,STMN中保留了每帧图像的二维空间信息。为了实现帧间的像素级对齐,本文提出了MatchTrans模块显式建模帧间的平移。由于将每帧图像做了对齐聚合,这样的得到的特征对于区域的定位是有好处的,而且包含多帧信息也有助于识别。同时,每个区域的特征可以用ROI pooling从记忆模块中提取。

  基于以上的工作,本文在VID数据集中用不同的backbone和检测器均获得了state-of-the-art的效果。

3.方法

3.1. 概述

Video Object Detection with an Aligned Spatial

系统框架如Fig2所示,假设视频序列的长度为T,每一帧图像首先各自提取其卷积特征得到\(F_1,F_2,\cdots,F_T\)作为表观特征,为了沿时间轴集成这些特征,每一帧的表观特征都被送入STMM。STMM在时间t得到当前帧的表观特征\(F_t\)以及在时间步t-1得到的带有之前所有帧信息的时空记忆\(M_{t-1}^{\to}\),然后更新得到当前时间步的时空记忆单元\(M_t^{\to}\)。为了同时捕获过去帧和之后帧的信息,我们使用了两个STMM,进行双向特征聚合,同时聚合\(M^{\to}\)和\(M^{\gets}\)。将包含了时间信息的\(M_t\)送到卷积/全连接层进行分类和回归。这种做法的提升在于,如Fig2,图像检测器往往只看过自行车的俯视图,所以看到前视图的时候会识别不出来,但是本文的方法,因为模型已经看过了两边的侧视图,所以识别出前视图会容易一些。

3.2. STMM

  在每一帧输入\(F_t\)和\(M_{t-1}\),按下面的式子更新\(M_t\):

Video Object Detection with an Aligned Spatial

  这里圈表示按元素相乘,*表示卷积,\(U,W,U_r,W_r,U_z,W_z\)是2D卷积核,\(r_t\)是更新门,表示\(M_{t-1}\)有多少需要丢掉,从而生成暂态记忆\(\widetilde{M}_{t-1}\),\(z_t\)为重置门决定了之前的状态\(M_{t-1}\)和暂时的状态\(\widetilde{M}_{t-1}\)的融合权重。为了得到\(r_t\)和\(z_t\),STMM首先对\(M_{t-1}\)和\(F_t\)做仿射变换,再进行relu操作。因为\(r_t\)和\(z_t\)为门,因此它们的值应当处于[0,1]。这里针对标准的batch normalization做了两个改变得到\(BN^*\),这样将输入正则化到[0,1],而不是均值为零的,方差为1 的标准正态分布。

  第一个改变,计算输入batch X的均值\(\mu(X)\)和标准差\(\sigma(X)\),利用线性挤压函数\(S(X;\mu,\sigma)\)(如Fig 3所示)进行正则化。

Video Object Detection with an Aligned Spatial

 第二个改变,对每个batch单独计算均值和方差,而不是在训练过程中持续计算所有training batch的均值方差。用这种方式不用在不同时间步存储不同的统计量,这使得我们在测试的时候不用试训练长度而定。

  与ConvGRU的不同。视频目标检测训练的过程中的一个现实的问题就是,由于视频具有冗余性,使得数据的多样化和图像数据集没法比,所以希望能够迁移图像数据集中的训练结果。本文用R-FCN初始化网络,将Position-Sensitive ROI pooling的前一个卷积层替换为本文的STMM,由于R-FCN的激活函数ReLU的输出均为非负,而传统ConvGRU的sigmoid和tanh函数的输出为[-1,1],这样是不匹配的,所以这里将GRU的激活函数改为ReLU,同时STMM的卷积层用替换出去的卷积层的参数进行初始化。

3.3. 时空信息对齐

  由于目标的运动,如果特征不进行对齐的话,会造成融合的特征图长时间不能忘记之前目标的信息,造成虚影,而且和其他特征图重叠之后会降低特征图的质量,如Fig4所示。

Video Object Detection with an Aligned Spatial

  为了解决这个问题,对于\(F_t(x,y)\)的领域,本文在\(F_{t-1}\)图的(x,y)处的(2k+1)*(2k+1)的领域使用余弦距离计算相似性,公式如下所示:

Video Object Detection with an Aligned Spatial

使用系数\(Gamma\),本文将非对齐的\(M_{t-1}\)变化到对齐的\(M_{t-1}\),对齐公式如下:

Video Object Detection with an Aligned Spatial

相当于用2k+1领域内的\(F_{t-1}\)与\(F_t\)的相关系数,对\(M_{t-1}\)的特征图的值进行加权重构。对齐后的\(M_{t-1}\)才是最终的公式(4)中的值。对齐的示意图如Fig5,

Video Object Detection with an Aligned Spatial

  k的选择涉及到性能和速度的权衡,在本文实验中选择k=2。用光流进行对齐的问题在于计算比较慢,而且存储光流也占用了内存。对于FlowNet,它的速度是24.3ms,MatchTrans的速度是2.9ms,有数量级的优势。

4. 结果

  检测器采用R-FCN,训练并初始化STMN,训练时长度为7,测试时序列长度为11,STMM特征图的通道数为512,考虑到视频的冗余性,每10帧采样一帧。ResNet-101为backbone,在imagenet vid验证集上达到了80.5的mAP,在TiTan X上每帧0.83 秒的处理时间。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
1年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
6个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
3A网络 3A网络
4个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
4个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习