运动目标检测是计算机视觉的重要任务。这个任务的目标是找出视频里运动的东西。运动的东西可能是人,可能是车,也可能是动物。找到这些运动目标很有用。智能监控系统需要它。自动驾驶汽车需要它。人机交互系统也需要它。许多实际应用都依靠这个技术。
早期的方法使用背景建模。背景建模的想法很简单。先建立一个背景模型。背景就是不动的东西。然后把新的画面和背景模型比较。不一样的地方就是运动目标。这个方法在固定摄像头下效果好。背景模型需要不断更新。光线变化会影响效果。树叶摇晃也会被误认为是运动目标。阴影处理也是难题。这些情况都会造成错误。
另一种方法是帧间差分法。连续两帧画面做减法。差别大的地方就是运动区域。这个方法计算很快。它对光线变化不敏感。但是它有明显缺点。它只能检测到运动的边缘。运动目标的内部常常是空的。目标静止时无法检测。这个方法适合快速运动的物体。
光流法也用来检测运动目标。光流是像素点的运动速度。计算每个像素点的运动矢量。运动矢量大的地方可能是运动目标。光流法能检测独立运动。即使摄像机在动也能用。但是光流法计算量很大。它对噪声很敏感。实际使用中需要很多计算资源。实时系统很难采用这种方法。
现在流行使用深度学习。卷积神经网络是主要工具。神经网络能自动学习特征。特征包括颜色、纹理、形状。神经网络通过大量数据训练。训练好的网络可以检测运动目标。两阶段检测方法先产生候选区域。然后对每个区域分类和定位。R-CNN系列算法属于这一类。这些方法准确率高。但是速度比较慢。
一阶段检测方法更快。YOLO算法把检测当成回归问题。它直接预测目标的类别和位置。SSD算法在不同尺度的特征图上检测。这些方法速度很快。可以满足实时检测的要求。准确率也在不断提高。它们成为当前的主流方法。
视频数据有时间信息。连续帧之间有很强的关系。利用时间信息可以提高检测效果。循环神经网络可以处理序列数据。LSTM网络能记住之前的信息。三维卷积网络直接处理视频块。这些方法能学习运动模式。它们对遮挡情况更鲁棒。目标被短暂遮挡后还能跟踪上。
运动目标检测面临许多挑战。复杂背景是一个难题。背景里有类似目标的纹理。检测算法容易出错。目标尺度变化也带来困难。近处的目标很大。远处的目标很小。算法需要处理各种尺度。快速运动会导致运动模糊。画面里的目标不清晰。检测难度增加。
遮挡问题经常发生。一个目标被另一个目标挡住。或者被场景中的物体挡住。部分遮挡时目标不完整。完全遮挡时目标消失。好的算法需要处理这些情况。光照变化影响画面质量。白天和晚上的光线不同。室内和室外的光线不同。阴影会造成虚假目标。算法必须适应各种光照。
实时性要求很高。许多应用需要立刻得到结果。监控系统要马上报警。自动驾驶汽车要立刻决策。算法必须在短时间内完成计算。准确率和速度需要平衡。这需要好的模型设计和工程优化。
为了训练好的模型,需要大量数据。数据要有标注。标注就是告诉算法哪里是目标。标注工作需要很多人力。现在有一些公开的数据集。ChangeDetection数据集包含各种场景。KITTI数据集专注于自动驾驶场景。UCF101数据集包含人类动作。这些数据帮助研究人员比较算法。
评估检测效果有标准方法。查准率衡量检测到的目标有多少是对的。查全率衡量有多少真实目标被检测到。平均精度综合两者评价性能。检测速度用每秒处理的帧数衡量。好的算法要有高精度和高速度。
未来的研究有几个方向。轻量化模型适合移动设备。移动设备计算能力有限。模型必须小而且快。知识蒸馏可以训练小模型。小模型学习大模型的知识。效果接近大模型但速度更快。
多模态融合利用多种信息。除了视频图像,还可以使用深度信息。深度传感器提供距离数据。红外图像提供温度信息。这些信息互补,能提高检测可靠性。在黑暗环境中,红外图像特别有用。
无监督学习减少对标注数据的依赖。标注数据费时费力。无监督学习从无标注数据中学习。算法自己发现运动模式。这个方向很有前景。
运动目标检测技术不断进步。新算法越来越多。硬件计算能力越来越强。这个技术会更广泛地应用。智能城市需要它管理交通。家庭机器人需要它理解环境。虚拟现实需要它捕捉动作。运动目标检测让机器看懂运动的世界。这是一个充满活力的研究领域。研究人员在解决实际问题。技术正在改变我们的生活。