博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Android上将ONNX神经网络模型与TensorFlow Lite结合使用
阅读量:3529 次
发布时间:2019-05-20

本文共 2422 字,大约阅读时间需要 8 分钟。

目录


在这里,我们从预先训练的模型中制作TensorFlow Lite模型。

这是有关在Android上使用TensorFlow Lite的系列文章中的第二篇。在上一节中,设置了开发环境以使用TensorFlow模型和Android开发。我们在这里继续为TensorFlow Lite调整网络。

在移动设备上使用TensorFlow Lite时,您可能希望使用已经经过培训的网络。预先训练的网络可让您完成收集和准备训练视觉识别器所需的大量数据的过程,从而更快地达到生产效率。可以使用多种不同的技术来构建预训练网络。

为了支持可以保存神经网络模型的格式之间的互操作性,有一种中间格式。这种格式称为格式(ONNX)。ONNX得到了包括微软、FacebookAMDIBMARMNVIDIAQualcomm等许多公司的支持。

借助ONNX,开发人员可以使用其首选的软件和框架来生成其神经网络模型,并与可能使用其他AI技术的人们共享它们。这意味着TensorFlow Lite不限于仅使用通过TensorFlow实现的模型。可以使用ONNXML技术之间共享使用机器学习框架共有的操作的网络。请注意,使用实验性操作或较不常见的操作的网络可能无法移植到其他框架。

对于本文,我将使用从。在此存储库中,您将找到用于视觉识别、语音识别、手势分析等的模型。我将下载一种(一次只看一次)模型,一种视觉分类模型。我正在使用YOLO4实现。在存储库中,您可以在找到它。

如果要使用此存储库中的模型,则需要使用GIT LFS(大文件系统)。使用GIT LFS,您可以克隆存储库,然后仅下载感兴趣的文件,而无需下载所有大文件。克隆此存储库之前,请使用以下命令激活GIT LFS

git lfs install

GIT显示已启用LFS的确认。接下来,克隆ONNX Model Zoo存储库:

git clone https://github.com/onnx/models

克隆的存储库将具有较大的.onnx文件的占位符文件。要下载文件的实际数据,请使用git lfs pull命令并传递相对于要下载的文件或文件夹的存储库的路径:

git lfs pull --include="vision/object_detection_segmentation/yolov4/model" --exclude=""

或者,如果您有足够的空间、网络带宽和时间,并且希望下载模型中的所有文件,则可以传递通配符作为下载文件的名称:

git lfs pull --include="*" --exclude=""

在选择网络时,您还将需要检查网络处理的数据的前提条件和后置条件的信息。对于某些网络,您可以在自述文件中的模型旁边找到此信息。对于某些其他网络,您可能需要查看其原始来源才能找到此信息。用于视觉识别的网络可能需要将图像调整大小到特定范围,或者需要以某种方式编码的像素值(例如,整数值、浮点值、范围为0.0-1.00.0-255.0,或其他某个范围)。网络输出的数据将以数字数组的形式出现。请查阅模型的文档,以了解数字代表什么以及如何排列。对于我选择的网络,请参见其自述文件。

Netron实用程序虽然不能代替模型文档,但可用于从模型中提取信息。Netron显示了神经元在网络中的排列以及其他一些信息。现在,我们感兴趣的信息是网络的输入和输出。使用Netron打开一个YOLO网络模型,然后选择输入节点,将显示如下截图:

从该截图上,我可以看到该模型的输入是针对已调整为416x416像素的RGB图像的。像素被编码为浮点值。该图像是NCHW图像。有许多可能的方法来组织图像数据。

  • N——传入的图像批数。通常对于一个批数为1,或者为None(无),表示批数是动态的,并且可能会变化。
  • C——图像通道。在这种情况下,通道用于红色、绿色和蓝色
  • H——图像的高度。沿这个维度移动将使我们从图像中的一行移到另一行。
  • W——图像的宽度。沿这个维度遍历可以使我们在彼此相邻的像素之间移动。

Netron的此截图还显示,此神经网络模型的输出是一个张量,该张量包含传递给该批次的每个批处理([Nonex125x13x13])的125x13x13浮点值。该工具没有指定这些值分别意味着什么,但是我们需要知道它用于配置输入和输出值。

要将这些ONNX模型之一转换为TensorFlow freeze图,请从终端使用onnx-tf与以下模式匹配的参数:

onnx-tf convert -i source_model.onnx -o output_model.pb

片刻之后,您将获得转换后的TensorFlow freeze图。我们真正想要的是TensorFlow Lite文件。要将文件从TensorFlow转换为TensorFlow Lite,我使用Python脚本。存在命令行工具,但是我发现使用Python脚本更加灵活。

import tensorflow as tfsaved_model_dir='/dev/projects/models'converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)converter.optimizations = [tf.lite.Optimize.DEFAULT]tf_lite_model = converter.convert()open('output.tflite', 'wb').write(tf_lite_model)

只要输出具有.tflite扩展名,就可以将其命名为任意名称。确保正确设置扩展名,因为稍后将很重要。

下一步

现在我们已经将ONNX模型转换为Tensorflow Lite,我们准备在Android应用程序中使用它。这就是我们将

转载地址:http://spwhj.baihongyu.com/

你可能感兴趣的文章
POI读写Excel的基本使用
查看>>
淘宝网站的架构演进
查看>>
设置zookeeper开机自启动流程
查看>>
CentOS安装mysql5.7的教详细流程
查看>>
项目整合微信扫码登录功能
查看>>
分布式文件系统FastDfs的搭建
查看>>
Springboot项目利用Java客户端调用FastDFS
查看>>
全文检索工具elasticsearch的安装和简单介绍
查看>>
利用Kibana学习全文检索工具elasticsearch
查看>>
SpringBoot在Test测试类或自定义类中通过@Autowired注入为null
查看>>
使用docker搭建YAPI服务
查看>>
西南科技大学OJ题 邻接表到邻接矩阵1056
查看>>
西南科技大学OJ题 有向图的出度计算1057
查看>>
西南科技大学OJ题 有向图的最大出度计算1059
查看>>
西南科技大学OJ题 带权有向图计算1063
查看>>
oracle主键自增触发器编写
查看>>
String与StringBuilder与StringBuffer三者的差别
查看>>
各种IO流之间的关系和区别
查看>>
SSM如何实现上传单图片
查看>>
SSM环境下java如何实现语音识别(百度语音识别版)
查看>>