Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Equipment >> Robot industri

Cara Menerapkan Pengenalan Digit dengan TensorFlow Lite menggunakan i.MX RT1060 Crossover MCU

Artikel ini membahas deteksi dan pengenalan digit menggunakan MNIST eIQ sebagai contoh, yang terdiri dari beberapa bagian — pengenalan digit dilakukan oleh model TensorFlow Lite , dan GUI digunakan untuk meningkatkan kegunaan perangkat i.MX RT1060.

Crossover MCU i.MX RT1060 sama-sama cocok untuk aplikasi industri hemat biaya dan produk konsumen berperforma tinggi dan intensif data yang memerlukan fungsionalitas tampilan. Artikel ini menunjukkan kemampuan MCU berbasis Arm® Cortex®-M7 ini dengan menjelaskan cara menerapkan aplikasi pembelajaran mesin tersemat yang dapat mendeteksi dan mengklasifikasikan input tulisan tangan pengguna.

Untuk tujuan itu, artikel ini berfokus pada contoh MNIST eIQ yang populer, yang terdiri dari beberapa bagian — pengenalan digit dilakukan oleh model TensorFlow Lite, dan GUI digunakan untuk meningkatkan kegunaan perangkat i.MX RT1060.

Lihat Kumpulan Data dan Model MNIST

Kumpulan data yang digunakan di seluruh artikel ini terdiri dari 60.000 pelatihan dan 10.000 contoh pengujian gambar skala abu-abu terpusat dari angka tulisan tangan. Setiap sampel memiliki resolusi 28x28 piksel:

Gambar 1. Contoh kumpulan data MNIST

Sampel dikumpulkan dari siswa sekolah menengah dan karyawan Biro Sensus di AS. Oleh karena itu, kumpulan data sebagian besar berisi contoh angka seperti yang ditulis di Amerika Utara. Untuk nomor gaya Eropa, misalnya, dataset yang berbeda harus digunakan. Jaringan saraf convolutional biasanya memberikan hasil terbaik saat digunakan dengan kumpulan data ini, dan bahkan jaringan sederhana pun dapat mencapai akurasi tinggi. Oleh karena itu, TensorFlow Lite adalah opsi yang cocok untuk tugas ini.

Implementasi model MNIST yang dipilih untuk artikel ini tersedia di GitHub sebagai salah satu model TensorFlow resmi, dan ditulis dengan Python. Script menggunakan library Keras dan tf.data, tf.estimator.Estimator, dan tf.layers API, dan membangun jaringan saraf convolutional yang dapat mencapai akurasi tinggi pada sampel pengujian:

Gambar 2. Visualisasi model yang digunakan.

Definisi model yang sesuai ditunjukkan di bawah ini pada Gambar 3.

Gambar 3. Definisi model yang sesuai dengan visualisasi model.

Apa itu TensorFlow Lite dan Bagaimana Penggunaannya dalam Contoh ini?

TensorFlow adalah framework deep learning terkenal yang banyak digunakan dalam produksi oleh perusahaan besar. Ini adalah perpustakaan pembelajaran mendalam lintas platform sumber terbuka yang dikembangkan dan dikelola oleh Google. API Python tingkat rendah, yang berguna untuk pengembang berpengalaman dan perpustakaan tingkat tinggi seperti yang digunakan dalam kasus ini, tersedia. Selain itu, TensorFlow didukung oleh komunitas besar dan dokumentasi online yang sangat baik, sumber belajar, panduan, dan contoh dari Google.

Untuk memberi mesin yang dibatasi secara komputasi seperti perangkat seluler dan solusi tersemat kemampuan untuk menjalankan aplikasi TensorFlow, Google mengembangkan kerangka kerja TensorFlow Lite, yang tidak mendukung rangkaian lengkap operasi kerangka kerja TensorFlow. Ini memungkinkan perangkat tersebut menjalankan inferensi pada model TensorFlow yang telah dilatih sebelumnya yang dikonversi ke TensorFlow Lite. Sebagai imbalannya, model yang dikonversi ini tidak dapat dilatih lebih jauh tetapi dapat dioptimalkan melalui teknik seperti kuantisasi dan pemangkasan.

Mengonversi Model ke TensorFlow Lite

Model TensorFlow terlatih yang dibahas di atas harus dikonversi ke TensorFlow Lite sebelum dapat digunakan pada MCU i.MX RT1060. Untuk tujuan itu, ia dikonversi menggunakan tflite_convert, dan, untuk alasan kompatibilitas, versi 1.13.2 dari TensorFlow digunakan untuk melatih dan mengonversi model:

tflite_convert

