TensorFlow Lite для микроконтроллеров, протестированная на Linux SBC


Димитрис Тассопулос (Dimtass) решил узнать больше о машинном обучении для встраиваемых систем и написал серию из пяти постов, в которых рассказывает о своем опыте работы с недорогим оборудованием, таким как плата STM32 Bluepill, Arduino UNO или ESP8266- Модуль 12E, начиная с простых примеров NN, до перехода на TensorFlow Lite для микроконтроллеров.

Недавно Димитрис продолжил работу над своим последним «глупым проектом» (так он называет свой блог), запустив и протестировав TensorFlow Lite для микроконтроллеров на различных Linux SBC.

Вы можете спросить, зачем? Димитрис пытался создать API t ++ для tflite, предназначенный для Linux, но обнаружил, что его сложно построить, и нет готовых двоичных файлов, кроме x86_64. У него не возникло проблем с API-интерфейсом tflite-micro, хотя он действительно предназначен для платформ MCU без покрытия.

Посмотрим на результаты, которые также включают платформу Ryzen, вероятно, ноутбук, справочно:

SBC Среднее за 1000 прогонов (мс)
Ryzen 2700X (это не SBC) 2,19
AML-S905X-CC 15,54
Raspberry Pi 3 B + 13,47
Jetson nano 9,34
NanoPi Duo 36,76
NanoPi Neo 16
NanoPi NEO2 22,83
NanoPi NEO4 5,82
NanoPi K1 Plus 14,32
Orange Pi Prime 18,40
Beaglebone Black 97,03
STM32F746 @ 216 МГц 76,75
STM32F746 @ 288 МГц 57,95

В виде диаграммы это выглядит так

Процессор Ryzen 2700X является самым быстрым, но процессор Rockchip RK3399, обнаруженный в NanoPi NEO4, всего лишь в 2,6 раза медленнее и превосходит все другие SBC Arm, включая Jetson Nano. Неплохо для платы за 50 долларов. Плата NanoPi Neo на базе Allwinner H3 также заслуживает упоминания, так как стоит 10 долларов и, по результатам проведенных тестов, показала наилучшее соотношение производительности и цены.

Если вы хотите попробовать его на собственной плате или компьютере, вы можете сделать это следующим образом: 

Обратите внимание, что для Aarch64 (64-битные Arm) последняя командная строка будет отличаться для других архитектур, например, для SoC на основе Cortex-A7, будет использоваться «mnist-tflite-micro-armv7l».

Обратите внимание, что хотя tflite-micro легко портировать на любые SBC, есть некоторые недостатки по сравнению с использованием tflite C ++ API. Примечательно, что tflite-micro не поддерживает многопоточность и работает намного медленнее, чем tflite C ++ API.

CPU Соотношение скоростей tflite-micro / tflite
Ryzen 2700X 10.63x
Jetson nano  (5 Вт) 9.46x
Jetson nano  (Макс) 3.86x

Модель встроена в исполняемый файл вместо загрузки из файла, если вы не реализуете свой собственный парсинг. Более подробный анализ и объяснение вы найдете в блоге Димтасса.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.