【深度学习:对象跟踪】对象跟踪完整指南 [教程]
视觉对象跟踪是计算机视觉中的一个重要领域。迄今为止,已经提出了许多具有有希望结果的跟踪算法,包括最近出现的基于深度学习的算法,并因其出色的跟踪性能而引起了许多人的兴趣。在我们深入研究一些最著名的对象跟踪深度学习算法之前,让我们首先了解对象学习及其在计算机视觉领域的重要性。
什么是计算机视觉中的对象跟踪?
对象跟踪涉及一种算法,用于跟踪目标对象的运动,并预测图像或视频中对象的位置和其他相关信息。
对象跟踪与对象检测不同(许多人会熟悉 YOLO 算法):对象检测仅限于单个帧或图像,并且仅在输入图像中存在感兴趣的对象时才有效,而对象跟踪是一种用于预测目标对象位置的技术, 通过跟踪物体的轨迹,无论它是否存在于图像或视频帧中。
对象跟踪算法可以根据任务和它们所训练的输入类型分为不同的类型。让我们来看看四种最常见的对象跟踪算法类型:
- Image tracking 图像跟踪
- Video tracking 视频跟踪
- Single object tracking 单对象跟踪
- Multiple object tracking 多对象跟踪
对象跟踪有哪些不同类型?
图像跟踪
图像跟踪的目的是检测给定输入中感兴趣的二维图像。然后,当图像在环境中移动时,图像会被持续跟踪。因此,影像追踪最适合具有鲜明对比度图像、不对称性、图案以及感兴趣影像与影像数据集中其他影像之间存在若干可识别差异的数据集。
视频跟踪
顾名思义,视频跟踪是跟踪视频中感兴趣对象的任务。它涉及按顺序分析视频帧,并通过预测和创建周围的边界框,将对象的过去位置与当前位置拼接在一起。它广泛用于交通监控、自动驾驶汽车和安全监控,因为它可以实时预测有关物体的信息。
图像和视频对象跟踪算法都可以根据它们所跟踪的对象数量进一步分类:
单目标跟踪
顾名思义,单对象跟踪涉及在视频或图像序列中一次仅跟踪一个目标。目标和边界框坐标在第一帧或图像中指定,并在后续帧和图像中识别和跟踪。
单对象跟踪算法应该能够跟踪给定的任何检测到的对象,甚至是没有训练可用分类模型的对象。
多对象跟踪
另一方面,多对象跟踪涉及跟踪多个对象。跟踪算法必须首先确定每帧中的对象数量,然后跟踪每个帧中每个对象的身份。
既然我们已经对物体追踪有了一个简单的了解,那就让我们来看看它的几个使用案例,然后深入了解物体追踪算法的各个组成部分。
计算机视觉中对象跟踪的用例
监测
实时物体跟踪算法可用于多种监控。它们既可用于跟踪活动,也可用于跟踪物体–例如,物体跟踪算法可用于检测某个监控地点内是否有动物,并在检测到入侵者时发出警报。在大流行病期间,物体跟踪算法经常被用于人群监控,即跟踪人们在公共场所是否保持社交距离。
零售
在零售业,物体追踪通常用于追踪顾客和产品–亚马逊 Go 商店就是一个例子,在那里,这些算法对于建立无收银员结账系统至关重要。多物体跟踪系统不仅会跟踪每个顾客,还会跟踪顾客拿起的每个物体,从而使算法能够实时确定顾客将哪些产品放入购物篮,然后在顾客穿过结账区时生成自动收据。这是计算机视觉任务如何为顾客带来切实利益(如更快结账和更流畅的体验)的一个实际例子。
自动驾驶汽车
人工智能驱动的物体检测和跟踪技术最广为人知的用途可能就是自动驾驶汽车。视觉物体跟踪在汽车中被用于多种用途,包括障碍物检测、行人检测、轨迹估计、避免碰撞、车速估计、交通监控和路线估计。人工智能是自动驾驶交通的核心,而图像分类和移动物体检测将对这一领域的未来产生巨大影响。
医疗保健
视觉物体跟踪技术在医疗保健行业的应用日益广泛。例如,制药公司使用单个和多个目标跟踪来实时监控药品生产,确保实时检测和处理任何紧急情况,如机器故障或药品生产线故障。
在重点介绍了物体跟踪的几个示例之后,让我们来深入了解其组成部分。
对象跟踪方法
步骤 1:目标初始化
对象跟踪的第一步是定义目标和感兴趣对象的数量。通过在目标对象周围绘制一个边界框来识别感兴趣的对象——在图像序列中,这通常位于第一张图像中,而在视频中则位于第一帧中。
然后,跟踪算法必须预测对象在剩余帧中的位置,同时识别对象。
此过程可以手动或自动完成。用户进行手动初始化,以使用边界框或省略号注释对象的位置。另一方面,对象检测器通常用于实现自动初始化。
第 2 步:外观建模
外观建模涉及对对象的视觉外观进行建模。当目标物体经历许多不同的场景时(例如不同的照明条件、角度或速度),物体的外观可能会有所不同,从而导致错误信息和算法失去对物体的跟踪。必须执行外观建模,以便建模算法能够捕获感兴趣对象移动时引入的不同变化和变形。
这种类型的优化主要由两个部分组成:
- 视觉表示:使用视觉特征构建可靠的对象描述
- 统计建模:使用统计学习技术为对象识别构建有效的数学模型
第 3 步:运动估计
一旦定义了对象并对其外观进行了建模,就可以利用运动估计来推断模型的预测能力,以准确预测对象的未来位置。这是一个动态状态估计问题,通常通过使用线性回归技术、卡尔曼滤波或粒子滤波等预测变量来完成。
第 4 步:目标定位
运动估计近似于最有可能找到物体的区域。一旦确定了物体的大致位置,就可以利用视觉模型来精确定位目标的确切位置——这是通过贪婪搜索或基于运动估计的最大后验估计来执行的。
对象跟踪的挑战
在构建对象跟踪算法时,会出现一些常见的挑战。在笔直的道路或简单的环境中跟踪物体很简单。在现实世界中,感兴趣的对象会受到许多因素的影响,使对象跟踪变得困难。在设计对象跟踪算法时,意识到这些常见挑战是解决这些问题的第一步。对象跟踪的一些常见挑战是:
背景杂波
当背景人口稠密时,很难提取特征、检测甚至跟踪目标对象,因为它会引入更多的冗余信息或噪声,使网络对重要特征的接受度降低。
照度变化
在现实生活中,感兴趣物体上的照明会随着物体的移动而发生巨大变化,这使得其定位更难跟踪和估计。
闭塞
当不同的物体和物体进入和离开画面时,目标物体的边界框通常会被遮挡,从而阻止算法识别和跟踪它,因为背景或前景会干扰它。当多个对象的边界框靠得太近时,通常会发生这种情况,从而导致算法混淆,并将跟踪对象标识为新对象。
低分辨率
根据分辨率的不同,训练数据集边界框内的像素数可能太低,无法使对象跟踪保持一致。
比例变化
比例也是一个因素,当第一帧和当前帧的边界框超出范围时,算法跟踪目标对象的能力可能会受到挑战。
目标形状的变化
在图像和帧中,感兴趣对象的形状可能会旋转、变暗、变形等。这可能是由于多种因素造成的,例如视点变化或对象比例的变化,并且通常会干扰算法的对象跟踪直觉。
快动作
特别是在跟踪快速移动的物体时,物体的快速运动通常会影响跨帧和图像准确跟踪物体的能力。
现在,我们已经讨论了构建对象跟踪算法所需的每个组件,以及在现实世界中使用该算法时面临的挑战。我们正在构建的算法是针对现实世界中的应用,因此,构建强大而高效的对象跟踪算法至关重要。深度学习算法已被证明可以在对象跟踪方面取得成功。以下是一些著名的算法:
用于目标跟踪的深度学习算法
对象跟踪已经存在了大约 20 年,并且已经开发了许多方法和想法来提高跟踪模型的准确性和效率。
一些方法中使用了传统或经典的机器学习算法,例如 k 最近邻或支持向量机——这些方法可以有效地预测目标对象,但它们需要专业人员提取重要和歧视性信息。
另一方面,深度学习算法会自行提取这些重要的特征和表示。因此,让我们来看看其中一些用作对象跟踪算法的深度学习算法:
深度排序
DeepSORT是一种众所周知的对象跟踪算法。它是简单在线实时跟踪器或 SORT(一种在线跟踪算法)的扩展。SORT 是一种使用卡尔曼滤波器根据物体过去位置估计物体位置的方法。卡尔曼滤波器对遮挡非常有效。
SORT 由三个组件组成:
- 检测:首先,检测初始感兴趣的对象。
- 预测:使用卡尔曼滤波器预测感兴趣对象的未来位置。卡尔曼滤波器预测了物体的新滤波器,需要对其进行优化。
- 关联:需要优化已预测的目标对象的大致位置。这通常是通过使用匈牙利算法检测未来的位置来完成的。
深度学习算法用于改进SORT算法。它们允许 SORT 以更高的精度估计对象的位置,因为这些网络现在可以预测目标图像的特征。卷积神经网络 (CNN) 分类器本质上是在特定于任务的数据集上训练的,直到达到高精度。一旦实现,分类器将被移除,只留下从数据集中收集的特征。然后,SORT 算法使用这些提取的特征来跟踪目标对象。
DeepSORT的工作频率为20Hz,特征生成占用了近一半的推理时间。因此,在给定现代 GPU 的情况下,系统保持计算效率并实时运行。
MDNet
Multi-Domain Net 或 MDNet 是一种基于 CNN 的对象跟踪算法,它使用大规模数据进行训练。它被训练为使用带注释的视频来学习目标的共享表示,即它需要属于不同域的多个带注释的视频。它的目标是学习广泛的变化和空间关系。
MDNet 中有两个组件:
- 预训练:这里需要深度学习网络来学习多域表示。该算法在多个带注释的视频上进行训练,以学习表示和空间特征。
- 在线视觉跟踪:然后删除特定于域的图层,网络具有共享图层。这包括学习的表示。在推理过程中,会添加一个二元分类层,然后对其进行进一步训练或在线微调。
SiamMask
SiamMask的目标是提高全卷积暹罗网络的离线训练技术。暹罗网络是卷积神经网络,它使用两个输入来创建密集的空间特征表示:裁剪图像和较大的搜索图像。
暹罗网络只有一个输出。它比较两个输入图像的相似性,并确定两个图像是否包含相同的目标对象。通过使用二元分割任务来增加损失,这种方法对于对象跟踪算法特别有效。经过训练后,SiamMask 可以在线运行,只需要边界框初始化,提供与类无关的对象分割掩码,并以每秒 35 帧的速度旋转边界框。
GOTURN
大多数通用对象跟踪器都是从头开始在线训练的,尽管有大量视频可供离线训练。使用回归网络的通用对象跟踪(GOTURN)利用基于回归的神经网络来监控通用对象,以便通过对带注释的视频进行训练来提高其性能。
该跟踪算法采用基本的前馈网络,无需在线训练,允许其在测试期间以每秒 100 帧的速度运行。该算法从标记的视频和大量图像中学习,防止过度拟合。跟踪算法学习在通用对象在不同空间中移动时实时跟踪它们。
所有这些算法都是在公开可用的数据集上进行训练的,这凸显了标注良好的数据的重要性。这对于机器学习和计算机视觉领域的任何人来说都是一个关键话题,因为建立精确的物体跟踪算法首先要有一个强大的标注数据集。
帮助您高效注释视频和图像流数据集的平台通常还包括内置的自动物体跟踪等功能。这有助于减少构建良好数据集所花费的时间,并快速启动深度学习解决方案来进行物体跟踪。让我们来看看如何使用 Encord 为物体跟踪算法构建数据集:
Encord 中的对象跟踪指南
步骤 1:创建新项目
在主页上,点击 "新建项目 "开始,并添加项目名称和描述–这将有助于其他人在团队中共享数据集,或在将来引用数据集。
第 2 步:添加数据集
在这里,您可以使用现有的数据集,也可以添加新的数据集。我已经使用 "新数据集 "图标添加了数据集,因此我选择了它。
添加说明还有助于其他团队成员共享您创建和注释的数据集。作为一项安全措施,它还可以保存在私有云中。
在这里,我从 VOT2022 挑战赛数据集中选择并上传了 100 张汽车图片。
步骤 3:设置本体
你可以把本体看作是你对数据提出的问题。在这里,我在本体中添加了“汽车”作为对象——您可以在任何给定的图像或帧中根据需要跟踪任意数量的对象。要了解有关本体的更多信息,您可以阅读 Encord 的更多文档。
第 4 步:设置质量保证
在处理大型数据集时,此步骤至关重要,以确保在每个阶段都保持一定的质量。这可以手动或自动完成 - 更多详细信息在 Encord 的文档中。
一切准备就绪!
通过 4 个简单的步骤创建一个项目,您就可以开始(并自动化)标签了。如何自动执行视频注释博客文章将帮助您自动执行对象跟踪的标记过程。
结论
对象跟踪用于识别视频中的对象,并将其解释为一系列高精度轨迹。根本的困难是在计算效率和性能之间取得平衡,而深度学习算法提供了这种平衡。
在本文中,我们讨论了对象跟踪的一些实际用例,以及构建对象跟踪算法的一些主要挑战,以及这些深度学习算法如何为准确性和效率铺平道路。我们希望这篇文章能激励您构建高效的对象跟踪算法!