| Developers' Corner

在嵌入式主板 Jetson TX2 上使用 HALCON 训练深度学习分类器

使用 HALCON 训练深度学习分类器的演示

深度学习技术实现了多种多样的机器视觉应用。基于这些技术,MVTec 在 HALCON 和 MERLIC 中提供了各种算子和工具,通常是与嵌入式主板和平台结合使用(有关更多信息,请参见嵌入式视觉部分)。

在本文中,我们介绍了如何在装有嵌入式主板 NVIDIA Jetson TX2 和 Basler GigEVision 相机的标准 PC 上使用 HALCON 训练深度学习分类器。

前提条件

为此,我们设置了以下技术组件:

• 配备强大 NVIDIA GPU 并安装 HALCON 17.12 或以上版本的标准 PC。

• 配备 NVIDIA GPU 和 HALCON 17.12 或以上版本的系统(对于基于 Arm 的 x64 系统,使用 NVIDIA Jetson TX2 + 电源和 HALCON 17.12)。

• 2 个 HALCON 加密锁(具体取决于是否需要在不同系统之间切换加密锁) 为了设置一个实时系统,而不仅是处理离线图像,还需要以下设备。括号内是我们使用的设备。

• GigEVision 相机 (Basler ace acA1300-30gc ICX445)

• 镜头(6 mm,V.S.Technologies SV-0614 (B1211)、0.5 mm 定距环、用于避免镜面反射的偏光滤镜)

• 光源设置(EFFI-Ring,包括用于避免镜面反射的偏光滤镜)

• Stativ 系统(Newport 光电机械安装套件)

• 其他用于识别的部分(NVIDIA Jetson TX2、Raspberry Pi 3、背景和手) 为了便于操作,我们用一个开关将相机连接到 PC 和 NVIDIA Jetson。否则切换系统时必须拔插相机。如果不想为相机使用外部电源,需要 PoE 相机和有源开关。

采集图像

如果从零开始,使用深度学习技术需要数百万张图像。借助 HALCON 预训练的深度学习网络,每个类别只需要大约 400 张图像。为了快速轻松地采集数据,我们开发了一个简单的记录脚本,可以在本网站下载。请注意,执行此脚本需要一些外部程序。您可以在本网站底部的完整下载包中找到这些程序。

如果按下鼠标按键,从相机抓取的图像会存储在 HDD 的正确文件夹结构中(./images/XXXX/imgNNNN,其中 XXXX 是类别名称,NNNN 是序号)。您可以配置脚本来适应想要区分的物体。 请确保连接相机的网络接口卡已激活 Jumbo Frames。在基于 Linux 的系统上,可以通过输入以下命令来激活:udo ifconfig eth0 mtu 1492

图像采集规则:

• 确保物体覆盖大部分图像。如果将背景作为类别之一,这一点尤其重要。

• 如未对图像进行预处理,分类器会使用包括背景在内的完整图像内容。因此,应确保物体本身覆盖了图像的较大部分。否则分类器可能训练的是背景而不是物体的外观。

• 提供目标应用中可能出现的物体的每个角度。

• 检查物体在 224x224 的目标尺寸上是否可以区分。如果不能,可以考虑将图像分割成更小的部分并对其执行推断。这需要将单个决策合并为最终决策。 我们的系统是在 PC 上执行训练图像的采集,因为训练本身也是在这里执行。基本上,采集在嵌入式主板上还是 PC 上进行都没有关系,只要使用相同的设置进行训练和网络实时推断即可。当然也可以在嵌入式主板上采集数据,然后传输到 PC 进行下一步操作。

请注意:为了便于操作,脚本会将实时视图中显示的图像裁剪到没有红色覆盖的地方。

训练模型

基本上,训练在两个平台上都可以进行。但是,我们强烈建议您在性能更好的系统(此例中为 PC)上进行此操作,因为训练可能需要一些时间,具体取决于配置,例如所用的批次大小和所用的硬件。脚本会读取训练图像并为训练做准备,主要是将图像大小调整为 225x225。也可以通过称为“强化”的过程自动更改给定的训练集。对应的便捷程序 augment_images 可以通过旋转、裁剪、镜像以及局部或全局亮度变化来自动更改图像内容。

可以通过脚本提供的图形来检查训练过程。训练和验证误差使用的值应从较大的值开始,然后在迭代过程中减小。训练收敛之后,会将分类器写入磁盘,以便必要时将其传输到目标平台。

传输模型

上一步中脚本创建的 *.hdl 文件可以从 PC 传输到 Jetson TX2。这一步使用网络连接和 WinSCP 等传输软件,或者直接使用 U 盘都可以轻松完成。

执行推断

完成上述所有步骤后,该系统即可投入使用。最后一个脚本非常简单:从相机中抓取图像,应用深度学习网络,然后显示结果。除了推断结果外,输出还应与采集脚本的输出接近。 为了便于处理,可以使用 SSH 客户端,例如 PuTTY。这样就可以在 PC 上显示 Jetson 的输出。请确保已启用 X11 转发并在 PC 上启动了 X-server,以便在远程平台上显示脚本的图形输出。此外,请确保激活 Jetson 的高性能模式。在我们使用的开发系统上,可以执行脚本 jetson_clocks.sh 以使用所有可用核心。如果此模式激活,可以看到 CPU 风扇旋转。

点击此处下载完整源代码