项目介绍:Tract
Tract是Sonos开发的一款神经网络推理工具包。其主要功能是读取ONNX和NNEF格式的神经网络,进行优化并运行推理。该项目最初名为tfdeploy,或Tensorflow-deploy-rust。
主要功能
Tract支持多种神经网络格式,包括ONNX和NNEF。用户可以通过Tract对这些格式进行加载、优化和运行,支持的网络示例有:
- ONNX格式的MobileNet v2
- ONNX格式的BERT
- TensorFlow格式的MobileNet v2
- 从Keras和TensorFlow 2转到Tract
- PyTorch格式的ResNet
在ONNX中的表现
Tract在ONNX后端测试中约85%的测试均成功通过,尤其在一些实际应用集成测试中表现优异,例如:bvlc_alexnet、densenet121、inception_v1等。不过,一些与张量序列和可选张量相关的运算符仍未得到支持,这一限制构成了Tract的架构特征。这些功能的支持可能会影响性能,因此暂未列入计划。
在NNEF中的表现
NNEF(神经网络交换格式)提供了一种面向生产环境的网络描述格式。Tract支持NNEF,并且能够执行大多数NNEF规范中的操作。不过,像ROI操作符这样的少数特性目前还未被支持。此外,Tract引入了称为tract-OPL的NNEF扩展,以便支持额外的运算符。
TensorFlow支持情况
即便Tract目前尚无法支持所有任意的TensorFlow模型,它仍能够运行一些重要的模型如Google Inception v3和Snips唤醒词模型。Tract甚至支持将TensorFlow 2模型转换为ONNX格式以便加载和运行。
支持的网络实例
Tract性能的演进可通过其对一些网络模型的持续测试来监控,诸如:
- 基于Arm Cortex-M微控制器的关键词识别
- Snips的唤醒词检测模型
- Inception v3在不同设备上的运行表现
项目开源许可证
Tract项目在Apache 2.0和MIT双许可协议下发布,用户可以选择任意一个进行使用。项目中的一些文件目录是从TensorFlow和ONNX项目中复制而来,并不受此许可证的约束。
贡献与合作
Tract项目欢迎各方贡献,所有贡献默认在Apache-2.0许可证下进行双许可,遵循项目的整体开源精神和约定。目前,Tract在支持更多运算符和网络格式方面仍在不断努力和拓展。