Daftar Isi:

Pengenalan Gambar Dengan Papan K210 dan Arduino IDE/Micropython: 6 Langkah (dengan Gambar)
Pengenalan Gambar Dengan Papan K210 dan Arduino IDE/Micropython: 6 Langkah (dengan Gambar)

Video: Pengenalan Gambar Dengan Papan K210 dan Arduino IDE/Micropython: 6 Langkah (dengan Gambar)

Video: Pengenalan Gambar Dengan Papan K210 dan Arduino IDE/Micropython: 6 Langkah (dengan Gambar)
Video: Image Recognition With Sipeed MaiX and Arduino IDE/Micropython 2024, Juni
Anonim
Image
Image

Saya sudah menulis satu artikel tentang cara menjalankan demo OpenMV di Sipeed Maix Bit dan juga membuat video demo deteksi objek dengan papan ini. Salah satu dari banyak pertanyaan yang diajukan orang adalah - bagaimana saya bisa mengenali objek yang jaringan sarafnya tidak dilatih? Dengan kata lain cara membuat pengklasifikasi gambar Anda sendiri dan menjalankannya dengan akselerasi perangkat keras.

Ini adalah pertanyaan yang dapat dimengerti, karena untuk proyek Anda, Anda mungkin tidak perlu mengenali beberapa objek umum, seperti kucing dan anjing dan pesawat terbang. Anda ingin mengenali sesuatu yang spesifik, misalnya, jenis anjing untuk pintu hewan peliharaan otomatis itu, atau spesies tanaman untuk penyortiran, atau aplikasi keluar lainnya yang dapat Anda pikirkan!

Aku mendapatkanmu! Dalam artikel ini saya akan mengajari Anda cara membuat pengklasifikasi gambar kustom Anda sendiri dengan pembelajaran transfer di Keras, mengonversi model terlatih ke format.kmodel dan menjalankannya di papan Sipeed (dapat berupa papan apa saja, Bit/Dock atau Go) menggunakan Micropython atau ArduinoIDE. Dan hanya imajinasi Anda yang akan menjadi batas tugas yang dapat Anda lakukan dengan pengetahuan ini.

PEMBARUAN MEI 2020: Melihat bagaimana artikel dan video saya di Pengenalan Gambar dengan papan K210 masih sangat populer dan di antara hasil teratas di YouTube dan Google, saya memutuskan untuk memperbarui artikel untuk memasukkan informasi tentang aXeleRate, kerangka kerja berbasis Keras untuk AI di Ujung saya kembangkan.

aXeleRate, pada dasarnya, didasarkan pada kumpulan skrip yang saya gunakan untuk melatih model pengenalan gambar/deteksi objek - digabungkan menjadi satu kerangka kerja dan dioptimalkan untuk alur kerja di Google Colab. Lebih nyaman digunakan dan lebih mutakhir.

Untuk artikel versi lama masih bisa dilihat di steemit.com.

Langkah 1: CNN dan Transfer Pembelajaran: Beberapa Teori

CNN dan Transfer Pembelajaran: Beberapa Teori
CNN dan Transfer Pembelajaran: Beberapa Teori

Convolutional Neural Networks atau CNN adalah kelas jaringan saraf dalam, paling sering diterapkan untuk menganalisis citra visual. Ada banyak literatur di internet tentang topik ini dan saya akan memberikan beberapa tautan di bagian terakhir artikel. Singkatnya, Anda dapat menganggap CNN sebagai serangkaian filter, diterapkan pada gambar, setiap filter mencari fitur tertentu dalam gambar - pada lapisan konvolusi yang lebih rendah fitur biasanya berupa garis dan bentuk sederhana dan pada lapisan yang lebih tinggi fiturnya bisa lebih spesifik, misalnya bagian tubuh, tekstur tertentu, bagian hewan atau tumbuhan, dll. Kehadiran serangkaian fitur tertentu dapat memberi kita petunjuk tentang objek apa yang mungkin ada dalam gambar. Kumis, dua mata dan hidung hitam? Pasti kucing! Daun hijau, batang pohon? Sepertinya pohon!

