Экспорт моделей YOLO в LiteRT для развертывания на периферийных устройствах и в веб-среде#
LiteRT (сокращение от Lite Runtime) — это высокопроизводительная среда выполнения от Google для ИИ на устройствах. Это следующее поколение и новое название для TensorFlow Lite (TFLite), и она использует тот же формат модели .tflite. С помощью LiteRT единая экспортированная модель Ultralytics YOLO развертывается на мобильных устройствах, встраиваемых системах, периферийных устройствах и в браузере, охватывая всё то, с чем более старые форматы экспорта tflite и tfjs справлялись по отдельности, теперь под одной крышей.
Формат экспорта LiteRT оптимизирует твои модели для таких задач, как обнаружение объектов, сегментация, оценка позы и классификация, обеспечивая их быструю и автономную работу на самых разных устройствах.
Официальный плагин Ultralytics YOLO для Flutter из коробки запускает экспортированные модели LiteRT .tflite на Android: инференс с камеры в реальном времени, предсказание для одного изображения, ускорение на GPU и автоматическую загрузку моделей для всех семи задач YOLO26, включая глубину. Для устройств Apple используй экспорт CoreML; для NPU Qualcomm Snapdragon см. интеграцию с Qualcomm QNN.
Экспортируй модели классификации в imgsz=224. Экспортируй модели детекции, сегментации, семантики, глубины, позы и OBB в
imgsz=640. Этот стандарт 224/640 используется общими официальными мобильными ассетами LiteRT, CoreML и QNN.
Официальный NPM-пакет Ultralytics YOLO запускает экспортированные файлы LiteRT .tflite прямо в браузере через LiteRT.js без сервера или Python — с инференсом с веб-камеры в реальном времени, предсказанием для одного изображения и ускорением WebGPU (с автоматическим резервным переключением на CPU/WASM) для всех шести задач YOLO26 (детекция, сегментация, поза, OBB, классификация, семантика). На WebGPU он часто примерно в ~2 раза быстрее, чем ONNX Runtime Web.
npm i @ultralytics/yolo @litertjs/coreПочему стоит экспортировать в LiteRT?#
LiteRT — это фреймворк с открытым исходным кодом, предназначенный для инференса на устройствах, также известного как периферийные вычисления. Он дает разработчикам инструменты для выполнения обученных моделей на мобильных, встраиваемых и IoT-устройствах, традиционных компьютерах и — через LiteRT.js — прямо в веб-браузерах и Node.js.
Один формат модели для всех целей:
- Мобильные и встроенные системы: Android, iOS, встроенный Linux и микроконтроллеры (MCU).
- Периферийные ускорители: Совместимость с Coral Edge TPU для дополнительного ускорения.
- Браузер и Node.js: LiteRT.js запускает ту же модель
.tfliteв веб с ускорением WebGPU/WASM, избавляя от необходимости использовать отдельный экспорт в TensorFlow.js.
Ключевые особенности моделей LiteRT#
- Оптимизация на устройстве: Снижает задержку за счет локальной обработки данных, повышает конфиденциальность, не передавая личные данные, и минимизирует размер модели для экономии места.
- Поддержка множества платформ: Работает на Android, iOS, встроенном Linux, микроконтроллерах и современных веб-браузерах.
- Аппаратное ускорение: Использует XNNPACK на CPU, а также ускорение GPU через OpenCL, Metal и WebGPU. Делегат GPU по умолчанию работает в режиме FP16 для дополнительного ускорения.
- Квантование: Поддерживает FP32, статическое INT8 (
quantize=8, веса int8 + активации int8), статическое INT16 с активацией (quantize="w8a16", веса int8 + активации int16 для более высокой точности) и динамическое INT8 (quantize="w8a32", веса int8 + активации FP32, данные калибровки не требуются) для сжатия моделей и ускорения инференса с минимальной потерь точности. - Поддержка различных языков: Совместимо с Java/Kotlin, Swift, Objective-C, C++, Python и JavaScript.
Измеренная производительность#
Оборудование: Xiaomi 17 с 12 ГБ памяти LPDDR5X и Android 16 / API 36. Его 3-нм процессор Snapdragon 8 Elite Gen 5 (SM8850) имеет 8-ядерный процессор Qualcomm Oryon (2 основных ядра с частотой до 4,6 ГГц и 6 производительных ядер с частотой до 3,62 ГГц), графический процессор Adreno и NPU Hexagon.
| Модель | Задача | размер (пиксели) | CPU w8a32 LiteRT (мс) | GPU w8a32 LiteRT (мс) |
|---|---|---|---|---|
| YOLO26n | Обнаружение | 640 | 52.2 1.8 / 48.1 / 2.4 | 15.8 2.3 / 8.9 / 4.6 |
| YOLO26n-seg | Сегментация | 640 | 73.4 1.8 / 65.6 / 6.0 | 33.2 1.8 / 23.8 / 7.6 |
| YOLO26n-sem | Семантика | 640 | 61.2 1.8 / 51.1 / 8.3 | 34.2 1.8 / 24.0 / 8.3 |
| YOLO26n-depth | Depth | 640 | 124.4 1.9 / 115.1 / 7.4 | 23.0 1.8 / 13.5 / 7.7 |
| YOLO26n-cls | Классификация | 224 | 4.4 0.4 / 4.0 / 0.0 | 3.1 0.8 / 2.1 / 0.2 |
| YOLO26n-pose | Поза | 640 | 57.4 1.8 / 53.8 / 1.8 | 16.6 2.7 / 10.1 / 3.9 |
| YOLO26n-obb | OBB | 640 | 50.3 1.8 / 47.2 / 1.4 | 11.7 1.8 / 7.8 / 2.0 |
- Значения скорости представляют собой задержки пакета для одного изображения — среднее арифметическое 15 запусков после 3 прогревочных запусков на
bus.jpg, измеренное с помощью плагина Ultralytics для Flutter0.6.10и стандартизированных ассетовv0.6.6. Порядок CPU/GPU чередовался между задачами в одном последовательном прогоне. Нативные логи подтвердили, что в каждой строке CPU использовался LiteRT CPU/XNNPACK, а в каждой строке GPU весь граф делегировался LiteRT OpenCL (LITERT_CL). - Экспорт LiteRT напрямую трассирует модель PyTorch, создавая
.tfliteв формате NCHW с входными данными с плавающей запятой — делегат GPU компилирует весь граф (здесь все семь задач выполняются на GPU Adreno), аw8a32не требует данных калибровки. Пользователям следует считывать формы тензоров и имена сигнатур вместо того, чтобы полагаться на устаревшую компоновку NHWC onnx2tf или выходные именаIdentity; упаковывайте данные RGB непосредственно как планарные CHW или транспонируйте их перед инференсом. Семантические экспорты возвращают логиты NCHW и требуют операции argmax для классов на стороне хоста. Официальные ассеты Android размещены в релизе yolo-flutter-appv0.6.6, а подробные результаты бенчмарков приведены в документации по производительности Flutter. - Соответствующие показатели для Hexagon NPU Snapdragon и CPU/GPU LiteRT приведены в разделе интеграции с Qualcomm QNN.
- Сравни результаты для CPU/ускорителей Apple в разделе интеграции с CoreML.
В следующих прогонах устройств используются те же стандартизированные ассеты v0.6.6.
Google Pixel 10#
Оборудование: Google Pixel 10 с 12 ГБ памяти и Android 16 / API 36. Его 3-нм процессор Google Tensor G5 имеет 8-ядерный CPU (1 основное ядро до 3,78 ГГц, 5 производительных ядер до 3,05 ГГц и 2 эффективных ядра до 2,25 ГГц), графический процессор PowerVR D-Series и Google TPU. Тактовая частота ядер и имя драйвера GPU были получены с тестового устройства, так как Google не публикует их в связанных спецификациях.
| Модель | Задача | размер (пиксели) | CPU w8a32 LiteRT (мс) | GPU w8a32 LiteRT (мс) |
|---|---|---|---|---|
| YOLO26n | Обнаружение | 640 | 53.3 1.5 / 50.2 / 1.6 | 45.5 3.8 / 37.7 / 4.0 |
| YOLO26n-seg | Сегментация | 640 | 87.7 1.8 / 78.5 / 7.5 | 50.9 3.0 / 36.9 / 10.9 |
| YOLO26n-sem | Семантика | 640 | 68.6 1.5 / 59.0 / 8.0 | 71.6 1.5 / 59.5 / 10.6 |
| YOLO26n-depth | Depth | 640 | 120.3 1.5 / 112.5 / 6.3 | 52.5 2.0 / 37.5 / 13.0 |
| YOLO26n-cls | Классификация | 224 | 4.0 0.3 / 3.4 / 0.2 | 17.6 0.9 / 16.7 / 0.1 |
| YOLO26n-pose | Поза | 640 | 59.7 1.5 / 57.0 / 1.2 | 46.6 3.8 / 39.2 / 3.5 |
| YOLO26n-obb | OBB | 640 | 52.0 1.5 / 48.9 / 1.7 | 45.5 4.0 / 38.5 / 2.9 |
Бенчмарк: Среднее значение по 15 вызовам predict() после 3 прогревов на bus.jpg с использованием ultralytics_yolo 0.6.10 и
официальных ассетов v0.6.6. Порядок CPU/GPU чередуется между задачами в одном последовательном проходе. Нативные логи подтвердили, что
в каждой строке CPU использовался LiteRT CPU/XNNPACK, а в каждой строке GPU весь граф делегировался LiteRT OpenCL (LITERT_CL).
Samsung Galaxy S26#
Оборудование: Samsung Galaxy S26 (SM-S942B) с 12 ГБ памяти и Android 16 / API 36. Его 2-нм Exynos 2600 содержит 10-ядерный процессор Armv9.3 (1 ядро C1-Ultra до 3,8 ГГц, 3 производительных ядра C1-Pro до 3,26 ГГц и 6 эффективных ядер C1-Pro до 2,76 ГГц), графический процессор Xclipse 960 и Samsung NPU.
| Модель | Задача | размер (пиксели) | CPU w8a32 LiteRT (мс) | GPU w8a32 LiteRT (мс) |
|---|---|---|---|---|
| YOLO26n | Обнаружение | 640 | 36.7 1.3 / 33.8 / 1.7 | 16.4 1.4 / 12.3 / 2.6 |
| YOLO26n-seg | Сегментация | 640 | 54.6 1.2 / 48.0 / 5.3 | 32.8 1.3 / 24.5 / 7.0 |
| YOLO26n-sem | Семантика | 640 | 47.8 1.2 / 38.4 / 8.1 | 34.2 1.3 / 24.9 / 8.0 |
| YOLO26n-depth | Depth | 640 | 92.9 1.2 / 84.8 / 6.9 | 33.5 1.3 / 22.4 / 9.8 |
| YOLO26n-cls | Классификация | 224 | 2.7 0.2 / 2.3 / 0.2 | 2.6 0.2 / 2.4 / 0.0 |
| YOLO26n-pose | Поза | 640 | 42.8 1.3 / 40.5 / 1.0 | 18.4 1.4 / 14.1 / 2.9 |
| YOLO26n-obb | OBB | 640 | 37.5 1.3 / 35.1 / 1.2 | 18.8 2.5 / 14.6 / 1.8 |
Бенчмарк: Среднее значение по 15 вызовам predict() после 3 прогревов на bus.jpg с использованием ultralytics_yolo 0.6.10 и
официальных ассетов v0.6.6. Порядок CPU/GPU чередуется между задачами в одном последовательном проходе. Нативные логи подтвердили, что
в каждой строке CPU использовался LiteRT CPU/XNNPACK, а в каждой строке GPU весь граф делегировался LiteRT OpenCL (LITERT_CL).
Xiaomi 17T Pro#
Оборудование: Xiaomi 17T Pro (2602EPTC0G) с 12 ГБ памяти LPDDR5X и Android 16 / API 36. Его 3-нм MediaTek Dimensity 9500 (MT6993) содержит 8-ядерный процессор Armv9.3 (1 ядро C1-Ultra до 4,21 ГГц, 3 ядра C1-Premium до 3,5 ГГц и 4 ядра C1-Pro до 2,7 ГГц), графический процессор Mali-G1 Ultra MC12 и MediaTek NPU 990.
| Модель | Задача | размер (пиксели) | CPU w8a32 LiteRT (мс) | GPU w8a32 LiteRT (мс) |
|---|---|---|---|---|
| YOLO26n | Обнаружение | 640 | 45.4 1.3 / 42.1 / 2.0 | 26.6 1.9 / 22.0 / 2.7 |
| YOLO26n-seg | Сегментация | 640 | 126.2 2.6 / 113.9 / 9.7 | 46.7 2.6 / 33.3 / 10.8 |
| YOLO26n-sem | Семантика | 640 | 117.9 2.6 / 98.8 / 16.5 | 74.3 2.6 / 54.7 / 17.0 |
| YOLO26n-depth | Depth | 640 | 182.4 2.5 / 167.6 / 12.3 | 47.8 2.5 / 32.3 / 12.9 |
| YOLO26n-cls | Классификация | 224 | 6.2 0.4 / 5.3 / 0.4 | 7.4 0.4 / 6.9 / 0.1 |
| YOLO26n-pose | Поза | 640 | 97.6 2.5 / 93.3 / 1.8 | 28.6 2.5 / 23.3 / 2.8 |
| YOLO26n-obb | OBB | 640 | 91.5 2.6 / 85.8 / 3.2 | 27.5 2.7 / 21.8 / 2.9 |
Бенчмарк: Среднее значение по 15 вызовам predict() после 3 прогревов на bus.jpg с использованием ultralytics_yolo 0.6.10 и
официальных ассетов v0.6.6. Порядок CPU/GPU чередуется между задачами в одном последовательном проходе. Нативные логи подтвердили, что
в каждой строке CPU использовался LiteRT CPU/XNNPACK, а в каждой строке GPU весь граф делегировался LiteRT OpenCL (LITERT_CL).
Поддерживаемые задачи#
Экспорт LiteRT поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только с YOLO26, единственным семейством, которое поставляется с этими головами.
Экспорт в LiteRT: Конвертация твоей модели YOLO#
Ты можешь повысить эффективность выполнения на устройстве и расширить возможности развертывания, конвертировав свои модели в формат LiteRT.
Установка#
Чтобы установить необходимый пакет, выполни:
# Install the required package for YOLO
pip install ultralyticsДля получения подробных инструкций и рекомендаций ознакомься с нашим руководством по установке Ultralytics. Если у тебя возникнут какие-либо трудности, обратись к нашему руководству по общим проблемам.
Экспорт в LiteRT в настоящее время поддерживается на Linux x86_64 и macOS. Сама экспортированная модель .tflite работает на всех поддерживаемых LiteRT платформах (мобильных, встраиваемых, периферийных и в браузере).
Использование#
Все модели Ultralytics YOLO поддерживают экспорт из коробки. Формат LiteRT поддерживает режимы экспорта, предсказания и валидации, поэтому ты можешь экспортировать модель, а затем загрузить ее для запуска инференса или проверки точности локально.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to LiteRT format
model.export(format="litert", imgsz=640) # use imgsz=224 for classificationfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Dynamic INT8: int8 weights, FP32 activations - no calibration data needed
model.export(format="litert", quantize="w8a32", imgsz=640) # use imgsz=224 for classification
# Static INT8: int8 weights + int8 activations - needs calibration data
model.export(format="litert", quantize=8, data="coco8.yaml", imgsz=640) # use 224 for classification
# Static w8a16: int8 weights + int16 activations (higher accuracy) - needs calibration data
model.export(format="litert", quantize="w8a16", data="coco8.yaml", imgsz=640) # use 224 for classificationfrom ultralytics import YOLO
# Load the exported LiteRT model
model = YOLO("yolo26n.tflite")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported LiteRT model
model = YOLO("yolo26n.tflite")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Аргументы экспорта#
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
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 не экспортируется отдельно (см. примечание ниже). Заменяет устаревшие флаги half/int8. |
batch | int | 1 | Указывает размер пакета для пакетного инференса экспортированной модели или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. |
data | str | None | YAML-файл датасета, используемый для калибровки INT8; для классификации вместо этого используется каталог датасета или имя встроенного датасета. Если не указано при quantize=8 или 'w8a16', Ultralytics выбирает датасет калибровки по умолчанию для задачи модели. |
device | str | None | Указывает устройство для экспорта. Экспорт LiteRT выполняется на CPU (device=cpu). |
В отличие от устаревшего экспорта tflite, LiteRT не требует отдельного экспорта FP16. Модель FP32 .tflite во время выполнения работает в полупрецизионном режиме (половинной точности) при использовании делегата GPU (WebGPU, OpenCL, Metal) — это официальный подход LiteRT к инференсу FP16.
Дополнительную информацию о процессе экспорта см. на странице документации Ultralytics по экспорту.
Развертывание экспортированных моделей YOLO LiteRT#
После экспорта модели Ultralytics YOLO в LiteRT ты можешь развернуть ее на различных платформах. Самый быстрый способ проверить ее локально — использовать метод YOLO("yolo26n.tflite"), показанный выше. Для развертывания в других окружениях см. следующие ресурсы:
Мобильные и встроенные системы#
- Android: Руководство по быстрому старту для интеграции LiteRT в приложения для Android.
- iOS: Руководство по интеграции и развертыванию моделей LiteRT в приложениях для iOS.
- Встраиваемый Linux и Raspberry Pi: Запуск моделей LiteRT на одноплатных компьютерах с возможностью ускорения с помощью Coral Edge TPU.
- Микроконтроллеры: Развертывание на MCU с памятью всего в несколько килобайт — основная среда выполнения занимает около 16 КБ на Arm Cortex-M3.
Браузер и Node.js (LiteRT.js)#
- Обзор LiteRT.js: Запуск той же модели
.tfliteпрямо в браузере с ускорением WebGPU/WASM, что исключает вычисления на стороне сервера и хранит данные на устройстве пользователя. - Сквозные примеры: Практические примеры и руководства по внедрению LiteRT на мобильных устройствах, периферии и в веб.
Резюме#
В этом руководстве мы рассмотрели, как экспортировать модели Ultralytics YOLO в формат LiteRT. Объединив развертывание на мобильных устройствах/периферии (ранее TFLite) и в браузере (ранее TF.js) в единую модель .tflite, LiteRT делает твои модели YOLO быстрее, меньше и переносимее практически на любые целевые устройства.
Для получения дополнительной информации посети официальную документацию LiteRT.
Кроме того, если тебе интересны другие интеграции Ultralytics YOLO, загляни на нашу страницу руководств по интеграции, где ты найдешь множество полезных ресурсов.
FAQ#
Как экспортировать модель YOLO в формат LiteRT?#
Используй библиотеку Ultralytics для экспорта модели YOLO в LiteRT (.tflite). Сначала установи пакет:
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", imgsz=640) # use imgsz=224 for classificationДля пользователей CLI:
yolo export model=yolo26n.pt format=litert imgsz=640 # use imgsz=224 for classificationДля получения подробной информации посети руководство по экспорту Ultralytics.
В чем разница между LiteRT, TFLite и TF.js?#
LiteRT — это новое название для TensorFlow Lite: тот же формат модели .tflite, та же линейка среды выполнения, перебрендированная Google. В Ultralytics единый формат экспорта litert теперь охватывает оба варианта использования, для которых раньше требовались два отдельных формата:
- Старый формат
tflite→ развертывание на мобильных устройствах, во встраиваемых системах и на периферии. - Старый формат
tfjs→ развертывание в браузере и Node.js, теперь обрабатываемое с помощью LiteRT.js, использующего тот же файл.tflite.
Если у тебя есть существующий файл .tflite, ты можешь загрузить его напрямую с помощью YOLO("model.tflite"), и он будет работать через бэкенд LiteRT.
Могу ли я запустить модели YOLO LiteRT на Raspberry Pi?#
Да. Экспортируй модель в формат LiteRT, а затем запусти ее на Raspberry Pi для повышения скорости инференса. Для дальнейшей оптимизации рассмотри использование Coral Edge TPU. Подробные шаги см. в нашем руководстве по развертыванию на Raspberry Pi.
Могу ли я запустить модели YOLO в браузере с помощью LiteRT?#
Да. LiteRT.js запускает ту же экспортированную модель .tflite прямо в веб-браузере или приложении Node.js с ускорением WebGPU/WASM. Это заменяет предыдущий рабочий процесс TensorFlow.js — никакого отдельного экспорта для браузера не требуется, просто разверни свою модель LiteRT с помощью среды выполнения LiteRT.js.
Поддерживает ли LiteRT инференс FP16 (половинной точности)?#
Да — во время выполнения. Модель LiteRT FP32 автоматически работает в FP16 при выполнении на делегате GPU (WebGPU, OpenCL или Metal), что является официальным подходом LiteRT. Таким образом, тебе не нужен выделенный экспорт FP16; для дальнейшего сжатия используй квантование INT8 с помощью quantize=8.
Как устранить распространенные проблемы при экспорте в LiteRT?#
Если ты столкнулся с ошибками при экспорте моделей YOLO в LiteRT, вот стандартные решения:
- Проверь платформу: Экспорт LiteRT поддерживается на Linux x86_64 и macOS. Убедись, что твоя среда соответствует требованиям.
- Проверь совместимость пакета: Убедись, что используешь совместимую версию Ultralytics. Обратись к нашему руководству по установке.
- Проблемы с квантованием: При использовании квантования INT8 убедись, что путь к твоему датасету правильно указан в параметре
data.
Дополнительные советы по устранению неполадок см. в нашем руководстве по общим проблемам.