文 / MediaPipe 产品经理 Ming Guang Yong
MediaPipe 概览
MediaPipe 可用于构建跨平台、多模态的 ML 流水线框架,由快速 ML 推理、传统计算机视觉和媒体处理(如视频解码)组成。2019 年 6 月,MediaPipe 在计算机视觉与模式识别大会 (CVPR) 上正式开放源代码,版本为 v0.5.0。自第一个开源版本以来,我们发布了各种 ML 流水线示例,如:
在本文中,我们将介绍一个 MediaPipe 新示例:目标检测和追踪。我们将先介绍检测框追踪解决方案 (Box Tracking),然后解释如何将其与“目标检测”系统整合以提供目标检测和追踪。
MediaPipe 检测框追踪
我们推出了一种检测框追踪解决方案,它利用了传统的计算机视觉方法,已为 Motion Stills、YouTube 隐私模糊处理 和 Google 智能镜头提供数年的实时追踪支持。将追踪与 ML 推理配对,可以得到价值与效率兼具的流水线。在我们将检测框追踪与目标检测配对,创建了目标检测和追踪流水线。与每帧运行检测相比,拥有追踪功能的流水线具有多项优势:
- 提供基于实例的追踪,即跨帧维持目标 ID。
- 无需每帧运行检测。这些优点让我们可以运行负载更高但更为精确的检测模型,同时在移动设备上保持流水线的轻量级和实时性。
- 有了追踪功能,目标的位置在时间上就可以保持一致,这意味着在不同帧中我们所观察到的目标的抖动将更小。
通用的检测框追踪解决方案可以利用视频或摄像头视频流中的图像帧,为检测框的起始位置提供时间戳,并指示要追踪的 2D 关注区域,然后计算所追踪的检测框在每帧中的位置。
在本文所述的特定用例中,检测框的起始位置源于目标检测,但也可以由用户或其他系统手动输入。解决方案中包含三个主要组件:运动分析 (MotionAnalysis) 组件,流程打包 (FlowPackager) 组件,以及检测框追踪 (Box Tracking) 组件。每个组件都被封装成了 MediaPipe 计算器,而检测框追踪解决方案整体则表示为 MediaPipe 子计算图,具体如下所示:
MotionAnalysis 计算器将提取整个图像的特征(如高梯度边角),并随时间追踪这些特征,将其分类为前景特征和背景特征,然后预估局部运动向量和全局运动模型。FlowPackager 计算器将预估得到的运动元数据打包成有效格式。BoxTracker 计算器从 FlowPackager 计算器获取运动元数据和起始检测框的位置,并追踪检测框框随时间推移的变化。BoxTracker 计算器仅使用由 MotionAnalysis 计算器生成的运动数据(不需要 RGB 帧)来追踪单个目标或区域,因此可以将其与其他目标或区域进行区分。
为追踪输入区域,我们首先使用与该区域相对应的运动数据,然后运用迭代重加权最小二乘法 (IRLS) 将参数模型与该区域的加权运动向量拟合。每个区域都拥有一个追踪状态,其中包括先前的速度、平均速度、一组正常特征和异常特征 ID,以及区域的形心。追踪状态的可视化效果如下图所示,绿色箭头表示正常特征的运动向量,红色箭头是异常特征的运动向量。请注意,每个特征的色块强度随时间推移大体保持不变,因此我们仅仅依靠特征 ID 便间接地捕获了该区域的外观。另外,通过将区域的运动分解为摄像头运动和单个目标的运动,我们甚至可以追踪无特征区域。
我们架构的优势在于,通过将运动分析分离到专用的 MediaPipe 计算器中并追踪整个图像的特征,可以实现极大的灵活性和不受追踪区域数量限制的稳定计算能力!由于在追踪过程中不需要依赖 RGB 帧,可以灵活地在多帧之间缓存元数据。通过缓存元数据,您可以按时间正向和反向追踪区域,甚至也可以直接同步到指定的时间戳,以随机访问的方式进行追踪。
目标检测和追踪
下方显示的是目标检测与追踪的 MediaPipe 示例图。它由 4 个计算节点组成:PacketResampler 计算器、之前在 MediaPipe 目标检测示例 中推出的 ObjectDetection 子计算图、用于打包上文中的 BoxTracking 子计算图的 ObjectTracking 子计算图,以及用于绘制可视化效果的 Renderer 子计算图。
目标检测与追踪的 MediaPipe 示例图。紫色方框是子计算图
通常情况下,ObjectDetection 子计算图(在内部执行 ML 模型推理)仅在收到请求时运行,例如,视频帧以任意帧速率传入或触发特定信号时。更具体地讲,在此示例中,在将传入的视频帧传递进 ObjectDetection 之前,PacketResampler 在时间上将其下抽样为 0.5 fps。您可以在 PacketResampler 中配置为其他帧速率。
ObjectTracking 子计算图在每个传入帧上实时运行以追踪检测到的目标。该子计算图对上面的 BoxTracking 子计算图进行了扩展:当收到新的检测目标时,它会使用 IoU (Intersection over Union) 将当前追踪的目标/检测框与新的检测目标相关联,以移除过时或重复的检测框。
下方显示了此目标检测与追踪示例的示例结果。左图是逐帧运行目标检测的结果。右图是运行目标检测与追踪的结果。请注意,我们的方案不仅追踪的结果更稳定,随时间变化的抖动更少,而且可以跨帧维持目标 ID。
逐帧运行目标检测与目标检测和追踪方案的对比
关注 MediaPipe
这是我们撰写的又一篇关于 MediaPipe 的 谷歌开发者文章。我们期待发布与全新 MediaPipe ML 流水线示例和功能相关的内容,更多相关内容,请关注本论坛里关于 MediaPipe 的内容,以及 谷歌开发者公众号 上的 MediaPipe 话题标签和 Google 开发者的微博账号。
致谢
感谢 Fan Zhang、Genzhi Ye、Jiuqiang Tang、Jianing Wei、Chuo-Ling Chang、Ming Guang Yong 和 Matthias Grundman 在 MediaPipe 中为构建目标检测和追踪解决方案所付出的努力,以及为该博文所做的贡献。
原文: Object Detection and Tracking using MediaPipe
中文:TensorFlow 公众号