ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

什么是onnx2tflite?ONNX转Keras/TFLite转换工具完整入门指南

什么是onnx2tflite?ONNX转Keras/TFLite转换工具完整入门指南 什么是onnx2tfliteONNX转Keras/TFLite转换工具完整入门指南【免费下载链接】onnx2tfliteTool for onnx-keras or onnx-tflite. Hope this tool can help you.项目地址: https://gitcode.com/gh_mirrors/on/onnx2tfliteonnx2tflite 是一个轻量级的ONNX 模型转换工具能把 PyTorch 导出的 ONNX 模型一键转换为Keras.h5或TensorFlow Lite.tflite格式转换后还会自动与原始 ONNX 输出对比校验误差通常小于 1e-5。对于想把视觉模型部署到移动端、嵌入式设备的初学者来说它是 PyTorch → TFLite 部署链路上非常省心的中间环节。为什么选 onnx2tflite4 个核心优势优势说明 高一致性转换完成后自动运行校验与 ONNX 输出逐元素对比平均误差 1e-5⚡ 转换更快生成的 TFLite 模型推理速度比 onnx-tf 方案快约 30% 自动通道对齐自动把 PyTorch 的 NCHW 格式转为 TensorFlow 的 NHWC 格式无需手动处理 量化支持支持 FP16 半精度与 INT8 全量化输出可直接用于端侧部署核心特性定义见 readme.md 中的 Features 部分转换逻辑实现在 converter.py 的onnx_converter()函数中。转换原理ONNX 是如何变成 TFLite 的onnx2tflite 的转换流水线共 4 步代码结构清晰新手也容易看懂加载并简化utils/onnx_loader.py读取 ONNX 文件调用 onnx-simplifier 做图简化并清理冗余输入节点逐节点重建utils/builder.py的keras_builder()遍历 ONNX 图节点按算子名从注册表OPERATOR定义在utils/op_registry.py中找到对应的 Keras 实现类逐层拼出 Keras 模型TFLite 转换tflite_builder()基于tf.lite.TFLiteConverter输出 TFLite可选开启 FP16 / INT8 量化自动误差校验utils/output_check.py用全 1 张量分别跑 ONNX、Keras、TFLite 三个运行时输出最大误差并给出日志提示。各类算子的 Keras 实现按功能分组存放在layers/目录layers/conv_layers.py—— 卷积类算子layers/activations_layers.py—— 激活函数类算子如 ReLU、HardSigmoidlayers/common_layers.py—— 通用算子layers/mathematics_layers.py—— 数学运算算子layers/deformation_layers.py—— 可变形卷积类算子快速上手3 步转换你的第一个 ONNX 模型第 1 步克隆仓库并安装依赖git clone https://link.gitcode.com/i/878a6e92547703cd4eca38becd3dd1ac依赖清单在requirements.txt主要包括 onnx、onnxruntime、onnx-simplifier、numpy、tensorflow(≥2.5)pip install -r requirements.txt第 2 步命令行一键转换# 保存 keras 和 tflite 两种格式 python converter.py --weights ./your_model.onnx --outpath ./save_path --formats tflite keras第 3 步用 Python API 调用推荐集成进自己的流程from converter import onnx_converter onnx_converter( onnx_model_path./mobilenetV2.onnx, need_simplifyTrue, output_path./, target_formats[tflite], # 或 [keras]、[keras, tflite] weight_quantFalse, int8_modelFalse, )完整示例可参考仓库根目录的torchvison_test.py其中演示了从 torchvision 模型导出 ONNX 再转 TFLite 的完整流程。常用转换参数速查表命令行参数在 converter.py 的parse_opt()中定义最常用的几个如下参数作用适用场景--formats指定输出格式keras/tflite选择产物类型--outpath模型保存路径指定输出目录--input-node-names/--output-node-names裁剪模型重新指定输入/输出层支持中间层只保留骨干网络、复用特征--fp16FP16 半精度量化含输入输出兼顾精度与体积--int8INT8 全量化含输入输出端侧极致性能--weigthquant仅权重量化轻度压缩--imgrootINT8 校准数据集目录INT8 量化时推荐使用真实图像校准--nosimplify跳过 onnxsim 图简化简化失败时兜底 模型裁剪示例只保留到某一层再输出python converter.py --weights ./your_model.onnx \ --input-node-names layer_inputname \ --output-node-names layer_outname1 layer_outname2支持哪些模型已验证模型清单onnx2tflite 对 1D/2D 视觉 CNN 模型非常友好官方已验证的模型包括目标检测YOLOv3 / v4 / v5 / v6 / v7 / v10、SSD关键点HRNet、MoveNet分割UNet、FPN 及 torchvision 中部分分割模型分类torchvision 全系列分类模型ResNet、MobileNet 等其他MLP、DCGAN、AutoEncoder/VAE、含特殊算子的 1D/2D CNN⚠️使用限制来自 readme 的 Limitation算子覆盖无法囊括所有模型遇到未支持算子需自行补充友好支持 1D/2D CNN暂不支持 3D CNNTransformer / ViT / Swin 等架构还在 TODO 计划中部分数学与通道变换算子如 Squeeze、MatMul支持较弱。遇到不支持的算子3 步注册自定义算子当转换时报错xxx not implemented yet时可以自己添加算子流程非常简单在layers/目录下选择对应分类文件如激活函数放layers/activations_layers.py用OPERATOR.register_operator(算子名)装饰器注册一个类实现__call__返回 Keras 张量先跑通无量化转换确认输出无误后再试量化。OPERATOR.register_operator(HardSigmoid) class TFHardSigmoid(): def __init__(self, tensor_grap, node_weights, node_inputs, node_attribute, *args, **kwargs): self.alpha node_attribute.get(alpha, 0.2) self.beta node_attribute.get(beta, 0.5) def __call__(self, inputs): return tf.clip_by_value(self.alpha * inputs self.beta, 0, 1)常见问题 FAQQ1我没有 ONNX 模型只有 PyTorch 代码怎么办用torch.onnx.export(model, input, model.onnx, opset_version11)先导出即可opset 11 或 13 均可。Q2怎么判断转换结果是否可靠转换完成后工具会自动对比输出并打印日志误差 1e-4 为 info 级放心使用 1e-2 会给出 error 级警告需要人工检查。逻辑见utils/output_check.py。Q3INT8 量化后精度下降明显建议通过--imgroot指定真实训练图像做校准并配合--int8mean/--int8std传入图像预处理均值方差比随机数据校准效果好得多。Q4项目许可协议是什么Apache-2.0可自由用于学习与商业项目见LICENSE文件。小结onnx2tflite 用简洁的代码完成了「ONNX 加载简化 → Keras 逐层重建 → TFLite 转换 → 自动误差校验」的完整链路并提供模型裁剪、FP16/INT8 量化等部署实用功能。如果你正在做 PyTorch 视觉模型到 TensorFlow Lite 的端侧部署值得一试。【免费下载链接】onnx2tfliteTool for onnx-keras or onnx-tflite. Hope this tool can help you.项目地址: https://gitcode.com/gh_mirrors/on/onnx2tflite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表