自定义车牌识别模型训练与部署

在本文中,将探讨如何利用图像和视频数据来训练一个计算机视觉模型,并将其部署到OAK设备上。如果已经拥有OAK设备并希望在该设备上定制模型,本文将为提供指导。即使只是探索OAK设备的功能,本文也是一个很好的起点,因为可以按照自定义训练教程进行操作,直到将模型部署到设备上的步骤。

目标是使用边缘设备实时标记车牌。车牌的裁剪图像可以发送到下游的OCR预测中,或者用于其他用途。为了训练和部署车牌检测模型,将执行以下步骤:

收集车牌训练数据集、在Roboflow中处理数据集、将数据导出到车牌训练笔记本以适配模型(包含代码)、将模型导出以在DepthAI中使用、在设备上部署DepthAI模型。

关于路径的最好之处在于,尽管教程特定于在这里输入的车牌,但路径是灵活的,适用于数据,可以带来任何想要检测的对象并遵循相同的步骤。

为了训练车牌检测器,首先必须收集带有车牌注释的代表性图像数据集。将在训练中向模型展示这些图像和注释,以构建从原始像素数据到车牌边界框预测的映射。

在本文中使用的公开数据集已经公开发布为公共车牌检测数据集,并且还介绍了数据集的构建,以便可以复制、调整和扩展此过程。

为了组装车牌数据集,从Open Images数据库中迭代抽取,该数据库中已经捕获并标记了车牌图像。本博客提供了如何使用Open Images以及如何将Open Images数据加载到Roboflow的信息。

如果要为这个教程导出自己的数据,请注册Roboflow并创建一个公共工作区,或者在现有的账户中创建一个新的公共工作区。如果数据是私有的,可以升级到付费计划以导出数据,以使用像本教程这样的外部训练程序,或者尝试使用Roboflow的内部训练解决方案。

一旦收集了数据集,需要处理它以准备训练。处理图像包括两个关键步骤:预处理(如适用于整个数据集的图像标准化大小调整)和增强(图像转换,使模型能够应对图像变化,使其在部署时更加健壮)。

在公共车牌数据集中,将看到已经在示例版本中选择了预设的预处理和增强。鼓励分叉此数据集并探索其他选项。如果带来了自己的数据集,需要将数据上传到Roboflow,并在Roboflow中注释想要检测的图像中的框。

为了准备数据进行训练,将从Roboflow导出数据为TFRecord格式,因为目的地是TensorFlow对象检测库。在导出时,点击“获取链接”并保存收到的curl链接以导入到colab笔记本中。

在本笔记本中,将训练一个Mobilenet SSDv2模型。其他模型,如YOLOv3-tiny也是可能的,但需要更仔细的部署。安装训练环境依赖项和配置。对于训练,将使用Google Colab,它提供了一个免费的GPU。

Colab还预装了许多可能需要的Python依赖项。除了预装的依赖项外,将安装TensorFlow对象检测API并编写训练所需的配置,如模型类型、批量大小、迭代次数num_steps。num_steps越多,模型通常表现越好,但训练时间会更长。

接下来,将使用上述的curl链接下载TFRecord格式数据集。在下一段代码中,定义指向这些数据文件的变量 - 请确保根据数据下载重新定义这些字段。

一旦数据设置好,可以开始准备训练程序。下载Mobilenet V2模型(该模型已经预训练,将使用迁移学习来调整它以识别车牌)。为了使模型训练适应新数据集,需要将训练配置指向数据文件并编辑训练步骤的数量。

有了模型权重和训练配置,就可以开始训练了!要启动训练,运行model_main.py脚本,使用自定义模型配置。训练将需要一段时间才能完成。在每组num_eval_steps之后,训练程序将在验证集上运行性能度量(平均精度均值)。如果训练正常进行,将看到这个mAP指标随着训练的进行而上升。

注意:训练将需要一段时间才能完全完成。如果想加快过程,可以减少num_steps,或提前中止训练。除了在训练中使用验证指标监控模型性能外,还可以在模型从未见过的测试图像上运行车牌检测器 - 这让在将模型转换并部署到OAK设备之前,了解模型是否按规格工作。

当对训练感到满意时,是时候将模型从Colab笔记本中取出并放到OAK设备上。首先,将模型导出为TensorFlow保存的图 - 运行此脚本将产生一个.pb模型文件。接下来,将安装OpenVino(5-10分钟)并将模型转换为OpenVino IR格式。

将对模型配置进行一些小幅调整,以确保模型与OpenVino工具链兼容。在此步骤之后,将拥有.bin和.xml文件格式的模型。最后一步是将Open Vino格式的模型转换为Luxonis DepthAI模型格式。DepthAI模型格式与OAK设备兼容并优化。

要进行最终转换,将OpenVino模型发布到http://69.164.214.171:8080 - Luxonis的转换站,作为回报,将以.blob格式接收模型。将此.blob文件保存到本地或以其他方式存储,以便将其带到OAK设备上。

转到OAK设备,第一步是克隆并安装DepthAI - DepthAI设置文档。然后在OAK设备上点击并测试以下命令,看看安装是否成功:python3 depthai_demo.py -dd -cnn mobilenet-ssd。这将运行已经在COCO数据集上训练的基础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]

或者,可以使用Python包(roboflowoak)将使用Roboflow Train训练的模型部署到OAK设备上:逐步部署指南。DepthAI和OpenVINO需要在主机设备上才能工作。roboflowoak(PyPi)

一旦在设备上使模型工作,下一步就是查看depthai_demo.py中的预测如何处理,并开始将功能集成到应用程序中。当迈向生产时,可以通过捕获更多数据并重新训练模型来改进模型,这个过程被称为主动学习。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485