目录

介绍

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

在Google Colab上测试TFLite权重

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

在本地测试YOLOv5模型权重

下一步


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

介绍

在本系列的上一篇文章中,我们训练和测试了用于口罩检测的YOLOv5模型。在这一篇中,我们将模型转换为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进行重量转换的方法

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

# 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解释器,可在边缘设备上实现良好性能

YOLOv5的detect.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

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

  1. (六)将样式转换模型从TensorFlow转换为TensorFlow Lite

    目录 介绍 什么是TensorFlow Lite? TensorFlow Lite转换器 运行TensorFlow Lite模型 下一步 下载 g_model_BtoA_005730.zip - 12 ...

  2. YOLOv5的pytorch模型文件转换为ONNX文件

    YOLOv5 YOLOv5下载与测试运行 导出ONNX格式文件 ONNX转为为IR中间格式 环境: Windows 10 Anaconda 2.0.4 OpenVINO 工具包 2021.2 Pyth ...

  3. Magnitude-based weight pruning with Keras(keras模型权重裁剪)

    keras模型权重裁剪 https://github.com/lixiaolei1982/model-optimization/blob/master/tensorflow_model_optimiz ...

  4. TensorFlow Lite 是什么?用 TensorFlow Lite 来转换模型(附代码)

    文章目录 TensorFlow Lite 做了什么? 将一个模型用 TensorFlow Lite 转换 训练一个简易模型 保存模型 转换模型 加载 TFLite 模型并分配张量 进行预测 将在猫狗大 ...

  5. 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介...

    平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...

  6. 在Android上可视化TensorFlow Lite AI结果

    目录 下一步 在这里,我们完成了基于TensorFlow Lite的应用程序的构建,该应用程序使用来自ONNX Model Zoo的网络模型执行对象识别. 输出存储在一组数字数组中.除非我们做更多的工 ...

  7. ESP32 Tensorflow Lite (二)TensorFlow Lite Hello World

    TensorFlow Lite Hello World TensorFlow Lite Hello World 1. 导入依赖 2. 生成数据 3. 添加噪声 4. 数据分割 5. 设计模型 6. 训 ...

  8. TensorFlow Lite 指导

    TensorFlow Lite 指导 TensorFlow Lite是一套帮助开发人员在移动.嵌入式和物联网设备上运行TensorFlow模型的工具.它允许在设备上进行低延迟和小二进制大小的机器学习推 ...

  9. tf.saved_model.save模型导出、TensorFlow Serving模型部署、TensorBoard中的HParams 超参数调优

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 4.11 综合案例:模型导出与部署 学习目标 目标 掌握Ten ...

最新文章

  1. 入门机器学习,看这些材料就够了
  2. python划分数据集_Python数据集切分实例
  3. C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。
  4. 零基础入门Python3-列表list详解
  5. 阿里云ACE认证之理解CDN技术
  6. ES2020 中 Javascript 10 个你应该知道的新功能
  7. C语言讲义——C语言的布尔类型
  8. 手机页面rem响应式布局
  9. Code-NFine:NFine权限控制
  10. kali linux怎么装软件,linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)...
  11. 数字图像处理 离散余弦变换(DCT)和峰值信噪比(PSNR)
  12. cachecloud 安装
  13. javascript三角函数的使用
  14. 使用阿里iconfont unicode格式图标
  15. Vue_路由_query参数_params参数_命名路由_props配置_编程式路由导航_缓存路由组件_新的生命周期钩子_全局、独享、组件内路由守卫_路由的两种工作模式
  16. 谷歌地图上不去了,用LSV就可以
  17. 简述修改 MySQL 配置文件的方法_修改mysql配置文件的方法举例
  18. MySQL单表查询总结
  19. 安卓的进化,用户的阵痛?从奥利奥与奥利粤说起
  20. 中学教师计算机运用培训简报,第十中学“教育信息化能力提升”培训活动简报...

热门文章

  1. 人工智能技术的三大学派_什么是人工智能?它离我们有多远
  2. 右击计算机管理出现乱码,win10系统右键菜单出现乱码的处理方案
  3. fileinputstream读取文件_压缩 20M 文件从 30 秒到 1 秒的优化过程
  4. 淘宝美工实用素材|轻松交作业过稿
  5. 海报素材模板|超好看的新年素材,你真的不来看一看吗?
  6. java有哪些技术_Java程序员,最常用的20%技术有哪些?
  7. C++11左值和右值引用讲解
  8. WindowsAPI----AttachThreadInput使用
  9. Windows系统判断是否为64位系统(C++)
  10. Madagascar中的宏定义函数--绝对值函数和符号函数