Tworzenie i konwertowanie modeli

Mikrokontrolery mają ograniczoną ilość pamięci RAM i miejsca na dane, co nakłada ograniczenia na rozmiary modeli systemów uczących się. Poza tym TensorFlow Lite dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór operacji, więc nie wszystkie architektury modeli są możliwe.

Ten dokument wyjaśnia proces konwertowania modelu TensorFlow tak, aby działał na mikrokontrolerach. Przedstawia również obsługiwane operacje oraz wskazówki dotyczące projektowania i trenowania modelu tak, aby zmieścił się w ograniczonej pamięci.

Pełny, wykonywalny przykład kompilowania i konwertowania modelu znajdziesz w przykładzie Hello World.

Konwersja modelu

Aby przekonwertować wytrenowany model TensorFlow tak, aby działał na mikrokontrolerach, użyj interfejsu Python API konwertera TensorFlow Lite w Pythonie. Spowoduje to przekonwertowanie modelu na FlatBuffer, co zmniejszy rozmiar modelu, i zmodyfikowanie go pod kątem operacji TensorFlow Lite.

Aby uzyskać najmniejszy możliwy rozmiar modelu, należy rozważyć zastosowanie kwantyzacji po trenowaniu.

Przekonwertuj na tablicę C

Wiele platform mikrokontrolerów nie obsługuje natywnego systemu plików. Najprostszym sposobem na wykorzystanie modelu z programu jest dodanie go do tablicy C i skompilowanie go w programie.

Podane niżej polecenie unix wygeneruje plik źródłowy C zawierający model TensorFlow Lite w postaci tablicy char:

xxd -i converted_model.tflite > model_data.cc

Dane wyjściowe będą wyglądać mniej więcej tak:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Wygenerowany plik możesz dodać do programu. Ważne jest, aby zmienić deklarację tablicy na const, aby zwiększyć wydajność pamięci na platformach osadzonych.

Przykład dodawania modelu i używania go w programie znajdziesz w sekcji hello_world_test.cc w przykładzie Hello World.

Architektura modelu i trenowanie

Podczas projektowania modelu do zastosowania na mikrokontrolerach należy wziąć pod uwagę rozmiar modelu, zbiór zadań i używane operacje.

Rozmiar modelu

Model musi być wystarczająco mały, aby zmieścić się w pamięci urządzenia docelowego tak samo jak reszta programu – zarówno jako plik binarny, jak i w czasie działania.

Aby utworzyć mniejszy model, możesz użyć w architekturze mniejszej liczby i mniejszych warstw. Jednak małe modele mogą być bardziej narażone na niedostosowanie. Oznacza to, że w przypadku wielu problemów warto korzystać z największego modelu, który będzie się mieścić w pamięci. Użycie większych modeli spowoduje jednak większe obciążenie procesora.

Zbiór zadań

Rozmiar i złożoność modelu ma wpływ na zbiór zadań. Duże, złożone modele mogą powodować wyższy cykl obciążenia, co oznacza, że procesor urządzenia poświęca więcej czasu na pracę, a mniej bezczynności. Zwiększa to zużycie energii i wydajność ciepła, co może stanowić problem w zależności od aplikacji.

Pomoc w operacjach

TensorFlow Lite dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór operacji TensorFlow, co wpływa na architektury modelu, które można uruchamiać. Pracujemy nad rozszerzeniem obsługi operacji, zarówno w zakresie implementacji referencyjnych, jak i optymalizacji w przypadku określonych architektur.

Obsługiwane operacje są widoczne w pliku micro_mutable_ops_resolver.h