当前位置:   article > 正文

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

yolov5 tensorflow

目录

介绍

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

在Google Colab上测试TFLite权重

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

在本地测试YOLOv5模型权重

下一步


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

介绍

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

之前我曾提到过,我们将使用一些官方的Ultralytics仓库中仍不可用的脚本(克隆脚本)来简化我们的生活。为了执行转换,我们将使用tf.py脚本,该脚本简化了PyTorchTFLite的转换。否则,我们需要坚持Ultralytics建议的方法,该方法涉及将PyTorch转换为ONNX,再将TensorFlow转换为TFLite。请注意,最后一个操作可能会失败,这确实令人沮丧。

 

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

  1. import tensorflow as tf
  2. print(tf.__version__)
  3. !PYTHONPATH=. python3 /content/yolov5/models/tf.py --weight
  4. /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进行重量转换的方法

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

  1. # Uncomment all this if you want to follow the long path
  2. #!pip install onnx>=1.7.0 # for ONNX export
  3. #!pip install coremltools==4.0 # for CoreML export
  4. #!python models/export.py --weights /content/yolov5/runs/train/exp2/weights/best.pt --img 416 --batch 1 # export at 640x640 with batch size 1
  5. #!pip install tensorflow-addons
  6. #!pip install onnx-tf
  7. #!pip install tensorflow==2.3.0
  8. #import tensorflow_addons as tfa
  9. #import onnx
  10. #from onnx_tf.backend import prepare
  11. #import tensorflow as tf
  12. #print(tf.__version__)
  13. #base_model = onnx.load('/content/yolov5/runs/train/exp2/weights/best.onnx')
  14. #to_tf = prepare(base_model)
  15. #to_tf.export_graph("/content/yolov5/runs/train/exp2/weights/customyolov5")
  16. #converter = tf.compat.v1.lite.TFLiteConverter.from_saved_model('/content/yolov5/runs/train/exp2/weights/customyolov5')
  17. #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弹出后,运行以下单元格:

  1. #Install the appropriate tensorflow version
  2. !pip install tensorflow==2.3.1
  3. import torch #It's required by YOLO
  4. import tensorflow as tf
  5. !git clone https://github.com/zldrobit/yolov5 #comment this if this is not your first run
  6. %cd yolov5
  7. !git checkout tf-android
  8. print(tf.__version__)
  9. #Install all dependencies indicated at requirements.txt file
  10. #Prompt if any GPU is available
  11. !pip install -r requirements.txt
  12. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/604892
推荐阅读
相关标签
  

闽ICP备14008679号