Bangun dan konversi model

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

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

Untuk contoh pembuatan dan konversi model end-to-end yang dapat dijalankan, lihat contoh Hello World .

Konversi model

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

Untuk mendapatkan ukuran model sekecil mungkin, Anda harus mempertimbangkan penggunaan 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 dengan memasukkannya sebagai array C dan mengkompilasinya 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

Outputnya 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 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 tertanam.

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

Arsitektur model dan pelatihan

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

Ukuran model

Sebuah model harus cukup kecil agar dapat masuk ke dalam memori perangkat target Anda bersama dengan seluruh program Anda, baik sebagai biner maupun pada saat runtime.

Untuk membuat model yang lebih kecil, Anda dapat menggunakan lapisan yang semakin sedikit dalam arsitektur Anda. Namun, model berukuran kecil lebih cenderung mengalami underfitting. Artinya, 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 mungkin menghasilkan siklus kerja yang lebih tinggi, yang berarti prosesor perangkat Anda menghabiskan lebih banyak waktu untuk bekerja dan lebih sedikit waktu menganggur. Hal 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 operasi TensorFlow yang terbatas, sehingga memengaruhi arsitektur model yang dapat dijalankan. Kami sedang berupaya memperluas dukungan operasi, baik dalam hal implementasi referensi dan optimalisasi untuk arsitektur tertentu.

Operasi yang didukung dapat dilihat di file micro_mutable_ops_resolver.h

,

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

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

Untuk contoh pembuatan dan konversi model end-to-end yang dapat dijalankan, lihat contoh Hello World .

Konversi model

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

Untuk mendapatkan ukuran model sekecil mungkin, Anda harus mempertimbangkan penggunaan 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 dengan memasukkannya sebagai array C dan mengkompilasinya 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

Outputnya 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 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 tertanam.

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

Arsitektur model dan pelatihan

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

Ukuran model

Sebuah model harus cukup kecil agar dapat masuk ke dalam memori perangkat target Anda bersama dengan seluruh program Anda, baik sebagai biner maupun pada saat runtime.

Untuk membuat model yang lebih kecil, Anda dapat menggunakan lapisan yang semakin sedikit dalam arsitektur Anda. Namun, model berukuran kecil lebih cenderung mengalami underfitting. Artinya, 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 mungkin menghasilkan siklus kerja yang lebih tinggi, yang berarti prosesor perangkat Anda menghabiskan lebih banyak waktu untuk bekerja dan lebih sedikit waktu menganggur. Hal 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 operasi TensorFlow yang terbatas, sehingga memengaruhi arsitektur model yang dapat dijalankan. Kami sedang berupaya memperluas dukungan operasi, baik dalam hal implementasi referensi dan optimalisasi untuk arsitektur tertentu.

Operasi yang didukung dapat dilihat di file micro_mutable_ops_resolver.h