Zrozum bibliotekę C++

Biblioteka TensorFlow Lite dla mikrokontrolerów C++ jest częścią repozytorium TensorFlow . Został zaprojektowany tak, aby był czytelny, łatwy do modyfikacji, dobrze przetestowany, łatwy do integracji i kompatybilny ze zwykłym TensorFlow Lite.

Poniższy dokument przedstawia podstawową strukturę biblioteki C++ i zawiera informacje na temat tworzenia własnego projektu.

Struktura pliku

micro główny ma stosunkowo prostą strukturę. Ponieważ jednak znajduje się on w obszernym repozytorium TensorFlow, stworzyliśmy skrypty i wstępnie wygenerowane pliki projektu, które dostarczają odpowiednie pliki źródłowe w izolacji w różnych wbudowanych środowiskach programistycznych.

Kluczowe pliki

Najważniejsze pliki do korzystania z interpretera TensorFlow Lite dla mikrokontrolerów znajdują się w katalogu głównym projektu wraz z testami:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

Zobacz Wprowadzenie do mikrokontrolerów, aby zapoznać się z opisem typowego użycia.

System kompilacji zapewnia implementacje określonych plików specyficzne dla platformy. Znajdują się one w katalogu z nazwą platformy, na przykład cortex-m .

Istnieje kilka innych katalogów, w tym:

  • kernel , który zawiera implementacje operacji i powiązany kod.
  • tools , który zawiera narzędzia do kompilacji i ich dane wyjściowe.
  • examples , który zawiera przykładowy kod.

Rozpocznij nowy projekt

Zalecamy użycie przykładu Hello World jako szablonu dla nowych projektów. Możesz uzyskać jego wersję dla wybranej platformy, postępując zgodnie z instrukcjami zawartymi w tej sekcji.

Skorzystaj z biblioteki Arduino

Jeśli używasz Arduino, przykład Hello World znajduje się w bibliotece Arduino_TensorFlowLite Arduino, którą możesz ręcznie zainstalować w Arduino IDE i Arduino Create .

Po dodaniu biblioteki przejdź do File -> Examples . Powinieneś zobaczyć przykład u dołu listy o nazwie TensorFlowLite:hello_world . Wybierz go i kliknij hello_world , aby załadować przykład. Następnie możesz zapisać kopię przykładu i wykorzystać ją jako podstawę własnego projektu.

Generuj projekty na inne platformy

TensorFlow Lite dla mikrokontrolerów jest w stanie generować samodzielne projekty zawierające wszystkie niezbędne pliki źródłowe przy użyciu Makefile . Aktualnie obsługiwane środowiska to Keil, Make i Mbed.

Aby wygenerować te projekty za pomocą Make, sklonuj repozytorium TensorFlow/tflite-micro i uruchom następującą komendę:

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

Zajmie to kilka minut, ponieważ musi pobrać kilka dużych zestawów narzędzi dla zależności. Po zakończeniu powinieneś zobaczyć kilka folderów utworzonych w ścieżce takiej jak gen/linux_x86_64/prj/ (dokładna ścieżka zależy od systemu operacyjnego hosta). Foldery te zawierają wygenerowany projekt i pliki źródłowe.

Po uruchomieniu polecenia będziesz mógł znaleźć projekty Hello World w gen/linux_x86_64/prj/hello_world . Na przykład hello_world/keil będzie zawierać projekt Keil.

Uruchom testy

Aby zbudować bibliotekę i uruchomić wszystkie jej testy jednostkowe, użyj następującego polecenia:

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

Aby uruchomić pojedynczy test, użyj następującego polecenia, zastępując <test_name> nazwą testu:

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

Nazwy testów można znaleźć w plikach Makefile projektu. Na przykład examples/hello_world/Makefile.inc określa nazwy testów dla przykładu Hello World .

Twórz pliki binarne

Aby zbudować uruchamialny plik binarny dla danego projektu (takiego jak przykładowa aplikacja), użyj następującego polecenia, zastępując <project_name> projektem, który chcesz zbudować:

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

Na przykład poniższe polecenie utworzy plik binarny dla aplikacji Hello World :

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

Domyślnie projekt zostanie skompilowany dla systemu operacyjnego hosta. Aby określić inną architekturę docelową, użyj TARGET= i TARGET_ARCH= . Poniższy przykład pokazuje, jak zbudować przykład Hello World dla ogólnej kory mózgowej-m0:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

Po określeniu celu wszystkie dostępne pliki źródłowe specyficzne dla celu zostaną użyte zamiast oryginalnego kodu. Na przykład podkatalog examples/hello_world/cortex_m_generic zawiera implementacje SparkFun Edge plików constants.cc i output_handler.cc , które będą używane po określeniu docelowego cortex_m_generic .

Nazwy projektów można znaleźć w plikach Makefile projektu. Na przykład examples/hello_world/Makefile.inc określa nazwy binarne dla przykładu Hello World .

Zoptymalizowane jądra

Jądra referencyjne w katalogu głównym tensorflow/lite/micro/kernels są zaimplementowane w czystym C/C++ i nie obejmują optymalizacji sprzętowych specyficznych dla platformy.

Zoptymalizowane wersje jąder znajdują się w podkatalogach. Na przykład kernels/cmsis-nn zawiera kilka zoptymalizowanych jąder korzystających z biblioteki Arm's CMSIS-NN.

Aby wygenerować projekty przy użyciu zoptymalizowanych jąder, użyj następującego polecenia, zastępując <subdirectory_name> nazwą podkatalogu zawierającego optymalizacje:

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

Możesz dodać własne optymalizacje, tworząc dla nich nowy podfolder. Zachęcamy do żądania ściągnięcia dla nowych zoptymalizowanych implementacji.

Wygeneruj bibliotekę Arduino

Jeśli chcesz wygenerować nową kompilację biblioteki, możesz uruchomić następujący skrypt z repozytorium TensorFlow:

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

Powstałą bibliotekę można znaleźć w gen/arduino_x86_64/prj/tensorflow_lite.zip .

Port na nowe urządzenia

Wytyczne dotyczące przenoszenia TensorFlow Lite dla mikrokontrolerów na nowe platformy i urządzenia można znaleźć w micro/docs/new_platform_support.md .