精度调优工具#
典型的 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
跟踪器库的总体介绍。
精度-性能权衡#
视觉特征大小、检测间隔和输入帧大小都会对精度和性能产生影响。应正确设置它们以实现良好的精度-性能权衡。
视觉特征类型和特征大小#
相关参数
视觉特征类型
useColorNames
useHog
特征大小
featureImgSizeLevel
searchRegionPaddingScale
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-width
tracker-height
在跟踪器插件中配置的视频帧大小对性能有一定影响,因为分辨率较高的视频帧需要更长的时间在内存之间传输。如果将帧分辨率设置得较低,希望获得更高的性能,但是,它对精度的负面影响可能会超过性能增益。因此,建议使用至少 960x544 分辨率(对于 1080p 源分辨率)以最大程度地减少精度下降。
鲁棒性#
为了处理来自检测器的误报和漏报,NvMultiObjectTracker
库利用了两种策略,称为延迟激活和阴影跟踪(更多详细信息可以在《DeepStream SDK 插件手册》中找到)。除了与这些策略相关的配置参数外,还有一些配置参数会影响何时为新对象创建和终止跟踪器。
目标创建策略#
相关参数
目标候选资格
minDetectorConfidence
minIouDiff4NewTarget
延迟激活
probationAge
earlyTerminationAge
如果检测器检测到的对象满足以下指定的最低资格(即目标候选资格),则会为该对象实例化一个新的跟踪器
minDetectorConfidence
minIouDiff4NewTarget
如果观察到置信度值较低的虚假检测,可以增加最小检测器置信度(即 minDetectorConfidence
)来过滤掉它们。如果新检测到的对象与任何现有目标的最大 IOU 分数低于 minIouDiff4NewTarget
,则将创建一个新的目标跟踪器来跟踪该对象。因此,如果希望进一步抑制在同一目标上创建可能具有略微不同 bbox 大小的重复 bbox,则可以将 minIouDiff4NewTarget
设置得更低。
一旦为新对象实例化了跟踪器,它最初会在临时模式(即 Tentative 模式)下开始跟踪对象,直到在由 probationAge
指定的期限(以帧数为单位)内满足进一步的标准。在此试用期内,只要跟踪器 bbox 与检测器 bbox 不匹配或跟踪器置信度低于 minTrackerConfidence
,阴影跟踪年龄(这是一个内部变量)就会增加。如果阴影跟踪年龄达到预定义的阈值(即 earlyTerminationAge
),则跟踪器将提前终止,从而有效地消除误报。
如果预计误报率较高,则可以考虑增加 probationAge
和/或降低 earlyTerminationAge
以获得更严格的创建策略。如果误报的预期检测器置信度较低,而真阳性的预期检测器置信度较高,则可以相应地设置 minDetectorConfidence
以过滤掉误报。
目标终止策略#
相关参数
阴影跟踪
minTrackerConfidence
maxShadowTrackingAge
除了上述试用期内的提前终止策略外,跟踪器终止时还需要满足某些标准。一旦跟踪器开始在 Active 模式下跟踪,如果满足以下条件,其状态将更改为 Inactive 模式
跟踪器置信度低于
minTrackerConfidence
或在数据关联期间,它与检测器 bbox 不匹配。
当目标未与检测器对象关联时,阴影跟踪年龄每帧都会增加。如果跟踪器再次与检测器 bbox 匹配,则阴影跟踪年龄将重置为零,并且如果跟踪器处于 Inactive 模式,则跟踪器的模式将再次更改为 Active 模式(这意味着跟踪器输出将报告给下游)。但是,如果阴影跟踪年龄超过预定义的阈值(即 maxShadowTrackingAge
),则跟踪器将被终止。
为了获得更鲁棒的跟踪,可以增加 maxShadowTrackingAge
的值,因为它允许即使在连续多帧中丢失检测后也能重新关联对象。但是,如果对象的视觉外观在丢失检测期间发生显着变化(例如,长时间遮挡),则当对象重新出现时,学习到的相关滤波器可能不会产生高相关响应。此外,增加 maxShadowTrackingAge
会使跟踪器的寿命更长(即延迟终止更多),从而导致在给定时间内存中存在的跟踪器数量增加,这反过来会增加计算负载。
状态估计#
NvMultiObjectTracker
库中的对象跟踪器维护目标的以下状态集
目标位置(在 2D 相机坐标中)
位置
位置速度
目标 Bbox
大小
大小速度
卡尔曼滤波器#
相关参数
processNoiseVar4Loc
processNoiseVar4Size
processNoiseVar4Vel
measurementNoiseVar4Detector
measurementNoiseVar4Tracker
NvMultiObjectTracker
库中的卡尔曼滤波器 (KF) 实现主要遵循标准的 2D KF 方法,用户需要根据预期的不确定性水平定义过程噪声和测量噪声。如果对象具有相对简单且线性的运动,则可以将过程噪声设置得低于测量噪声,从而有效地更信任预测。如果预计对象具有更动态的运动或状态的突然变化,则更建议将测量噪声设置得较低;否则,如果预测不正确,可能会出现一些滞后。
需要考虑的另一个附加因素是,允许用户为检测器 bbox 和跟踪器 bbox 设置不同的测量噪声,以用于启用视觉跟踪器模块(即 NvDCF)的情况。检测器始终可能出现误报,或者可能存在跳过对象检测推理的视频帧。对于这种情况,每个对象跟踪器都使用学习到的相关滤波器进行自己的定位,并且结果用于更新卡尔曼滤波器。因此,从 KF 的角度来看,测量来自两个不同的来源:一个来自检测器,另一个来自跟踪器。在预期测量来自多个来源的情况下,应融合此类测量,以使用适当的测量模型(即测量的 不确定性建模)正确估计目标状态。
根据检测器和跟踪器的精度特性,应相应地配置测量噪声。当非常高精度的模型用于对象检测时,可以将 measurementNoiseVar4Detector
值设置得低于 measurementNoiseVar4Tracker
,从而有效地比跟踪器的预测/定位更信任检测器的测量。
数据关联#
相关参数
匹配候选资格
minMatchingScore4Overall
minMatchingScore4SizeSimilarity
minMatchingScore4Iou
minMatchingScore4VisualSimilarity
匹配分数权重
matchingScoreWeight4VisualSimilarity
matchingScoreWeight4SizeSimilarity
matchingScoreWeight4Iou
在检测器执行推理的视频帧(称为推理帧)中,NvDCF 跟踪器执行数据关联,以将一组检测器对象与一组现有目标匹配。为了降低匹配的计算成本,必须为每个对象跟踪器定义一小组好的候选对象。这就是匹配候选资格的标准发挥作用的地方。对于每个跟踪器 bbox,只有在最小大小相似性、IOU 和视觉相似性方面合格的检测器 bbox 才会被标记为匹配的候选对象。视觉相似性是根据跟踪器在检测器 bbox 位置的相关响应计算得出的。例如,如果只想考虑至少与跟踪器 bbox 有一些重叠的检测器 bboxes,则需要将 minMatchingScore4Iou
设置为非零值。可以以类似的方式调整其他参数。
给定每个跟踪器的一组候选检测器 bboxes,在检测器 bbox 集和跟踪器集之间构建数据关联矩阵,匹配分数作为矩阵中元素的值。每个元素的匹配分数计算为加权和
视觉相似性
大小相似性,以及
IOU 分数,权重分别在
matchingScoreWeight4VisualSimilarity
、matchingScoreWeight4SizeSimilarity
和matchingScoreWeight4Iou
中。
只有当结果匹配分数超过预定义的阈值(即 minMatchingScore4Overall
)时,才会将该分数放入数据关联矩阵中
DCF 核心参数#
除了所用视觉特征的类型和大小外,还有一些参数与如何在 DCF 框架中学习和更新每个对象的分类器有关,这些参数会影响精度。
DCF 滤波器学习#
相关参数
filterLr
filterChannelWeightsLr
gaussianSigma
基于 DCF 的跟踪器使用隐式正样本和负样本为每个对象学习一个分类器(即判别相关滤波器)。此类学习到的分类器会以预定义的学习率(即 filterLr
)进行实时更新,以实现时间一致性。如果目标对象的视觉外观预计会随着时间快速变化,则可以使用高学习率来更好地使相关滤波器适应不断变化的外观。但是,也存在快速学习背景的风险,从而可能导致更频繁的跟踪漂移。
由于 NvDCF 跟踪器利用多通道视觉特征,因此如何合并这些通道以获得最终相关响应是一个值得关注的问题。NvDCF 采用自适应通道权重方法,其中实时检查每个通道的重要性,并且相应的通道权重会随着时间以预定义的学习率(即 filterChannelWeightsLr
)进行更新。此学习率的调优策略将与之前描述的 filterLr
的情况类似。
当学习相关滤波器时,gaussianSigma
确定我们希望将结果滤波器与正样本拟合得有多紧密。较低的值意味着更紧密的拟合,但可能会导致过拟合。另一方面,较高的值可能会导致学习到的滤波器的判别能力较低。
另请参阅跟踪器设置和参数调优中的故障排除部分,了解跟踪器行为和调优中常见问题的解决方案。