ROLO:Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking(一)
这篇博文是对ROLO的学习笔记,包括paper阅读笔记和代码学习记录。代码和paper地址在另一篇综述博文中点明,这里不再赘述。
1、论文阅读
摘要部分
文章受到了用回归方法生成bounding box(边界框)的思路启发,探索在时间域进行回归的能力,研究了将卷积生成的高维视觉信息与LSTM的时间维度能力相结合,获得了更优的跟踪表现。
在网上能搜到的关于ROLO的博客很少,基本上没人关注这个方向,应该是产生的效果没用那么惊艳,从摘要来看应该是用了YOLO的图像探测(detection)能力来处理逐帧的图像,然后利用LSTM进行时间维度上下文的利用,其实基本原理与线性拟合预测或者说卡尔曼预测的结果差不多,但是写一个CNN+RNN的网络的计算代价要远远的大。而且这俩网络如何训练,如何排除视频训练的难度和训练样本方向的问题,估计还要有很长一段路要走。
正文部分
与现有的跟踪模型不同的是,这篇文章据称考虑了物体的历史位置信息,比卡尔曼做的要好(无时无刻不在Diss kalman)。文章引用了两篇2015年的arvix文章,类似做RNN目标跟踪方向,但是是two-stage(原文是two step,这么说是和Faster rcnn与YOLO相匹配),文章的改进方式是用回归的方法进行集成 。
论文名称:First step toward model-free, anonymous object tracking with recurrent neural networks. 和 Recurrent attentive tracking model.
1、探索了LSTM回归模型的设计,实现了端到端的训练(卧槽,牛X!实际看代码其实并不是…..)。 2、将视觉跟踪拓展到时空领域。 3、简单高效。
(怎么找不到公式输入的地方)
Bt -----> 第t帧的物体的location Xt ----->第t帧
LSTM没什么好说的,主要关注点在图像。图像是从YOLO(注意是一代)引出了两个输入到LSTM,这一点看代码的时候需要去求证。现在猜测是全连接层的输出4096和最后的物体与边框的输出。但是考虑到LSTM结构的限制,YOLO的输出应该有一个预处理方法,这一点也是在看代码的时候的注意点。
一代YOLO不多解释了,可以在网上搜到很丰富的信息,是一个比较快速的多目标深度学习检测框架。惊艳之处在于把目标检测和边界框的生成用一个网络一个损失函数完成。把分类问题做成了一个回归的端到端的网络框架,极大的降低了训练难度。最新出来的YOLOv3我基本上是跪着看完的。然后看文章,这里介绍了用YOLO来检测物体,然后每一帧之间做IOU检测,第一帧做与gt框的IOU检测。等一下,不是说要用LsTM来拓展时间维度吗?怎么用上IOU了。逐帧做IOU应该是目标跟踪的常见想法啊..和YOLO有什么关系。这里暂时不能理解,先往下看。
关注点在训练方式上,是先进行YOLO的两个阶段的训练,然后训练LSTM。从代码简单来看好像是利用输入图片输出的逐帧数据来训练LSTM。
detection输出的是(c,x,y,w,h,p)<p是置信度>
公式区域用的是:总共生成S2 个格子,每个格子针对bbox进行预测包括类别,坐标等,然后对每个自己所做的预测有一个置信度。这里有一个注意点是YOLO一代是生成B个框但是对一个格子(重点符号) 只有一个得分,意思是虽然一个格子上有多个边界框,但是这个格子只有一个得分。这点和YOLOv3有不同(这里在进行用YOLOv3复现的时候需要格外注意。
纳尼?这就是LSTM部分吗?也没有什么奇技淫巧啊….难不成我读了假论文?感觉我上我也行啊(划掉,我不行,对不起我飘了)
好了,英语阅读时间,有两股数据从全连接层流入LSTM,是Xt ----> 特征图,Bt ---->位置信息。(等一下,这和前面说的符号意义好像有点不一样把…)然后还有从上一帧传入的 S。利用adam进行优化均方误差。
(看到这里还是一片迷惑,这个网络真的能训练出结果进行预测吗?一个视频序列各个帧之间各种状态都会有,如何去学到东西?如何解决训练的时候的帧间冗余信息?希望这篇文章能有所解答把,要不然今天下午的时光就喂狗了。[笑cry])
#可选的热力图跳过
依旧持怀疑态度,对一个时间序列来看,就算你都不用,非剧烈变化视频的上下帧都有很高的IOU重叠率。
从训练结果上来看,确实ROLO比YOLO有一个肉眼可见的提升复现的时候我想采用知乎大神的一个paper上的方法对这个跟踪稳定性进行一下权衡。paper:https://arxiv.org/abs/1611.06467。多讲一句,这个衡量方向是VID方向的(视频目标检测)。因为你做的是逐帧检测然后进行跟踪,其实和视频目标检测没有什么本质的区别。其实眼光放到VID领域来看,用LSTM做上下文信息的方法还是不少的。这些都是后话,有机会会写一些这个方向的阅读笔记的。
三件事:1)diss 卡尔曼。 2)位置推断有助于回归。 3)位置推断有助于检测结果不会错的离谱。
在验证遮挡的过程的时候,在某些情况下YOLO无法跟踪,但是ROLO可以。(粗略看过源代码,YOLO好像是拿kalman做的,如果效果真的这么明显的话,那真的是相当不错了。)
#论文表现略过
这里diss的应该没问题,由于LSTM有一个feature map 的传入,如果LSTM确实能学到其中的东西的话,ROLO就会比kalman滤波多一个周围环境感知的层次。接下来我会写一篇关于YOLOv3 + kalman +匈牙利算法的代码解读(deep-sort)是sort的YOLO版本。我的笔记链接 :(待填坑)
在那个deep-sort算法中,只是将目标框的信息送到了卡尔曼滤波器中做一个滤波平滑(或者叫一个卡尔曼预测),没有对周围的环境进行感知。这个思路和一篇16年的arvix文章相似(好像是)那篇文章利用了上下文的关系,还利用了周围环境的关系。举个栗子(Bling)基本上很难检测出环境是大海,周围有大量的鱼,但是有一个物体的类别是羊的概率比较高的情况。
作者试验:STEP = 6的情况下训练可以取得最有结果。
总结
总结:YOLO抽feature map 经过全连接变[1,4096],检测模块得出[c,x,y,w,h,p]。两个部分做连接 ---->[1,4102]传入到LsTM中去,然后LSTM结合上一次的状态输出预测。
看代码需要解决的问题:1、end-to-end如何实现。
2、训练的具体过程,选择的哪些样本,人和车等物体运动差距如何避免,其他形式非线性运动(如螺旋)是否鲁棒?
3、训练样本少,帧间信息冗余怎么解决
4、如何防止过拟合?
5、最终的计算速度?
6、YOLO是多目标检测,ROLO是不是多目标追踪?
带着这些问题去看代码啦~
Ref:百度翻译。