Link to this section用于部署的 TFLite 模型导出(已弃用)#
从 Ultralytics 8.4.83 开始,独立的 tflite 导出格式已被移除,并由统一的 Google LiteRT 格式取代。LiteRT (Lite Runtime) 是 TensorFlow Lite 的下一代产品及新名称,它导出的仍然是 相同的 .tflite 模型,现已涵盖移动端、嵌入式、边缘设备和浏览器部署,统合为单一格式。
format="tflite" 仍然有效,但会发出弃用警告并导出为 LiteRT 模型。请在未来 使用 format="litert";有关当前的导出说明和选项,请参阅 LiteRT 导出指南。
在边缘设备或嵌入式设备上部署 计算机视觉 模型,需要一种能够确保无缝性能的格式。
旧版的 TensorFlow Lite 或 TFLite 导出格式针对 Ultralytics YOLO26 模型进行了优化,适用于边缘应用中的 目标检测 和 图像分类 等任务。本指南保留了传统的 TFLite 部署背景;对于新的导出任务,请使用 LiteRT。
Link to this section为什么过去使用 TFLite 进行导出?#
TensorFlow Lite(简称 TFLite)由 Google 于 2017 年 5 月作为其 TensorFlow 框架的一部分引入,是一个开源的深度学习框架,专为设备端推理(也称为 边缘计算)而设计。它为开发者提供了在移动设备、嵌入式设备、IoT 设备以及传统计算机上执行训练后模型的工具。
TensorFlow Lite 支持多种平台,包括嵌入式 Linux、Android、iOS 和微控制器 (MCU)。通过 TFLite 导出,应用程序可以在本地和离线状态下运行模型。
Link to this sectionTFLite 模型的主要特性#
TFLite 模型提供了广泛的关键特性,通过帮助开发者在移动、嵌入式和边缘设备上运行模型,从而实现设备端机器学习:
-
设备端优化:TFLite 针对设备端 ML 进行了优化,通过本地处理数据来减少延迟,通过不传输个人数据来增强隐私,并最小化模型大小以节省空间。
-
多平台支持:TFLite 提供广泛的平台兼容性,支持 Android、iOS、嵌入式 Linux 和微控制器。
-
多样化的语言支持:TFLite 与多种编程语言兼容,包括 Java、Swift、Objective-C、C++ 和 Python。
-
高性能:通过硬件加速和模型优化实现卓越的性能。
Link to this section性能实测(历史数据)#
这些 TFLite 数据保留作为 onnx2tf-TFLite → LiteRT 迁移的历史前后对比记录:下方为旧版 onnx2tf INT8 TFLite 导出与新版 LiteRT w8a32 导出的对比(请参阅 LiteRT 性能实测表)。我们将这些数据与 Google LiteRT 团队共享,以展示新的 litert-torch 格式在替代旧格式后仍存在的性能退步——请参阅下方的 格式退步。
在 Xiaomi 17 的 Adreno GPU(高通 Snapdragon 8 Elite Gen 5,SM8850)上进行任务前后对比,通过 Ultralytics Flutter 插件 0.6.8 测量:传统的 onnx2tf INT8 TFLite 资源(NHWC,输入 images)对比新的 w8a32 LiteRT 资源(NCHW,输入 args_0),两者均在 LiteRT 2.x 上以相同的连续扫描方式、在预装的 Android imgsz 下运行。每个单元格为 总时间(预处理 + 推理 + 后处理),其下方为分阶段拆分;两种格式均在 GPU 上完全编译。
| 模型 | 任务 | 尺寸 (像素) | 迁移前 onnx2tf INT8 TFLite (ms) | 迁移后 w8a32 LiteRT (ms) |
|---|---|---|---|---|
| YOLO26n | 检测 | 640 | 14.0 1.8 / 8.1 / 4.2 | 13.5 1.9 / 8.1 / 3.5 |
| YOLO26n-seg | 分割 | 640 | 30.1 1.9 / 20.3 / 8.0 | 28.6 1.8 / 20.1 / 6.7 |
| YOLO26n-sem | 语义 | 640 | 26.4 1.9 / 16.4 / 8.1 | 32.9 1.8 / 23.0 / 8.2 |
| YOLO26n-cls | 分类 | 224 | 3.5 0.9 / 2.2 / 0.4 | 3.2 1.0 / 2.2 / 0.1 |
| YOLO26n-pose | 姿态 | 640 | 17.4 2.4 / 9.9 / 5.1 | 14.0 1.9 / 9.3 / 2.8 |
| YOLO26n-obb | OBB | 640 | 13.9 3.0 / 8.3 / 2.7 | 13.0 2.9 / 7.9 / 2.3 |
在总延迟方面,w8a32 LiteRT 在六个任务中的五个上与传统的 onnx2tf INT8 格式持平或优于该格式。语义分割仍然是格式回归项,因为即使在预处理清理之后,w8a32 NCHW logit 的推理时间成本仍高于传统的 NHWC logit。传统的 onnx2tf 模型与新的 NCHW 导出模型可在 LiteRT 2.x 上同时运行,无需更改。官方 Android LiteRT 资源托管在 yolo-flutter-app v0.6.6 发布版 中,详细的基准测试记录位于 Flutter 性能文档 中。
Link to this section与 LiteRT 相比的格式退步#
在 Xiaomi 17 的 Adreno GPU 上进行相同设备的 YOLO26n 检测——传统 onnx2tf INT8 TFLite 对比四种 LiteRT 量化格式,均在一次持续运行中测量(因此 推理 是可比较的、与格式相关的指标):
| Android 格式 | GPU 推理 (ms) | GPU 编译 |
|---|---|---|
| onnx2tf INT8 (旧版 TFLite) | 8.6 | 是 |
| LiteRT w8a32 (新官方版) | 8.4 | 是 |
LiteRT INT8 (quantize=8) | 11.0 | 是 |
| LiteRT FP32 | 8.8 | 是 |
LiteRT w8a16 (quantize="w8a16") | (CPU 回退) | 否 — 失败 |
在将生产环境 Android 资产从 onnx2tf TFLite 迁移到 LiteRT 时,提交给 Google LiteRT / litert-torch 团队的问题:
- NCHW 布局要求使用者感知布局。 litert-torch 跟踪 PyTorch 模型并发出带有浮点输入的 NCHW
[1,3,H,W],而 onnx2tf TFLite 导出为 NHWC[1,H,W,3],这与相机/位图布局相匹配。当前的 Flutter 插件在 RGB 打包过程中直接写入平面 CHW,避免了单独的 HWC→CHW 转置,但更简单的使用者仍然需要直接平面打包或额外的转置。 quantize="w8a16"无法在 GPU (OpenCL) 委托上编译,并静默回退到速度慢约 40 倍的 CPU 路径(约 660 ms 对比约 17 ms),导致 int16 激活格式无法用于 GPU 部署。- 静态 INT8 (
quantize=8) 是最慢的 GPU 格式 — 约 11 ms 对比等效的旧版 onnx2tf INT8 模型的约 8.6 ms,即 LiteRT 自有的 INT8 路径相对于它所替代的格式出现了退步。动态范围 w8a32 是唯一能匹配旧版 INT8 速度的 LiteRT 格式,这就是它目前被采用的原因。 - 语义分割模型导出为原始 NCHW logits,且图内无 ArgMax 选项, 强制在主机端对
[1, C, H, W]进行缓存不友好的 argmax 操作(每个类别平面相隔完整的 H×W)。而 onnx2tf、CoreML 和 QNN 路径可以输出紧凑的类别映射。 - 输出张量被重命名为
output_0,output_1, …(相比 onnx2tf 的Identity,Identity_1, …),这导致运行时输出形状查找失效,直到消费者添加了新名称。
相应的 LiteRT w8a32 数据(目前使用的格式)可在 LiteRT 页面查看。
Link to this sectionTFLite 中的部署选项#
在查看 LiteRT 替代导出示例之前,让我们先了解一下 TFLite 模型通常是如何使用的。
TFLite 为机器学习模型提供了各种设备端部署选项,包括:
- 在 Android 和 iOS 上部署:搭载 TFLite 的 Android 和 iOS 应用程序可以分析基于边缘的摄像头馈送和传感器,以检测和识别对象。TFLite 还提供由 Swift 和 Objective-C 编写的原生 iOS 库。下方的架构图展示了使用 TensorFlow Lite 将训练好的模型部署到 Android 和 iOS 平台的过程。
-
在嵌入式 Linux 上实现:如果在 Raspberry Pi 上运行推理且按照 Ultralytics Guide 的操作无法满足你的用例速度需求,你可以使用导出的 TFLite 模型来加速推理时间。此外,你还可以通过使用 Coral Edge TPU 设备 来进一步提升性能。
-
在微控制器上部署:TFLite 模型也可以部署在只有几千字节内存的微控制器和其他设备上。其核心运行时在 Arm Cortex M3 上仅占 16 KB,并可运行许多基础模型。它不需要操作系统支持、任何标准的 C 或 C++ 库,也不需要动态内存分配。
Link to this section使用 LiteRT 替换 TFLite 导出#
对于新的导出任务,请将模型转换为 LiteRT。生成的模型将保留 .tflite 文件扩展名。
Link to this section安装#
要安装所需的软件包,请运行:
# Install the required package for YOLO26
pip install ultralytics有关安装过程的详细说明和最佳实践,请查阅我们的 Ultralytics 安装指南。在为 YOLO26 安装所需软件包时,如果遇到任何困难,请参考我们的 常见问题指南 获取解决方案和提示。
Link to this section用法#
所有 Ultralytics YOLO26 模型 都设计为开箱即用支持导出,这使得将它们集成到你首选的部署工作流中变得非常容易。你可以 查看支持的导出格式和配置选项的完整列表,为你的应用选择最佳设置。
替换后的 LiteRT 格式支持 导出、预测 和 验证 模式。导出你的模型,然后加载导出的 .tflite 模型以运行推理或验证其准确性。
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to LiteRT format
model.export(format="litert") # creates 'yolo26n.tflite'from ultralytics import YOLO
# Load the exported TFLite model
model = YOLO("yolo26n.tflite")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported TFLite model
model = YOLO("yolo26n.tflite")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Link to this section导出参数#
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'litert' | 导出模型的目标格式,定义了与各种部署环境的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入的期望图像尺寸。可以是一个用于正方形图像的整数,或者是一个用于特定尺寸的元组 (height, width)。 |
quantize | int 或 str | None | 量化精度:8(静态 INT8,int8 权重 + int8 激活;需要校准 data/fraction)、'w8a16'(静态,int8 权重 + int16 激活;需要校准 data/fraction)、'w8a32'(动态 INT8,int8 权重 + FP32 激活;无需校准)或 32/未设置(FP32)。FP16 不会单独导出——FP32 模型在 GPU 委托上会自动以 FP16 运行。这取代了已弃用的 half/int8 标志。 |
batch | int | 1 | 指定导出模型的推理批次大小,或导出模型在 predict 模式下并发处理的最大图像数量。 |
data | str | 'coco8.yaml' | 指向 dataset 配置文件的路径(默认值:coco8.yaml),这对量化至关重要。 |
fraction | float | 1.0 | 指定用于 INT8 量化校准的数据集比例。允许在完整数据集的一个子集上进行校准,这对实验或资源受限时非常有用。如果启用 INT8 但未指定,将使用完整数据集。 |
device | str | None | 指定导出设备:CPU (device=cpu),Apple 芯片的 MPS (device=mps)。 |
有关导出过程的更多详细信息,请访问 Ultralytics 导出文档页面。
Link to this section部署导出的 YOLO26 TFLite 模型#
将你的 Ultralytics YOLO26 模型导出为 LiteRT 格式后,你可以部署生成的 .tflite 模型。运行 TFLite 模型最主要且推荐的首选步骤是使用 YOLO("model.tflite") 方法,如前文代码片段所示。但是,如需了解在其他各种环境中部署 TFLite 模型的详细说明,请查看以下资源:
-
Android:一份将 TensorFlow Lite 集成到 Android 应用程序中的快速入门指南,提供了设置和运行 机器学习 模型的简单易懂步骤。
-
iOS:查看这份为开发者准备的详细指南,了解如何在 iOS 应用程序中集成和部署 TensorFlow Lite 模型,其中提供了分步说明和资源。
-
端到端示例:此页面概述了各种 TensorFlow Lite 示例,展示了旨在帮助开发者在移动设备和边缘设备上实现机器学习项目中的 TensorFlow Lite 的实际应用和教程。
Link to this section总结#
本指南保留了传统的 TFLite 部署工作流程。对于新的导出任务,请使用 LiteRT 为边缘计算环境创建 .tflite 模型。
有关用法的更多详细信息,请访问 TFLite 官方文档。
此外,如果你对其他 Ultralytics YOLO26 集成感兴趣,请查看我们的 集成指南页面。你会在那里找到许多有用的信息和见解。
Link to this section常见问题解答#
Link to this section如何用 LiteRT 替换 TFLite 导出?#
对于新的导出任务,请使用 LiteRT 格式。首先,使用以下命令安装所需的包:
pip install ultralytics然后,使用以下代码片段导出你的模型:
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to LiteRT format
model.export(format="litert") # creates 'yolo26n.tflite'对于 CLI 用户,你可以通过以下命令实现:
yolo export model=yolo26n.pt format=litert # creates 'yolo26n.tflite'有关更多详细信息,请访问 Ultralytics 导出指南。
Link to this section使用 TensorFlow Lite 进行 YOLO26 模型部署有什么好处?#
TensorFlow Lite (TFLite) 是一个开源 深度学习 框架,专为设备端推理而设计,非常适合在移动、嵌入式和物联网设备上部署 YOLO26 模型。主要好处包括:
- 设备端优化:通过本地处理数据来最小化延迟并增强隐私。
- 平台兼容性:支持 Android、iOS、嵌入式 Linux 和 MCU。
- 性能:利用硬件加速来优化模型速度和效率。
要了解更多信息,请查看 TFLite 指南。
Link to this section可以在 Raspberry Pi 上运行 YOLO26 TFLite 模型吗?#
是的,你可以在 Raspberry Pi 上运行 YOLO26 TFLite 模型以提高推理速度。首先,按照上述说明将模型导出为 LiteRT 格式。然后,使用诸如 TensorFlow Lite Interpreter 之类的工具在你的 Raspberry Pi 上执行模型。
如需进一步优化,你可以考虑使用 Coral Edge TPU。有关详细步骤,请参阅我们的 Raspberry Pi 部署指南 和 Edge TPU 集成指南。
Link to this section我可以在微控制器上使用 TFLite 模型进行 YOLO26 预测吗?#
可以,TFLite 支持在资源受限的微控制器上进行部署。TFLite 的核心运行时在 Arm Cortex M3 上仅需要 16 KB 的内存,并且可以运行基本的 YOLO26 模型。这使得它非常适合部署在计算能力和内存有限的设备上。
要开始使用,请访问 TFLite 微控制器指南。
Link to this section哪些平台与 TFLite 导出的 YOLO26 模型兼容?#
TensorFlow Lite 提供广泛的平台兼容性,允许你在各种设备上部署 YOLO26 模型,包括:
- Android 和 iOS:通过 TFLite Android 和 iOS 库提供原生支持。
- 嵌入式 Linux:非常适合 Raspberry Pi 等单板计算机。
- 微控制器:适用于资源受限的 MCU。
有关部署选项的更多信息,请参阅我们详细的 部署指南。
Link to this section在将 YOLO26 模型导出到 LiteRT 的过程中,如何排查常见问题?#
如果在将 YOLO26 模型导出到 LiteRT 时遇到错误,常见的解决方法包括:
- 检查包兼容性:确保你使用的是兼容版本的 Ultralytics、
litert-torch和ai-edge-litert。请参阅我们的 安装指南。 - 模型支持:通过查看 Ultralytics 导出文档页面,验证特定的 YOLO26 模型是否支持 LiteRT 导出。
- 量化问题:在使用 INT8 量化时,请确保在
data参数中正确指定了你的数据集路径。
有关其他排查技巧,请访问我们的 常见问题指南。