Membangun dan mengonversi model

Mikrokontroler memiliki RAM dan penyimpanan yang terbatas, sehingga membatasi ukuran model machine learning. Selain itu, TensorFlow Lite untuk Microcontroller saat ini mendukung subset operasi terbatas, sehingga tidak semua arsitektur model dapat digunakan.

Dokumen ini menjelaskan proses konversi model TensorFlow untuk berjalan di pengontrol mikro. Contoh ini juga menguraikan operasi yang didukung dan memberikan beberapa panduan untuk mendesain dan melatih model agar sesuai dengan memori terbatas.

Untuk mengetahui contoh menyeluruh dan dapat dijalankan terkait cara membangun dan mengonversi model, lihat contoh Halo Dunia.

Konversi model

Untuk mengonversi model TensorFlow terlatih untuk berjalan pada mikrokontroler, Anda harus menggunakan API Python konverter TensorFlow Lite. Tindakan ini akan mengonversi model menjadi FlatBuffer, mengurangi ukuran model, dan mengubahnya untuk menggunakan operasi TensorFlow Lite.

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

Mengonversi ke array C

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

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

xxd -i converted_model.tflite > model_data.cc

Output-nya akan terlihat seperti berikut:

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 membuat file, Anda dapat memasukkannya ke dalam program. Anda harus mengubah deklarasi array menjadi const untuk efisiensi memori yang lebih baik di platform tersemat.

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

Arsitektur dan pelatihan model

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

Ukuran model

Model harus cukup kecil agar muat di dalam memori perangkat target bersama dengan sisa program lainnya, baik sebagai biner maupun saat runtime.

Untuk membuat model yang lebih kecil, Anda dapat menggunakan lapisan yang lebih sedikit dan lebih kecil pada arsitektur Anda. Namun, model kecil cenderung mengalami underfitting. Ini berarti, untuk banyak masalah, sebaiknya coba dan gunakan model terbesar yang sesuai dengan memori. Namun, penggunaan model yang lebih besar juga akan menyebabkan peningkatan beban kerja pemroses.

Workload

Ukuran dan kompleksitas model berdampak pada beban kerja. Model besar dan kompleks dapat menghasilkan siklus tugas yang lebih tinggi, yang berarti prosesor perangkat menghabiskan lebih banyak waktu untuk bekerja dan lebih sedikit waktu tidak ada aktivitas. Tindakan ini akan meningkatkan konsumsi daya dan output panas, yang mungkin menjadi masalah, bergantung pada aplikasi Anda.

Dukungan operasi

TensorFlow Lite untuk Mikrokontroler saat ini mendukung subset terbatas dari operasi TensorFlow, yang memengaruhi arsitektur model yang mungkin untuk dijalankan. Kami berupaya memperluas dukungan operasi, baik dalam hal implementasi referensi maupun pengoptimalan untuk arsitektur tertentu.

Operasi yang didukung dapat dilihat dalam file micro_mutable_ops_resolver.h