Tworzenie i konwertowanie modeli

Mikrokontrolery mają ograniczoną ilość pamięci RAM i pamięci, co powoduje ograniczenie modeli systemów uczących się. Ponadto LiteRT dla Mikrokontrolery obsługują obecnie ograniczony podzbiór działań, i modelowania architektur.

Ten dokument wyjaśnia proces konwertowania modelu TensorFlow, który ma zostać uruchomiony przy użyciu mikrokontrolerów. Opisuje on również obsługiwane operacje i udostępnia wskazówki dotyczące projektowania i trenowania modelu, który mieści się w ograniczonej pamięci.

Pełny, sprawny przykład tworzenia i konwertowania modelu znajdziesz w Witaj świecie przykład.

Konwersja modelu

Aby przekonwertować wytrenowany model TensorFlow, tak aby działał na mikrokontrolerach, użyj Interfejs API konwertera LiteRT w języku Python Spowoduje to przekonwertowanie modelu na FlatBuffer, zmniejszając rozmiar modelu, i zmodyfikować ją tak, aby używała operacji LiteRT.

Aby uzyskać jak najmniejszy rozmiar modelu, użyj funkcji kwantyzacji po szkoleniu.

Konwertuj na tablicę C

Wiele platform z mikrokontrolerami nie ma natywnego systemu plików. Najłatwiejszym sposobem użycia modelu z programu jest dodanie go do tablicy C połączyć w swój program.

Poniższe polecenie systemu unix wygeneruje plik źródłowy C zawierający Model LiteRT jako tablica 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;

Po wygenerowaniu pliku możesz go dodać do swojego programu. Jest ważne jest, aby zmienić deklarację tablicy na const, aby lepiej wykorzystywać pamięć na osadzonych platformach.

Przykład uwzględnienia i używania modelu w programie znajdziesz tutaj: hello_world_test.cc w przykładzie Hello World.

Architektura i trenowanie modelu

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

Rozmiar modelu

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

Aby utworzyć mniejszy model, możesz użyć mniejszej liczby warstw i architekturą. Jednak w przypadku małych modeli częściej występuje niedopasowanie. Oznacza to, że w przypadku wielu problemów dobrze jest użyć największego modelu, które zapadnie w pamięć. Jednak korzystanie z większych modeli powoduje też zwiększone obciążenie procesora.

Zadanie

Rozmiar i złożoność modelu mają wpływ na zbiór zadań. Duży, skomplikowany może skutkować wyższym współczynnikiem wypełnienia, co oznacza, że procesor Twojego urządzenia poświęca więcej czasu na pracę, a mniej na brak aktywności. Zwiększy to moc i ogrzewania, co może być problemem w zależności od aplikacji.

Pomoc dotycząca operacji

LiteRT dla mikrokontrolerów obsługuje obecnie ograniczony podzbiór Operacje TensorFlow, które wpływają na architektury modelu, w których to możliwe do uruchomienia. Pracujemy nad rozszerzeniem ich obsługi, zarówno w zakresie wdrożenia i optymalizacje dla poszczególnych architektur.

Obsługiwane operacje będą widoczne w pliku micro_mutable_ops_resolver.h