谷歌详细介绍MediaPipe对象检测与追踪系统
如何与Object Detection结合并提供一个对象检测与追踪系统
(映维网 2019年12月11日)MediaPipe是用于构建跨平台多模态应用ML管道的框架,其包括快速ML推理,经典计算机视觉和媒体内容处理(如视频解码)。在2019年6月举行的CVPR大会,MeidaPipe正式开源,版本是v0.5.0。自那以后,谷歌陆续发布了一系列的ML管道示例。
日前,谷歌撰文介绍了又一个MediaPipe示例:Object Detection and Tracking。谷歌首次描述了新发布的Box Tracking解决方案,并解释了它是如何与Object Detection结合并提供一个对象检测与追踪系统。
Box Tracking in MediaPipe
MediaPipe v0.6.7.1带来了一种Box Tracking解决方案,而后者多年来一直驱动着Motion Stills,YouTube隐私模糊,以及Google Lens的实时追踪功能,并且它是利用经典的计算机视觉方法。结合追踪与ML推理可产生有价值且有效的管道。所以,谷歌将Object Detection和Box Tracking结合在了一起,并创建了一个对象检测与追踪管道。与每帧运行检测相比,支持追踪的管道存在多个优点:
- 提供了基于实例的追踪,即对象ID能够在多帧中维持。
- 检测并不一定需要每帧运行。这样可以运行负载更高但更为精确的检测模型,同时为移动设备保持管道轻巧和实时。
- 在追踪的帮助下,对象定位在时间方面保持一致,这意味着在整个帧中注意到的抖动较小。
谷歌的通用Box Tracking解决方案利用了视频或摄像头馈送流中的图像帧,为方框位置提供时间戳,说明要追踪的2D目标区域,然后计算每帧需要追踪的方框位置。在这个特定的用例中,方框的起始位置来自于对象检测,但起始位置同时可以由用户或其他系统手动提供。谷歌的解决方案包含三个主要组件:运动分析组件,流打包组件,以及方框追踪组件。每个组件都封装成MediaPipe计算器,并且Box Tracking解决方案整体表示为一个MediaPipe子图,如下所示:
MediaPipe Box Tracking子图
MotionAnalysis计算器提取整个图像的特征(如高梯度角),随时间推移追踪所述特征,将其分类为前景特征和背景特征,并估计局部运动矢量和全局运动模型。FlowPackager计算器将估计的运动元数据打包为有效格式。BoxTracker计算器从FlowPackager计算器获取所述运动元数据和起始方框的位置,并随时间追踪方框。BoxTracker计算器仅使用由MotionAnalysis计算器生成的运动数据(不需要RGB帧)来追踪单个对象或区域,同时区分其他对象或区域进。
为了追踪输入区域,谷歌首先利用了与所述区域相对应的运动数据,然后采用迭代重加权最小二乘法(Iteratively Reweighted Least Aquares;IRLS)将参数模型拟合到所述区域的加权运动向量。每个区域都存在一个跟追踪态,包括平均速度,一组正常特征与离群特征ID,以及区域质心等等。追踪状态的可视化请参见下图,绿色箭头是正常值的运动矢量,红色箭头是离群值的运动矢量。请注意,由于每个特征的色块强度随时间推移大致保持恒定,所以仅依靠特征ID即可隐式捕获所述区域的外观。另外,通过将区域的运动分解为camera运动和单个对象运动,你甚至可以追踪无特征区域。
每个方框的追踪状态可视化
这一架构的优势在于,通过将运动分析分拆到专用的MediaPipe计算器,并追踪整个图像的特征,谷歌可以实现极大的灵活性和恒定的计算能力,而且不受所追踪区域的数量限制。由于在追踪过程中不必依赖RGB帧,所述解决方案提供了在一批帧中缓存元数据的灵活性。通过缓存,你可以及时地追踪区域的向前和向后移动;甚至直接同步到指定的时间戳,从而实现随机访问追踪。
Object Detection and Tracking
下面是用于对象检测与追踪的MediaPipe示例图,它由4个计算节点组成:PacketResampler计算器;先前发布的ObjectDetection子图;围绕上述BoxTrakcing子图的ObjectTracking子图;以及绘制可视化效果的Renderer子图。
用于对象检测与追踪的 MediaPipe示例图。紫色方框是子图。
通常来说,ObjectDetection子图仅在请求时运行,例如以任意帧速率或由特定信号触发。更具体地讲,在将视频帧传递到ObjectDetection之前,本示例中的PacketResampler将它们暂时采样为0.5 fps。你可以在PacketResampler中将这一选项配置为不同的帧速率。
ObjectTracking子图在每个传入帧实时运行以追踪检测到的对象。它能够利用额外的功能来扩展上述的BoxTracking子图:当新检测到达时,它将使用IoU(Intersection over Union;交并比)将当前追踪的对象/方框与新检测相关联,从而删除过时或重复的方框。
下面是这个对象检测与追踪示例的结果。左图是每帧运行对象检测的结果。右图是运行对象检测与追踪的结果。注意,后边的结果更加稳定,时间抖动更少,而且可以跨帧维护对象ID。
每帧运行对象检测和对象检测与追踪的对比