(五)将YOLOv5 PyTorch模型权重转换为TensorFlow Lite格式

目录

介绍

建议使用Ultralytics进行重量转换的方法

在Google Colab上测试TFLite权重

TFLite解释器,可在边缘设备上实现良好性能

在本地测试YOLOv5模型权重

下一步


在这里,我们使TensorFlow Lite可以理解我们的模型,TensorFlow Lite是专为在小型设备上运行而开发的TensorFlow的轻量级版本。

介绍

在本系列的上一篇文章中,我们训练和测试了用于口罩检测的YOLOv5模型。在这一篇中,我们将模型转换为TensorFlow Lite格式。

之前我曾提到过,我们将使用一些官方的Ultralytics仓库中仍不可用的脚本(克隆脚本)来简化我们的生活。为了执行转换,我们将使用tf.py脚本,该脚本简化了PyTorchTFLite的转换。否则,我们需要坚持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进行重量转换的方法

从我的角度来看,此步骤有点麻烦,但是有必要展示它是如何工作的。代替运行前面的命令,请运行以下行:

# Uncomment all this if you want to follow the long path
#!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行上查找名称= [...],然后将其更改为名称= ['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

如果一切顺利,结果将类似于以下内容:

这样,您就完成了——至少在此Notebook中!最后一步,下载存储在/content/yolov5/runs/train/exp/weights/best-fp16.tflitebest.pt的权重文件,以在实际实现中使用它们。

TFLite解释器,可在边缘设备上实现良好性能

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

在本地测试YOLOv5模型权重

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

通过 pip3 install torch torchvision从任何CLI窗口运行,获取最新的PyTorch版本及其依赖项。

从创建的目录启动Jupyter Notebook:打开CLI,导航到该文件夹​​,然后发出jupyter Notebook命令。Notebook弹出后,运行以下单元格:

#Install the appropriate tensorflow version
!pip install tensorflow==2.3.1
import torch #It's required by YOLO
import tensorflow as tf
!git clone https://github.com/zldrobit/yolov5 #comment this if this is not your first run
%cd yolov5
!git checkout tf-android
print(tf.__version__)
 
#Install all dependencies indicated at requirements.txt file
#Prompt if any GPU is available
!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行的名称列表,并将所有下载的权复制到YOLOv5文件夹内的/weights文件夹中。

要将YOLOv5模型与计算机的网络摄像头配合使用,请在新的Notebook单元中运行以下命令:

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

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

如果要使用TFLite权重测试模型,则首先需要在计算机上安装相应的解释器。

如果您使用的是Linux x86_64

pip3 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

下一步

我们已经培训和测试了YOLOv5口罩检测器。在接下来的文章中,我们将按照承诺对树莓派部署它。敬请关注!

https://www.codeproject.com/Articles/5293077/Converting-YOLOv5-PyTorch-Model-Weights-to-TensorF

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值