通过深度学习计数
通过此工具使用基于深度学习的方法查找和计数不同方向和缩放比例的对象。
此工具在训练模式下使用。这意味着,首先基于定义参考对象和指定训练参数的训练图像进行训练。在训练过程中,依据指定的训练参数生成更多训练图像,以增加对不同方向和缩放系数的稳定性。
训练区域位于工具面板左侧。它让您能够在用于计数的处理模式和训练模式之间切换。图形窗口显示当前处于活动状态模式的图像,该图像以蓝色在训练区域中高亮显示。除左上方的搜索参数外,该工具还在工具右上方提供用于训练的更多参数。 请参阅使用训练模式,进一步了解如何使用需要训练的工具。
训练参数
训练区域
图形窗口
显示的图像
训练部分显示处理图像和训练图像。
- 处理图像:当前“图像”接收自前一工具。
- 训练图像:训练深度学习模型所用的图像。
训练
要训练深度学习模型,首先必须定义至少一个要计数的参考对象,并相应地调整训练参数。也可以定义多个参考对象。在这种情况下,必须为每个参考对象添加一个训练图像。执行训练后,可以检查结果,并在需要时做出进一步调整。
定义参考对象
- 通过
按钮或 F3 快捷键添加显示要计数的对象的训练图像。
- 将训练图像的筛选器类型设置为“包括”。
- 在训练图像中,在要计数的对象上绘制 ROI。将使用此对象作为训练的参考对象。
- 如果要计数另一个对象,请添加一个筛选器类型为“包括”的新训练图像,并在相应的参考对象上绘制 ROI。您可以对要在图像中计数的每种对象类型重复此操作。
- 您也可以选择添加一个或多个筛选器类型为“排除”的训练图像,以指定不应计数的对象。如果有看起来相似但不应包含在计数中的对象,这可能会很有用。
- 要检查指定参考对象的当前设置是否正常工作,请执行训练并检查结果。但是,如果应该以不同的方向和缩放系数检测对象,可以先调整训练设置,如下一部分中所述。
该工具根据设计仅能为每个训练图像训练一个对象。因此,您必须确保仅为每个训练图像选择一个对象。如果将多个 ROI 添加至一个训练图像中,这些 ROI 将被视为一个复合对象。
定义训练设置并应用训练
训练参数可用于配置关于方向和缩放系数的设置。使用训练参数的默认设置时,深度学习模型经训练后仅能以相应训练图像中定义的方向和缩放系数检测对象。
- 如果要计数的对象可能出现在不同的方向上,请调整训练参数“方向容差”。
- 如果要计数的对象在图像中的缩放系数可能不同,请相应地调整训练参数“比例容差”。
- 要检查当前训练设置是否正常工作,请执行训练并检查结果,如下一部分中所述。
在应用训练时,将自动生成包含不同方向和缩放系数的对象的额外训练图像。在训练过程中生成的额外训练图像的数量取决于训练参数的设置。“方向容差”和“方向容差步长”的值越高,为训练生成的图像就越多。
训练参数的取值会影响训练的持续时间和处理时间。在训练过程中生成的其他训练图像越多,训练模型所需的时间则越长。在处理过程中,由于工具要检查不同方向和缩放系数的对象,计数对象的检测同样需要更长的时间。
我们建议将“方向容差”和“比例容差”的值设置为找到并计数所有需要的对象所需的最大值,但不要过高,以避免训练时间过长。
如果要计数的对象方向已知,则可以通过为对象可能出现的每个方向添加新的训练图像来训练已知的方向。例如,如果对象始终以 0° 或 90° 的方向显示,则可以添加两个训练图像:一个图像中定义方向为 0° 的参考对象,另一个图像中定义方向为 90° 的参考对象。这样,经过训练的深度学习模型将能够按照这两个参考对象的方向计数对象。在这种情况下,不需要调整训练参数“方向容差”来确保在两个方向计数对象。这同样适用于对象的缩放系数。
执行训练并检查结果
在添加包含相应参考对象的训练图像并检查训练设置后,可以训练深度学习模型并检查结果,如下所示:
- 单击“应用训练数据”执行训练。
- 用一系列图像运行应用程序,并检查相关对象是否在所有图像中正确计数。
- 如有必要,对搜索参数或训练做出一些调整,例如调整参考对象周围的 ROI 或调整训练参数。请记住,如果调整了训练 ROI 或训练参数,则必须重新执行训练。
Artificial Intelligence Acceleration 接口 (AI²) 的支持
MERLIC 附带用于 NVIDIA® TensorRT™ SDK 和 Intel® Distribution of OpenVINO™ toolkit 的 Artificial Intelligence Acceleration 接口 (AI²)。因此,您可以将 AI 加速器硬件用作与 NVIDIA® TensorRT™ 或 OpenVINO™ toolkit 兼容的处理单元,以便在相应的硬件(如 NVIDIA® GPU)或支持 OpenVINO™ toolkit 的硬件(如 CPU、Intel® GPU 和 Movidius™ VPU)上执行优化的推理。通过这种方式,您可以显著加快深度学习推理时间。相应的硬件可在工具参数“处理单元”中选择。
前提条件
支持 OpenVINO™ toolkit 的 NVIDIA® GPU 和 CPU 在安装 MERLIC 后可立即使用。无需额外的安装或设置。
要将支持 OpenVINO™ toolkit 的 Intel® GPU 和 VPU 用作处理单元,需要满足以下前提条件:
- 首先必须安装 Intel® Distribution of OpenVINO™ toolkit。
- 必须在 OpenVINO™ toolkit 环境中启动 MERLIC。
有关安装和前提条件的更多详细信息,请参阅 用于具有深度学习功能的工具的 AI² 接口 主题。
参数
基本参数
图像:
此参数表示应在其中计数对象的图像。
最低分值:
此参数是一个数值,用于确定检测到的对象与参考对象的最小相似度。如果某个对象的相似度小于为此参数定义的值,则不计数该对象。
该值定义为实数,默认情况下设置为 0.5。您可以在相应的连接器中更改最低分值。该值必须大于 0 但不大于 1。“最低分值”越高,候选对象数量越少,搜索速度越快。
您可以测试当前的“最低分值”,方法是逐步运行应用程序并查看是否在所有图像中正确发现了对象的存在状态。
其他参数
处理区域:
此参数定义需要处理的区域。ROI 和“处理区域”并集之外的图像部分将不进行处理。此外,如果其中一个为空,将处理两者交集的图像部分。如果两者均为空,将处理整个图像。
默认情况下,“处理区域” 定义为空区域。要指定 “处理区域”,您需要将该参数连接至前一工具的适当区域结果,以确保某个区域会传输到此工具。
ROI:
此参数定义需要处理的感兴趣区域 (ROI)。ROI 和“处理区域”并集之外的图像部分将不进行处理。 此外,如果其中一个为空,将处理两者交集的图像部分。如果两者均为空,将处理整个图像。
默认情况下,ROI 定义为空 ROI。如果想要使用非空的 ROI 进行处理,您必须将参数连接至前一工具的适当 ROI 结果,或者必须使用可用的 ROI 按钮在图像中绘制新的 ROI。
对齐数据:
此参数表示用于对齐 ROI 的对齐数据。默认情况下不会连接对齐数据,因此不显示任何效果。如果想要使用特定对齐数据,您必须将参数连接至前一工具的适当结果,例如通过匹配确定对齐、确定与直线边缘对齐、对齐图像或旋转图像。
最大重叠:
此参数定义要计数的对象的最大允许变形。此重叠是由环绕对象的最小矩形确定,而不是对象自身区域。因此,即使实际区域未相交,两个对象也有可能重叠。
此参数以百分比值表示并默认设为 50%。也就是说,在搜索图像中对象的最小环绕矩形封闭不超过 50% 才能被包含在计数中。您可以将此参数设置为 0 到 100 之间的值。如果该值设置为 0,则完全不允许重叠,并且只计数没有重叠的对象。但是,“最大重叠”值越高,找到错误对象的风险也就越高。
处理单元:
此参数定义用于处理图像的方法。默认情况下,此参数设置为“自动”。在此模式下,MERLIC 尝试选择合适的 GPU 作为处理单元,因为它通常比 CPU 性能更好。然而,这需要相应 GPU 拥有至少 4 GB 的可用内存。如果没有找到合适的 GPU,CPU 将用作后备。
您也可以手动选择处理单元。单击此参数,从所有可用处理单元列表中选择设备。如果选择 GPU 作为处理单元,我们建议您检查是否有足够的内存可用于所使用的深度学习模型。否则,可能会出现推理速度较慢等不良影响。
MERLIC 还支持使用与 NVIDIA® TensorRT™ SDK 或 OpenVINO™ toolkit 兼容的 AI 加速器硬件:
- NVIDIA® GPU
- 支持 OpenVINO™ toolkit 的 CPU、Intel® GPU、Intel® VPU(MYRIAD 和 HDDL)
相应设备用前缀“TensorRT(TM)”或“OpenVINO(TM)”标记。如果您选择支持 NVIDIA® TensorRT™ 或 OpenVINO™ toolkit 的设备,内存将通过 AI² 接口的相应插件在设备上初始化。
选择 AI 加速器硬件作为处理单元后,即开始深度学习模型的优化。优化后,表示模型参数的所有参数将在内部设置为只读。因此,只要选定的 AI 加速器用作处理单元,就无法再更改它们的值。要更改参数,首先必须将处理单元更改为没有任何 AI 加速的其他处理单元。设置参数后,可以将处理单元设置回相应的 AI 加速器硬件。
支持 OpenVINO™ toolkit 的 CPU 无需任何额外的安装步骤即可使用。它们将自动出现在可用处理单元列表中。如果有多个具有相同名称的处理单元可用,则会为其名称指定一个索引号。这同样适用于支持 NVIDIA® TensorRT™ 的 GPU。
要将支持 OpenVINO™ toolkit 的 GPU 和 VPU 用作处理单元,计算机上必须安装 Intel® Distribution of OpenVINO™ toolkit,并且必须在 OpenVINO™ toolkit 环境中启动 MERLIC。请参阅 用于具有深度学习功能的工具的 AI² 接口以了解有关前提条件的更多详细信息。
除了通过 AI 加速器硬件进行优化外,MERLIC 还支持通过 NVIDIA® CUDA® Deep Neural Network (cuDNN) 进行进一步的动态优化。此优化可通过 MERLIC Creator 中的 MERLIC 设定来启用。有关更多信息,请参阅MERLIC 设定主题。
精度:
此参数定义内部用于优化推理深度学习模型的数据类型,它定义了模型转换的精度。默认情况下设置为“高”。
下表显示此工具支持的模型精度。
|
值 |
描述 |
|---|---|
|
高 |
深度学习模型转换为“float32”的精度。 |
|
中等 |
深度学习模型转换为“float16”的精度。 |
大部分处理单元支持两种精度类型。然而,可能有一些处理单元只支持其中一种精度。在这种情况下,在参数“处理单元”中选择相应的设备后,参数中只有受支持的精度可用。如果自动选择处理单元,即如果“处理单元”设置为“自动”,则只有精度“高”可用。
训练参数
训练参数的取值会影响训练的持续时间和处理时间。在训练过程中生成的其他训练图像越多,训练模型所需的时间则越长。在处理过程中,由于工具要检查不同方向和缩放系数的对象,计数对象的检测同样需要更长的时间。
基本训练参数
方向容差:
此参数影响训练参考对象的方向。因此,它还决定了如果在搜索图像中旋转相应的对象,经过训练的深度学习模型是否能找到并计数它们。
该值以度为单位并默认设为 0°。这意味着在没有任何其他方向容差的情况下训练对象,并且只有在对象出现的方向与训练图像中相同的情况下,深度学习模型才会在处理模式下计数对象。您可以将此参数设置为 0° 到 180° 范围内的值。
调整此参数时,还应考虑训练参数“方向容差步长”的值,因为它定义了训练中指定方向容差的精细程度。在训练过程中,将自动生成对象位于不同方向的其他训练图像。“方向容差”和“方向容差步长”的值决定了生成多少个额外训练图像。“方向容差”定义对象在图像中可以旋转多少度。“方向容差步长”定义在指定的方向容差内为哪些角度生成额外训练图像。对于每个方向步长,将生成对象相应旋转的训练图像。然后在训练期间,除了原始训练图像之外,生成的训练图像将被包括在内。
例如,如果“方向容差”设置为 20,则对象将被考虑用于方向范围在 -20° 至 +20° 之间的训练。如果同时将“方向容差步长”设置为 10,则在训练期间将以 10° 为步长应用指定的方向容差。这意味着在训练期间,将生成四个额外的图像。这些额外的训练图像将以 -20°、-10°、10° 和 20° 的不同方向步长表示参考对象。方向 0° 表示训练图像中对象的实际方向。
比例容差:
此参数影响训练参考对象的缩放系数。因此,它还决定了如果在搜索图像中缩放相应的对象,经过训练的深度学习模型是否能找到并计数它们。
该值定义为实数,默认情况下设置为 0。这意味着在没有任何其他缩放系数容差的情况下训练对象,并且只有在对象大小与训练图像中相同的情况下,深度学习模型才会在处理模式下计数对象。您可以在相应的连接器中设置此参数。
调整此参数时,还应考虑训练参数“比例容差步长”的值,因为它定义了训练中指定缩放系数容差的精细程度。在训练过程中,将自动生成对象按不同系数缩放的额外训练图像。“比例容差”和“比例容差步长”的值决定了生成多少个额外训练图像。“比例容差”定义对象在图像中可以缩放的程度。“比例容差步长”定义在指定的缩放系数容差内为哪些缩放系数生成额外训练图像。对于每个缩放系数步长,将生成对象相应缩放的训练图像。然后在训练期间,除了原始训练图像之外,生成的训练图像将被包括在内。
例如,如果“比例容差”设置为 0.3,则对象将被考虑用于缩放系数范围在 -0.3 至 +0.3 之间的训练。如果同时将“比例容差步长”设置为 0.1,则在训练期间将以 0.1 为缩放系数步长应用指定的缩放系数容差。这意味着在训练期间,将生成六个额外的图像。这些额外的训练图像将以 -0.3、-0.2、-0.1、0.1、0.2 和 0.3 的不同缩放系数步长表示参考对象。缩放系数步长 0 表示训练图像中对象的实际大小。
其他训练参数
方向容差步长:
此参数影响训练参考对象的方向步长。
该值以度为单位并默认设为 5°。您可以将此参数设置为 0° 到 180° 范围内的值。如果“方向容差”的值设置为 0,则此参数无效。
此参数仅应在考虑训练参数“方向容差”的情况下更改,因为方向步长是指“方向容差”中定义的容差值。对于“方向容差”中定义的范围内的每个方向步长,将生成对象相应旋转的训练图像。有关两个训练参数的组合如何影响训练的更多详细信息,请参阅参数方向容差的描述。
比例容差步长:
此参数影响训练参考对象的缩放系数步长。
该值定义为实数,默认情况下设置为 0.1。这意味着,以 0.1 的缩放系数步长将定义的“比例容差”用于训练。您也可以在相应的连接器中更改该值。如果“比例容差”的值设置为 0,则此参数无效。
此参数仅应在考虑训练参数“比例容差”的情况下更改,因为缩放系数步长是指“比例容差”中定义的容差值。对于“比例容差”中定义的范围内的每个缩放系数步长,将生成对象相应缩放的训练图像。有关两个训练参数的组合如何影响训练的更多详细信息,请参阅参数比例容差的描述。
基本结果
数量:
此结果返回使用当前参数设置计数的对象数量。返回的结果为整数。
匹配度:
此结果返回每个计数对象的确定匹配度,即指示计数对象与已训练模型匹配度的一个实数。如果在图像中计数了多个对象,会以 tuple 的形式返回相应的匹配度。
工具状态:
“工具状态”返回有关工具状态的信息,因此可用于处理错误。请参阅主题工具状态结果,了解关于不同工具状态结果的更多信息。
其他结果
对象位置:
此结果返回计数对象的区域轮廓。
方向箭头:
此结果返回指示训练期间所生成模型的方向的箭头。返回的结果为轮廓。
X 轴:
此结果返回计数对象的 X 坐标。返回的 X 和 Y 坐标对应于“对象位置”中返回的区域轮廓的中心。
Y 轴:
此结果返回计数对象的 Y 坐标。返回的 X 和 Y 坐标对应于“对象位置”中返回的区域轮廓的中心。
使用的处理单元:
此结果返回上次迭代中使用的处理单元。如果参数“处理单元”设置为“自动”,可以使用此结果检查实际使用的处理单元,或者检查使用的处理单元是否正确。
精度数据类型:
此结果返回内部用于优化推理深度学习模型的数据类型。您可以使用此结果检查是否使用了正确的精度,以防出现任何问题。
如果参数“精度”设置为“高”,深度学习模型应转换为“float32”的精度。因此,预期此结果返回数据类型“float32”。如果参数“精度”设置为“中等”,深度学习模型应转换为“float16”的精度。在这种情况下,此结果的预期值为数据类型“float16”。如果在 MVApp 迭代过程中出现任何问题,可以检查此结果是否返回与预期不同的数据类型,还可以查看日志文件以了解更多信息。请参阅日志记录主题以了解关于日志文件的更多信息。
处理时间:
此结果返回最近一次执行工具的持续时间(以毫秒为单位)。该结果作为附加结果提供。因此,默认情况下它是隐藏的,但是可以通过工具结果旁边的 按钮显示。有关更多信息,处理时间请参工具参考中所阅部分。
应用程序示例
此工具用于以下 MERLIC Vision App 示例:
- count_bottles_with_deep_learning.mvapp