Конвертация нейросетей для edge: TFLite, Micro, Edge TPU

Разработчик обучил модель сегментации на Keras, а на железе — зависание. Модель не влезала в 2 МБ Flash STM32, а FP32 вес на TFLite Micro падал с 4 МБ до 1.2 МБ после квантования, но точность упала на 12% — и клиент потерял заказ. Мы знаем, как избежать таких сценариев: за шесть лет мы провели десят

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    997
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1264
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1002

Разработчик обучил модель сегментации на Keras, а на железе — зависание. Модель не влезала в 2 МБ Flash STM32, а FP32 вес на TFLite Micro падал с 4 МБ до 1.2 МБ после квантования, но точность упала на 12% — и клиент потерял заказ. Мы знаем, как избежать таких сценариев: за шесть лет мы провели десятки конвертаций для MCU, Arm Linux и Google Coral. Под ключ: анализ модели, выбор формата, квантование, валидация точности, развертывание. Наш опыт: 50+ edge-проектов, 30+ для Coral. Свяжитесь с нами для оценки вашего проекта за один день. Стоимость конвертации рассчитывается индивидуально, но в среднем проект окупается за счёт снижения затрат на вычислительные ресурсы и ускорения инференса.

Проблемы, которые решаем

Несовместимость операций

TFLite Micro поддерживает лишь subset от полного TensorFlow: ~250 операций против ~2000. Часто встречаются tf.nn.depthwise_conv2d, tf.reshape — они есть, но tf.where или tf.sort отсутствуют. Мы вручную заменяем неподдерживаемые слои на эквивалентные — например, заменяем tf.where на tf.cast с tf.multiply. Проблема особенно остра для ML на edge, где каждая операция на счету.

Размер модели и квантование

Edge TPU принимает только INT8-модели и не более 8 МБ. Наша команда имеет опыт адаптации YOLOv5 (14 МБ float) до 4.2 МБ INT8 с падением mAP не более 2%. Используем quantization-aware training для сохранения точности. По сравнению с Float16, INT8 квантование обеспечивает скорость в 3-4 раза выше на Edge TPU при тех же затратах энергии. TFLite Micro на 50% компактнее стандартного TFLite, что критично для MCU.

Падение производительности на MCU

Даже после конвертации на TFLite Micro модель может тормозить из-за неоптимального порядка операций. Мы профайлим каждую операцию и изменяем граф для уменьшения количества вызовов DMA — прирост до 40% на STM32H7. Это особенно важно для ML на STM32, где ресурсы ограничены.

Как мы это делаем

Пайплайн конвертации для каждой платформы.

TFLite (мобильные / Raspberry Pi / x86 edge)

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) converter.optimizations = [tf.lite.Optimize.DEFAULT] tflite_model = converter.convert() 

Поддерживает: INT8, FP16, dynamic range quantization. GPU delegate, NNAPI, Hexagon DSP. Идеально для ML на Raspberry Pi.

TFLite Micro (MCU, <1 MB)

Subset операций TFLite, portable C++:

xxd -i model.tflite > model_data.cc # конвертация в C array 

Поддерживается на: STM32, Arduino, ESP32, nRF52840. Compatibility checker обязателен — мы запускаем его перед началом работ.

Edge TPU (Google Coral)

Edge TPU требует INT8 квантования. Только операции из белого листа выполняются аппаратно (остальное — CPU fallback):

edgetpu_compiler model_quant.tflite # компилятор Google Coral 

Производительность: 4 TOPS (Coral USB), 4 TOPS (Coral PCIe M.2). Отлично для image classification и object detection. Как рекомендует документация Google Coral, удерживайте модель <8 МБ для полного ускорения.

Сравнение платформ

Платформа Устройства Макс. размер модели Квантование Инструменты
TFLite Android, iOS, RPi, x86 Без ограничений FP16, INT8, dynamic TFLite Converter, GPU Delegate
TFLite Micro STM32, ESP32, Arduino <1 МБ Flash INT8 обязателен XXD, compatibility checker
Edge TPU Coral USB/PCIe/M.2 8 МБ (полное ускорение) INT8 обязателен edgetpu_compiler

Типы квантования и их параметры

Тип Размер весов Потеря точности Аппаратное ускорение
FP32 4 байта Базовая линия CPU/GPU
FP16 2 байта <1% GPU, некоторые TPU
Dynamic range 2-4 байта 1-3% CPU (оптимизация)
INT8 1 байт 1-5% Edge TPU, DSP, MCU

Почему INT8 квантование — стандарт для Edge TPU?

Аппаратура Edge TPU оперирует целыми числами — float операции эмулируются на CPU с падением скорости в 10–20 раз. Мы используем калибровку на репрезентативной выборке, чтобы подобрать шкалы и смещения. Для картинных моделей потери mAP обычно не превышают 1–3%.

Как проверить совместимость модели с TFLite Micro?

Запускаем tflite_micro_compatibility_checker ещё до конвертации. Если неподдерживаемая операция — заменяем её эквивалентом. Например, tf.nn.max_pool заменяем на tf.nn.avg_pool, если задача позволяет. В крайнем случае используем custom operator, но это усложняет развёртывание.

Детальная схема проверки совместимости
  1. Загрузка модели в формате .tflite.
  2. Прогон через checker: получаем список неподдерживаемых операций.
  3. Для каждой операции подбираем замену из доступного набора.
  4. Повторно проверяем совместимость.
  5. Если замена невозможна — рассматриваем custom operator или смену платформы.

Процесс работы

  1. Анализ модели: загрузка, профайлинг операций, оценка размера.
  2. Выбор платформы: MCU, SBC или Edge TPU — подбираем оптимальный вариант.
  3. Конвертация и квантование: c применением QAT или post-training quantization.
  4. Валидация точности: сравнение выходов float и quantized модели на тестовой выборке.
  5. Развертывание: подготовка C-массива, тестирование на целевом устройстве.

Что входит в работу

  • Документация: отчёт о конвертации, инструкция по развёртыванию.
  • Исходный код скриптов конвертации и валидации.
  • Обучение команды заказчика (1–2 сессии).
  • Гарантия точности: отклонение не более 5% от baseline.
  • Поддержка после деплоя — 1 месяц.

Сроки и бюджет

Сроки: от 1 до 3 недель в зависимости от сложности модели и требований. Стоимость рассчитывается индивидуально — свяжитесь с нами для оценки проекта за один рабочий день. Получите консультацию и коммерческое предложение с учётом ваших задач. Наш опыт: более 6 лет в edge ML, 50+ проектов, 30+ для Coral. Экономия на этапе развертывания — один из ключевых результатов наших проектов.