1.5. 用户自定义神经网络模型训练和部署
1.5.1. 自定义神经网络模型转换
要允许 DepthAI 使用您的自定义训练模型,您需要将它们转换为 MyriadX blob 文件格式 - 以便它们针对 MyriadX VPU 处理器上的最佳推理进行优化。
为了获得 blob 文件,必须执行两个转换步骤:
使用 模型优化器 生成 OpenVINO IR 表示 (其中 IR 代表中间表示)
使用 模型编译器 将 IR 表示转换为 MyriadX blob
下图 (来自 OpenCV 课程网站) 显示了这些步骤
请在下面找到有关如何使用不同方法执行这些步骤的说明。
本地编译
如果要进行模型转换和编译,可以按照:
使用 Google Colab
您还可以使用 Google Colab notebook 训练和转换模型。 您可以查看我们的 自定义训练 教程, 其中每个教程还包含直接在 notebook 中执行的转换和编译步骤。
带有编译步骤的示例笔记本在 这里 。
使用在线转换器
您还可以访问我们的 MyriadX Blob converter 这个在线模型转换器允许指定不同的OpenVINO目标版本并支持 TensorFlow, Caffe, OpenVINO IR 和 OpenVINO Model Zoo 的转换。
使用 blobconverter 库
为了能够让用户自动使用我们的 blobconverter 工具,我们发布了一个 blobconverter PyPi 库, 它允许直接从命令行和 Python 脚本编译 MyriadX blob。
安装和使用说明可以在 这里 找到。
1.5.2. 故障排除
将模型转换为 OpenVINO 格式或将其编译为 .blob
, 你可能会遇到一个问题。 这通常意味着 不支持两层之间的连接 或 不支持该层.
对于 NN 模型的可视化 我们建议使用 Netron app.
支持的层
将您的模型转换为 OpenVINO 的 IR 格式 (.bin
和 .xml
)时, 您必须检查 OpenVINO 是否支持所使用的层。 下面是支持层和它们的局限性 Caffee, MXNet, TensorFlow, TensorFlow 2 Keras, Kaldi, and ONNX.
不支持的图层类型”layer_type”
当使用 compile_tool 从 IR (.xml/.bin) 编译成.blob时,你可能会得到这样的错误:
Failed to compile layer "Resize_230": unsupported layer type "Interpolate"
这意味着 VPU(Intels Myriad X)不支持层类型。 您可以在 此处 找到VPU支持的OpenVINO层, 在 Supported Layers header, 标题下的第三列(VPU)中。 有关更多信息,请参阅 英特尔官方故障排除文档 。
数据类型不正确
如果编译器返回类似 “check error: input #0 has type S32, but one of [FP16] is expected”,
则意味着您使用了不正确的数据类型。 在上面的例子中,一个 INT32 层直接连接到 FP16。
这些层之间应该有一个转换, 我们可以通过 在这两个层之间使用 OpenVINOs Convert
层来实现。 您可以通过编辑模型 .xml
并添加 Convert
层来做到这一点。 您可以在此 discord thread 上找到更多信息。
1.5.3. Yolov5 6.0 转换成blob格式
1.5.4. 在线将YOLOV5转化成OAK能用的模型格式
1.5.5. 自定义训练
概述
在我们的 Github 存储库 depthai-ml-training 中,我们提供了几个在各种数据集上训练的ML训练笔记本. 您可以在 Google Colab 上运行这些笔记本-它们提供免费的CPU/GPU实例,非常适合原型设计甚至简单的生产模型。
我们目前有这些 ML 培训教程:
教程
以下教程基于 MobileNetv2-SSD,MobileNetv2-SSD 是一个性能不错的框架对象检测器,它本身在 DepthAI 上运行。可以在 Colab 上训练/支持许多其他对象检测器并在 DepthAI 上运行它们,因此,如果您需要其他对象检测器/网络后端,请随时发出 GitHub 问题!
简易物体检测器训练
教程笔记本 Easy_Object_Detection_With_Custom_Data_Demo_Training.ipynb 显示了如何基于Mobilenet SSDv2网络快速训练对象检测器。
(可选), 请参阅有关此模块的文档 (此处) 以获取有关如何使用此笔记本的指南/演练。此外,可以随意跳进笔记本电脑,通过一些实验,训练模型相对简单。
训练完成后,它还将模型转换为在我们的 DepthAI 平台和模块上运行的.blob 文件。首先,将模型转换为 OpenVINO 可以使用的称为中间表示(IR)的格式。然后使用我们为此设置的服务器将 IR 模型编译为.blob 文件。 (IR 模型也可以 本地转换为Blob )。
就是这样,在不到两个小时的时间内,相当先进的概念证明对象检测器就可以在 DepthAI 上运行,以检测您选择的对象及其相关的空间信息(即 xyz 位置)。例如,此笔记本用于训练 DepthAI 在 3D 空间中定位草莓,请参见下文:
上面的示例使用了 DepthAI 模块化相机版本 (BW1098FFC).
COVID-19 蒙面/不蒙面训练
该 Medical Mask Detection Demo Training.ipynb 训练笔记本显示了更复杂的对象检测器的另一个示例。训练数据集包括戴着或不戴着口罩进行病毒防护的人员。大约有 700 张图片,带有大约 3600 个边框注释。图像很复杂:它们的比例和构图变化很大。尽管如此,对于这种任务而言,对象检测器在这个相对较小的数据集中却表现出色。同样,训练大约需要 2 个小时。取决于 Colab 彩票分配给笔记本实例的 GPU,训练 10k 步骤可能需要 2.5 个小时或 1.5 个小时。无论哪种方式,对于如此艰巨的任务而言,在短期内就无法获得如此优质的概念证明。然后,我们执行了上面的步骤以转换为Blob,然后在DepthAI模块上运行它。
以下是在 Luxonis DepthAI 车载摄像头版本 (BW1098OBC) 上使用此笔记本电脑生产的型号的快速测试:
配套笔记本
在 Google 云端硬盘中调整图片大小
该笔记本将在您的Google云端硬盘中处理一组图像,以将其调整为训练笔记本所需的格式。有关更多详细信息, 请参见 此处 的文档。
有疑问?
我们很乐意为您提供代码或其他问题的帮助。
我们的联系方式
还可以通过我们发布的视频和文章了解OAK
有疑问?
我们很乐意为您提供代码或其他问题的帮助。
我们的联系方式
还可以通过我们发布的视频和文章了解OAK