Google I/O — это обертка! Наверстать упущенное в сеансах TensorFlow Просмотреть сеансы

Понимание библиотеки C++

Библиотека C++ TensorFlow Lite для микроконтроллеров является частью репозитория TensorFlow . Он удобен для чтения, легко модифицируется, хорошо протестирован, легко интегрируется и совместим с обычным TensorFlow Lite.

В следующем документе описывается базовая структура библиотеки C++ и предоставляется информация о создании собственного проекта.

Структура файла

Корневой micro имеет относительно простую структуру. Однако, поскольку он расположен внутри обширного репозитория TensorFlow, мы создали сценарии и предварительно сгенерированные файлы проектов, которые предоставляют соответствующие исходные файлы изолированно в различных встроенных средах разработки.

Ключевые файлы

Наиболее важные файлы для использования интерпретатора TensorFlow Lite for Microcontrollers расположены в корне проекта, сопровождаемые тестами:

  • all_ops_resolver.h или micro_mutable_op_resolver.h можно использовать для предоставления операций, используемых интерпретатором для запуска модели. Поскольку all_ops_resolver.h все доступные операции, он использует много памяти. В производственных приложениях вы должны использовать micro_mutable_op_resolver.h для извлечения только тех операций, которые нужны вашей модели.
  • micro_error_reporter.h выводит отладочную информацию.
  • micro_interpreter.h содержит код для обработки и запуска моделей.

Пошаговое руководство по типичному использованию см. в разделе Начало работы с микроконтроллерами .

Система сборки обеспечивает специфичные для платформы реализации определенных файлов. Они расположены в каталоге с названием платформы, например sparkfun_edge .

Существует несколько других каталогов, в том числе:

  • kernel , которое содержит реализации операций и связанный с ними код.
  • tools , который содержит инструменты сборки и их выходные данные.
  • examples , который содержит пример кода.

Начать новый проект

Мы рекомендуем использовать пример Hello World в качестве шаблона для новых проектов. Вы можете получить его версию для выбранной вами платформы, следуя инструкциям в этом разделе.

Используйте библиотеку Ардуино.

Если вы используете Arduino, пример Hello World включен в библиотеку Arduino_TensorFlowLite Arduino, которую вы можете загрузить из Arduino IDE и в Arduino Create .

После добавления библиотеки перейдите в File -> Examples . Вы должны увидеть пример внизу списка с именем TensorFlowLite:hello_world . Выберите его и нажмите hello_world , чтобы загрузить пример. Затем вы можете сохранить копию примера и использовать ее в качестве основы для своего собственного проекта.

Создание проектов для других платформ

TensorFlow Lite для микроконтроллеров может создавать автономные проекты, содержащие все необходимые исходные файлы, используя Makefile . Текущие поддерживаемые среды: Keil, Make и Mbed.

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

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

Это займет несколько минут, так как для зависимостей необходимо загрузить несколько больших наборов инструментов. После завершения вы должны увидеть несколько папок, созданных по пути, например tensorflow/lite/micro/tools/make/gen/linux_x86_64/prj/ (точный путь зависит от операционной системы вашего хоста). Эти папки содержат сгенерированный проект и исходные файлы.

После запуска команды вы сможете найти проекты Hello World в tensorflow/lite/micro/tools/make/gen/linux_x86_64/prj/hello_world . Например, hello_world/keil будет содержать проект Keil.

Запустите тесты

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

make -f tensorflow/lite/micro/tools/make/Makefile test

Чтобы запустить отдельный тест, используйте следующую команду, заменив <test_name> именем теста:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

Имена тестов можно найти в файлах Makefile проекта. Например, examples/hello_world/Makefile.inc указывает имена тестов для примера Hello World .

Сборка двоичных файлов

Чтобы создать исполняемый двоичный файл для данного проекта (например, примера приложения), используйте следующую команду, заменив <project_name> проектом, который вы хотите построить:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Например, следующая команда создаст двоичный файл для приложения Hello World :

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

По умолчанию проект будет скомпилирован для основной операционной системы. Чтобы указать другую целевую архитектуру, используйте TARGET= . В следующем примере показано, как создать пример Hello World для SparkFun Edge:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin

Когда цель указана, любые доступные исходные файлы для этой цели будут использоваться вместо исходного кода. Например, в подкаталоге examples/hello_world/sparkfun_edge содержатся реализации SparkFun Edge для constants.cc и output_handler.cc , которые будут использоваться при указании целевого sparkfun_edge .

Имена проектов можно найти в файлах Makefile проекта. Например, examples/hello_world/Makefile.inc указывает двоичные имена для примера Hello World .

Оптимизированные ядра

Эталонные ядра в корневом tensorflow/lite/micro/kernels реализованы на чистом C/C++ и не включают аппаратные оптимизации для конкретных платформ.

Оптимизированные версии ядер находятся в подкаталогах. Например, kernels/cmsis-nn содержит несколько оптимизированных ядер, использующих библиотеку Arm CMSIS-NN.

Чтобы сгенерировать проекты с использованием оптимизированных ядер, используйте следующую команду, заменив <subdirectory_name> именем подкаталога, содержащего оптимизации:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

Вы можете добавить свои собственные оптимизации, создав для них новую подпапку. Мы поощряем запросы на вытягивание для новых оптимизированных реализаций.

Сгенерируйте библиотеку Arduino

Ночная сборка библиотеки Arduino доступна через менеджер библиотек Arduino IDE.

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

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

Полученную библиотеку можно найти в tensorflow/lite/micro/tools/make/gen/arduino_x86_64/prj/tensorflow_lite.zip .

Порт на новые устройства

Руководство по переносу TensorFlow Lite для микроконтроллеров на новые платформы и устройства можно найти в micro/docs/new_platform_support.md .