本文主要是介绍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,st−1)=(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,…skm−1},表示 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)=(gm∘⋯∘g1∘g0)(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,…Lm−1 逐层添加到其中:
( 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+m−1,stm−1)Dt=L0(g0(It),st−10)=L1(g1(M+0),st−11)⋮=Lm−1(gm−1(M+m−2),st−1m−1)=gm(M+m−1)
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,ht−1])=σ((M+N)WiN⋆[xt,ht−1])=σ((M+N)WoN⋆[xt,ht−1])=ft∘ct−1+it∘ϕ((M+N)WcN⋆[xt,ht−1])=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,ht−1]) 先完成这个变换,将其输出作为其他运算的输入,如下图。
作者通过实验比较了Bottleneck-LSTM相对于不使用LSTM,普通LSTM和GRU的优势。
实验结果
- 与其他单帧图像目标检测方法比较
- 通过随机遮挡图片,验证Bottleneck-LSTM较其他目标检测方法的鲁棒性
- 实时检测效果
理解
通过观察实验结果可以发现,作者提出的方法确实在检测精度上面有了提升,但是我个人认为速度方面的提升并不能归于LSTM,应该是对后面SSD部分用深度分离卷积替换标准卷积带来的。而谷歌在CVPR2019提出了对该文章的所做的 工作进一步改进,将速度可以提升到了72FPS。
这篇关于Mobile Video Object Detection with Temporally-Aware Feature Maps的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!