TensorFlow Lite与ONNX模型转换指南

在移动设备上使用TensorFlow Lite时,通常会选择一个已经训练好的网络模型。预训练的网络模型可以让跳过收集和准备大量数据的过程,更快地进入生产阶段。预训练的网络可能使用了多种不同的技术构建。为了支持神经网络模型保存格式之间的互操作性,存在一种中间格式,即开放神经网络交换格式(ONNX)。ONNX得到了包括微软、Facebook、AMD、IBM、ARM、NVIDIA、高通等众多公司的支持。

得益于ONNX,开发者可以使用他们偏好的软件和框架来生产神经网络模型,并与使用其他AI技术的人士共享。这意味着TensorFlow Lite不仅限于使用仅用TensorFlow实现的模型。使用机器学习框架通用操作的网络可以在使用ONNX的ML技术之间共享。需要注意的是,使用实验性或不太常见的操作的网络可能在其他框架中的可移植性有限。

本文将使用来自ONNX模型动物园的模型。在这个仓库中,可以找到用于视觉识别、语音识别、手势分析等的模型。将下载其中一个YOLO(You Only Look Once)模型,这是一个视觉分类模型。使用的是YOLO4的实现。在这个仓库中,可以在路径/vision/object_detection_segmentation/yolo4/models中找到它。

如果想使用这个仓库中的模型,需要使用GIT LFS(Large File System)。有了GIT LFS,可以克隆一个仓库,然后只下载感兴趣的文件,而不需要下载所有大文件。在克隆这个仓库之前,使用以下命令激活GIT LFS: git lfs install GIT会显示LFS已启用的确认。接下来,克隆ONNX模型动物园仓库: 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=""

在选择网络时,还需要检查网络处理数据的前提条件和后条件信息。对于一些网络,可以在模型旁边的readme文件中找到这些信息。对于其他一些网络,可能需要查看它们的原始来源来找到这些信息。视觉识别网络可能需要将图像调整到特定范围的大小,或者需要以某种方式编码像素值(例如,整数值、浮点值、范围从0.0-1.0或0.0-255.0,或其他范围)。网络输出的数据将以数字数组的形式出现。查阅模型文档以了解这些数字代表什么以及它们的排列方式。对于选择的网络,在它的readme.md文件中有一个声明,图像必须是416x416像素的浮点值。

Netron实用工具虽然不是模型文档的替代品,但对于从模型中提取信息很有用。Netron显示了网络中神经元的排列以及其他一些信息。目前,感兴趣的信息是网络的输入和输出。使用Netron打开其中一个YOLO网络模型,然后选择输入节点,会出现这样的屏幕: 从这个屏幕上可以看到,这个模型的输入是一个调整到416x416像素的RGB图像。像素被编码为浮点值。这是一个NCHW图像。图像数据有多种可能的组织方式。 N - 传入的图像批次数。通常对于一批是1,或者None,意味着批次数是动态的,可能会变化。 C - 图像通道。在这种情况下,通道是红色、绿色和蓝色。 H - 图像的高度。沿着这个维度遍历会让从图像的一行移动到另一行。 W - 图像的宽度。沿着这个维度遍历会让在相邻的像素之间移动。 Netron的这个屏幕还显示,这个神经网络模型的输出是一个张量,包含每个传入批次的125x13x13浮点值([Nonex125x13x13])。这个工具没有指定这些值各自的含义,但需要知道它以配置输入和输出值。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485