Press "Enter" to skip to content

基于TF lite模型生成器的边缘目标检测

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 


有时你需要一个快速的解决方案。它可能是针对原型的,也可能是针对非关键任务的。您需要一个快速但仍然准确的解决方案。像YoloV5或Detectron2这样的框架是很好的选择,但它们需要一些努力来设置它们,而且在Edge上部署它们的模型通常不是那幺容易。

 

幸运的是,TensorFlow团队得到了我们的支持,他们创建了一个非常棒的新工具,对象检测模型生成器API。

 

TensorFlow Lite造型机

 

目前支持6个任务:图像分类、目标检测、文本分类、BERT问答、音频分类和推荐系统。

 

尽管它目前支持的预先训练的模型有限,但它是非常有用的,您应该可以预期它在接下来的几个月里会变得更大。

 

您可以在此链接中找到文档。
link

 

现在让我们开始建造吧!

 

我们将使用Model Maker对象检测API来构建一个可以区分杂草和西兰花的网络。关于型号,我们目前仅限于EfientDetLite系列(0到4)。

 

首先,我们需要带注释的数据

 

用于对象检测的Model-Maker API提供了两种加载数据的方法。您可以使用from_csv方法或from_pascal_voc加载数据。对于这个场景,我将使用from_pascal_voc方法,因为我用PascalVOC格式注释了我的数据(有关VOC的更多信息,请查看本文)from_csv
from_pascal_voc
article

 

为了注释您的数据集,我建议使用Roboflow或LabelImg。我还测试了CVAT和MakeSense.ai,但工具生成的PascalVOC批注与API期望的批注之间似乎有一些不兼容。这会导致数据加载过程中出现错误。

注意:对Pascal VOC注释使用CVAT可能会导致KeyError:‘pose’。我发现这是因为属性

没有插入到XML注释中。由于属性的默认值,使用MakeSense.ai的批注产生错误。API应为0,而MakeSense使用“未指定”。

完成批注过程后,您应该有一个包含所有图像以及XML批注文件的文件夹,数据集中的每个图像对应一个XML。我建议您事先将带注释的数据集拆分成Train-Val拆分。

 

编码时间

 

我最喜欢的部分来了。但是,您可能需要先安装2个软件包。我强烈建议您创建一个CONDA环境来运行您的项目。现在,尝试以下两个pip命令:

 

!pip install  tflite-model-maker
!pip install  pycocotools

 

注意:pip install tflite-model-aker可能会进入递归模式,以确定哪个版本与其他要求兼容。这可能会导致安装时间过长或无法完成。我设法解决了这个问题,方法是安装每晚版本的pip install tflite-model-aker-nightly。Google CoLab是另一个避免错误的好选择。

 

一旦您成功安装了这两个包,我们就可以开始编写代码了。

 

1.导入所需的库

 

import numpy as np
import os

 

2.加载数据集

 

在上面的代码中,只需确保在LABEL_MAP中,第一个类以数字1开头,因为0是后台类的保留键。

 

注意:有一个名为Split的方法。假设您可以使用DataLoader加载整个DataSet,然后对返回的对象使用.Split()方法将其拆分成训练集和验证集。但是,尽管此方法出现在文档中,但它尚未实现。

 

3.创建并训练目标检测模型。

 

Model-Maker对象检测API提供了EfficientDet系列,范围从EfficientDet 0到4,0是最小的,4是最大的。我们指定要与以下代码行(Doc)一起使用的模型。(doc)

 

因为手头的问题很简单,而且我没有很多数据,所以我会使用较小的网络,以避免过大的问题。

 

# model specification
spec = model_spec.get("efficientdet_lite1")

 

让我们检查一下输出的一小部分。奇怪的是,评价结果并不总是在5个时代之后出现。该评估针对不同的IOU和类别打印最重要的对象检测指标,如AP和AR。

 

使用valuate()方法在我们的测试数据集上评估我们的模型也很有趣。如果您有足够的数据,请将您的数据集拆分到Train-Val-TEST子集中,并在此方法中使用测试数据集。但是,如果数据供不应求,则在验证子集上进行评估。

 

Model.Evaluate(Val_Ds)

对于这样的Lite模型,借条=0.5的AP为0.652,并且只有45张图像就足够了。AP_/WIDED不是那幺好,我们应该收集更多该课程的示例进行培训。但是,请确保通过使用更大的数据集和更复杂的模型(如EfficientDetLite4)可以获得更好的性能。

 

4.导出模型

 

现在我们有了一个经过训练的模型,我们想要导出它并将其用于预测。提供3种导出格式

ExportFormat.TFLITE
ExportFormat.LABEL
ExportFormat.SAVED_MODEL

由于我希望在便携式设备上部署该模型,因此我将以TFLITE格式导出它。

 

model.export(export_dir= 'MY_EXPORT_PATH', 
             tflite_filename= 'MY_FILENAME'
             )

 

[可选]:还可以选择在导出之前量化模型。量化通过将权重转换为FLOAT16或INT8来减小模型的大小。这可以在部署期间更快地进行推断。

 

from tflite_model_maker import config

 

5.运行推理

 

祝贺你坚持到现在!到目前为止,您应该已经有了一个训练有素的对象检测模型以及它的tflite导出版本。

 

现在,您只需在安装了TensorFlow Lite解释器的设备上加载模型。由于我不希望本文太长,我将在下一篇文章中记录部署过程。我将在装有摄像头的树莓PI上部署该模型,并直接在PI上运行检测。所以敬请关注!

 

一些限制

 

Model Maker仍然是一个试验性的功能,当然有很多局限性。我主要依靠它进行快速原型制作、实验和个人项目。它绝对不是面向生产使用的。

 

尽管如此,我还是非常感谢TensorFlow Lite团队开发了这个伟大的工具。

 

在本文的下一部分中,我将展示如何使用TF Lite在Raspberry PI上部署模型。在未来,我还将探索使用Model Maker的其他任务,如音频分类。在此之前,请密切关注该工具的新发展。

 

谢谢!

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注