有时你需要一个快速的解决方案。它可能是针对原型的,也可能是针对非关键任务的。您需要一个快速但仍然准确的解决方案。像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批注文件的文件夹,数据集中的每个图像对应一个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的其他任务,如音频分类。在此之前,请密切关注该工具的新发展。
谢谢!
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/22/%e5%9f%ba%e4%ba%8etf-lite%e6%a8%a1%e5%9e%8b%e7%94%9f%e6%88%90%e5%99%a8%e7%9a%84%e8%be%b9%e7%bc%98%e7%9b%ae%e6%a0%87%e6%a3%80%e6%b5%8b/