--saved_model_dir=

--output_file=converted_model.tflite

--input_shape=1,28,28

--input_array=Placeholder

--output_array=Softmax

--inference_type=FLOAT

--input_data_type=FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

Terakhir, utilitas xdd digunakan untuk mengonversi model TensorFlow Lite menjadi array biner untuk dimuat oleh aplikasi:

xxd -i convert_model.tflite> convert_model.h

xdd adalah utilitas hex dump yang dapat digunakan untuk mengonversi bentuk biner dari file ke representasi hex dump yang sesuai dan sebaliknya. Dalam hal ini, file biner TensorFlow Lite diubah menjadi file header C/C++ yang dapat ditambahkan ke proyek eIQ. Proses konversi dan utilitas tflite_convert dijelaskan dalam panduan pengguna eIQ secara lebih rinci. Utilitas ini juga dijelaskan dalam dokumentasi resmi Google.

Pengantar Cepat ke Studio Penyihir Tertanam

Untuk memanfaatkan kemampuan grafis MIMXRT1060-EVK, GUI disertakan dalam proyek ini. Untuk tujuan itu, Embedded Wizard Studio, sebuah IDE untuk mengembangkan GUI untuk aplikasi yang akan berjalan pada perangkat yang disematkan, digunakan. Meskipun versi evaluasi gratis dari IDE tersedia, versi ini membatasi kompleksitas maksimum antarmuka pengguna grafis, dan juga menambahkan tanda air di atas GUI.

Salah satu keunggulan Embedded Wizard Studio adalah kemampuannya untuk menghasilkan proyek MCUXpresso dan IAR berdasarkan SDK XNP, artinya setelah membuat antarmuka pengguna di IDE, pengembang dapat langsung mengujinya di perangkat mereka.

IDE menawarkan objek dan alat seperti tombol, area sensitif sentuhan, bentuk, dan banyak lagi, yang ditempatkan di kanvas. Properti mereka kemudian diatur agar sesuai dengan kebutuhan dan harapan pengembang. Semua ini bekerja dengan cara yang intuitif dan ramah pengguna, dan sebagian besar mempercepat proses pengembangan GUI.

Namun, beberapa langkah konversi harus menggabungkan proyek GUI dengan proyek aplikasi eIQ yang ada, karena proyek GUI yang dihasilkan dalam C dan contoh qIQ dalam C/C++. Oleh karena itu, beberapa file header harus memiliki konten yang dikelilingi oleh:

#ifdef __cplusplus

ekstern "C" {

#endif

/* kode C */

#ifdef __cplusplus

}

#endif

Selain itu, sebagian besar file sumber dan header dipindahkan ke folder baru di folder middleware SDK, dan jalur penyertaan baru ditambahkan untuk mencerminkan perubahan ini. Terakhir, beberapa file konfigurasi khusus perangkat dibandingkan dan digabungkan dengan benar.

Aplikasi Selesai dan Fiturnya

GUI aplikasi ditampilkan pada LCD yang peka terhadap sentuhan. Ini berisi area input untuk menulis digit dan yang menampilkan hasil klasifikasi. Tombol run inference mengeksekusi inferensi, dan tombol clear mengosongkan bidang input dan output. Aplikasi mengeluarkan hasil dan keyakinan prediksi ke keluaran standar.

Gambar 4. GUI dari aplikasi contoh berisi bidang masukan, bidang keluaran, dan dua tombol. Hasil dan keyakinan juga dicetak ke output standar.

Akurasi Model TensorFlow Lite

Seperti disebutkan di atas, model dapat mencapai akurasi tinggi pada data pelatihan dan pengujian saat mengklasifikasikan nomor tulisan tangan gaya AS. Namun, tidak demikian halnya ketika digunakan dalam aplikasi ini, terutama karena angka yang ditulis pada LCD dengan jari tidak pernah sama dengan angka yang ditulis di kertas dengan pena. Ini menyoroti pentingnya melatih model produksi pada data produksi nyata.

Untuk hasil yang lebih baik, kumpulan data baru harus dikumpulkan. Selain itu, sarananya harus sama. Dalam hal ini, sampel harus dikumpulkan menggunakan input layar sentuh untuk menggambar angka. Ada teknik lebih lanjut untuk meningkatkan akurasi prediksi. Situs web Komunitas NXP berisi panduan penggunaan teknik pembelajaran transfer.

Detail Implementasi

Wizard Tertanam menggunakan slot sebagai pemicu untuk bereaksi terhadap interaksi GUI, misalnya, saat pengguna menyeret jari mereka ke area input. Dalam hal ini, slot terus-menerus menggambar garis lebar piksel di bawah jari. Warna garis itu ditentukan oleh konstanta warna utama.

