Конвертація нейромереж для 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
    1439
  • 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. Конвертація та квантування: з застосуванням QAT або post-training quantization.
  4. Валідація точності: порівняння виходів float та quantized моделі на тестовій вибірці.
  5. Розгортання: підготовка C-масиву, тестування на цільовому пристрої.

Що входить в роботу

  • Документація: звіт про конвертацію, інструкція з розгортання.
  • Вихідний код скриптів конвертації та валідації.
  • Навчання команди замовника (1–2 сесії).
  • Гарантія точності: відхилення не більше 5% від baseline.
  • Підтримка після деплою — 1 місяць.

Терміни та бюджет

Терміни: від 1 до 3 тижнів залежно від складності моделі та вимог. Вартість розраховується індивідуально — зв'яжіться з нами для оцінки проекту за один робочий день. Отримайте консультацію та комерційну пропозицію з урахуванням ваших завдань. Наш досвід: понад 50 edge-проектів, 30+ для Coral. Економія на етапі розгортання — один із ключових результатів наших проектів.