onnx2tflite: 高效转换ONNX模型到TensorFlow Lite的开源工具

Ray

onnx2tflite

onnx2tflite:连接ONNX与TensorFlow Lite的桥梁

在当今深度学习蓬勃发展的时代,不同深度学习框架之间的模型转换一直是一个重要而富有挑战性的问题。ONNX(开放神经网络交换)作为一种通用的深度学习模型表示格式,为不同框架之间的模型交换提供了可能。而TensorFlow Lite作为一个轻量级的移动端和嵌入式设备推理框架,在模型部署方面发挥着重要作用。onnx2tflite项目就是为了解决ONNX模型到TensorFlow Lite模型的转换而生的。

onnx2tflite的主要特性

onnx2tflite是一个功能强大、使用便捷的开源工具,它具有以下几个主要特性:

  1. 高度一致性: 与ONNX模型的输出相比,转换后的模型平均每个元素的误差小于1e-5,保证了转换的精度。

  2. 更快的转换速度: 与onnx_tf等其他工具相比,onnx2tflite在输出TensorFlow Lite模型时速度提升了30%。

  3. 自动通道对齐: 能够自动将PyTorch格式(NCWH)转换为TensorFlow格式(NWHC),解决了不同框架间的数据格式差异问题。

  4. 部署支持: 支持输出量化模型,包括fp16量化和uint8量化,为模型在资源受限设备上的部署提供了便利。

  5. 代码友好: 项目的代码结构简单清晰,便于理解和扩展。

安装与基本使用

要使用onnx2tflite,首先需要从GitHub克隆项目并安装:

git clone https://github.com/MPolaris/onnx2tflite.git
cd onnx2tflite
python setup.py install

安装完成后,可以通过以下方式使用onnx2tflite:

from onnx2tflite import onnx_converter
res = onnx_converter(
    onnx_model_path = "./model.onnx",
    need_simplify = True,
    output_path = "./models/",
    target_formats = ['tflite'],
)

这段代码将一个ONNX模型转换为TensorFlow Lite模型。need_simplify参数表示是否需要对模型进行简化,target_formats参数指定了输出格式。

命令行使用方法

除了作为Python模块使用,onnx2tflite还提供了命令行接口,使用更加灵活:

# 基本使用
python -m onnx2tflite --weights "./your_model.onnx"

# 指定保存路径
python -m onnx2tflite --weights "./your_model.onnx" --outpath "./save_path"

# 保存为tflite格式
python -m onnx2tflite --weights "./your_model.onnx" --outpath "./save_path" --formats "tflite"

# 同时保存keras和tflite格式
python -m onnx2tflite --weights "./your_model.onnx" --outpath "./save_path" --formats "tflite" "keras"

高级功能:模型剪枝与量化

onnx2tflite还支持一些高级功能,如模型剪枝和量化:

  1. 模型剪枝: 可以重新定义模型的输入输出,支持中间层:

    python -m onnx2tflite --weights "./your_model.onnx" --outpath "./save_path" --formats "tflite" --input-node-names "layer_inputname" --output-node-names "layer_outname1" "layer_outname2"
    
  2. 模型量化: 支持权重量化和完整的int8量化:

    # 仅权重量化
    python -m onnx2tflite --weights "./your_model.onnx" --formats "tflite" --weigthquant
    
    # fp16量化
    python -m onnx2tflite --weights "./your_model.onnx" --formats "tflite" --fp16
    
    # int8量化(推荐)
    python -m onnx2tflite --weights "./your_model.onnx" --formats "tflite" --int8 --imgroot "./dataset_path" --int8mean 0 0 0 --int8std 255 255 255
    

支持的模型类型

onnx2tflite已经在多种常见的深度学习模型上进行了验证,包括但不限于:

  • 目标检测模型:SSD, YOLOX, YOLOV3/4/5/6/7/10
  • 姿态估计模型:MoveNet
  • 图像分割模型:UNet, FPN
  • 图像分类模型:ViT, SwinTransformerV1
  • 生成模型:DCGAN, AutoEncoder/VAE
  • 自定义的1D或2D CNN模型

此外,torchvision中的所有分类模型和部分分割模型也都得到了支持。这种广泛的模型支持使得onnx2tflite成为一个非常实用的工具,能够满足大多数深度学习从业者的需求。

自定义算子支持

对于onnx2tflite尚未支持的算子,用户可以自行添加。项目提供了简单的步骤来实现新的算子解析器:

  1. layers文件夹中选择合适的文件(如activations_layers.py)。
  2. 使用@OPERATOR.register_operator装饰器注册新的算子。
  3. 实现算子的__init____call__方法。

例如,添加HardSigmoid算子的示例代码如下:

@OPERATOR.register_operator("HardSigmoid")
class TFHardSigmoid():
    def __init__(self, tensor_grap, node_weights, node_inputs, node_attribute, node_outputs, layout_dict, *args, **kwargs) -> None:
        super().__init__()
        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)

这种灵活的扩展机制使得onnx2tflite能够不断适应新的模型结构和算子。