Saya harap Anda mendapatkan ide tentang prinsip kerja CNN sekarang. Biasanya jaringan saraf dalam membutuhkan ribuan gambar dan jam waktu pelatihan (tergantung pada perangkat keras yang Anda gunakan untuk pelatihan) untuk "mengembangkan" filter yang berguna untuk mengenali jenis objek yang Anda inginkan. Tapi ada jalan pintas.

Sebuah model yang dilatih untuk mengenali banyak objek umum yang berbeda (kucing, anjing, peralatan rumah, transportasi, dll) sudah memiliki banyak filter berguna yang "dikembangkan", jadi kita tidak memerlukannya untuk belajar mengenali bentuk dan bagian dasar dari objek lagi. Kami hanya dapat melatih kembali beberapa lapisan terakhir jaringan untuk mengenali kelas objek tertentu, yang penting bagi kami. Ini disebut "belajar transfer". Anda membutuhkan jauh lebih sedikit data pelatihan dan waktu komputasi dengan pembelajaran transfer, karena Anda hanya melatih beberapa lapisan terakhir jaringan, yang mungkin terdiri dari beberapa ratus neuron.

Kedengarannya luar biasa, bukan? Mari kita lihat bagaimana menerapkannya.

Langkah 2: Persiapkan Lingkungan Anda

Persiapkan Lingkungan Anda
Persiapkan Lingkungan Anda

Ada dua cara untuk menggunakan aXeleRate: berjalan secara lokal di mesin Ubuntu atau di Google Colab. Untuk menjalankan di Google Colab, lihat contoh ini:

Klasifikasi gambar Notebook Colab

Melatih model Anda secara lokal dan mengekspornya untuk digunakan dengan akselerasi perangkat keras juga jauh lebih mudah sekarang.

Lingkungan kerja saya adalah Ubuntu 16.04, 64bit. Anda dapat menggunakan mesin Virtual untuk menjalankan image Ubuntu karena kami tidak akan menggunakan GPU untuk pelatihan. Dengan beberapa modifikasi Anda juga dapat menjalankan skrip pelatihan di Windows, tetapi untuk konversi model Anda harus menggunakan sistem Linux. Jadi, lingkungan yang lebih baik bagi Anda untuk menjalankan tutorial ini adalah Ubuntu 16.04, berjalan secara native atau di mesin virtual.

Mari kita mulai dengan menginstal Miniconda, yang merupakan pengelola lingkungan untuk Python. Kami akan membuat lingkungan yang terisolasi, jadi kami tidak akan secara tidak sengaja mengubah apa pun di lingkungan Python sistem Anda.

Unduh penginstalnya di sini

Setelah instalasi selesai, buat lingkungan baru:

conda create -n ml python=3.7

Ayo aktifkan lingkungan baru

conda aktifkan ml

Awalan sebelum bash shell Anda akan muncul dengan nama lingkungan, yang menunjukkan bahwa Anda bekerja sekarang di lingkungan itu.

Langkah 3: Instal AXeleRate dan Jalankan Tes

Instal AXeleRate dan Jalankan Tes
Instal AXeleRate dan Jalankan Tes

Instal aXeleRate di mesin lokal Anda dengan

pip install git+https://github.com/AIWintermuteAI/aXeleRate

Untuk mengunduh contoh, jalankan:

git clone

Anda dapat menjalankan tes cepat dengan test_training.py di folder aXeleRate. Ini akan menjalankan pelatihan dan inferensi untuk setiap jenis model, menyimpan dan mengonversi model terlatih. Karena ini hanya pelatihan untuk 5 epoch dan dataset sangat kecil, Anda tidak akan bisa mendapatkan model yang berguna, tetapi skrip ini hanya dimaksudkan untuk memeriksa tidak adanya kesalahan.

Langkah 4: Latih kembali Model, Ubah Model Keras menjadi.kmodel

Latih Ulang Model, Ubah Model Keras menjadi.kmodel
Latih Ulang Model, Ubah Model Keras menjadi.kmodel

Untuk contoh mainan ini kita akan melatih model untuk mengenal Sinterklas dan Arduino Uno. Jelas Anda dapat memilih kelas lain. Unduh kumpulan data dari sini. Buat salinan file classifier.json di folder config, lalu ubah sesuai dengan itu, mirip dengan file konfigurasi di tangkapan layar - pastikan jalur ke folder pelatihan dan validasi sudah benar!

