视频中的目标检测与图像中的目标检测具体有什么区别?
如果说视频检测的目标也是找到每一帧中一些固定类别的物体,那么跟图片检测几乎一样,毕竟图片就是视频的一帧。
如果视频检测的目标是跟踪某一个特定物体,那么我认为还是有一些区别的。如果只是用一种检测的方法,比如ssd,faster rcnn,这些算法其实是对类敏感,对类间不敏感,如果你要跟踪某个特定的人,检测算法每帧会找出所有的人。
可能你要说重新针对某一特定目标训练不就好了,这就是我现在正在做的事情了。最直接的问题就在于给你的只有这个要跟踪的视频,一般给出第一帧的目标信息,而检测算法的训练需要大量训练样本,怎么破?

在静态图像上实现目标检测,本身是一个滑窗+分类的过程,前者是帮助锁定目标可能存在的局部区域,后者则是通过分类器打分,判断锁定的区域是否有(是)我们要寻找的目标。研究的核心多集中于后者,选什么样的特征表示来描述你锁定的区域(HOG, C-SIFT, Haar, LBP, CNN, Deformable Part Models (DPM) and etc.),将这些特征输入到什么样的分类器(SVM,Adaboost and etc.)进行打分,判断是否是我们要找的目标。
尽管我们要检测的目标可能外形变化多端(由于品种,形变,光照,角度等等),通过大量数据训练CNN得到的特征表示还是能很好地帮助实现识别和判定的过程。但是有些极端情况下,如目标特别小,或者目标和背景太相似,或者在这一帧图像中因为模糊或者其他原因,目标确实扭曲的不成样子,CNN也会觉得力不从心,认不出来它原来是我们要找的目标呢。另外一种情况是拍摄场景混入了其他和目标外观很像的东西 (比如飞机和展翅大鸟),这时候也可能存在误判。

简单来说,视频检测是比单张图片检测多了Temporal Context(时间上下文)的信息。不同方法想利用这些Context来解决的问题并不相同。一类方法是关注如何使用这部分信息来加速Video Detection。因为相邻帧之间存在大量冗余,如果可以通过一些廉价的办法来加速不损害性能,在实际应用中还是很有意义的。另一类方法是关注这部分信息可以有效减轻单帧图片检测中由于运动模糊,物体面积过小导致的困难,从而来提升性能。当然最理想的方法是能又快又好啦:)
当然,这里有一些很简单的baseline方法,例如直接使用tracking关联。这类方法其实并没有深入到模型本身,一般仅仅局限于后处理步骤,虽然也可以取得一定的结果提升,但是个人觉得并不是很优美。比较关注的是来自以下两个组的工作吧。
1. CUHK: Xiaogang Wang 这面我了解到的有三篇文章,最开始 (TPAMI Short)是通过Motion的信息以及多类之间的Correlation来对单帧图像detector的输出进行后处理,算是在前面提到的Baseline方法上的小改进。后续的文章(CVPR 16)在这个基础上,引入了一个Temporal CNN对每一个Tubelet进行rescore。这样通过Temporal的信息来重新评估每个proposal的置信度。最近的工作(CVPR17)将Proposal生成这个步骤,也从静态图片拿到了时序上来做。除此之外,对于每个Tubelet的分类,也采取了流行的LSTM。
2. MSRA: Jifeng Dai 相对来讲,这面的工作更干净,思路更清晰一些。个人来说更喜欢。这面的两个工作其实思想类似,但是恰好对应于前文提到的加速和性能提升两个目的。其核心都在于通过快速计算Optical Flow来捕捉视频中的Motion信息,然后通过这个Flow的信息使用Bilinear Sampling对之前的Feature Map进行Warp(也就是通过Optical Flow来预测当前帧的Feature Map)。有了这样的信息之后,如果我们想加速,那么可以直接使用预测的Feature Map来输出结果;如果想得到更好的结果,可以将预测的Feature Map和当前帧计算出来的Feature Map融合起来一起输出结果。值得一提的是,后者也是目前唯一一个End to End的Video Detection方法。
另外有一些零碎一些的工作,基本都是在后处理过程中,处理rescore detection的问题,例如Seq-NMS等等。

