2 个不稳定版本
0.1.0 | 2020年7月12日 |
---|---|
0.0.0 | 2020年7月11日 |
#12 in #microcontroller
7MB
136K SLoC
tfmicro
TensorFlow + no_std
+ Rust = ❤️
这个包包含用于 TensorFlow Lite for Microcontrollers 项目的 Rust 绑定。TensorFlow Lite for Microcontrollers 是 TensorFlow Lite 的一个版本,设计为无需标准库即可运行,适用于微控制器、wasm 等。
感谢 Cargo 和 CC crate,对于新的平台无需进行移植 - 只需将 tfmicro
放入您的 Cargo.toml
中即可。您需要后端有一个 C++ 编译器,包括交叉编译目标,但在大多数情况下,这已经存在。
此实现的目的是在提供所有常用 Rust 保证的同时提供可用性。尽管如此,此 crate 调用大量的 C/C++ 代码,您应该像对待任何其他传统 C/C++ 代码库一样,采用通常的方法(静态分析、内存保护、模糊测试)。
目前固定在 TensorFlow 33689c48ad
入门
在您的 Cargo.toml
的依赖关系部分添加 tfmicro
[dependencies]
tfmicro = 0.1.0
要了解如何将 TensorFlow Micro C 示例映射到惯用的 Rust 代码,请查看 测试 目录。否则,请参阅 用法 获取更一般的描述。
用法
创建一个模型
通常,模型以扩展名为 .tflite
的二进制文件格式从 TensorFlow 训练框架导出。您可以使用 include_bytes!
宏直接将其导入 Rust。
然后,我们可以使用 Model::from_buffer
方法执行零拷贝转换到 Model
。
let model_array = include_bytes!("../examples/models/hello_world.tflite");
let model = Model::from_buffer(&model_array[..]).unwrap();
创建一个张量区域
TensorFlow解释器需要一个名为“张量竞技场”的工作区域。您可以为此使用栈上的数组,尽管它在使用时必须保持作用域。如果您有std
或alloc
环境,则可以传递一个堆分配的Vec
。
const TENSOR_ARENA_SIZE: usize = 4 * 1024;
let mut arena: [u8; TENSOR_ARENA_SIZE] = [0; TENSOR_ARENA_SIZE];
在创建解释器之前,TensorFlow要求确定竞技场的大小。然而,一旦创建了解释器,您可以通过调用arena_used_bytes
来获取模型实际使用的字节数。
创建解释器和输入张量
要运行模型,与C API中的方法非常相似地构建了一个解释器。请注意,与C API不同,不需要error_reporter
。TensorFlow的错误报告始终在info
日志级别传递到标准Rust log
框架。这允许使用任何兼容的日志实现。
解释器需要一个操作解析器。最简单的方法是传递一个AllOpResolver
,但要节省内存,请使用只包含所需操作的MutableOpResolver
。
let op_resolver = AllOpResolver::new();
let mut interpreter =
MicroInterpreter::new(&model, op_resolver, &mut arena[..]).unwrap();
interpreter.input(0, &[0.0]).unwrap(); // Input tensor of length 1
使用input
方法设置输入张量。简单的模型只使用一个张量,可以使用索引0
指定。
运行模型和输出张量
通过在解释器上调用invoke
方法来运行模型。结果输出张量可以通过在解释器上调用output
方法来获取。
interpreter.invoke().unwrap();
dbg!(interpreter.output(0).as_data::<f32>());
这就是最小使用案例的全部内容!有关更高级的使用案例,请参阅测试文件夹。
开发
请参阅DEVELOP.md
许可(此crate)
版权所有2020 Kevin Hill 和 Richard Meadows
根据Apache License,版本2.0(“许可证”)进行许可;除非适用法律规定或书面同意,否则不得使用此文件,除非符合许可证。您可以在以下位置获得许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律规定或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言,请参阅许可证。