卓怡澜 陈孟仪 林明秀 高龙年
(东北大学信息科学与工程学院 辽宁省沈阳市 110819)
视觉目标跟踪是计算机视觉领域的一个重要内容,视觉目标跟踪近几年发展迅速,应用前景十分广阔,使用范围也逐渐从高端的科技产品走向人们的日常生活。视觉目标跟踪要完成这样一个任务:手动或自动给出当前视频第一帧的目标,根据该帧的目标,从后续的帧中找到与第一帧中选定的目标的位置。当需要确定一个物体在连续帧里的位置时常常利用视觉目标跟踪。跟踪算法在人机交互、监控安防、无人驾驶及军事战争中起到了关键作用具有广阔的应用场景。
目标跟踪的算法发展可以分为两个大阶段,前期阶段目标跟踪领域的主流算法的是粒子滤波,光流法,基于回归方程的算法等。在深度学习和相关滤波的跟踪方法出现后,目标跟踪算法就进入了一个新的阶段。新的跟踪算法凭借着更好的鲁棒性,准确性和对于复杂情况的更好的跟踪效果逐渐替代了旧的算法。
当下的目标跟踪算法主要有两个分支,基于相关滤波的跟踪算法和基于深度学习的跟踪算法。相关滤波的跟踪算法始于2010年的MOSSE算法,此后CSK算法,KCF算法,DCF算法都是在此基础上发展而来,在精度和速度上表现优异,但是仍无法很好地处理目标尺度变化较大的目标跟踪问题。
深度学习的发展和计算机算力的增强带来了视觉算法性能的突飞猛进,深度学习技术也被成功应用在跟踪领域。基于深度学习的目标跟踪是利用深度学习训练网络模型来学习目标特征,得到的卷积特征输出表达能力虽然更强,但是计算量的增加不可避免,导致网络速度不够理想,精度和速度往往不能兼得。2016年提出的孪生神经网络算法,大大提升了网络跟踪速度,至此基于神经网络的跟踪算法可以实现实时跟踪兼顾了精度与速度。
孪生神经网络是基于两个人工神经网络建立的耦合结构,孪生网络在处理跟踪问题时往往有两个输入,其中一个输入是给定目标第一帧,这两个输入分别经过特定网络处理后,再比较这两个处理后的结果的相似度,当相似度较高时可以认为是同一物体,孪生网络用于比较两个输入相似程度。孪生网络通常使用相同的两个或多个相同的子网络构成,使得孪生网络具有对称性,实现权值共享,这些子网络同时输入视频每帧的信息,对子网络的输出结果进行互相关运算实现确定目标位置。
2016年,SiamFC被提出,将当时最新的特征提取网络Alexnet融入孪生网络的两个分支中,把跟踪当做匹配问题,是siam系列网络的开端。SiamRPN是CASIA在2018提出来的网络,它将孪生结构与检测领域的RPN进行结合。siamMask就是将跟踪与分割结合到了一起,相比与之前的视频分割工作,其提升了速度。2019年,siamRPN++提出,解决了当时siam系列网络普遍存在的一个问题:siam系列的网络普遍不够深,使得siam系列网络的发展又进一步。同年,与siamrpn++一样,siamDW也是解决siam系列网络深度的问题,提出了更宽更深的孪生网络。基于深度学习的孪生网络算法,可以实现实时跟踪兼顾了精读与速度,同时参数较多,仍然面临着硬件条件不足时跟踪效果大幅下降的问题。
本文第二部分将介绍孪生网络SiamFC的基本结构,第三部分将阐述轻量化改进途径,第四部分将应用的新损失函数,第五部分是实验结果。
SiamFC将跟踪问题看成基准模板图像和候选样本图像的相似度问题,如图1所示,该网络有两个输入,一个是作为基准的模板z,另一个则是要选择的候选样本x。
图1:SiamFC网络结构
而在单目标跟踪任务中,作为基准的模板z则是要跟踪的对象,通常选取的是视频序列第一帧中的目标对象,而候选样本则是之后每一帧中的图像搜索区域x,而孪生网络要做的就是找到之后每一帧中与第一帧中的范本最相似的候选区域,即为这一帧中的目标。网络具有两个权值共享的分支,对两个不同的输入执行相同的φ变化,127×127×3 的基准模板图像将生成 6×6×128的特征图,255×255×3 的候选样本图像将生成22×22×128的特征图,再对两张提取的特征进行互相关操作,生成17×17×1响应图,根据响应图映射图像搜索区域x中目标的位置。从两张输入到获得响应图的操作可以用一个公式概括:
f(z,x)=φ(z)*φ(x)+b
式中的φ 即为Alexnet,是对x,z两张图进行特征提取。
SiamFC是第一个将孪生网络成功运用于跟踪领域的算法,其帧率达到80秒每帧以上,可远超实时使用的要求,是深度学习应用于跟踪算法的里程碑式的创新,后续的基于深度学习的跟踪算法有许多是基于其改进或者优化的,可以说该方法与KCF地位相近,都具有一定的里程碑意义。
遵循相似性度量策略的孪生网络跟踪算法由于其在精度和速度都取得良好的性能,由于全卷积孪生网络 SiamFC是这类算法框架的开创工作,笔者考虑该算法作为改进算法的基础。
目前,已经有很多网络通过替换核心网络,获得了更好效果的网络的先例。
笔者考虑了SiamFC本身的精度和准确度带来的局限性:SiamFC的主干网络使用的是相对较浅的AlexNet,虽然AlexNet仅有5层卷积层,作为一个较浅的神经网络它并不具备强大的特征提取能力,如果置换更深的卷积神经网络,伴随而来的是结构越加复杂,网络体及逐渐增大,对硬件配置需求逐渐增多的问题。为解决这种矛盾,笔者希望新算法在提升主干网络特征提取能力的同时,参数量还能更小以保证跟踪速度和满足特定算力相对不足的场景。于是提出基于轻量ShuffleNet的孪生网络跟踪算法,替换掉原本的Alexnet,选择ShuffleNet作为新的核心网络。
ShuffleNet是一种被称为可以在移动端使用的轻量级特征值提取网络,由残差网络发展而来,其轻量化思想的核心是一种通道混洗。
Shuffle(通道混洗)操作的前提是将输入图像按通道分为几个组别,各个组别分别与卷积核做卷积,比起每一个卷积核与每一个通道卷积的算法,这样的神经网络计算量大大减小。同时为解决各个通道之间不进行交流,导致学习的内容变少的问题,Shuffle操作对各个组别的通道进行通道混洗,交换各个组别内的通道内容,Shuffle操作使ShuffleNet实现了轻量化和精确度的兼顾。
ShuffleNet由ResNet改进而来,ResNet因为其具有密集的1×1 卷积而具有较大的计算量所以作者对ResNet进行如下修改:
如图2(A)所示,为最初的卷积单元,图2(B)将图3(A)中1×1 卷积层替换成三层网络,分别为1×1的分组卷积层,通道混洗层,3×3的深度卷积层,并在其后加上一个1×1 的分组卷积用来保证输入和输出的维度一致。图2(C)在图2(B)网络的基础上将ResNet中的跳跃连接改为一个 3×3 的平均池化,将跳跃连接后的相加操作改为了拼接操作。
图2:构成ShuffleNet的ShuffleNet单元
图2(A)为ResNet卷积单元,图2(B)将1×1 卷积层替换成三层网络,图2(C)将ResNet中的跳跃连接改为池化层,为ShuffleNet最终的卷积单元。
ShuffleNet相比于原先应用于SiamFC的Alexnet,它是更深的特征提取网络,在此前就有将更深的网络运用于孪生跟踪网络改进的例子,最典型的就是DWsiam(Deeper and Wider Siamese Networks)将改进后的残差网络应用于孪生跟踪网络的特征提取。
DWsiam作者通过系统的实验发现了主干网络影响孪生网络的三个重要因素:最后一层感受野大小、网络总步长和特征的padding的有无,并且依据以上三个因素提出了这样一个想法:一个孪生网络结构的设计较深的特征提取网络一般不是为目标跟踪设计的,需要进行修改。
该作者的理论简单的分为以下四点:
孪生类跟踪器的网络步长作者推荐4或者8,步长太大会导致目标定位的准确性偏差大。
最后一层感受野的大小与样例图片的大小有关,最好是样例图像的60%-80%。太大的感受野虽然增加了目标的上下文信息,但是减少了目标本身的局部信息和判别信息。
网络的步长和感受野的大小,是有直接关系的,步长的该表会影响感受野大小,必须将其视为一个整体进行调整。
对于全卷积的孪生网络结构,去除padding层的影响也是至关重要的。含有padding操作的卷积层会影响跟踪时目标框的定位准确性,特别是当目标对象运动到图像搜索区域边缘时。
本文参考该作者的理论对ShuffleNet做了如下修改:
•进行Corp操作,去除padding层的影响。ShuffleNet由图2(C)所示的Shuffle单元堆叠构成,对于有padding操作的模块,在每次concat操作前,都裁去特征图最外圈以消除padding层的影响。
•将总步长修改至8
•控制感受野在60%-80%
•修改激活函数relu为elu。与原先的relu激活函数相比,elu有relu几乎所有优点,同时该函数处处连续可微,对于负值梯度是非零的,本文发现该激活函数,更契合本文创造的网络的训练过程,可以实现更快训练,并提高准确性。
•如表1所示,放缩ShuffleNet网络宽度可以有效降低网络复杂度,故本算法使用ShuffleNet0.25x。
表1:三种网络宽度对应的算法复杂度
Focal loss在2017年由RBG和Kaiming提出,该损失函数最初是为了解决one-stage目标检测算法中正负样本比例不平衡的问题。Focal loss较之交叉熵损失,该损失函数降低了大量负样本的权重,也降低了简单易分类样本的权重,突出了难以区分正样本的权重。笔者发现在训练目标跟踪网络中,存在正负样本比例失调的问题,所以用Focal Loss替代了SiamFC原先使用的交叉熵损失函数。
交叉熵损失函数公式如下:
在SiamFC中 是经过特征提取以及互相关运算后每个像素点的得分,经过sigmoid激活函数的输出,因此在0-1之间,y是训练集中标注的跟踪目标的真实位置,被判定为目标的像素被标注为1,也就是正样本,判定为背景的像素被标注为0,也就是负样本。正样本输出交叉熵概率越大损失越小,负样本输出概率样本越小交叉熵损失越小,在样本分布不均匀的时候这种损失函数会有过于关注正样本或者负样本的问题。Focal loss将其改为如下:
式(3)首先在原有的基础上加了一个因子γ,当γ为0时即为交叉熵损失函数,γ>0可以减少易分类样本的损失,例如 =0.9,y=1,γ=2时,由于0.9和1差距不大,是一个易分类的样本,Focal loss就比交叉熵损失小了100倍,这使得训练更关注于困难的、错分的样本。加入平衡因子α,用来增加比例较小样本的权重。
Focal loss的作者通过实验得出γ=2,α=0.25最好,在实验过程中笔者发现γ=2是可行的,还发现使用的视频训练集中,正样本数量明显低于负样本数量,且每个序列正负样本比例差距较大,所以α则被设定为自适应比例,α与正样本占总样本的比例成反比。
Got10k是中科院于2018年发布的目标追踪数据集,包含560种运动物体的87种运动模式,提供了10000个视频片段包含150万个人工标注的边界框,全部取材于现实世界里移动的物体。
如表2所示,对整个数据集训练 50 轮,学习率从10衰减至10。
表2:实验平台
OTB2015数据集是一种专门用于测试跟踪算法的视频序列数据集,OTB包含100组视频序列,既有灰度图像也有彩色图像,涉及到目标跟踪的11个属性。包括快速运动,背景混乱,变形,遮挡,运动模糊,光照变化,尺度变化,出视野,低分辨率,平面外旋转,平面内旋转。测试精度的主要采用了两个评价指标:准确率和成功率。准确率表示目标跟踪算法跟踪时认定的中心点与OTB人工标注的中心的距离小于给定阈值的视频帧的百分比,当给定中心点位置误差的阈值越大时,算法的准确率越高。成功率表示重合率得分超过某个阈值的帧的百分比,当重叠率阈值越高时,算法的成功率越低。在使用本文Focal损失函数的时候,模型的准确率和成功率分别达到了0.634和 0.490而使用传统损失算法,准确率和成功率也达到了0.595和0.457。
平均帧率在显卡加速的情况下达到了平均278.6648帧每秒,较之SiamFC的88.84501帧每秒提升较大。在CPU上运行速度也从13.31763帧每秒提高至21.13489帧每秒。模型大小由SiamFC的9144kb降到56kb。说明该算法对于设备的要求相较于SiamFC明显降低,实现跟踪算法轻量化以及高帧率的跟踪。
本文以 SiamFC 算法框架为基准,使用ShuffleNet代替Alexnet对SiamFC跟踪算法进行轻量化,增加网络深度的同时,缩减模型大小。文中将针对跟踪算法的特点,修改ShuffleNet网络步长,控制感受野,消除padding层的影响,改变了损失函数;在训练时,用Focal loss替换交叉熵损失,削弱了正负样本比例失调的影响。实验结果证明,该网络在保证算法参数量小,兼顾精度和速度的情况下,实现了轻量化,降低了跟踪算法对硬件的需求。