Mikro denetleyicilerde sınırlı RAM ve depolama alanı bulunur. Bu durum, makine öğrenimi modellerinin boyutlarını kısıtlar. Ayrıca, Microcontroller'lar için LiteRT şu anda sınırlı bir işlem alt kümesini desteklediğinden tüm model mimarileri mümkün değildir.
Bu belgede, bir TensorFlow modelinin mikro denetleyicilerde çalışacak şekilde dönüştürülme süreci açıklanmaktadır. Ayrıca, desteklenen işlemleri özetler ve sınırlı belleğe sığacak bir model tasarlama ve eğitme konusunda bazı bilgiler verir.
Model oluşturma ve dönüştürme ile ilgili uçtan uca çalıştırılabilir bir örnek için Hello World örneğine bakın.
Model dönüştürme
Eğitilmiş bir TensorFlow modelini mikro denetleyicilerde çalışacak şekilde dönüştürmek için LiteRT dönüştürücü Python API'sini kullanmanız gerekir. Bu işlem, modeli FlatBuffer biçimine dönüştürerek model boyutunu küçültür ve LiteRT işlemlerini kullanacak şekilde değiştirir.
Mümkün olan en küçük model boyutunu elde etmek için eğitim sonrası nicelendirmeyi kullanmayı düşünebilirsiniz.
C dizisine dönüştürme
Birçok mikro denetleyici platformunda yerel dosya sistemi desteği yoktur. Programınızdaki bir modeli kullanmanın en kolay yolu, modeli C dizisi olarak eklemek ve programınıza derlemektir.
Aşağıdaki Unix komutu, LiteRT modelini char dizisi olarak içeren bir C kaynak dosyası oluşturur:
xxd -i converted_model.tflite > model_data.cc
Çıkış şu şekilde görünür:
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;
Dosyayı oluşturduktan sonra programınıza ekleyebilirsiniz. Yerleştirilmiş platformlarda daha iyi bellek verimliliği için dizi bildirimini const olarak değiştirmeniz önemlidir.
Programınıza nasıl model ekleyeceğiniz ve modeli nasıl kullanacağınızla ilgili bir örnek için Hello World örneğindeki
hello_world_test.cc bölümüne bakın.
Model mimarisi ve eğitimi
Mikro denetleyicilerde kullanılacak bir model tasarlarken modelin boyutu, iş yükü ve kullanılan işlemler dikkate alınmalıdır.
Model boyutu
Bir model, hem ikili olarak hem de çalışma zamanında programınızın geri kalanıyla birlikte hedef cihazınızın belleğine sığacak kadar küçük olmalıdır.
Daha küçük bir model oluşturmak için mimarinizde daha az ve daha küçük katmanlar kullanabilirsiniz. Ancak küçük modellerin eksik uyumdan etkilenme olasılığı daha yüksektir. Bu nedenle, birçok sorun için belleğe sığacak en büyük modeli kullanmayı denemek mantıklıdır. Ancak daha büyük modellerin kullanılması işlemci iş yükünün de artmasına neden olur.
İş yükü
Modelin boyutu ve karmaşıklığı iş yükünü etkiler. Büyük ve karmaşık modeller daha yüksek bir görev döngüsüne neden olabilir. Bu da cihazınızın işlemcisinin daha fazla zamanı çalışarak ve daha az zamanı boşta geçirerek harcadığı anlamına gelir. Bu durum, güç tüketimini ve ısı çıkışını artırır. Bu da uygulamanıza bağlı olarak sorun yaratabilir.
İşlem desteği
Mikro denetleyiciler için LiteRT, şu anda TensorFlow işlemlerinin sınırlı bir alt kümesini desteklemektedir. Bu durum, çalıştırılabilecek model mimarilerini etkiler. Hem referans uygulamaları hem de belirli mimariler için optimizasyonlar açısından işlem desteğini genişletmek için çalışıyoruz.
Desteklenen işlemler dosyada görülebilir.
micro_mutable_ops_resolver.h