视频目标检测Looking Fast and Slow: Memory-Guided Mobile Video Object Detection
论文地址:https://arxiv.org/abs/1903.10172
视频物体检测领域近年来受到了很大的关注,最初,视频物体检测的准确率是首要考虑的问题,并且现在它仍是一个关键指标。但随着深度学习技术在实际应用中的应用越来越多时,提升模型的速度也变得越来越重要。在这篇文章中,受到了人类视觉系统中快速、以记忆为导向的灵感启发,提出了一种交错型网络结构,其目的是提升视觉模型速度的同时而不丢失掉其准确率。
如上面所说的,快速、以记忆为导向是作者的灵感,一:在这篇文章中,交错型网络通过提供了一种交错型的特征提取器来达到“快速”,二:作者使用了一种LSTM为目标检测传播以及整合临时信息以不丢失模型的准确率。另外,交错型网络结构中存在一个超参数,即交错率,作者使用了强化学习的方法来自适应的得出交错率。
交错模型结构
视频目标检测需要对一个视频n个帧的每个帧进行帧级的边界框生成和类别预测,而在实时检测中,能够使用到的帧只有当前时刻k以及k之前的帧。在这篇文章中通过多个不同的特征提取器按序或者交替的执行,然后一些帧级特征被一个记忆机制(上图绿色部分ConvLSTM)整合以及重定义,最终使用SSD(上图黄色部分)在这些重定义的特征上进行检测,产生边界框。
交错特征提取
使用多个不同特征提取器可以使其专门提取一些不同的图像特征,产生临时聚集效应。作者使用了两种不同的特征提取器,大特征提取器f0(上图红色部分),小特征提取器f1(上图蓝色部分),代表了不同的运行速度和识别能力,大特征提取器具有强识别能力,但运行速度慢,占用内存多,而小特征提取器则相反,通过这两种特征提取器的交替运行,来实现速度和识别准确率共存。而其中的一个问题是这两种特征提取器以什么样的方式进行交替运行。作者给出了两种方法:一、如上图中采用的固定交错,即一个大特征提取器运行后交替两个小特征提取器。二:使用一种强化学习自适应的来决定下一次使用哪种特征提取器,下面解释。
记忆模块
在Liu和Zhu的文章中表明LSTMs可以用于为目标检测传递临时信息,在这篇文章中,作者将其作为一个附加部分用于融合之前不同特征提取器以及特征空间的特征,另外,为了让这个“记忆模块”运行的更快,作者对LSTM单元进行了三个修改,可以更快更好的保存长时依赖,如下图所示。
三个修改:一、采用Liu和Zhu文章中的bottlenecking(还未看,后续补上),并在bottlenecking间添加了跳远连接使得bottlenecking作为输出的一部分(上图红线部分),二、将LSTM状态按通道划分为组,每个部分和输入 x t x_t xt列合并,然后对各组单独使用卷积进行处理(上图蓝线部分,将状态h划分为G个组)得到LSTM门限 b t , f t , i t , o t b_t, f_t,i_t,o_t bt,ft,it,ot,最后被更新的LSTM状态 c t , h t c_t,h_t ct,ht使用同样的方式计算。三、输出使用跳远连接将bottlenecking和状态组进行列合并得到(红线部分的Concat),如下式,
g M t = [ g h t , b t ] ^gM_t=[^gh_t,b_t] gMt=[ght,bt]
这样设计的原因是作者认为分组卷积通过稀疏化的层级连接可以提供一个加速,而跳远连接则允许一些不太相关的临时特征被包括在输出中,而不用于存储在内存上,这减少了内存开销并且可以尝试对状态向量进行降维,而根据Liu和Zhu的成果,如果状态向量太小的话也可能会遭遇严重的准确率下降,在实验中,作者设定的分组数G=4,状态向量为320个通道。
但是LSTM存在一个缺点是在实际更新中,input和forget门使用的sigmoid激励函数会导致较慢的状态衰退而长期依赖性会逐渐丧失,使得它无法完整的保存状态,而当模型迭代很多步之后,除非重新使用f0,否则使用f1的效果会降级,针对这个问题,作者提出了一个简单的解决方法,即当f1在运行时重用最后一次f0得到的输出状态,而跳过f0的状态更新来完成。这极大的提升了LSTM在长序列中传递临时信息的能力。
训练步骤
训练步骤包括两个阶段,一、使用Imagenet分类预训练LSTM,去除掉SSD检测层,并在LSTM后加入平均池化和全连接层用于分类,在训练期间,每个帧重复三次并将LSTM展开为三步,每个步骤选用一个随机的特征提取器运行。二、执行SSD检测训练,同样的,将LSTM展开为六步并随机选择特征提取器,在这一阶段使用视频和图像数据混合作为训练,对于图像数据,将图像进行裁剪和移动进行图像增强用于模型学习图像位移和边界框位移的关系。
自适应交错策略
在上面提到了作者使用了强化学习自适应的来决定下一次使用哪种特征提取器以进一步提高模型的效果。作者构造了一个策略网络 π \pi π (Double Q-Learning)用于检查LSTM的状态信息,并输出下一次运行哪种特征提取器,如下图所示:
作者使用了一个行为空间(使用哪种特征提取器),状态空间,奖励函数(使用这种特征提取器的奖励)来定义这个决策网络。首先是行为空间,行为空间包括m个行为,行为a对应着下一次运行 f a f_a fa特征提取器。然后,状态则被定义为:
S = ( c t , h t , c t − c t − 1 , h t − h t − 1 , η t ) S=(c_t,h_t,c_t-c_{t-1},h_t-h_{t-1},\eta_t) S=(ct,ht,ct−ct−1,ht−ht−1,ηt)
其中包括了LSTM的当前状态 c t c_t ct和 h t h_t ht以及当前状态和上一次状态的变化 c t − c t − 1 c_t - c_{t-1} ct−ct−1 和 h t − h t − 1 h_t - h_{t-1} ht−ht−1, η \eta η是行为历史项,一个长度为20的二进制向量,假如 f 1 f_1 f1运行了k次,则 η \eta η的第k个值为1,否则为0,行为历史可以用于模型避免过度使用 f 0 f_0 f0。最后是奖励函数,其用于寻找一个平衡,即:尽可能多的运行时间消耗少的 f 1 f_1 f1同时尽可能的维持模型的准确度,因此奖励函数既包括了对速度的奖励,又包括了对准确度的奖励,如下所示:
对于速度奖励,简单的使用了一个正值常量 γ \gamma γ,而只有当使用 f 1 f_1 f1的时候才会给予 γ \gamma γ奖励。而对于准确度奖励,则通过计算具有最小检测损失的特征提取器和当前被选特征提取器的损失值的差值来衡量。上式中的 L ( D i ) L(D^i) L(Di)表示使用 f i f_i fi特征提取器的检测器 D i D^i Di的损失值。
策略网络是一个轻量级的卷积神经网络用于预测每一次行为的Q值,首先在S中的4个特征( c t 、 h t 、 c t − c t − 1 、 h t − h t − 1 c_t、h_t、c_t - c_{t-1}、h_t - h_{t-1} ct、ht、ct−ct−1、ht−ht−1)上执行分组进行卷积操作。然后使用深度可分卷积和最大池化对特征图进行降维。最后将行为特征向量合并再使用一个全连接层获得一个m大小的输出(Q值),如下图所示:
为了训练这个策略网络,需要以推断模式运行交错网络生成一批策略样本,由上面提到的行为空间、状态空间、奖励函数组成, ( S t , a , S t + 1 , R t ) (S_t, a, S_{t+1}, R_t) (St,a,St+1,Rt)即根据上一个状态进行决策时获得的奖励样本,最后,在获取样本之后,使用Double Q-Learning( DDQN )进行决策。策略算法如下: