computer vision笔记:语义跟踪——FCNT

FCNT其实是一个比较老的工作了,性能跟现在是没法比的,但其中的许多进步之处还是非常有价值且值得思考的。事先注明,FCNT中的“FCN”非语义分割中的FCN,FCNT这里的“FCN”指的是全卷积网络。

References

电子文献:
https://www.cnblogs.com/Terrypython/p/10636259.html

参考文献:
[1]Visual Tracking with Fully Convolutional Networks


关注点

不同于以往的工作把CNN看成一个黑盒而不关注不同层的表现,FCNT关注了不同层的功能,即发现:顶层的CNN layer编码了更多的关于语义特征的信息并且可以作为类别检测器;而底层的CNN layer关注了更多局部特征,这有助于将目标从目标中分离出来。这个发现在之后的许多工作中也得到了应用和体现。如下图所示,这里的a图表示的是ground truth,b图表示的是使用VGG的conv4-3,也就是第10层产生的热力图,c图是通过conv5-3也就是第13层产生的热力图。

可以看到,较低维的CNN layer(conv4-3)能够更精准地表示目标的细粒度信息,而较高维的CNN layer(conv5-3)热力图显示较模糊,但对同类别的人也做出了响应。这就是说,顶层缺少类内特征区分,对类间识别比较好,更适合作语义分割;底层则反之,能够更好地表达目标的类内特征和位置信息。
基于不同层(顶层和底层)之间提取特征的不同,作者提出了一种新的tracking方法,利用两种特征相互补充辅助,来处理剧烈的外观变化(顶层特征发挥的作用)和区分目标本身(底层特征发挥的作用)。


稀疏表示

为了简化学习任务,降低模型复杂度,作者采用了稀疏表示的方法。其实基本上等同于字典学习,详见machine-learning笔记:SVD与字典学习
简而言之,字典学习就是寻找一个稀疏矩阵和一个字典矩阵,使它们的乘积尽可能地接近原本的数据。其步骤一般是先求得一个尽可能稀疏的稀疏矩阵,然后固定该稀疏矩阵来更新字典。
在FCNT中,稀疏表示是这样进行的:

注:这里的$\pi$表示的是前景mask,$F$指的是feature map,$c$表示稀疏项。

由于稀疏项$c$已经足够稀疏,我们可以直接省去接近于零的$\lambda \left | c \right |_{1}$。

  1. 首先我们计算前景(也就是目标物体)的误差$e=\underset{i}{min}\left | \pi -Fc_{i} \right |_{2}^{2}$,这一步也就是判断框内有没有目标出现,当$e$小于阈值时,即认为存在目标物体。
  2. 然后计算的是目标物体属于哪一类,即求出使得误差最小的类别的ID,利用公式$id=arg\underset{i}{min}\left | \pi -Fc_{i} \right |_{2}^{2}$。注意这里用了$arg$。

实现

网络结构

由于feature map本身是有内在结构的,有很多的feature map对目标的表达其实并没有起到作用,因此作者设计了一种方法来自动选择高维或者低维CNN上的feature map,同时忽略另一个feature map和噪声。下面就来简单介绍一下该方法的具体步骤,首先来看看FCNT的网络结构。

具体步骤

结合上图,简单介绍一下FCNT的实现流程。

  1. 第一步

    根据给定的target,对VGG的conv4-3和conv5-3进行特征图选择,其目的是选出最相关的特征图。
  2. 第二步

    根据conv5-3的筛选,建立广义的通用网络GNet,用于捕捉目标的类别信息。
  3. 第三步

    根据conv4-3的筛选,建立具有针对性的特定网络SNet,用于将目标从背景中区分出来。
  4. 第四步

    利用第一帧图像来初始化GNet和SNet并进行热力图回归,但要注意两个网络采用不更新的方法。
  5. 第五步

    对于新一帧图像,我们在上一帧目标的位置搜寻RoI,抠取之后送入全卷积网络。
  6. 第六步

    GNet和SNet各自产生一个前景热力图,然后通过最后的干扰检测器选择策略决定使用哪个热力图来确定下一帧的目标位置。

特征图选择

第一步中的特征图选择可能会让人比较疑惑,其实这个选择模型仅用了一个dropout层和一个卷积层,其目标就是使得目标的mask和预测出来的目标热力图尽可能相近。这里把输入的特征图向量化,并用二阶泰勒展开表示特征图扰动,也就是特征图的变化(加入噪声)带来的损失的变化。为了高效地在反向传播中计算,作者仅保留了Hessian矩阵中的对角线上的内容,而忽略泰勒展开式中的其它导数项,也就是保留$h_{ii}$而忽略$h_{ij}$,这就在计算一阶导数和二阶导数是更加高效。

补充:其实mask我之前也是一直不懂的,这里做个补充。
mask中文翻译为“掩模”,但它的功能不仅仅局限于遮掩,总的来说,mask有下面四种用途:

  1. 提取感兴趣区:用预先制作的mask与待处理图像相乘,RoI内图像值保持不变,而区外图像值都变为0。
  2. 屏蔽:用mask对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
  3. 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与mask相似的结构特征。
  4. 特殊形状图像的制作:其实实现方法一样,只是目的不一。

目标定位

FCNT的定位过程分为两步。

  1. 默认使用GNet

    先把GNet输出的热力图作为目标候选。这是因为GNet使用的是顶层特征,能够更好地处理形变、旋转和遮挡等目标跟踪中的常见问题,举个例子,前面也提到了,顶层特征对画面中同样类别的个体都有反应,这就使得即使目标发生变化,但顶层较为丰富的语义表达依旧能把它判断出来(可能认为是同一类的)。
  2. 判断是否使用SNet

    考虑若画面中出现同类物体时GNet不能很好的处理,因此还需要计算有没有出现目标漂移的情况。其方法是计算在目标候选区域外出现相似目标的概率P,定义一个阈值,若P大于阈值时则认为出现了同类目标,这时候才利用SNet来定位目标的最终位置,是结果更加准确。

碰到底线咯 后面没有啦

本文标题:computer vision笔记:语义跟踪——FCNT

文章作者:高深远

发布时间:2020年02月14日 - 22:23

最后更新:2020年02月15日 - 22:07

原始链接:https://gsy00517.github.io/computer-vision20200214222332/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%