onnx2tflite的优势

  1. 简化工作流程: onnx2tflite提供了一站式的解决方案,从ONNX直接转换到TensorFlow Lite,简化了模型转换的工作流程。

  2. 性能优化: 通过支持多种量化方式,onnx2tflite可以帮助用户获得更小、更快的模型,适合在移动设备和嵌入式系统上部署。

  3. 广泛兼容性: 支持多种常见的深度学习模型,覆盖了计算机视觉、自然语言处理等多个领域。

  4. 易于使用: 提供了直观的Python API和命令行接口,使用门槛低,适合不同背景的开发者。

  5. 开源社区支持: 作为一个开源项目,onnx2tflite得到了社区的支持和贡献,不断改进和更新。

结语

onnx2tflite为深度学习模型的转换和部署提供了一个强大而灵活的工具。它不仅简化了从ONNX到TensorFlow Lite的转换过程,还提供了多种优化选项,帮助开发者更好地将模型部署到资源受限的设备上。随着深度学习技术的不断发展和普及,onnx2tflite这样的工具将在模型部署和优化中发挥越来越重要的作用。

无论您是研究人员、开发者还是AI从业者,onnx2tflite都是一个值得尝试的工具。它可以帮助您更有效地管理和部署深度学习模型,为您的AI项目增添新的可能性。我们期待看到更多基于onnx2tflite的创新应用,也欢迎社区成员为这个开源项目做出贡献,共同推动深度学习技术的发展与应用。

🔗 项目链接: onnx2tflite GitHub仓库

avatar
0
0
0
相关项目
Project Cover

onnx

ONNX是一个开放生态系统,提供AI模型的开源格式,支持深度学习和传统机器学习。通过定义可扩展的计算图模型和内置操作符及标准数据类型,ONNX增强了不同框架间的互操作性,加速了从研究到生产的转化。ONNX广泛支持各种工具和硬件,助力AI社区快速创新。了解ONNX的文档、教程和预训练模型,加入社区,共同推动ONNX的发展。

Project Cover

mace

MACE是一款专为Android、iOS、Linux和Windows设备设计的深度学习推理框架,优化了NEON、OpenCL、Hexagon等技术以提升性能。它支持多种模型格式,如TensorFlow、Caffe和ONNX,并提供高级API进行电源管理和UI响应优化。MACE设计注重内存使用、模型保护和平台覆盖,提供丰富的模型格式支持。

Project Cover

cortex

Cortex是一个OpenAI兼容的多引擎AI平台,提供命令行界面和客户端库,支持构建LLM应用。支持的引擎包括GGUF、ONNX和TensorRT-LLM,兼容多种硬件平台。Cortex可作为独立服务器运行或作为库导入,适配MacOS、Windows和Ubuntu操作系统。

Project Cover

CNTK

CNTK,微软的开源深度学习工具包,支持多种模型,包括DNN、CNN和RNN。具备自动微分和GPU并行化等高级功能,简化开发和训练流程,并完美支持ONNX,兼容多种AI框架。

Project Cover

uform

UForm是一个全面的多模态AI库,涵盖了从文本到图像,乃至视频剪辑的生成与理解等多种功能。支持多种语言,包含轻量级生成模型及高效的预训练变压模型,能够广泛应用于从服务器到智能手机等不同设备。主要优势包括快速的搜索性能、简易的模型部署过程及卓越的多语言应用能力,适用于快速嵌入、语义搜索、图像标题生成和视觉问答等多种场景。

Project Cover

silero-models

silero-models展示高质量预训练语音识别与合成模型,提供简化的企业级语音技术解决方案,性能匹敌谷歌STT。模型即用、支持多语言、语音合成自然,将企业和开发者的部署流程简化至极致。

Project Cover

fastembed-rs

FastEmbed-rs为基于Rust的高效文本嵌入工具,无需Tokio依赖,支持同步操作。允许使用Hugging Face等多种模型,并通过并行处理实现高效批量嵌入。支持加载自定义.ONNX模型,提供简洁API以快速实现文本嵌入和重排,适合追求高性能文本处理的开发者。

Project Cover

nncf

Neural Network Compression Framework (NNCF) 提供一套后训练和训练时的优化算法,用于在 OpenVINO 中优化神经网络推理,保证最小的精度损失。NNCF 支持 PyTorch、TensorFlow 和 ONNX 等模型,并提供示例展示不同压缩算法的使用案例。NNCF 还支持自动化模型图转换、分布式训练和多种算法的无缝组合,支持将压缩后的 PyTorch 模型导出为 ONNX 检查点及将 TensorFlow 模型导出为 SavedModel 格式。

Project Cover

TensorRT

NVIDIA TensorRT 开源软件提供插件和 ONNX 解析器的源码,展示 TensorRT 平台功能的示例应用。这些组件是 TensorRT GA 版本的一部分,并包含扩展和修复。用户可以轻松安装 TensorRT Python 包或根据构建指南编译。企业用户可使用 NVIDIA AI Enterprise 套件,并可加入 TensorRT 社区获取最新产品更新和最佳实践。

最新项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号