Mobile Video Object Detection with Temporally-Aware Feature Maps

2023-10-19 22:40

本文主要是介绍Mobile Video Object Detection with Temporally-Aware Feature Maps,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Mobile Video Object Detection with Temporally-Aware Feature Maps

来源: 谷歌,CVPR 2018
文章链接:https://arxiv.org/abs/1711.06368v2
最新研究 CVPR2019(在此基础上进一步提升速度):https://arxiv.org/abs/1903.10172
代码:https://github.com/tensorflow/models/tree/master/research/lstm_object_detection

motivation

近几年图像目标检测算法在深度学习的助力下取得了令人瞩目的成就,但是在将其实际运用在视频检测当中会遇到很多图像目标检测算法很难解决的困难,例如检测不稳定,计算量等。并且会遗失视频中重要的时序信息(帧间的相关性),这些信息无疑会帮助提升视频目标检测的精度和速度。本文作者将conv-LSTM进一步改进并嵌入到现有的目标检测算法当中,旨在合理利用时序信息(将早期帧的检测信息用于当前检测)优化检测,同时可以实时检测。

方法

对于视频目标检测任务描述如下
对于给定的视频序列 V = { I 0 , I 1 , … I n } \mathcal{V}=\left\{I_{0}, I_{1}, \ldots I_{n}\right\} V={I0,I1,In},我们想得到结果序列为 { D 0 , D 1 , … D n } \left\{D_{0}, D_{1}, \ldots D_{n}\right\} {D0,D1,Dn}
单帧图像目标检测方法: G ( I t ) = D t \mathcal{G}\left(I_{t}\right)=D_{t} G(It)=Dt
加入时序信息后可以定义为: F ( I t , s t − 1 ) = ( D t , s t ) \mathcal{F}\left(I_{t}, s_{t-1}\right)=\left(D_{t}, s_{t}\right) F(It,st1)=(Dt,st),其中 s k = { s k 0 , s k 1 , … s k m − 1 } s_{k}=\left\{s_{k}^{0}, s_{k}^{1}, \ldots s_{k}^{m-1}\right\} sk={sk0,sk1,skm1},表示 k k k帧之前特征映射的集合。
现在通过带有 m m m层LSTM的目标检测器去拟合这个函数。

如何将LSTM集成到SSD检测器中

在这里认为LSTM的状态单元 s t s_{t} st带有时间上下文信息,LSTM可以将此状态单元和输入特征结合,将时间信息有选择的添加到输入特征中去,同时更新状态单元。作者认为可以将这样的LSTM层加到原来目标检测器的任意一层之后以细化下一层的输入特征。具体而言,我们将上面所定义的单帧图像目标检测函数 G ( I t ) = D t \mathcal{G}\left(I_{t}\right)=D_{t} G(It)=Dt分裂为 m + 1 m+1 m+1个子网络,所以目标检测器函数就变成了这个样子 G ( I t ) = ( g m ∘ ⋯ ∘ g 1 ∘ g 0 ) ( I t ) G\left(I_{t}\right)=\left(g_{m} \circ \cdots \circ g_{1} \circ g_{0}\right)\left(I_{t}\right) G(It)=(gmg1g0)(It),之后我们将 m m m层LSTM L 0 , L 1 , … L m − 1 \mathcal{L}_{0}, \mathcal{L}_{1}, \ldots \mathcal{L}_{m-1} L0,L1,Lm1 逐层添加到其中:

( M + 0 , s t 0 ) = L 0 ( g 0 ( I t ) , s t − 1 0 ) ( M + 1 , s t 1 ) = L 1 ( g 1 ( M + 0 ) , s t − 1 1 ) ⋮ ( M + m − 1 , s t m − 1 ) = L m − 1 ( g m − 1 ( M + m − 2 ) , s t − 1 m − 1 ) D t = g m ( M + m − 1 ) \begin{aligned}\left(M_{+}^{0}, s_{t}^{0}\right) &=\mathcal{L}_{0}\left(g_{0}\left(I_{t}\right), s_{t-1}^{0}\right) \\\left(M_{+}^{1}, s_{t}^{1}\right) &=\mathcal{L}_{1}\left(g_{1}\left(M_{+}^{0}\right), s_{t-1}^{1}\right) \\ & \vdots \\\left(M_{+}^{m-1}, s_{t}^{m-1}\right) &=\mathcal{L}_{m-1}\left(g_{m-1}\left(M_{+}^{m-2}\right), s_{t-1}^{m-1}\right) \\ D_{t} &=g_{m}\left(M_{+}^{m-1}\right) \end{aligned} (M+0,st0)(M+1,st1)(M+m1,stm1)Dt=L0(g0(It),st10)=L1(g1(M+0),st11)=Lm1(gm1(M+m2),st1m1)=gm(M+m1)

M M M为特征映射。
在这里插入图片描述
当然我们不可能在目标检测器的每一个层之后都添加一个LSTM层,这样计算量会爆炸,那么问题来了要把LSTM放在哪里呢?作者基于MoblieNet+SSD结构做了一些实验。最后作者将放在FM4之后的结构最为最终模型。
在这里插入图片描述

