精度调优工具#
典型的 DeepStream 感知管线包括检测器和多对象跟踪器,每个模块都有许多参数,这些参数在检测器 (PGIE) 和跟踪器配置文件中列出。例如,检测后处理的聚类阈值、跟踪器中的卡尔曼滤波器参数等。当用户在交通、零售、仓库等各种应用中部署此类数据处理管线时,一个痛点是如何为每个用例找到具有最高精度 KPI 的最佳参数。手动参数调整需要深入了解算法以及每个参数如何影响功能。考虑到参数数量众多,此过程的复杂性将呈指数级增长。
从 DeepStream 7.0 开始,发布了一个新的工具 PipeTuner 用于自动精度调优。它可以有效地探索(可能非常高维的)参数空间,并自动找到管线的最佳参数,从而在数据集上产生最高的 KPI。自动调优和传统手动调优之间的区别可以概括如下
方法 |
工作流程 |
优点/缺点 |
要求 |
使用 PipeTuner 进行自动调优 |
|
|
|
手动调优 |
|
|
|
有关更详细的教程,请查看 NGC 中的 PipeTuner 用户指南,获取逐步设置说明和所有技术细节。如果仍然需要手动调优,我们还在以下部分提供了某些配置参数的功能,以便更好地了解它们对多对象跟踪操作的性能和精度的潜在影响。
用于自动调优的 PipeTuner(开发者预览)#
下载#
PipeTuner 托管在 NGC 上。用户需要下载以下资源才能开始。
PipeTuner Collection:所有 Pipetuner 资源的集合,包括介绍、用户指南和设置说明;
PipeTuner Container:PipeTuner Docker 容器;
PipeTuner User Guide and Sample Data:PipeTuner 用户指南和示例数据,用于作为示例运行,包括人员跟踪的示例数据集、用于调优的配置文件以及用于启动管线的脚本。
特性和要求#
以下是 PipeTuner 功能和要求的摘要
设置#
设置 PipeTuner 的总体步骤如下。
下载容器:从 NGC 仓库拉取 PipeTuner 和 DeepStream 感知容器;
下载示例数据:从 NGC 资源下载并提取示例数据;
数据准备:用户创建自己的数据集,格式与示例数据相同,并更新配置文件以匹配其用例;
启动调优:使用所需的配置和数据启动调优管线;
检索结果:检索最佳参数并可视化调优结果;
部署:将最佳参数部署到所需的用例中。
PipeTuner 通过迭代以下三个步骤搜索最佳参数,直到精度 KPI 收敛或达到指定的最大迭代次数(即 epoch)
ParamSearch:给定上一次迭代中的精度 KPI 分数,对可能产生更高精度 KPI 的参数集进行有根据的猜测。对于第一次迭代,将进行参数空间中的随机抽样;
PipeExec:给定采样/猜测的参数集,使用参数执行管线并生成元数据以进行精度评估;
PipeEval:给定来自管线的元数据输出和数据集,根据精度指标执行精度评估并生成精度 KPI 分数。
用于手动调优的多对象跟踪参数功能#
本节介绍检测器和跟踪器每个模块中的配置参数,以及它们对性能和精度的潜在影响。《DeepStream SDK 插件手册》中提供了 NvMultiObjectTracker 跟踪器库的总体介绍。
精度-性能权衡#
视觉特征大小、检测间隔和输入帧大小都会对精度和性能产生影响。应正确设置它们以实现良好的精度-性能权衡。
视觉特征类型和特征大小#
相关参数
视觉特征类型
useColorNamesuseHog
特征大小
featureImgSizeLevelsearchRegionPaddingScale
NvDCF 跟踪器可以使用多种类型的视觉特征,例如定向梯度直方图 (HOG) 和 ColorNames。如果同时使用这两种特征(通过设置 useColorNames: 1 和 useHog: 1),则通道总数将为 28。使用的视觉特征通道越多,算法跟踪就越准确,但会增加计算复杂性并降低性能。
除了视觉特征的类型外,我们还可以配置用于表示每个特征通道的对象的像素数。相应的参数是 featureImgSizeLevel,其范围为 1 到 5。级别 1 到 5 之间的每个级别分别对应于每个特征通道的 12x12、18x18、24x24、36x36 和 48x48。因此,如果一个人同时使用 HOG 和 ColorNames,并将 featureImgSizeLevel: 5,则表示对象的视觉特征的维度将为 28x48x48。
需要注意的一点是,对象的视觉特征是从一个区域提取的,该区域的大小比对象区域稍大,以确保即使对象在帧之间移动,下一个帧中的对象也出现在该区域内。此区域称为搜索区域,其大小通过向对象 bbox 添加一定程度的填充来定义。《DeepStream 插件手册》中的 NvDCF 跟踪器部分提供了更多详细信息。
增加搜索区域大小会降低在下一帧中错过对象的概率;但是,给定固定的特征大小(即 featureImgSizeLevel),如果我们增加 searchRegionPaddingScale,它将有效地减少属于对象的像素数,从而导致视觉特征中对象表示的分辨率降低。这可能会导致跟踪精度降低;但是,如果预期对象在两个连续帧之间的移动程度较小,则即使搜索区域较小,对象也很可能出现在下一帧的搜索区域中。如果启用了状态估计器并且状态估计器的预测相当准确,则尤其如此,因为搜索区域将在下一帧的预测位置定义。
检测间隔#
相关参数
检测间隔
interval
用户可以探索增加检测间隔(即 PGIE 配置中的 interval),而不是减少视觉特征类型和大小。由于增强的精度和鲁棒性,NvDCF 跟踪器允许用户增加检测间隔,而不会过多牺牲精度。特别是当更重的神经网络模型用于对象检测时,增加检测间隔带来的性能增益将更高。因此,用户可以考虑增加检测间隔,而不是降低 NvDCF 跟踪器的精度设置。
跟踪器的视频帧大小#
相关参数
跟踪器的视频帧大小
tracker-widthtracker-height
在跟踪器插件中配置的视频帧大小对性能有一定影响,因为分辨率较高的视频帧需要更长的时间在内存之间传输。如果将帧分辨率设置得较低,希望获得更高的性能,但是,它对精度的负面影响可能会超过性能增益。因此,建议使用至少 960x544 分辨率(对于 1080p 源分辨率)以最大程度地减少精度下降。
鲁棒性#
为了处理来自检测器的误报和漏报,NvMultiObjectTracker 库利用了两种策略,称为延迟激活和阴影跟踪(更多详细信息可以在《DeepStream SDK 插件手册》中找到)。除了与这些策略相关的配置参数外,还有一些配置参数会影响何时为新对象创建和终止跟踪器。
目标创建策略#
相关参数
目标候选资格
minDetectorConfidenceminIouDiff4NewTarget
延迟激活
probationAgeearlyTerminationAge
如果检测器检测到的对象满足以下指定的最低资格(即目标候选资格),则会为该对象实例化一个新的跟踪器
minDetectorConfidenceminIouDiff4NewTarget
如果观察到置信度值较低的虚假检测,可以增加最小检测器置信度(即 minDetectorConfidence)来过滤掉它们。如果新检测到的对象与任何现有目标的最大 IOU 分数低于 minIouDiff4NewTarget,则将创建一个新的目标跟踪器来跟踪该对象。因此,如果希望进一步抑制在同一目标上创建可能具有略微不同 bbox 大小的重复 bbox,则可以将 minIouDiff4NewTarget 设置得更低。
一旦为新对象实例化了跟踪器,它最初会在临时模式(即 Tentative 模式)下开始跟踪对象,直到在由 probationAge 指定的期限(以帧数为单位)内满足进一步的标准。在此试用期内,只要跟踪器 bbox 与检测器 bbox 不匹配或跟踪器置信度低于 minTrackerConfidence,阴影跟踪年龄(这是一个内部变量)就会增加。如果阴影跟踪年龄达到预定义的阈值(即 earlyTerminationAge),则跟踪器将提前终止,从而有效地消除误报。
如果预计误报率较高,则可以考虑增加 probationAge 和/或降低 earlyTerminationAge 以获得更严格的创建策略。如果误报的预期检测器置信度较低,而真阳性的预期检测器置信度较高,则可以相应地设置 minDetectorConfidence 以过滤掉误报。
目标终止策略#
相关参数
阴影跟踪
minTrackerConfidencemaxShadowTrackingAge
除了上述试用期内的提前终止策略外,跟踪器终止时还需要满足某些标准。一旦跟踪器开始在 Active 模式下跟踪,如果满足以下条件,其状态将更改为 Inactive 模式
跟踪器置信度低于
minTrackerConfidence或在数据关联期间,它与检测器 bbox 不匹配。
当目标未与检测器对象关联时,阴影跟踪年龄每帧都会增加。如果跟踪器再次与检测器 bbox 匹配,则阴影跟踪年龄将重置为零,并且如果跟踪器处于 Inactive 模式,则跟踪器的模式将再次更改为 Active 模式(这意味着跟踪器输出将报告给下游)。但是,如果阴影跟踪年龄超过预定义的阈值(即 maxShadowTrackingAge),则跟踪器将被终止。
为了获得更鲁棒的跟踪,可以增加 maxShadowTrackingAge 的值,因为它允许即使在连续多帧中丢失检测后也能重新关联对象。但是,如果对象的视觉外观在丢失检测期间发生显着变化(例如,长时间遮挡),则当对象重新出现时,学习到的相关滤波器可能不会产生高相关响应。此外,增加 maxShadowTrackingAge 会使跟踪器的寿命更长(即延迟终止更多),从而导致在给定时间内存中存在的跟踪器数量增加,这反过来会增加计算负载。
状态估计#
NvMultiObjectTracker 库中的对象跟踪器维护目标的以下状态集
目标位置(在 2D 相机坐标中)
位置
位置速度
目标 Bbox
大小
大小速度
卡尔曼滤波器#
相关参数
processNoiseVar4LocprocessNoiseVar4SizeprocessNoiseVar4VelmeasurementNoiseVar4DetectormeasurementNoiseVar4Tracker
NvMultiObjectTracker 库中的卡尔曼滤波器 (KF) 实现主要遵循标准的 2D KF 方法,用户需要根据预期的不确定性水平定义过程噪声和测量噪声。如果对象具有相对简单且线性的运动,则可以将过程噪声设置得低于测量噪声,从而有效地更信任预测。如果预计对象具有更动态的运动或状态的突然变化,则更建议将测量噪声设置得较低;否则,如果预测不正确,可能会出现一些滞后。
需要考虑的另一个附加因素是,允许用户为检测器 bbox 和跟踪器 bbox 设置不同的测量噪声,以用于启用视觉跟踪器模块(即 NvDCF)的情况。检测器始终可能出现误报,或者可能存在跳过对象检测推理的视频帧。对于这种情况,每个对象跟踪器都使用学习到的相关滤波器进行自己的定位,并且结果用于更新卡尔曼滤波器。因此,从 KF 的角度来看,测量来自两个不同的来源:一个来自检测器,另一个来自跟踪器。在预期测量来自多个来源的情况下,应融合此类测量,以使用适当的测量模型(即测量的 不确定性建模)正确估计目标状态。
根据检测器和跟踪器的精度特性,应相应地配置测量噪声。当非常高精度的模型用于对象检测时,可以将 measurementNoiseVar4Detector 值设置得低于 measurementNoiseVar4Tracker,从而有效地比跟踪器的预测/定位更信任检测器的测量。
数据关联#
相关参数
匹配候选资格
minMatchingScore4OverallminMatchingScore4SizeSimilarityminMatchingScore4IouminMatchingScore4VisualSimilarity
匹配分数权重
matchingScoreWeight4VisualSimilaritymatchingScoreWeight4SizeSimilaritymatchingScoreWeight4Iou
在检测器执行推理的视频帧(称为推理帧)中,NvDCF 跟踪器执行数据关联,以将一组检测器对象与一组现有目标匹配。为了降低匹配的计算成本,必须为每个对象跟踪器定义一小组好的候选对象。这就是匹配候选资格的标准发挥作用的地方。对于每个跟踪器 bbox,只有在最小大小相似性、IOU 和视觉相似性方面合格的检测器 bbox 才会被标记为匹配的候选对象。视觉相似性是根据跟踪器在检测器 bbox 位置的相关响应计算得出的。例如,如果只想考虑至少与跟踪器 bbox 有一些重叠的检测器 bboxes,则需要将 minMatchingScore4Iou 设置为非零值。可以以类似的方式调整其他参数。
给定每个跟踪器的一组候选检测器 bboxes,在检测器 bbox 集和跟踪器集之间构建数据关联矩阵,匹配分数作为矩阵中元素的值。每个元素的匹配分数计算为加权和
视觉相似性
大小相似性,以及
IOU 分数,权重分别在
matchingScoreWeight4VisualSimilarity、matchingScoreWeight4SizeSimilarity和matchingScoreWeight4Iou中。
只有当结果匹配分数超过预定义的阈值(即 minMatchingScore4Overall)时,才会将该分数放入数据关联矩阵中
DCF 核心参数#
除了所用视觉特征的类型和大小外,还有一些参数与如何在 DCF 框架中学习和更新每个对象的分类器有关,这些参数会影响精度。
DCF 滤波器学习#
相关参数
filterLrfilterChannelWeightsLrgaussianSigma
基于 DCF 的跟踪器使用隐式正样本和负样本为每个对象学习一个分类器(即判别相关滤波器)。此类学习到的分类器会以预定义的学习率(即 filterLr)进行实时更新,以实现时间一致性。如果目标对象的视觉外观预计会随着时间快速变化,则可以使用高学习率来更好地使相关滤波器适应不断变化的外观。但是,也存在快速学习背景的风险,从而可能导致更频繁的跟踪漂移。
由于 NvDCF 跟踪器利用多通道视觉特征,因此如何合并这些通道以获得最终相关响应是一个值得关注的问题。NvDCF 采用自适应通道权重方法,其中实时检查每个通道的重要性,并且相应的通道权重会随着时间以预定义的学习率(即 filterChannelWeightsLr)进行更新。此学习率的调优策略将与之前描述的 filterLr 的情况类似。
当学习相关滤波器时,gaussianSigma 确定我们希望将结果滤波器与正样本拟合得有多紧密。较低的值意味着更紧密的拟合,但可能会导致过拟合。另一方面,较高的值可能会导致学习到的滤波器的判别能力较低。
另请参阅跟踪器设置和参数调优中的故障排除部分,了解跟踪器行为和调优中常见问题的解决方案。