Slot tombol clear mengatur warna setiap piksel di kedua bidang ke warna latar belakang, dan tombol run inference menyimpan referensi ke area input, bitmap yang mendasari, serta lebar dan tinggi area, lalu meneruskannya ke native program C yang memprosesnya.

Karena bitmap dari model pembelajaran mesin hanya berukuran 28x28 piksel, dan area input dibuat sebagai persegi 112x112 untuk membuat penggunaan aplikasi lebih nyaman, prapemrosesan tambahan diperlukan saat menurunkan skala gambar. Jika tidak, proses itu akan terlalu mendistorsi gambar.

Pertama, array bilangan bulat 8-bit dengan dimensi area input dibuat dan diisi dengan nol. Kemudian, gambar dan larik diulang, dan setiap piksel yang digambar dalam gambar disimpan sebagai 0xFF dalam larik. Saat memproses input, piksel warna utama dianggap putih, dan yang lainnya hitam. Selain itu, setiap piksel diperluas menjadi bujur sangkar 3x3 untuk menebalkan garis, yang akan membuat penskalaan gambar jauh lebih aman. Sebelum menskalakan gambar ke resolusi 28x28 yang diperlukan, gambar dipangkas dan dipusatkan agar menyerupai gambar MNIST:

Gambar 5. Visualisasi larik yang berisi data masukan yang telah diproses sebelumnya.

Model pembelajaran mesin dialokasikan, dimuat, dan disiapkan saat aplikasi dimulai. Dengan setiap permintaan inferensi, tensor input model dimuat dengan input prapemrosesan dan diteruskan ke model. Input harus disalin ke piksel tensor demi piksel, dan nilai integer harus dikonversi ke nilai floating-point dalam proses. Catatan aplikasi NXP ini berisi jejak memori rinci dari kode.

TensorFlow Lite:Solusi yang Layak

Pengenalan digit tulisan tangan menggunakan pembelajaran mesin dapat menimbulkan masalah untuk sistem tertanam, dan TensorFlow Lite menawarkan solusi yang layak. Dengan solusi ini, kasus penggunaan yang lebih kompleks, seperti bidang input pin pada kunci digital, dapat diimplementasikan. Seperti yang dibahas dalam artikel ini, melatih model produksi pada data produksi nyata sangat penting. Data pelatihan yang digunakan dalam artikel ini terdiri dari angka-angka yang ditulis dengan pena di selembar kertas. Ini, pada gilirannya, mengurangi akurasi model secara keseluruhan saat digunakan untuk mendeteksi angka yang digambar pada layar sentuh. Selain itu, perbedaan regional harus dipertimbangkan.

Seri MCU crossover i.MX RT dapat diimplementasikan ke dalam berbagai aplikasi yang disematkan, seperti contoh yang diberikan dalam artikel ini. NXP memiliki banyak informasi tentang seri MCU crossover i.MX RT yang dapat membantu menjembatani kesenjangan antara kinerja dan kegunaan.

Untuk informasi lebih lanjut tentang i.MX RT Crossover MCU, kunjungi halaman produk i.MX RT.

Artikel Industri adalah bentuk konten yang memungkinkan mitra industri untuk berbagi berita, pesan, dan teknologi yang bermanfaat dengan pembaca All About Circuits dengan cara yang tidak sesuai dengan konten editorial. Semua Artikel Industri tunduk pada pedoman editorial yang ketat dengan tujuan menawarkan kepada pembaca berita, keahlian teknis, atau cerita yang bermanfaat. Sudut pandang dan pendapat yang diungkapkan dalam Artikel Industri adalah milik mitra dan belum tentu milik All About Circuits atau penulisnya.


Robot industri

  1. Cara Mengurangi Limbah Dengan Robot Otonom
  2. Pengenalan Digit AI dengan PiCamera
  3. Mengoptimalkan Manajemen Daya dengan MCU Crossover i.MX RT500 NXP
  4. Memahami Pengaktifan DSP Menggunakan MCU Crossover i.MX RT500 NXP
  5. Cara Membuat Autoencoder Variasi dengan TensorFlow
  6. Menggunakan Resin Epoksi dengan Karya Seni
  7. Merawat Mesin CNC? Inilah Cara Melakukannya Dengan Cobot
  8. Bagaimana Memulai Pemrograman Robot Yaskawa
  9. Bagaimana Memulai RoboDK untuk Raspberry Pi
  10. Cara memanggil Blok Fungsi dari Klien OPC UA menggunakan Model Informasi