Jalankan perintah berikut dari folder aXeleRate:

python axelerate/train.py - c configs/santa_uno.json

Pelatihan akan dimulai. Jika akurasi validasi (metrik validasi kami) tidak meningkat selama 20 epoch, pelatihan akan berhenti sebelum waktunya. Setiap kali akurasi validasi meningkat, model disimpan di folder proyek. Setelah pelatihan selesai, aXeleRate secara otomatis mengonversi model terbaik ke format tertentu - Anda dapat memilih, "tflite", "k210" atau "edgetpu" mulai sekarang.

Langkah 5: Jalankan Model pada Sipeed Maix Bit

Jalankan Model di Sipeed Maix Bit
Jalankan Model di Sipeed Maix Bit
Jalankan Model di Sipeed Maix Bit
Jalankan Model di Sipeed Maix Bit
Jalankan Model di Sipeed Maix Bit
Jalankan Model di Sipeed Maix Bit

Ada dua cara untuk menjalankan model yang Anda miliki sekarang di perangkat keras Sipeed Maix: firmware micropython dan Arduino IDE. Perangkat keras Micropython lebih mudah digunakan, tetapi menempati porsi signifikan dari memori yang tersedia, sehingga ada lebih sedikit ruang yang tersisa untuk model. Arduino IDE pada dasarnya adalah kode C, yang jauh lebih efisien dan memiliki jejak memori yang lebih kecil. Model saya hanya 1.9Mb, jadi kedua opsi berfungsi untuk itu. Anda dapat menggunakan model sebesar 2,9 Mb dengan Micropython, untuk apa pun yang lebih besar, Anda perlu mempertimbangkan untuk menggunakan Arduino IDE.

Unduh OpenMV IDE dari sini dan firmware micropython minimal dari sini.

Bakar firmware dengan alat kflash_gui. Anda juga dapat memilih untuk membakar model terlatih ke flash juga, seperti yang ditunjukkan pada tangkapan layar. Atau salin ke kartu SD (dalam hal ini salin.kmodel ke akar kartu SD dan masukkan kartu SD ke Sipeed Maix Bit)

Buka OpenMV IDE dan tekan tombol connect. Buka skrip santa_uno.py dari folder example_scripts dan tekan tombol Start. Anda akan melihat streaming langsung dari kamera dan jika Anda membuka Terminal Serial, Anda akan mendapatkan hasil pengenalan gambar teratas dengan skor kepercayaan diri!

Untuk menggunakan dengan Arduino IDE, pertama-tama Anda harus mengikuti prosedur untuk menambahkan papan Sipeed ke Arduino IDE, yang didokumentasikan di sini. Versi Arduino IDE Anda harus setidaknya 1.8.12. Setelah Anda menambahkan papan, buka sketsa mobilenet_v1_transfer_learning.ino dan unggah ke Sipeed Maix Bit. Ubah nama model pada kartu SD menjadi "model" (atau buat salinan dengan nama ini). Anda dapat mengubah nama label di names.cpp. Ini akan menampilkan aliran kamera langsung di layar Sipeed Maix bersama dengan hasil pengenalan gambar teratas.

Langkah 6: Kesimpulan

Berikut adalah beberapa materi untuk dibaca tentang topik CNN dan pembelajaran transfer:

Transfer Learning menggunakan Mobilenet dan Keras Penjelasan yang bagus tentang Transfer learning, tutorial ini menggunakan versi kode yang dimodifikasi dari artikel itu.

Kucing dan anjing dan jaringan saraf convolutional Menjelaskan dasar-dasar di balik CNN dan memvisualisasikan beberapa filter. Dengan kucing!

Latih, Konversi, Jalankan MobileNet di Sipeed MaixPy dan MaixDuino! Tutorial dari tim Sipeed tentang cara melatih kelas Mobilenet 1000 dari awal (tanpa transfer learning). Anda dapat mengunduh model pra-terlatih mereka dan mencobanya!

Semoga Anda dapat menggunakan pengetahuan yang Anda miliki sekarang untuk membangun beberapa proyek luar biasa dengan visi mesin! Anda dapat membeli papan Sipeed di sini, ini adalah salah satu opsi termurah yang tersedia untuk ML pada sistem tertanam.

Direkomendasikan: