Dense Optical Tracking: Connecting the Dots
参考学习来自:
单目标跟踪 Siamese系列网络:SiamFC、SiamRPN、one-shot跟踪、one-shotting单样本学习、DaSiamRPN、SiamRPN++、SiamMask
单目标跟踪:跟踪效果 / 单目标跟踪:数据集处理 / 单目标跟踪:模型搭建 / 单目标跟踪:模型训练 / 单目标跟踪:模型测试
大话目标跟踪—背景介绍(YaqiLYU)
https://github.com/Cloud-CV/object-proposals
让视觉目标跟踪在移动端起飞(一)——Transformer和TransT
让视觉目标跟踪在移动端起飞(二)——NAS和LightTrack
让视觉目标跟踪在移动端起飞(三)——如何设计在移动端实现又好又快的tracker
跟踪的定义:在第一帧中给定目标框,在后续帧中不断对目标定位,实际上是一个 one-shot learning 过程。
目标视觉跟踪(Visual Object Tracking),大家比较公认分为两大类:生成(generative)模型方法和判别(discriminative)模型方法
在此间基础上还有协同跟踪方法:将生成式跟踪方法与判别式跟踪方法相结合
目前比较流行的是判别类方法,也叫检测跟踪(tracking-by-detection)
tracking-by-detection 和检测算法非常相似,如经典行人检测用 HOG+SVM,Struck 用到了 haar+structured output SVM,跟踪中为了尺度自适应也需要多尺度遍历搜索,区别仅在于跟踪算法对特征和在线机器学习的速度要求更高,检测范围和尺度更小而已。这点其实并不意外,大多数情况检测识别算法复杂度比较高不可能每帧都做,这时候用复杂度更低的跟踪算法就很合适了,只需要在跟踪失败(drift)或一定间隔以后再次检测去初始化tracker就可以了
传统视觉跟踪
(1) 基于目标模型建模的方法: 通过对目标外观模型进行建模, 然 后在之后的帧中找到目标. 例如, 区域匹配、特征点 跟踪、基于主动轮廓的跟踪算法、光流法等. 最常用 的是特征匹配法, 首先提取目标特征, 然后在后续的 帧中找到最相似的特征进行目标定位, 常用的特征 有: SIFT 特征、SURF 特征、Harris 角点等.
(2)基于搜索的方法: 随着研究的深入, 人们发现基 于目标模型建模的方法对整张图片进行处理, 实 时性差. 人们将预测算法加入跟踪中, 在预测值附近 进行目标搜索, 减少了搜索的范围. 常见一类的预测 算法有 Kalman滤波、粒子滤波方法. 另一种减小搜索范围的方法是内核方法: 运用最速下降法的原理, 向梯度下降方向对目标模板逐步迭代, 直到迭代到最优位置。
相关滤波——correlation filter(KCF,SRDCF,CF2,CCOT,ECO…等等经典工作在我的脑海里飘荡)。如果给这个时代截取一篇最经典的工作,我想我会选择KCF(Kernelized Correlation Filters)——在线更新模型。他是真的将视觉跟踪推向流行,让整个领域真的沸腾起来的工作。
深度学习方法
(1)预测score,这类算法以相关滤波和 SiameFC 为代表。通过预测候选区域的score map来得到物体的位置,物体的尺度大小通常是通过图像金字塔得到。同时无法得到物体的长宽比变化。
(2)GOTURN 和 SiamRPN 为代表的做 boundingbox regression 的方法。这也是SiamRPN取得当前最好结果的核心所在,充分挖取精度方向的红利。实际上并不是 SiamRPN 预测的有多稳定,而是在预测正确的时候,会给出更为精确的box。利用网络预测长宽比可以调整box,这个方向一直以来被大家所忽视,所以SiamRPN很快杀出重围。
(3)mask 在物体发生旋转的时候,简单的box的表述通常会产生极大的损失,这实际上就是表述本身存在的缺陷。而为了进一步探索在精度上存在的问题。我们更进一步,直接预测物体的mask——SiamMask
单目标跟踪可以看成是 one-shot learning, one-shot learning 中孪生网络结构用的比较多,下面我们简单的介绍下孪生网络
可以参考
伪孪生网络(pseudo-siamese network,伪孪生神经网络),对于pseudo-siamese network,两边可以是不同的神经网络(如一个是lstm,一个是cnn),也可以是相同类型的神经网络。
Contrastive Loss(对比损失函数)
Siamese类方法的核心是学习到一个可靠的,通用的相似性度量
One-Shot learning 可以无需重新训练即可应用于新的类别的数据
(1)SiamFC
《Fully-Convolutional Siamese Networks for Object Tracking》(ECCV-2016 workshops)
开山之作,来自牛津 Luca Bertinetto 大神
如果不靠高斯框,基本上无法跟上目标
跟踪的目标不适合背景嘈杂以及剧烈的抖动
SiamFC 对缺乏对背景的利用,也导致模型的判别性不足
SiamFC 预测时,不在线更新模板图像。这使得其计算速度很快,但同时也要求 SiamFC 中使用的特征具有足够鲁棒性,以便在后续帧中能够应对各种变化。另一方面,不在线更新模板图像的策略,可以确保跟踪漂移,在 long-term 跟踪算法上具有天然的优势
(2)SiamRPN
商汤《High Performance Visual Tracking with Siamese Region Proposal Network》(CVPR-2018)
Short-term real-time sub-challenge 冠军,Short-term tracking challenge 不是
引入 RPN 预测位置
解决了尺度问题
(3)DaSiamRPN
商汤《Distractor-aware Siamese Networks for Visual Object Tracking》(ECCV-2018)
考虑了样本不平衡的问题
(4)SiamRPN++
《SiamRPN++: Evolution of Siamese Visual Tracking with Very Deep Networks》(CVPR-2019)
引入深层网络
(5)SiamMask
《Fast Online Object Tracking and Segmentation: A Unifying Approach》(CVPR-2019)
加入了图像分割的内容
包括短时序列数据集 OTB,VOT,ALOV300++ 和 got-1k 等,以及长时序列数据集 LaSOT,OxUAV 和 TLP 等
OTB50:Wu Y, Lim J, Yang M H. Online object tracking: A benchmark [C]// CVPR, 2013.
OTB100:Wu Y, Lim J, Yang M H. Object tracking benchmark [J]. TPAMI, 2015.
LightTrack 的训练集配置是 Youtube-BB, ImageNet VID, ImageNet DET, COCO and GOT-10K,是pysot里面的常用设置。
TransT 的训练集配置是 COCO, TrackingNet, LaSOT, and GOT-10k,是pytracking里面的常用设置。
在 VOT2015 时即提出使用旋转矩形框来作为标记。在 VOT2016 的时候提出自动的通过mask来生成旋转框的方法。
精确度(Precision / Accuracy):跟踪方法估计目标位置的能力
鲁棒性(Robust):跟踪方法在每个序列上的平均失败次数
成功率(Success):跟踪方法估计目标尺度大小的准确度
跟踪长度(Tracking length)
最长子序列指标 (LSM metric):模型的长期跟踪性能
F-score 曲线:精确度和召回率相结合来评价跟踪模型的长期跟踪性能
跟踪速度
期望平均重合度(EAO):将鲁棒性与平均重合度(average overlap)相结合来评估跟踪方法
UPDP 属于 DCF(discriminative correlation filter) + CNN 的方法,目标跟踪新高度UPDT:解除深度特征被封印的力量,Martin大神
上面是公测榜单,内测榜单鲁棒性第一是北邮的 MFT,也是 DFP + CNN 的方法,准确性最高的是 Siam-RPN
下面看看 The VOT2018 long-term challenge
DaSiam_LT是 DaSiamRPN 的 long-term 版本,用 SiamRPN 产生 proposal,同时建模Distractor抑制干扰目标的响应,与MBMD优化SiamRPN的思路不同,但速度更快。目标丢失检测的思路非常直接:一旦判断到目标丢失,就扩大检测区域,进行一次全图检测。论文版本DaSiamRPN有110FPS,性能仅比MBMD低了0.003,性价比高很多。
SiamNet 速度快性能也不差,real-time 榜和 long-term 榜都是 SiamNet 登顶,尤其 SiamRPN 潜力巨大,打通了目标跟踪和目标检测,性价比很高,接下来会快速发展壮大,希望速度优势能保得住。
Long-term tracking
单目标多目标跟踪统一
跟踪问题因为需要时序信息(上一帧的输出作为下一帧跟踪的起始),所以一些微小的影响会被放大。不同内核的GPU运行的结果都有所不同,所以最好写个baseline的参数确认一下环境是否一致。
你简单的增大训练集并不能得到更好的结果(要么是模型容量有问题,要么就是训练过程有问题)
所以高层的特征并没有能学习到fine-grained的特征,甚至因为你给了各种光照,它干脆连颜色也丢了吧(疯狂的data argumentation反而会带来坏处)
残差之所以称为残差,是希望残差学习的部分的均值近似为0
反卷积网络,还原原始图像,这样就强迫网络特征层包含底层信息
train from scratch 的概念已经在检测领域非常普遍了。跟踪的网络目前我们的经验在跟踪方面并不work。
补充:数据集 OTB 在2013年公开了,对之前的算法是不可见的,所以 OTB 论文的结果非常可靠,但对于 2013 以后的算法是透明的,有调参的可能性,尤其是那些只跑OTB,而且论文中有关键参数直接给出还精确到小数点后两位的算法,建议您先实测再评价(人心不古啊~被坑的多了),但 VOT 竞赛的数据库是每年更新,还动不动就重新标注,动不动就改变评价指标,对当年算法是不可见且难度很大的,所以结果更可靠。
Cross-Correlation 的本质就是标准卷积 Conv:用 example feature 作为卷积核,对 instance feature 进行卷积,卷积输出就是每个位置的相似度分数。
目标跟踪:visual object tracking(VOT),也叫 single object tracking(SOT)
多目标跟踪:multiple object tracking(MOT),相比于VOT,除了要找到跟踪的目标外,还要能够区分跟踪目标属于初始目标中的哪一个(相当于VOT的检测之后,做进一步识别)。
跟踪算法类型