Biblioteka TensorFlow Lite for Microcontrollers C++ jest częścią repozytorium TensorFlow. Został zaprojektowany tak, aby był czytelny, łatwy do modyfikacji, dobrze przetestowany, łatwy w integracji i zgodny ze zwykłymi TensorFlow Lite.
Dokument poniżej przedstawia podstawową strukturę biblioteki C++ i zawiera informacje na temat tworzenia własnego projektu.
Struktura pliku
Katalog główny micro
ma stosunkowo prostą strukturę. Ponieważ jednak usługa znajduje się wewnątrz rozległego repozytorium TensorFlow, utworzyliśmy skrypty i wstępnie wygenerowane pliki projektu, które dostarczają odpowiednie pliki źródłowe w izolacji w różnych osadzonych środowiskach programistycznych.
Pliki kluczy
Najważniejsze pliki do zastosowania tłumacza 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
podaje dane debugowania.micro_interpreter.h
zawiera kod do obsługi i uruchamiania modeli.
W artykule Pierwsze kroki z mikrokontrolerami znajdziesz informacje o typowych zastosowaniach.
System kompilacji umożliwia implementacje określonych plików na poszczególnych platformach. Znajdziesz je w katalogu z nazwą platformy, np. 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. Wykonaj czynności opisane w tej sekcji, aby pobrać wersję pakietu na wybraną przez siebie platformę.
Korzystanie z biblioteki Arduino
Jeśli używasz Arduino, przykładowy kod Hello World znajdziesz w bibliotece Arduino Arduino_TensorFlowLite
, którą możesz zainstalować ręcznie w IDE Arduino i Arduino Create.
Po dodaniu biblioteki przejdź do File -> Examples
. Na dole listy powinien być widoczny przykład o nazwie TensorFlowLite:hello_world
. Wybierz go i kliknij hello_world
, aby wczytać przykład. Następnie możesz zapisać kopię przykładu
i używać jej jako podstawy do swojego projektu.
Generowanie projektów na inne platformy
TensorFlow Lite dla mikrokontrolerów może generować samodzielne projekty, które zawierają wszystkie niezbędne pliki źródłowe, za pomocą Makefile
. Obecnie obsługiwane środowiska to Keil, Make i Mbed.
Aby generować te projekty za pomocą marki Make, skopiuj repozytorium TensorFlow/tflite-micro i uruchom to polecenie:
make -f tensorflow/lite/micro/tools/make/Makefile generate_projects
Zajmie to kilka minut, ponieważ trzeba pobrać duże łańcuchy narzędzi dla zależności. Po jego zakończeniu w ścieżce, takiej jak gen/linux_x86_64/prj/
, powinny pojawić się foldery utworzone (dokładna ścieżka zależy od systemu operacyjnego hosta). Foldery te zawierają wygenerowane pliki projektu i źródłowe.
Po uruchomieniu polecenia w gen/linux_x86_64/prj/hello_world
możesz znaleźć projekty Hello World. Na przykład hello_world/keil
będzie zawierał projekt Keil.
Przeprowadzanie testów
Aby utworzyć bibliotekę i przeprowadzić wszystkie testy jednostkowe, użyj tego polecenia:
make -f tensorflow/lite/micro/tools/make/Makefile test
Aby uruchomić test pojedynczy, użyj tego polecenia, zastępując <test_name>
nazwą testu:
make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>
Nazwy testów znajdziesz w plikach Makefiles. Na przykład examples/hello_world/Makefile.inc
określa nazwy testowe w przykładzie Hello World.
Tworzenie plików binarnych
Aby utworzyć uruchamiany plik binarny dla danego projektu (np. przykładowej aplikacji), użyj poniższego polecenia, zastępując <project_name>
nazwą projektu, który chcesz skompilować:
make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin
Poniższe polecenie pozwala na przykład utworzyć plik binarny aplikacji Hello World:
make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin
Domyślnie projekt jest kompilowany na potrzeby systemu operacyjnego hosta. Aby określić inną architekturę docelową, użyj TARGET=
i TARGET_ARCH=
. Poniższy przykład pokazuje, jak utworzyć przykład Hello World dla ogólnej klasy Cortex-m0:
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin
Gdy określisz środowisko docelowe, w miejsce pierwotnego kodu zostaną użyte wszystkie dostępne pliki źródłowe związane z tym miejscem docelowym. Na przykład podkatalog examples/hello_world/cortex_m_generic
zawiera implementacje usługi SparkFun Edge plików constants.cc
i output_handler.cc
, które będą używane, gdy określisz środowisko docelowe cortex_m_generic
.
Nazwy projektów znajdziesz w plikach Makefiles. Na przykład examples/hello_world/Makefile.inc
określa nazwy binarne na potrzeby przykładu Hello World.
Zoptymalizowane jądra
Referencyjne jądra w katalogu głównym tensorflow/lite/micro/kernels
są zaimplementowane w czystym języku C/C++ i nie obejmują optymalizacji sprzętowej pod kątem danej platformy.
Zoptymalizowane wersje jądra są udostępniane w podkatalogach. Na przykład kernels/cmsis-nn
zawiera kilka zoptymalizowanych jąder, które korzystają z biblioteki CMSIS-NN Arma.
Aby generować projekty za pomocą zoptymalizowanych jąder, użyj tego 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. Zalecamy przesyłanie żądań pull w przypadku nowych zoptymalizowanych implementacji.
Wygeneruj bibliotekę Arduino
Jeśli musisz wygenerować nową kompilację biblioteki, możesz uruchomić ten skrypt z repozytorium TensorFlow:
./tensorflow/lite/micro/tools/ci_build/test_arduino.sh
Utworzoną bibliotekę znajdziesz w pliku gen/arduino_x86_64/prj/tensorflow_lite.zip
.
Przenoszenie numerów na nowe urządzenia
Wskazówki dotyczące przenoszenia mikrokontrolerów TensorFlow Lite dla mikrokontrolerów na nowe platformy i urządzenia znajdziesz na stronie micro/docs/new_platform_support.md
.