(五)将YOLOv5 PyTorch模型权重转换为TensorFlow Lite格式
目录
介绍
建议使用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.tflite和best.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格式相关推荐
- (六)将样式转换模型从TensorFlow转换为TensorFlow Lite
目录 介绍 什么是TensorFlow Lite? TensorFlow Lite转换器 运行TensorFlow Lite模型 下一步 下载 g_model_BtoA_005730.zip - 12 ...
- YOLOv5的pytorch模型文件转换为ONNX文件
YOLOv5 YOLOv5下载与测试运行 导出ONNX格式文件 ONNX转为为IR中间格式 环境: Windows 10 Anaconda 2.0.4 OpenVINO 工具包 2021.2 Pyth ...
- Magnitude-based weight pruning with Keras(keras模型权重裁剪)
keras模型权重裁剪 https://github.com/lixiaolei1982/model-optimization/blob/master/tensorflow_model_optimiz ...
- TensorFlow Lite 是什么?用 TensorFlow Lite 来转换模型(附代码)
文章目录 TensorFlow Lite 做了什么? 将一个模型用 TensorFlow Lite 转换 训练一个简易模型 保存模型 转换模型 加载 TFLite 模型并分配张量 进行预测 将在猫狗大 ...
- 移动端目标识别(1)——使用TensorFlow Lite将tensorflow模型部署到移动端(ssd)之TensorFlow Lite简介...
平时工作就是做深度学习,但是深度学习没有落地就是比较虚,目前在移动端或嵌入式端应用的比较实际,也了解到目前主要有 caffe2,腾讯ncnn,tensorflow,因为工作用tensorflow比较多 ...
- 在Android上可视化TensorFlow Lite AI结果
目录 下一步 在这里,我们完成了基于TensorFlow Lite的应用程序的构建,该应用程序使用来自ONNX Model Zoo的网络模型执行对象识别. 输出存储在一组数字数组中.除非我们做更多的工 ...
- ESP32 Tensorflow Lite (二)TensorFlow Lite Hello World
TensorFlow Lite Hello World TensorFlow Lite Hello World 1. 导入依赖 2. 生成数据 3. 添加噪声 4. 数据分割 5. 设计模型 6. 训 ...
- TensorFlow Lite 指导
TensorFlow Lite 指导 TensorFlow Lite是一套帮助开发人员在移动.嵌入式和物联网设备上运行TensorFlow模型的工具.它允许在设备上进行低延迟和小二进制大小的机器学习推 ...
- tf.saved_model.save模型导出、TensorFlow Serving模型部署、TensorBoard中的HParams 超参数调优
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 4.11 综合案例:模型导出与部署 学习目标 目标 掌握Ten ...
最新文章
- 入门机器学习,看这些材料就够了
- python划分数据集_Python数据集切分实例
- C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。
- 零基础入门Python3-列表list详解
- 阿里云ACE认证之理解CDN技术
- ES2020 中 Javascript 10 个你应该知道的新功能
- C语言讲义——C语言的布尔类型
- 手机页面rem响应式布局
- Code-NFine:NFine权限控制
- kali linux怎么装软件,linux安装软件的几种方式(kali平台)和一些实用的软件(持续更新)...
- 数字图像处理 离散余弦变换(DCT)和峰值信噪比(PSNR)
- cachecloud 安装
- javascript三角函数的使用
- 使用阿里iconfont unicode格式图标
- Vue_路由_query参数_params参数_命名路由_props配置_编程式路由导航_缓存路由组件_新的生命周期钩子_全局、独享、组件内路由守卫_路由的两种工作模式
- 谷歌地图上不去了,用LSV就可以
- 简述修改 MySQL 配置文件的方法_修改mysql配置文件的方法举例
- MySQL单表查询总结
- 安卓的进化,用户的阵痛?从奥利奥与奥利粤说起
- 中学教师计算机运用培训简报,第十中学“教育信息化能力提升”培训活动简报...
热门文章
- 人工智能技术的三大学派_什么是人工智能?它离我们有多远
- 右击计算机管理出现乱码,win10系统右键菜单出现乱码的处理方案
- fileinputstream读取文件_压缩 20M 文件从 30 秒到 1 秒的优化过程
- 淘宝美工实用素材|轻松交作业过稿
- 海报素材模板|超好看的新年素材,你真的不来看一看吗?
- java有哪些技术_Java程序员,最常用的20%技术有哪些?
- C++11左值和右值引用讲解
- WindowsAPI----AttachThreadInput使用
- Windows系统判断是否为64位系统(C++)
- Madagascar中的宏定义函数--绝对值函数和符号函数