TensorFlow Lite模型转换与测试指南

在这篇文章中,将探讨如何将YOLOv5模型转换TensorFlow Lite格式,并在Google Colab上进行测试。此外,还将讨论如何在边缘设备上优化模型性能。

模型转换TensorFlow Lite格式

首先,需要将模型转换TensorFlow Lite格式。这可以通过使用一些尚未在官方Ultralytics仓库中公开的脚本来简化。将使用名为tf.py的脚本,该脚本简化了从PyTorch到TFLite的转换过程。否则,需要遵循Ultralytics建议的方法,该方法涉及将PyTorch转换为ONNX,然后转换为TensorFlow,最后转换为TFLite。请注意,最后一步可能会失败,这非常令人沮丧。

要执行转换,请运行以下命令:

import tensorflow as tf print(tf.__version__) !PYTHONPATH=. python3 /content/yolov5/models/tf.py --weight /content/yolov5/runs/train/exp2/weights/best.pt --cfg models/yolov5s.yaml --img 416 --source /content/FaceMaskDataset/images/train

在传递权重文件路径(configuration.yaml文件)时,需要指明模型接受的图像尺寸以及训练数据集的来源(最后一个参数是可选的)。脚本将使用TensorFlow 2.3.1将.pt权重转换为TensorFlow格式,输出将保存在/content/yolov5/runs/train/exp/weights

Ultralytics建议的权重转换方法

从角度来看,这一步有点繁琐,但有必要展示它是如何工作的。而不是运行之前的命令,运行以下行:

!pip install onnx>=1.7.0 # for ONNX export !pip install coremltools==4.0 # for CoreML export !python models/export.py --weights /content/yolov5/runs/train/exp2/weights/best.pt --img 416 --batch 1 # export at 640x640 with batch size 1 !pip install tensorflow-addons !pip install onnx-tf !pip install tensorflow==2.3.0 import tensorflow_addons as tfa import onnx from onnx_tf.backend import prepare import tensorflow as tf print(tf.__version__) base_model = onnx.load('/content/yolov5/runs/train/exp2/weights/best.onnx') to_tf = prepare(base_model) to_tf.export_graph("/content/yolov5/runs/train/exp2/weights/customyolov5") converter = tf.compat.v1.lite.TFLiteConverter.from_saved_model('/content/yolov5/runs/train/exp2/weights/customyolov5') tflite_model = converter.convert() #just FYI: this step could go wrong and your notebook instance could crash.

在Google Colab上测试TFLite权重

现在是时候检查权重转换是否顺利了。在此之前,需要稍微修改detect.py脚本并设置正确的类名。打开文件(/content/yolov5/detect.py),在第157行找到names = [...]并将其更改为names = ['Face mask','No face mask']。保存并关闭文件。

如果一切顺利,应该能够加载并测试所获得的结果。运行以下行。它们将加载带有.tflite权重的YOLOv5模型,并在/test_images存储的图像上运行检测。

!python detect.py --weight /content/yolov5/runs/train/exp2/weights/best-fp16.tflite --img 416 --source ../test_images

TFLite解释器在边缘设备上的性能

YOLOv5detect.py脚本使用常规TensorFlow库来解释TensorFlow模型,包括TFLite格式的模型。在情况下,TensorFlow太重且资源需求过高,无法在小型设备上运行。如果想保持良好的检测性能,最好坚持使用TFLite及其解释器。基本上用它们的TFLite等效物替换了所有与TensorFlow相关的操作。此外,还进行了一些小的更改,使检测器能够在TPU/GPU上运行:复制了detect.py文件,进行了修改,并将其保存为detect4pi.py。可以在这里找到该文件。邀请比较这些文件,以完全理解所做的修改。

在本地测试YOLOv5模型权重

这一步是可选的,但建议进行。在这个简短的测试中,将向展示如何在最终部署到Pi之前,将计算机的网络摄像头输出输入到检测器。还将向展示如何在有和没有TFLite解释器的情况下测试模型。一旦获得了修改后的detect4pi.py文件,请在本地计算机上创建一个名为Face Mask Detection的文件夹。

通过运行以下命令从任何CLI窗口获取最新的PyTorch版本及其依赖项:

pip3 install torch torchvision

从创建的目录启动Jupyter Notebook:打开CLI,导航到该文件夹,并发出jupyter notebook命令。一旦笔记本弹出,请运行以下单元格:

!pip install tensorflow==2.3.1 import torch import tensorflow as tf !git clone https://github.com/zldrobit/yolov5 %cd yolov5 !git checkout tf-android print(tf.__version__) !pip install -r requirements.txt print('All set. Using PyTorch version %s with %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))

在继续之前,请记住在detect.py文件的第157行修改names列表,并将所有下载的权重复制到YOLOv5文件夹内的/weights文件夹中。

要将YOLOv5模型与计算机的网络摄像头输入,运行以下命令在新的笔记本单元格中:

!python detect.py --weights weights/best.pt --img 416 --conf 0.4 --source 0 --classes 0 1

它将在单独的窗口中启动网络摄像头,识别脸部,并检测是否戴着口罩。这就是应该期待的:

如果想使用其TFLite权重测试模型,首先需要在机器上安装相应的解释器。如果使用的是linux x86_64:

pip3 install https://github.com/google-coral/pycoral/releases/download/release-frogfish/tflite_runtime-2.5.0-cp36-cp36m-linux_x86_64.whl !python detect4pi.py --weights weights/best-fp16.tflite --img 416 --conf 0.45 --source 0 --classes 0 1
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485