改进宽度乘子

为了避免加入LSTM之后网络的计算量过大,作者让模型不同部分的宽度乘子也不同。 α b a s e = α \alpha_{b a s e}=\alpha αbase=α α s s d = 0.5 α \alpha_{s s d}=0.5 \alpha αssd=0.5α α l s t m = 0.25 α \alpha_{l s t m}=0.25 \alpha αlstm=0.25α

改进LSTM

普通LSTM对于图像并不是很好的选择,作者考虑了对卷积LSTM进一步改进。首先给出了卷积LSTM的定义:
f t = σ ( ( M + N ) W f N ⋆ [ x t , h t − 1 ] ) i t = σ ( ( M + N ) W i N ⋆ [ x t , h t − 1 ] ) o t = σ ( ( M + N ) W o N ⋆ [ x t , h t − 1 ] ) c t = f t ∘ c t − 1 + i t ∘ ϕ ( ( M + N ) W c N ⋆ [ x t , h t − 1 ] ) h t = o t ∘ ϕ ( c t ) \begin{aligned} f_{t} &=\sigma\left(^{(M+N)} W_{f}^{N} \star\left[x_{t}, h_{t-1}\right]\right) \\ i_{t} &=\sigma\left(^{(M+N)} W_{i}^{N} \star\left[x_{t}, h_{t-1}\right]\right) \\ o_{t} &=\sigma\left(^{(M+N)} W_{o}^{N} \star\left[x_{t}, h_{t-1}\right]\right) \\ c_{t} &=f_{t} \circ c_{t-1}+i_{t} \circ \phi\left(^{(M+N)} W_{c}^{N} \star\left[x_{t}, h_{t-1}\right]\right) \\ h_{t} &=o_{t} \circ \phi\left(c_{t}\right) \end{aligned} ftitotctht=σ((M+N)WfN[xt,ht1])=σ((M+N)WiN[xt,ht1])=σ((M+N)WoN[xt,ht1])=ftct1+itϕ((M+N)WcN[xt,ht1])=otϕ(ct)
对于 j W k ^{j}W^{k} jWk k k k为输入的维度, j j j为输出维度
改进如下:

  • 作者首先用深度分离卷积替换所有的卷积运算。
  • 为了保持LSTM前后特征的分布不变,这里的激活函数 ϕ \phi ϕ使用的是ReLU。
  • 作者还用Bottleneck Features进一步缩减了运算量,思路是这样的原来的LSTM每个门都需要将输入维度 M + N M+N M+N转换为输出维度 N N N,增加了计算量。作者先引入了一个Bottleneck layer b t = ϕ ( ( M + N ) W b N ⋆ [ x t , h t − 1 ] ) b_{t}=\phi\left(^{(M+N)} W_{b}^{N} \star\left[x_{t}, h_{t-1}\right]\right) bt=ϕ((M+N)WbN[xt,ht1]) 先完成这个变换,将其输出作为其他运算的输入,如下图。
    在这里插入图片描述
    作者通过实验比较了Bottleneck-LSTM相对于不使用LSTM,普通LSTM和GRU的优势。在这里插入图片描述

实验结果

  • 与其他单帧图像目标检测方法比较
    在这里插入图片描述
  • 通过随机遮挡图片,验证Bottleneck-LSTM较其他目标检测方法的鲁棒性
    在这里插入图片描述
  • 实时检测效果
    新用户消息,请处理!!

理解

通过观察实验结果可以发现,作者提出的方法确实在检测精度上面有了提升,但是我个人认为速度方面的提升并不能归于LSTM,应该是对后面SSD部分用深度分离卷积替换标准卷积带来的。而谷歌在CVPR2019提出了对该文章的所做的 工作进一步改进,将速度可以提升到了72FPS。

这篇关于Mobile Video Object Detection with Temporally-Aware Feature Maps的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/242837

相关文章

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

Apple quietly slips WebRTC audio, video into Safari's WebKit spec

转自:http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-into-safaris-webkit-spec/?from=timeline&isappinstalled=0 http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行平均得到相应的干净帧。 2、有效的原始视频去噪网络(RViDeNet),通过探

HumanNeRF:Free-viewpoint Rendering of Moving People from Monocular Video 翻译

HumanNeRF:单目视频中运动人物的自由视点绘制 引言。我们介绍了一种自由视点渲染方法- HumanNeRF -它适用于一个给定的单眼视频ofa人类执行复杂的身体运动,例如,从YouTube的视频。我们的方法可以在任何帧暂停视频,并从任意新的摄像机视点或甚至针对该特定帧和身体姿势的完整360度摄像机路径渲染主体。这项任务特别具有挑战性,因为它需要合成身体的照片级真实感细节,如从输入视频中可能

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

java基础总结12-面向对象8(Object类)

1 Object类介绍 Object类在JAVA里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较方便,它提供了一个最根上的类,相当于所有的类都是从这个类继承,这个类就叫Object。所以Object类是所有JAVA类的根基类,是所有JAVA类的老祖宗

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法