7.9. TensorFlow Lite для микроконтроллеров

TFLM – это среда выполнения, которую большинство камер используют для выполнения загруженной модели. Она разбирает файл .tflite – FlatBuffer из операторов, весов и форм тензоров – и проходит по списку операторов по порядку, направляя каждый оператор в ядро, которое порождает следующий промежуточный тензор.

Промежуточные тензоры размещаются в арене тензоров фиксированного размера, выделяемой во время загрузки. Камера определяет размер арены за два прохода: сначала строится одноразовый интерпретатор на максимально доступной свободной куче, чтобы модель могла сообщить, сколько рабочей памяти ей нужно; затем постоянный интерпретатор выделяется ровно этого размера плюс небольшой запас. Меньшие модели оставляют больше свободной кучи для остальной части скрипта.

TFLM – это движок на H7, RT1062 и AE3.

Три столбца рядом. Слева: H7 и RT1062 запускают TFLM с ядрами CMSIS-NN на Cortex-M7. В центре: AE3 запускает TFLM с CMSIS-NN и оператором Ethos-U на Cortex-M55 с NPU Ethos-U55. Справа: N6 запускает STAI на NPU Neural-ART.

Движок в середине predict() – это разный стек для каждого семейства камер.

7.9.1. Распознаватель операторов

TFLM поставляется не со всеми ядрами. Камера компонует распознаватель (resolver), который перечисляет операторы, которые она может выполнить, и модель, загруженная относительно распознавателя, не загружается, если содержит оператор, отсутствующий в списке. Поставляемая сборка регистрирует операторы, распространённые в сетях зрения и обработки сигналов – слои свёртки и плотные слои, слои пулинга и активации, операторы reshape и concat, операторы quantize и dequantize – так что модель, обученная на одной из стандартных архитектур (YOLO, MediaPipe, MobileNet), загружается без расширения списка.

Сборка AE3 дополнительно регистрирует оператор Ethos-U. Скомпилированная Vela модель в остальном является обычным .tflite, и TFLM обрабатывает её обычным образом; помеченные Vela подграфы попадают в оператор Ethos-U и направляются на NPU.