在这个教程中,将学习如何利用Roboflow和DepthAI来训练和部署一个自定义的目标检测模型,以便在边缘设备上进行实时深度检测。为了展示这个指南所开启的广泛应用范围,将处理实时识别美国手语的任务。
收集和标记图像
要开始本教程,需要有标记的目标检测图像。目标检测标记涉及在想要检测的对象周围绘制一个框,并为该对象定义一个类别标签。标记的图像将为模型提供学习所需的监督。
如果想跟随本教程,可以跳过这一步,并使用公开的美国手语训练数据。要标记自己的数据集,目前首选标记工具是CVAT和Roboflow。
安装MobileNetV2训练环境
一旦数据集被标记,就可以开始训练了!将使用Colab Notebook来部署自定义模型到OAK-D,建议在阅读本博客文章时,将这个笔记本放在一边。将能够按顺序运行笔记本中的单元格,只需要为数据集导入更改一行代码。
在这个笔记本的开始,制作一个副本到驱动器,并确保启用了GPU运行时。然后,将在前几个单元格中安装TF OD库的依赖项。
无论选择使用公开的手语检测数据集,还是带来自己的数据集,都希望使用Roboflow将数据以适当的格式用于训练,即TFRecord。选择数据预处理和增强设置。点击“生成”,然后“下载”,并选择“Tensorflow TFRecord”。
从Roboflow获取下载链接,然后将该下载链接粘贴到Colab笔记本中以引入数据。
训练自定义MobileNetV2目标检测模型
在笔记本中有了数据之后,可以继续训练自定义模型。将首先下载预训练的MobileNetV2权重作为起点。然后,将在训练配置文件中配置一些参数。可以编辑这些配置以根据数据集需求进行更改。最常见的是,可能想要调整模型训练的步数。更多的步骤需要更长的时间,但通常会产生更高性能的模型。
一旦定义了训练配置,就可以开始训练了。
运行测试推理以检查模型的功能
在进行模型转换之前,检查模型在测试图像上的性能是明智的。这些是模型以前从未见过的图像。
模型在测试图像上进行了良好的测试推理 - 是时候将其上线了。
将自定义MobileNetV2 TensorFlow模型转换为OpenVino和DepthAI
一旦对模型的性能指标和测试推理能力感到满意,就是时候将其上线了!在模型可以在OAK-D设备上使用之前,首先需要将其转换为与DepthAI框架兼容的格式。
第一步是安装OpenVino(Intel的边缘AI框架)并将模型转换为OpenVino中间表示。从OpenVino IR,然后将模型上传到DepthAI的API,将其转换为.blob。
下载.blob并将其放在机器可以访问的地方运行OAK设备(AWS S3,USB驱动器等)。注意:需要一个基于Linux的环境来托管OAK设备。
在Luxonis OAK-D上部署自定义模型
要在Luxonis OAK-D上部署自定义模型,首先需要克隆DepthAI仓库并安装必要的要求。这是设置DepthAI仓库的文档。插入OAK-D并设置DepthAI仓库中的自定义权重。
然后,可以点击OAK设备并测试以下命令,看看安装是否有效:python3 depthai_demo.py -dd -cnn mobilenet-ssd。这将运行已经训练在COCO数据集上的base mobilenet-sdd模型。要运行模型,将利用这个基础模型周围的所有基础设施,并带有自己的扭曲。
在DepthAI仓库中,将看到一个名为resources/nn/mobilenet-sdd的文件夹。要引入自己的模型,将复制该文件夹到resources/nn/[your_model]并重命名三个文件为[your_model]以替换mobilenet-ssd。
然后将自定义模型的权重复制以替换曾经的mobilenet-sdd.blob。然后编辑两个JSON文件,将默认类别名称替换为自己的类别列表。如果需要再次检查自定义类别列表的顺序,可以检查在Colab笔记本中导入数据时的打印输出。在重写这些文件后,准备启动自定义模型!
python3 depthai_demo.py -dd -cnn [your-model]
在OAK-D设备上进行实时推理(使用X,Y和Z坐标进行推理)。将看到视频流形成围绕训练模型检测的对象的边界框,以及测量对象距离相机的距离。
使用roboflowoak部署
或者,可以使用Python包(roboflowoak)将使用RoboflowTrain训练的模型部署到OAK设备上:逐步部署指南。DepthAI和OpenVINO需要在主机设备上才能工作。
roboflowoak(PyPi)