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