Bangun dan konversi model

Mikrokontroler memiliki RAM dan penyimpanan yang terbatas, yang membatasi ukuran model pembelajaran mesin. Selain itu, TensorFlow Lite untuk Mikrokontroler saat ini mendukung subset operasi yang terbatas, sehingga tidak semua arsitektur model dimungkinkan.

Dokumen ini menjelaskan proses mengonversi model TensorFlow untuk berjalan di mikrokontroler. Ini juga menguraikan operasi yang didukung dan memberikan beberapa panduan untuk merancang dan melatih model agar sesuai dengan memori yang terbatas.

Untuk contoh build dan konversi model end-to-end yang dapat dijalankan, lihat Colab berikut yang merupakan bagian dari contoh Hello World :

train_hello_world_model.ipynb

Konversi model

Untuk mengonversi model TensorFlow terlatih agar berjalan di mikrokontroler, Anda harus menggunakan API Python konverter TensorFlow Lite . Ini akan mengonversi model menjadi FlatBuffer , mengurangi ukuran model, dan memodifikasinya untuk menggunakan operasi TensorFlow Lite.

Untuk mendapatkan ukuran model sekecil mungkin, Anda harus mempertimbangkan untuk menggunakan kuantisasi pasca-pelatihan .

Konversikan ke array C

Banyak platform mikrokontroler tidak memiliki dukungan sistem file asli. Cara termudah untuk menggunakan model dari program Anda adalah memasukkannya sebagai larik C dan mengompilasinya ke dalam program Anda.

Perintah unix berikut akan menghasilkan file sumber C yang berisi model TensorFlow Lite sebagai larik char :

xxd -i converted_model.tflite > model_data.cc

Outputnya akan terlihat seperti berikut ini:

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;

Setelah Anda membuat file, Anda dapat memasukkannya ke dalam program Anda. Penting untuk mengubah deklarasi array menjadi const untuk efisiensi memori yang lebih baik pada platform tersemat.

Untuk contoh cara menyertakan dan menggunakan model dalam program Anda, lihat evaluate_test.cc dalam contoh Hello World .

Model arsitektur dan pelatihan

Saat merancang model untuk digunakan pada mikrokontroler, penting untuk mempertimbangkan ukuran model, beban kerja, dan operasi yang digunakan.

Ukuran model

Model harus cukup kecil agar sesuai dengan memori perangkat target Anda bersama program Anda lainnya, baik sebagai biner maupun saat runtime.

Untuk membuat model yang lebih kecil, Anda dapat menggunakan lapisan yang lebih sedikit dan lebih kecil dalam arsitektur Anda. Namun, model kecil lebih cenderung mengalami underfitting. Ini berarti untuk banyak masalah, masuk akal untuk mencoba dan menggunakan model terbesar yang sesuai dengan memori. Namun, menggunakan model yang lebih besar juga akan meningkatkan beban kerja prosesor.

Beban kerja

Ukuran dan kompleksitas model berdampak pada beban kerja. Model yang besar dan kompleks dapat menghasilkan siklus tugas yang lebih tinggi, yang berarti prosesor perangkat Anda menghabiskan lebih banyak waktu untuk bekerja dan lebih sedikit waktu menganggur. Ini akan meningkatkan konsumsi daya dan keluaran panas, yang mungkin menjadi masalah tergantung pada aplikasi Anda.

Dukungan operasi

TensorFlow Lite untuk Mikrokontroler saat ini mendukung subset terbatas dari operasi TensorFlow, yang memengaruhi arsitektur model yang dapat dijalankan. Kami sedang bekerja untuk memperluas dukungan operasi, baik dalam hal penerapan referensi dan pengoptimalan untuk arsitektur tertentu.

Operasi yang didukung dapat dilihat di file micro_mutable_ops_resolver.h