如果说视频检测的目标也是找到每一帧中一些固定类别的物体,那么跟图片检测几乎一样,毕竟图片就是视频的一帧。
如果视频检测的目标是跟踪某一个特定物体,那么我认为还是有一些区别的。如果只是用一种检测的方法,比如ssd,faster rcnn,这些算法其实是对类敏感,对类间不敏感,如果你要跟踪某个特定的人,检测算法每帧会找出所有的人。
可能你要说重新针对某一特定目标训练不就好了,这就是我现在正在做的事情了。最直接的问题就在于给你的只有这个要跟踪的视频,一般给出第一帧的目标信息,而检测算法的训练需要大量训练样本,怎么破?

在静态图像上实现目标检测,本身是一个滑窗+分类的过程,前者是帮助锁定目标可能存在的局部区域,后者则是通过分类器打分,判断锁定的区域是否有(是)我们要寻找的目标。研究的核心多集中于后者,选什么样的特征表示来描述你锁定的区域(HOG, C-SIFT, Haar, LBP, CNN, Deformable Part Models (DPM) and etc.),将这些特征输入到什么样的分类器(SVM,Adaboost and etc.)进行打分,判断是否是我们要找的目标。
尽管我们要检测的目标可能外形变化多端(由于品种,形变,光照,角度等等),通过大量数据训练CNN得到的特征表示还是能很好地帮助实现识别和判定的过程。但是有些极端情况下,如目标特别小,或者目标和背景太相似,或者在这一帧图像中因为模糊或者其他原因,目标确实扭曲的不成样子,CNN也会觉得力不从心,认不出来它原来是我们要找的目标呢。另外一种情况是拍摄场景混入了其他和目标外观很像的东西 (比如飞机和展翅大鸟),这时候也可能存在误判。

简单来说,视频检测是比单张图片检测多了Temporal Context(时间上下文)的信息。不同方法想利用这些Context来解决的问题并不相同。一类方法是关注如何使用这部分信息来加速Video Detection。因为相邻帧之间存在大量冗余,如果可以通过一些廉价的办法来加速不损害性能,在实际应用中还是很有意义的。另一类方法是关注这部分信息可以有效减轻单帧图片检测中由于运动模糊,物体面积过小导致的困难,从而来提升性能。当然最理想的方法是能又快又好啦:)
当然,这里有一些很简单的baseline方法,例如直接使用tracking关联。这类方法其实并没有深入到模型本身,一般仅仅局限于后处理步骤,虽然也可以取得一定的结果提升,但是个人觉得并不是很优美。比较关注的是来自以下两个组的工作吧。
1. CUHK: Xiaogang Wang 这面我了解到的有三篇文章,最开始 (TPAMI Short)是通过Motion的信息以及多类之间的Correlation来对单帧图像detector的输出进行后处理,算是在前面提到的Baseline方法上的小改进。后续的文章(CVPR 16)在这个基础上,引入了一个Temporal CNN对每一个Tubelet进行rescore。这样通过Temporal的信息来重新评估每个proposal的置信度。最近的工作(CVPR17)将Proposal生成这个步骤,也从静态图片拿到了时序上来做。除此之外,对于每个Tubelet的分类,也采取了流行的LSTM。
2. MSRA: Jifeng Dai 相对来讲,这面的工作更干净,思路更清晰一些。个人来说更喜欢。这面的两个工作其实思想类似,但是恰好对应于前文提到的加速和性能提升两个目的。其核心都在于通过快速计算Optical Flow来捕捉视频中的Motion信息,然后通过这个Flow的信息使用Bilinear Sampling对之前的Feature Map进行Warp(也就是通过Optical Flow来预测当前帧的Feature Map)。有了这样的信息之后,如果我们想加速,那么可以直接使用预测的Feature Map来输出结果;如果想得到更好的结果,可以将预测的Feature Map和当前帧计算出来的Feature Map融合起来一起输出结果。值得一提的是,后者也是目前唯一一个End to End的Video Detection方法。
另外有一些零碎一些的工作,基本都是在后处理过程中,处理rescore detection的问题,例如Seq-NMS等等。
