赞
踩
目录
在这里,我们使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中。
从我的角度来看,此步骤有点麻烦,但是有必要展示它是如何工作的。代替运行前面的命令,请运行以下行:
- # 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.
现在是时候检查权重转换是否顺利了。在此之前,我们需要稍微修改一下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中的权重文件,以在实际实现中使用它们。
YOLOv5的detect.py脚本使用常规的TensorFlow库来解释TensorFlow模型,包括TFLite格式的模型。在我们的场景中,TensorFlow太重且对资源要求很高,无法在小型设备上运行。如果要保持良好的检测性能,最好使用TFLite及其解释器。我基本上已经将所有与TensorFlow相关的操作替换为它们的TFLite等效项。另外,我做了一些小的更改以使检测器能够在TPU/GPU上运行:我复制了detect.py文件,对其进行了修改,然后将其另存为detect4pi.py。您可以在这里找到文件。我邀请您比较这些文件以完全理解修改。
此步骤是可选的,但建议这样做。在这个简短的测试中,我将向您展示如何在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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。