Buduj i konwertuj modele

Mikrokontrolery mają ograniczoną pamięć RAM i pamięć, co nakłada ograniczenia na rozmiary modeli uczenia maszynowego. Ponadto TensorFlow Lite dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór operacji, więc nie wszystkie architektury modeli są możliwe.

W tym dokumencie wyjaśniono proces konwertowania modelu TensorFlow do działania na mikrokontrolerach. Opisano w nim także obsługiwane operacje i podano wskazówki dotyczące projektowania i uczenia modelu tak, aby zmieścił się w ograniczonej pamięci.

Aby zapoznać się z kompleksowym, możliwym do uruchomienia przykładem budowania i konwertowania modelu, zobacz przykład Hello World .

Konwersja modelu

Aby przekonwertować wyszkolony model TensorFlow do działania na mikrokontrolerach, należy użyć interfejsu API Pythona konwertera TensorFlow Lite . Spowoduje to przekształcenie modelu w FlatBuffer , zmniejszenie rozmiaru modelu i zmodyfikowanie go w celu korzystania z operacji TensorFlow Lite.

Aby uzyskać możliwie najmniejszy rozmiar modelu, należy rozważyć zastosowanie kwantyzacji potreningowej .

Konwertuj na tablicę C

Wiele platform mikrokontrolerów nie obsługuje natywnego systemu plików. Najłatwiejszym sposobem wykorzystania modelu z programu jest włączenie go jako tablicy C i skompilowanie go w programie.

Następujące polecenie systemu UNIX wygeneruje plik źródłowy C zawierający model TensorFlow Lite jako tablicę char :

xxd -i converted_model.tflite > model_data.cc

Dane wyjściowe będą wyglądać podobnie do poniższych:

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;

Po wygenerowaniu pliku możesz włączyć go do swojego programu. Ważne jest, aby zmienić deklarację tablicy na const , aby uzyskać lepszą wydajność pamięci na platformach wbudowanych.

Przykład włączania i używania modelu w programie można znaleźć w hello_world_test.cc w przykładzie Hello World .

Architektura modelu i szkolenie

Projektując model do użytku na mikrokontrolerach, ważne jest, aby wziąć pod uwagę rozmiar modelu, obciążenie i wykonywane operacje.

Rozmiar modelu

Model musi być na tyle mały, aby zmieścił się w pamięci urządzenia docelowego wraz z resztą programu, zarówno w postaci binarnej, jak i w czasie wykonywania.

Aby utworzyć mniejszy model, możesz używać w swojej architekturze coraz mniejszej liczby warstw. Jednak małe modele są bardziej narażone na niedopasowanie. Oznacza to, że w przypadku wielu problemów sensowne jest wypróbowanie największego modelu, który zmieści się w pamięci. Jednak używanie większych modeli będzie również prowadzić do zwiększonego obciążenia procesora.

Obciążenie pracą

Rozmiar i złożoność modelu ma wpływ na obciążenie pracą. Duże, złożone modele mogą skutkować wyższym cyklem pracy, co oznacza, że ​​procesor Twojego urządzenia spędza więcej czasu na pracy, a mniej na bezczynności. Zwiększy to zużycie energii i emisję ciepła, co może stanowić problem w zależności od zastosowania.

Wsparcie operacyjne

TensorFlow Lite dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór operacji TensorFlow, co ma wpływ na architektury modeli, które można uruchomić. Pracujemy nad rozszerzeniem wsparcia operacyjnego, zarówno pod kątem wdrożeń referencyjnych, jak i optymalizacji pod konkretne architektury.

Obsługiwane operacje można zobaczyć w pliku micro_mutable_ops_resolver.h

,

Mikrokontrolery mają ograniczoną pamięć RAM i pamięć, co nakłada ograniczenia na rozmiary modeli uczenia maszynowego. Ponadto TensorFlow Lite dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór operacji, więc nie wszystkie architektury modeli są możliwe.

W tym dokumencie wyjaśniono proces konwertowania modelu TensorFlow do działania na mikrokontrolerach. Opisano w nim także obsługiwane operacje i podano wskazówki dotyczące projektowania i uczenia modelu tak, aby zmieścił się w ograniczonej pamięci.

Aby zapoznać się z kompleksowym, możliwym do uruchomienia przykładem budowania i konwertowania modelu, zobacz przykład Hello World .

Konwersja modelu

Aby przekonwertować wytrenowany model TensorFlow do działania na mikrokontrolerach, należy użyć interfejsu API Pythona konwertera TensorFlow Lite . Spowoduje to przekształcenie modelu w FlatBuffer , zmniejszenie rozmiaru modelu i zmodyfikowanie go w celu korzystania z operacji TensorFlow Lite.

Aby uzyskać możliwie najmniejszy rozmiar modelu, należy rozważyć zastosowanie kwantyzacji potreningowej .

Konwertuj na tablicę C

Wiele platform mikrokontrolerów nie obsługuje natywnego systemu plików. Najłatwiejszym sposobem wykorzystania modelu z programu jest włączenie go jako tablicy C i skompilowanie go w programie.

Następujące polecenie systemu UNIX wygeneruje plik źródłowy C zawierający model TensorFlow Lite jako tablicę char :

xxd -i converted_model.tflite > model_data.cc

Dane wyjściowe będą wyglądać podobnie do poniższych:

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;

Po wygenerowaniu pliku możesz włączyć go do swojego programu. Ważne jest, aby zmienić deklarację tablicy na const , aby uzyskać lepszą wydajność pamięci na platformach wbudowanych.

Przykład włączania i używania modelu w programie można znaleźć w hello_world_test.cc w przykładzie Hello World .

Architektura modelu i szkolenie

Projektując model do użytku na mikrokontrolerach, ważne jest, aby wziąć pod uwagę rozmiar modelu, obciążenie i wykonywane operacje.

Rozmiar modelu

Model musi być na tyle mały, aby zmieścił się w pamięci urządzenia docelowego wraz z resztą programu, zarówno w postaci binarnej, jak i w czasie wykonywania.

Aby utworzyć mniejszy model, możesz używać w swojej architekturze coraz mniejszej liczby warstw. Jednak małe modele są bardziej narażone na niedopasowanie. Oznacza to, że w przypadku wielu problemów sensowne jest wypróbowanie największego modelu, który zmieści się w pamięci. Jednak używanie większych modeli będzie również prowadzić do zwiększonego obciążenia procesora.

Obciążenie pracą

Rozmiar i złożoność modelu ma wpływ na obciążenie pracą. Duże, złożone modele mogą skutkować wyższym cyklem pracy, co oznacza, że ​​procesor Twojego urządzenia spędza więcej czasu na pracy, a mniej na bezczynności. Zwiększy to zużycie energii i emisję ciepła, co może stanowić problem w zależności od zastosowania.

Wsparcie operacyjne

TensorFlow Lite dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór operacji TensorFlow, co ma wpływ na architektury modeli, które można uruchomić. Pracujemy nad rozszerzeniem wsparcia operacyjnego, zarówno pod kątem wdrożeń referencyjnych, jak i optymalizacji pod konkretne architektury.

Obsługiwane operacje można zobaczyć w pliku micro_mutable_ops_resolver.h