当你训练了一个Pytorch的模型或者在某处找到了一个ONNX模型,又需要将其转化为Keras模型或者tensorflow lite进行部署时,可以使用两种方式:
该种方式具有的优点的是支持的算法更为的丰富,转换成功率更高,不过缺点会出现很多无用的transpose操作导致模型运行速度较慢。
该项目具有以下优点
-
高一致性。相比于ONNX模型的输出,每一位的平均误差小于1e-5。
-
更快的运行速度。相比于onnx_tf输出的模型,运行速度快30%。
-
自动通道变换。能够将NCWH格式的通道变换为tensorflow的NWHC格式。
-
支持模型量化。继承了tensorflow lite量化工具,支持模型权重量化以及整体uint8量化,模型更小、运行速度更快。
-
代码更友好。个人认为我的代码逻辑较为清晰,更方便开发者进行更改。
目前该项目以及支持并验证了以下模型
-
SSD
-
UNet
-
HRNet
-
MoveNet
-
YOLO 系列,V3\V4\V5\V6\V7,以及YOLOX均已支持
-
torchvision种所有的分类模型、以及部分分割模型
-
一些常规的2D卷积神经网络
3. 一个Pytorch模型的转换小例子
# git clone https://github.com/MPolaris/onnx2tflite
# cd onnx2tflite
# pip install -r requirements.txt
import torch
import torchvision
_input = torch.randn(1, 3, 224, 224)
model = torchvision.models.mobilenet_v2(True)
# use default settings is ok
torch.onnx.export(model, _input, './mobilenetV2.onnx', opset_version=11)# or opset_version=13
from converter import onnx_converter
onnx_converter(
onnx_model_path = "./mobilenetV2.onnx",
need_simplify = True,
output_path = "./",
target_formats = ['tflite'], # or ['keras'], ['keras', 'tflite']
weight_quant = False,
int8_model = False,
int8_mean = None,
int8_std = None,
image_root = None
目前onnx2tflite工具还在持续更新,希望大家能够给这个项目一个star,在使用过程中遇到什么问题欢迎提issue和pr。
现在很多算法都是用pytorch框架训练的,但是在移动端部署很多又使用TensorFlow lite,因此需要将pytorch模型转换到TensorFlow lite。
将pytorch模型转到TensorFlow lite的流程是pytorch->onnx->tensorflow->tensorflow lite,本文记录一下踩坑的过程。
1、pytorch转onnx
这一步比较简单,使用pytorch自带接口就行。不过有一点需要注意的,就是opset版本,可能会影响后续的转换。
由于pytorch的输入是NCHW,转成ONNX也是NCHW,再使用onnx-tf转成tflite时,输入也是NCHW,所以在某些需要以NHWC为输入的算子上(如conv),就会在该算子的前后分别多出一个transpose算子(第一个用于NCHW->NHWC,第二个用于NHWC->NCHW),这也是onnx-tf转换的生硬之处,多出的算子会对推理速度有一些影响。导出onnx文件注意下opset version,需要设置为与onnx兼容的版本,理论上是可以向下兼容至7。
.view()在 Pytorch 中,经常会对某个具体的 Tensor 做变换的处理。但在 PyTorch 转换到 ONNX 的过程中,例如 fea = fea.view(1, -1, 1, 1)ONNX 会错误将 view 的纬度扩张变成 Reshape 节点,如下图所示但是在 Reshape 节点转换到 Tensorflow 的时候,Reshape 节点就变成了 Where 节点和若干节点的组...
背景:最近在做目标检测,其中用到的yolov5模型,框架是pytorch,由于想要把模型部署到移动端,因此需要模型格式的转换,思路如题目:pt > ONNX > CoreML > tflite
官方GitHub链接ultralytics的yolov5.
转换时遇到了问题,将原始模型文件.pt转化为onnx和torchscript都成功了
但转化为coreml时失败了,由于各种原因,这是最不能失败的一个,我需要它,失败原因如下
官方的issue里有这个问题,可是并无luan用,经过多方搜
model.ckpt.meta :保存Tensorflow计算图结构,可以理解为神经网络的网络结构
model.ckpt :保存Tensorflow程序中每一个变量的取值,变量是模型中可训练的部分
checkpoint :保存一个目录下所有模型文件列表
.pb 模型文件
pb是protocolbuffer的缩写。TensorFlow训练模型后存成的pb文件,是一种表示模型(神经网络)结构的二进制文件,不带有源代码,也.
一文掌握Pytorch-onnx-tensorrt模型转换pytorch转onnx
pytorch转onnx
对于实际部署的需求,很多时候pytorch是不满足的,所以需要转成其他模型格式来加快推理。常用的就是onnx,onnx天然支持很多框架模型的转换,
如Pytorch,tf,darknet,caffe等。而pytorch也给我们提供了对应的接口,就是torch.onnx.export。下面具体到每一步。
首先,环境和依赖:onnx包,cuda和cudnn,我用的版本号分别是1.7.0, 10.1
参考链接:
https://github.com/bermanmaxim/jaccardSegment/blob/master/ckpt_to_dd.py
一. tensorflow模型转pytorch模型
import tensorflow as tf
import deepdish as dd
import argparse
import os
import numpy as np
def ...