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.
-
micro_error_reporter.h
wyświetla informacje debugowania. -
micro_interpreter.h
zawiera kod do obsługi i uruchamiania modeli.
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
.