7.16. Kesimpulan¶
Bab ini membahas bagian-bagian dari ml yang digunakan aplikasi OpenMV ketika langkah inferensi menjadi bagian dari pipeline:
Konsep -- apa itu jaringan saraf dalam istilah aritmatika (tumpukan operator yang dapat dilatih yang memetakan tensor ke tensor), apa yang diubah oleh pembelajaran mesin dibandingkan pemrosesan citra klasik (algoritma ringkasan yang ditulis manusia dihilangkan, digantikan oleh bobot yang dipelajari dari data berlabel), dan demo hello yang menjalankan detektor wajah dalam beberapa baris Python.
Modul ml -- objek
ml.Modelbeserta propertinya untuk memeriksa tensor input dan output, jalur file model yang diterimanya, dan di mana file-file tersebut berada: partisi ROMFS yang hanya-baca untuk eksekusi langsung dari flash, atau sistem file MicroPython lainnya ketika model dapat disalin ke RAM saat waktu pemuatan.Pipeline inferensi -- tiga tahap yang dijalankan
predict()secara berurutan (pra-proses, dispatch engine, pasca-proses), handleNormalizationpada tahap pertama, handle pasca-prosesor pada tahap ketiga, dan aritmatika kuantisasi yang menghubungkan tensor integer yang dijalankan kamera kembali ke angka bernilai nyata yang digunakan jaringan saat pelatihan.Engine inferensi -- TFLM (interpreter operator yang dijalankan sebagian besar kamera), CMSIS-NN (pustaka kernel SIMD di bawahnya pada Cortex-M), dan NPU (Arm's Ethos-U55 pada AE3 yang dipasangkan dengan kompiler offline Vela, ST's Neural-ART pada N6 yang dipasangkan dengan STAI dan STEdgeAI). Engine ditentukan oleh kamera; skrip tidak memilihnya.
Mendekode output -- pasca-prosesor yang mengubah tensor output mentah menjadi kotak, titik kunci, atau daftar per kelas, kelas
NMSyang menggabungkan kandidat yang tumpang tindih, panduan YOLOv8 yang menunjukkan cara menjaga dekode tetap cepat dengan melakukan thresholding sebelum dequantisasi, dan protokol untuk menulis decoder khusus ketika katalog tidak mencakup suatu model.
7.16.1. Yang kini dapat dilakukan¶
Tiga hal yang dipersiapkan oleh bab ini:
Memuat model yang telah dilatih dan menjalankannya. Segala sesuatu di
/rom/berfungsi tanpa persiapan lebih lanjut; segala sesuatu yang disediakan secara eksternal sebagai.tfliteyang kompatibel berfungsi setelah alat offline untuk kamera target (Vela untuk AE3, STEdgeAI untuk N6) telah menghasilkan tata letak yang tepat.Mendekode tensor output apa pun. Ketika arsitektur ada dalam katalog, pasca-prosesor yang tepat bersifat mekanis:
YoloV8untuk model YOLOv8,BlazeFaceuntuk BlazeFace, dan seterusnya. Ketika tidak ada, protokol writing-your-own mencakup kontraknya dan panduan YOLOv8 adalah referensi terbersih untuk disalin.Mempertimbangkan kinerja. Model yang berjalan pada 30 FPS di NPU mungkin berjalan pada 3 FPS di Cortex-M7; rasionya tergantung pada seberapa banyak jaringan yang dapat dipindahkan kamera dari CPU. Kuantisasi, penempatan ROMFS, kompilasi NPU, dan cakupan operator engine target adalah empat tuas pengaturan, dan bab ini membahas masing-masingnya.
7.16.2. Melatih model Anda sendiri¶
Bab ini dimulai dari file .tflite yang sudah dilatih. Membuat file tersebut untuk tugas khusus -- kumpulan kelas objek baru atau pengklasifikasi yang dibuat untuk tujuan tertentu -- tidak berarti harus membangun pipeline pelatihan secara manual: dua layanan berbasis cloud mencakup seluruh siklus, mulai dari pengumpulan dan pelabelan data, melalui pelatihan, hingga mengekspor model yang dapat dimuat oleh kamera.
Edge Impulse -- platform embedded-ML end-to-end; ambil data dari kamera, beri label, latih model, dan ekspor file
.tfliteyang dikuantisasi dan siap untuk mesin inferensi OpenMV.Roboflow -- manajemen dataset dan anotasi dengan pelatihan berbasis cloud, difokuskan pada deteksi objek; ekspor model YOLOv8 yang langsung didekode oleh pemroses pasca
YoloV8.
7.16.3. ML berpadu dengan sisa kamera¶
Inferensi jarang berjalan secara terisolasi. Modul image menangkap dan melakukan pra-proses bingkai, modul ml menjalankan jaringan, dan ulab.numpy melakukan pekerjaan numerik apa pun yang tidak memiliki fungsi bawaan di kedua sisi. Skrip deteksi tipikal menggabungkan ketiganya: tangkap dengan csi, opsional sesuaikan bingkai dengan image, jalankan predict(), lakukan pasca-proses hasilnya dengan modul yang tepat dari ml.postprocessing, dan gunakan ulab.numpy untuk matematika khusus yang diinginkan aplikasi di atas kotak yang dikembalikan pasca-prosesor. Ketiga modul berbagi model memori yang sama; batas di antara mereka adalah zero-copy di mana pun memungkinkan.