(五)将YOLOv5PyTorch模型权重转换为TensorFlowLite格
⽬录
在这⾥,我们使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/')
#to_tf = prepare(base_model)
#port_graph("/content/yolov5/runs/train/exp2/weights/customyolov5")
#converter = tfpat.v1.lite.TFLiteConverter.from_saved_model('/content/yolov5/runs/train/exp2/weights/customyolov5')
#tflite_model = vert() #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 github/zldrobit/yolov5 #comment this if this is not your first run
%cd yolov5
!git checkout tf-android
print(tf.__version__)
tensorflow版本选择
#Install all dependencies indicated file
#Prompt if any GPU is available
!pip install -
print('All set. Using PyTorch version %s with %s' % (torch.__version__, _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 github/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⼝罩检测器。在中,我们将按照承诺对树莓派部署它。敬请关注!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。