MediaPipe中Box Tracking技术原理
Box Tracking概述
MediaPipe Box Tracking几年来一直利用经典的计算机视觉方法,支持YouTube的privacy blur和谷歌眼镜的实时跟踪。
框跟踪解决方案使用来自视频或摄像机流的图像帧,并使用带有时间戳的起始框位置,并为每一帧计算被跟踪的框位置。在这个特定的用例中,启动框的位置来自于目标检测,但是启动位置也可以由用户或其他系统手动提供。我们的解决方案由三个主要组件组成:运动分析、流包装和目标框跟踪。每个组件被封装为一个MediaPipe计算单元,目标框跟踪解决方案作为一个整体被表示为一个MediaPipe子图。
在box tracking subgraph中,MotionAnalysis计算单元在图像中提取特征(例如高梯度角),随着时间的推移跟踪这些特征,将它们分类为前景和背景特征,并估计局部运动矢量和全局运动模型。FlowPackager计算单元将估计的运动元数据打包成有效的格式。BoxTracker计算单元从FlowPackager计算单元获取这个运动元数据和目标框的起始位置,并随着时间跟踪目标框。单独使用运动分析计算单元产生的运动数据(不需要RGB帧),BoxTracker计算单元跟踪单个对象或区域,同时从其他鉴别。更多细节请参见谷歌开发者博客中的使用MediaPipe的对象检测和跟踪。
MediaPipe架构的一个优势是,通过将运动分析分离成专用的MediaPipe计算单元和整个图像上特征跟踪,我们实现了极大的灵活性和持续的计算独立于跟踪区域的数量!由于在跟踪期间不必依赖RGB帧,我们的跟踪解决方案提供了通过一批数据帧缓存元数据的灵活性。缓存可以在时间上前后跟踪区域;或者甚至直接同步到指定的时间戳,用于随机访问跟踪。
目标检测和跟踪
MediaPipe目标框跟踪可以与ML推断相匹配,从而产生有价值且高效的管道。例如,框跟踪可以与基于ml的对象检测配对,创建一个对象检测和跟踪管道。与跟踪相比,这个管道提供了每帧运行检测的几个优势(例如,MediaPipe对象检测):
- 它提供基于实例的跟踪,即跨帧维护对象ID。
- 检测不需要运行每一帧。这使得运行更重的检测模型更准确,同时在移动设备上保持管道轻量级和实时。
- 目标定位在时间上与跟踪的帮助是一致的,这意味着更少的抖动是跨帧可见。
对象检测和跟踪管道可以实现为一个MediaPipe图,它内部利用了一个对象检测子图、一个对象跟踪子图和一个渲染子图。
一般来说,对象检测子图(在内部执行ML模型推断)仅在请求时运行,例如以任意帧速率或由特定信号触发。更具体地说,在这个特殊的图中,一个PacketResampler计算单元在传入的视频帧被传递到对象检测子图之前,暂时对其进行0.5 fps的子采样。这个帧率可以配置为不同的选项在PacketResampler。
目标跟踪子图在每一帧上实时运行,跟踪被检测到的目标。它扩展了盒跟踪子图,增加了额外的功能:当新的检测到达时,它使用IoU(交叉Union)将当前跟踪的对象/盒与新的检测相关联,以删除过时或重复的目标框。
为了跟踪一个输入区域,我们首先使用该区域对应的运动数据,并采用迭代重加权最小二乘(IRLS)拟合参数模型到该区域的加权运动向量。每个区域都有一个跟踪状态,包括其先验速度、平均速度、inlier和outlier特征id集以及区域质心。跟踪状态可视化如下图,绿色箭头表示inliers的运动矢量,红色箭头表示outliers的运动矢量。请注意,由于每个特征的patch强度随着时间的推移大致保持不变,通过只依赖特征id,我们隐式地捕捉了区域的外观。此外,通过将一个区域的运动分解为摄像机的运动和单个物体的运动,我们甚至可以跟踪无特征区域。
我们的架构的一个优势是,通过将运动分析分离成专用的MediaPipe计算器和跟踪功能,在整个图像上,我们实现了极大的灵活性和持续的计算独立于跟踪区域的数量!由于在跟踪期间不必依赖RGB帧,我们的跟踪解决方案提供了跨一批帧缓存元数据的灵活性。缓存可以在时间上前后跟踪区域;或者甚至直接同步到指定的时间戳,用于随机访问跟踪。
下面是该目标检测和跟踪示例的示例结果。左边的图像是每帧运行目标检测的结果。正确的图像是运行目标检测和跟踪的结果。注意,跟踪的结果是更稳定的更少的时间抖动。它还跨帧维护对象id。