目标跟踪《五》--- ATOM论文笔记

目标跟踪《五》--- ATOM论文笔记

介绍

当前的很多trackers虽然在robustness上面提升了不少,但是在tracking accuracy上面的提升却比较有限,自从针对比较好的分类器有很多的关注之后,在target state estimation上面的accurate就有些被忽略了. 许多的trackers都是通过multi-scale的办法来估计target bbox, 作者说这种办法其实是有limited的,paper里面说“target estimation is a complex task, requiring high-level knowledge about the object.”

这个paper里面采用了“target-estimation”和”classification components”这两个分支(从什么时候开始把分类加进去的?可能是从siameseRPN中)加入分类是可以增加网络的区分能力的,这个分类我理解应该指的是前景背景的分类.

  • 创新点

在target estimation的时候预测IOU,建立在分类和估计之间的桥梁.(直观上理解,如果IOU大的话就认为是前景,如果IOU小的话就认为是背景,而且IOU显示了部分的bbox的信息.)

  • 跟踪问题的困难

通常都是根据video的第一桢中的图,对目标进行“学习”,然后就开始去跟踪,但是后面的桢中,目标可能会出现各种各样的变化,这就导致了困难,首先是供学习的目标数据少,第二是后面的有可能很多都很“陌生”。基于此,paper里面说通常的在线tracking是ill-posed.

  • 新看法

tracking 问题可以分解为一个分类任务和一个估计任务,分类是为了给一个粗糙的定位,通过是前景还是背景的分类,能够大致确定物体的位置.第二个是bbox的估计。(ps: 感觉这样把任务细化了之后,让网络不同的module负责不同的任务,这样对性能的提升应该会有帮助.)

  • 关于新添加的IOU-net

原始的iou-net是class-specific的,而现在要改成是target-specific的. 在预测的时候就找iou最大的(具体还要再细看代码.)

  • 分类的分支是在线的, estimation的分支是离线的.

在线优化的时候会涉及到效率到问题,比如梯度falls short.这里说 在分类的在线分支中用用conjugate-gradient-based 办法。

网络结构

avator

  • 对于target classification和estimation 的backbone是一样的,都是resnet18.

  • IOU-predictior的输入

  1. base feature of current frame (相当于instance image)

  2. pred的bbox for current frame

  3. base feature of reference frame (相当于模板image)

  4. gt的bbox for reference frame

iou-gt 的在4附近随机产生一些框(16个), 然后与4中的gt算出的iou来作为的iou-gt.

  • IOU-predictior的输出

输出就是上面预测的的2中的pred的bbox与gt对应的iou-pred,然后这个应该会和iou-gt去做loss.

  • target classification

这个是在线进行的,training和prediction都是经过fully convolutional manner(采用全卷积有什么好处,这个以前好像没有想过)。这个用传统的办法比如sgd进行训练的话,可能有些效率低,所以这个paper里面提出了一个基于conjugate gradient 和 Gauss-Newton的办法,这样能够保证fast online training.

  • 比较细的图

avator

注意这个图里面的tensor的那个符号是channel-乘的意思,并不是卷积,最初还以为是像相关滤波那样做卷积.

在线tracking

实际训练的时候只是训练了iou_pred这一个模块,分类的模块并没有进行离线的训练,现在假定iou_pred模块已经训练好了,那么现在给一段要跟踪的视频,从第一桢中得到要跟踪的目标,然后进行augment,得到30个样本,augment的操作包括translation, rotation, blur, dropout,然后在线进行训练分类的模块,分类的模块就只有两层,第一层是一个1-1的卷积,将channels变成64,实际上这个操作是为了缩小memory和减少计算量,然后第二层用的卷积核是4-4的,输出的channel是1.

  • 作用

这个模块的作用是对目标进行一个粗定位,定位的是目标的中心,即bbox的中心,方法是用到了keypoint中的想法,即产生一个Gaussian 作为gt, 然后loss就是L2(相当于最小二乘),不过这里的loss加了一个正则项

avator

然后每隔10桢,把第二层的参数更新一下,这时候更新的时候用的数据就是最初的30张加上已经过去的10桢,也就是训练集实际上是在增加的.

  • 得到这一桢的结果

大致过程是这样的,由分类module得到的score_map,找到分最大的位置作为目标的粗定位,利用上一桢的结果的bbox的w和h,从而得到一个bbox B, 然后在B附近产生10个bbox(训练的时候是16个), 此外iou_predmodule会预测出这10个bbox与target的IOU, 最后从IOU最大的三个框里面做一个平均作为最终的bbox,作为这一桢的跟踪结果. 感觉整个系统很微妙! paper里面还说加与不加这个模块对结果影响还是挺大的.

  • 思考

训练的时候test部分是提供了gt的bbox的,所以可以在其附近产生bbox制作gt的iou进行训练,然后上面那一支会提供一个module vector作为channel的权值用在test的这一支上面参与后面的pred IOU,而tracking的时候是提前不知道target的位置的,所以就无法造出一些候选的bbox,也就无法预测IOU,所以classification这个module的作用就是解决这一问题,通过粗定位的方式,找一个位置,然后在其附近产生一些bbox,从而就可以用到训练的模块了, 那么可以思考在这里该如何尝试其他的办法.

  • 优化

关于上面的Loss的优化,我觉得也是这个paper里面很精华的一个部分,作者在paper里面写的也非常地精彩. 首先上式看成’椭圆度量’(自己起的名字)的话就是通常的一个L2-norm, 里面的项可以通过一阶Taylor展开转成一个关于 $ \Delta w$ 的二次型, 所以优化过程分成了两个for, 内层的for是用来优化 $\Delta w$的,用的就是共轭梯度法,当内层的for结束以后,就得到了一个 $\Delta w$, 然后作为 $w$的增量更新$w$, 再进行外层的for进行优化,在线tracking的时候,第一桢优化的时候用的参数是NGN=6, NCG=5,然后后面每隔10桢进行优化的时候,外层只进行了一次优化,内层进行了5次优化,即 NGN=1, NCG=5.优化的算法过程如下 avator

tracking的大致过程

  1. 用在线分类的heatmap得到最大响应的位置,记为(x,y), 代码里面是返回一个偏移.

  2. 利用上一桢的跟踪的结果的bbox的(w,h), 这样就有了一个Init的框(x,y,w,h).这个叫做B.

  3. 在B附近随机产生9个proposals,加上原来的那一个成为10个, 这10个proposals会有scale和aspect-ratio的变化,所以相当于也有了一部分的motion在里面.

  4. 然后网络的iou分支会给这10个预测出10个iou.

之前我以为预测出10个iou了之后就从top3的iou里面选择出三个平均之后就是最终的位置了,但是实际上不是的.

  1. 这10个iou还会各自用梯度下降法迭代5次,步长为1, 这是iou-net的非常厉害的一点,因为iou是bbox的函数,所以可以用梯度下降法直接优化bbox使得iou最大.详细的一点可以查看iounet, 主要是precise pooling变得可微了.

  2. 然后再从优化后的iou里面选出最大的三个,平均之后作为最终的estimate.

上面1中的在线分类

在线分类会随机生成30个样本,然后训练,之后每隔10桢再训练一次, 随机主要有blur, flip, rotate, droupout, 注意droupout是在产生的heatmap score上用的,即随机地让一些地方的响应值为0.

Thoughts

  • 把任务细化成两个小任务,然后每个小任务都尽量做到最好,最终的性能有所提升.

  • 感觉网络结构有些复杂,所以速度上不是太快,能否在网络结构上做些简化。

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