Isi kandungan:

Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): 6 Langkah
Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): 6 Langkah

Video: Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): 6 Langkah

Video: Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): 6 Langkah
Video: Обнаружение объектов с помощью плат Sipeed MaiX (Kendryte K210) 2024, November
Anonim
Image
Image

Sebagai kesinambungan dari artikel saya sebelumnya mengenai pengecaman gambar dengan Sipeed MaiX Boards, saya memutuskan untuk menulis tutorial lain, dengan fokus pada pengesanan objek. Terdapat beberapa perkakasan yang menarik muncul baru-baru ini dengan cip Kendryte K210, termasuk Seeed AI Hat for Edge Computing, M5StickV M5 stack dan HuskyLens DFRobot (walaupun yang satu mempunyai firmware proprietari dan lebih disasarkan untuk pemula yang lengkap). Kerana harganya yang murah, Kendryte K210 telah menarik minat orang, yang ingin menambahkan visi komputer untuk projek mereka. Tetapi seperti biasa dengan produk perkakasan Cina, sokongan teknikal kurang dan ini adalah sesuatu yang saya cuba tingkatkan dengan artikel dan video saya. Tetapi perlu diingat, bahawa saya tidak berada dalam pasukan pembangun Kendryte atau Sipeed dan tidak dapat menjawab semua soalan yang berkaitan dengan produk mereka.

Dengan ini, mari kita mulakan! Kami akan memulakan dengan gambaran keseluruhan pendek (dan dipermudah) mengenai bagaimana model CNN pengecaman objek berfungsi.

KEMASKINI MEI 2020: Melihat bagaimana artikel dan video saya mengenai Pengesanan Objek dengan papan K210 masih sangat popular dan antara hasil teratas di YouTube dan Google, saya memutuskan untuk mengemas kini artikel tersebut untuk memasukkan maklumat mengenai aXeleRate, kerangka berasaskan Keras untuk AI di Tepi yang saya bangunkan. aXeleRate, pada dasarnya, didasarkan pada koleksi skrip yang saya gunakan untuk melatih model pengecaman gambar / pengesanan objek - digabungkan menjadi satu kerangka kerja dan dioptimumkan untuk aliran kerja di Google Colab. Ia lebih senang digunakan dan lebih terkini.

Untuk versi lama artikel, anda masih boleh melihatnya di steemit.com.

Langkah 1: Senibina Model Pengesanan Objek Dijelaskan

Senibina Model Pengesanan Objek Dijelaskan
Senibina Model Pengesanan Objek Dijelaskan
Senibina Model Pengesanan Objek Dijelaskan
Senibina Model Pengesanan Objek Dijelaskan

Model pengecaman gambar (atau klasifikasi gambar) mengambil keseluruhan gambar sebagai input dan mengeluarkan senarai kebarangkalian untuk setiap kelas yang ingin kita kenali. Ia sangat berguna jika objek yang kita minati menempati sebahagian besar gambar dan kita tidak terlalu peduli dengan lokasinya. Tetapi bagaimana jika projek kita (katakanlah, kamera pelacak wajah) memerlukan kita bukan sahaja mempunyai pengetahuan tentang jenis objek dalam gambar, tetapi juga koordinatnya. Dan bagaimana dengan projek yang memerlukan pengesanan beberapa objek (misalnya untuk mengira)?

Inilah ketika Model Pengesanan Objek sangat berguna. Dalam artikel ini kita akan menggunakan seni bina YOLO (anda hanya melihat sekali) dan memfokuskan penjelasannya pada mekanik dalaman seni bina tertentu ini.

Kami cuba menentukan objek apa yang terdapat dalam gambar dan koordinatnya. Oleh kerana pembelajaran mesin bukan sihir dan bukan "mesin berfikir", tetapi hanya algoritma yang menggunakan statistik untuk mengoptimumkan fungsi (rangkaian saraf) untuk menyelesaikan masalah tertentu dengan lebih baik. Kita perlu memartabatkan masalah ini agar lebih "dioptimumkan". Pendekatan yang naif di sini adalah mempunyai algoritma yang meminimumkan kerugian (perbezaan) antara ramalannya dan koordinat objek yang betul. Itu akan berfungsi dengan baik, selagi kita hanya mempunyai satu objek dalam gambar. Untuk beberapa objek, kami mengambil pendekatan yang berbeza - kami menambahkan grid dan membuat rangkaian kami meramalkan kehadiran (atau ketiadaan) objek di setiap grid. Kedengarannya hebat, tetapi masih memberikan terlalu banyak ketidakpastian untuk rangkaian - bagaimana menghasilkan ramalan dan apa yang harus dilakukan apabila terdapat banyak objek dengan pusat di dalam satu sel grid? Kita perlu menambah satu lagi kekangan - yang disebut sebagai sauh. Jangkar adalah ukuran awal (lebar, tinggi) beberapa di antaranya (yang paling dekat dengan ukuran objek) akan diubah ukurannya ke ukuran objek - menggunakan beberapa output dari jaringan saraf (peta ciri akhir).

Jadi, inilah pandangan tingkat atas mengenai apa yang berlaku ketika rangkaian neural seni bina YOLO melakukan pengesanan objek pada gambar. Menurut ciri yang dikesan oleh rangkaian pengekstrak ciri, untuk setiap sel grid satu set ramalan dibuat, yang merangkumi jangkar ofset, kemungkinan jangkar dan kelas jangkar. Kemudian kami membuang ramalan dengan kebarangkalian rendah dan voila!

Langkah 2: Persiapkan Alam Sekitar

Siapkan Alam Sekitar
Siapkan Alam Sekitar

aXeleRate berdasarkan projek hebat oleh penny4860, pengesan digit SVHN yolo-v2. aXeleRate membawa pelaksanaan pengesan YOLO ini di Keras ke tahap seterusnya dan menggunakan sistem konfigurasi yang sesuai untuk melakukan latihan dan penukaran pengecaman gambar / pengesanan objek dan rangkaian segmentasi gambar dengan pelbagai backend.

Terdapat dua cara untuk menggunakan aXeleRate: berjalan secara tempatan pada mesin Ubuntu atau di Google Colab. Untuk berjalan di Google Colab, lihat contoh ini:

Buku nota Colab Pengesanan Objek PASCAL-VOC

Melatih model anda secara tempatan dan mengeksportnya untuk digunakan dengan pecutan perkakasan juga lebih mudah sekarang. Saya sangat mengesyorkan anda memasang semua pergantungan yang diperlukan di persekitaran Anaconda untuk memastikan projek anda terpisah dari yang lain dan mengelakkan konflik.

Muat turun pemasang di sini.

Setelah pemasangan selesai, buat persekitaran baru:

conda create -n yolo python = 3.7

Mari aktifkan persekitaran baru

conda aktifkan yolo

Awalan sebelum shell bash anda akan muncul dengan nama persekitaran, menunjukkan bahawa anda bekerja sekarang di persekitaran tersebut.

Pasang aXeleRate pada mesin tempatan anda dengan

pasang pip git +

Dan kemudian jalankan ini untuk memuat turun skrip yang anda perlukan untuk latihan dan kesimpulan:

git klon

Anda boleh menjalankan ujian pantas dengan test_training.py dalam folder aXeleRate. Ia akan menjalankan latihan dan kesimpulan untuk setiap jenis model, menyimpan dan menukar model terlatih. Oleh kerana hanya latihan untuk 5 zaman dan set data sangat kecil, anda tidak akan dapat model yang berguna, tetapi skrip ini hanya bertujuan untuk memeriksa tidak adanya kesalahan.

Langkah 3: Latih Model Pengesanan Objek Dengan Keras

Latih Model Pengesanan Objek Dengan Keras
Latih Model Pengesanan Objek Dengan Keras

Sekarang kita boleh menjalankan skrip latihan dengan fail konfigurasi. Oleh kerana pelaksanaan Keras pengesan objek YOLO agak rumit, daripada menerangkan setiap kod yang relevan, saya akan menerangkan cara mengkonfigurasi latihan dan juga menerangkan modul yang relevan, sekiranya anda ingin membuat perubahan pada diri anda sendiri.

Mari kita mulakan dengan contoh mainan dan melatih pengesan racoon. Terdapat fail config di dalam folder / config, raccoon_detector.json. Kami memilih MobileNet7_5 sebagai seni bina (di mana 7_5 adalah parameter alpha dari pelaksanaan Mobilenet yang asli, mengendalikan lebar rangkaian) dan 224x224 sebagai ukuran input. Mari kita lihat parameter yang paling penting dalam konfigurasi:

Jenis adalah frontend model - Classifier, Detector atau SegnetArchitecture adalah model backend (fitur pengekstrak)

- Yolo Penuh - Yolo Kecil - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Untuk maklumat lebih lanjut mengenai sauh, sila baca di sini

Label adalah label yang terdapat dalam set data anda. PENTING: Sila, senaraikan semua label yang terdapat dalam set data.

object_scale menentukan berapa banyak untuk menghukum ramalan keyakinan yang salah terhadap peramal objek

no_object_scale menentukan berapa banyak yang boleh menghukum ramalan keyakinan terhadap ramalan bukan objek

coord_scale menentukan berapa banyak untuk menghukum ramalan kedudukan dan ukuran yang salah (x, y, w, h)

class_scale menentukan berapa banyak untuk menghukum ramalan kelas yang salah

augumentation - augumentation gambar, mengubah ukuran, mengubah dan mengaburkan gambar untuk mengelakkan overfitting dan mempunyai variasi data yang lebih besar.

train_times, validation_times - berapa kali untuk mengulangi set data. Berguna jika anda mempunyai bukti

didayakan

first_trainable_layer - membolehkan anda membekukan lapisan tertentu jika anda menggunakan rangkaian ciri yang sudah dilatih

Sekarang kita perlu memuat turun set data, yang saya kongsikan di Google Drive saya (set data asal), yang merupakan set data pengesanan racoon, yang mengandungi 150 gambar beranotasi.

Pastikan untuk menukar baris dalam fail konfigurasi (train_image_folder, train_annot_folder) dengan sewajarnya dan kemudian mulakan latihan dengan arahan berikut:

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

train.py membaca konfigurasi dari fail.json dan melatih model dengan skrip axelerate / rangkaian / yolo / yolo_frontend.py. yolo / backend / loss.py adalah di mana fungsi kehilangan khusus dilaksanakan dan yolo / backend / network.py adalah tempat model dibuat (input, pengekstrak ciri dan lapisan pengesanan disatukan). axelerate / network / common_utils / fit.py adalah skrip yang melaksanakan proses latihan dan axelerate / network / common_utils / feature.py mengandungi pengekstrak ciri. Sekiranya anda berhasrat menggunakan model terlatih dengan cip K210 dan firmware Micropython, kerana had memori anda boleh memilih antara MobileNet (2_5, 5_0 dan 7_5) dan TinyYolo, tetapi saya dapati MobileNet memberikan ketepatan pengesanan yang lebih baik.

Oleh kerana ia adalah contoh mainan dan hanya mengandungi 150 gambar rakun, proses latihan harus cukup cepat, walaupun tanpa GPU, walaupun ketepatannya akan jauh dari bintang. Untuk projek yang berkaitan dengan pekerjaan, saya telah melatih pengesan tanda lalu lintas dan pengesan nombor, kedua-dua set data merangkumi beberapa ribu contoh latihan.

Langkah 4: Tukarkannya ke Format.kmodel

Tukarkannya ke.kmodel Format
Tukarkannya ke.kmodel Format

Dengan aXeleRate, penukaran model dilakukan secara automatik - ini mungkin merupakan perbezaan terbesar dari skrip latihan versi lama! Anda juga dapat memperoleh fail model dan grafik latihan yang disimpan dengan rapi dalam folder projek. Saya juga mendapati bahawa ketepatan vaiidasi kadang-kadang gagal memberikan anggaran model prestasi sebenar untuk pengesanan objek dan ini sebabnya saya menambahkan peta sebagai metrik pengesahan untuk model pengesanan objek. Anda boleh membaca lebih lanjut mengenai peta di sini.

Sekiranya pemetaan, ketepatan rata-rata rata-rata (metrik pengesahan kami) tidak bertambah selama 20 zaman, latihan akan berhenti sebelum waktunya. Setiap kali pemetaan meningkat, model disimpan dalam folder projek. Setelah latihan selesai, aXeleRate secara automatik menukar model terbaik ke format yang ditentukan - anda boleh memilih, "tflite", "k210" atau "edgetpu" seperti sekarang.

Sekarang ke langkah terakhir, sebenarnya menjalankan model kami pada perkakasan Sipeed!

Langkah 5: Jalankan pada Micropython Firmware

Jalankan di Micropython Firmware
Jalankan di Micropython Firmware

Kita boleh membuat kesimpulan dengan model pengesanan objek kita dengan kod C, tetapi demi kemudahan kita akan menggunakan firmware Micropython dan MaixPy IDE sebagai gantinya.

Muat turun MaixPy IDE dari sini dan firmware micropython dari sini. Anda boleh menggunakan skrip python kflash.py untuk membakar firmware atau memuat turun alat flash GUI yang berasingan di sini.

Salin model.kmodel ke akar kad SD dan masukkan kad SD ke dalam Sipeed Maix Bit (atau peranti K210 lain). Sebagai alternatif anda boleh membakar.kmodel ke memori kilat peranti. Skrip contoh saya membaca.kmodel dari memori flash. Sekiranya anda menggunakan kad SD, ubah baris ini

tugas = kpu.load (0x200000)

ke

task = kpu.load ("/ sd / model.kmodel")

Buka MaixPy IDE dan tekan butang sambung. Buka skrip raccoon_detector.py dari folder example_scripts / k210 / detector dan tekan butang Start. Anda mesti melihat siaran langsung dari kamera dengan kotak pengikat di sekitar … baik, rakun. Anda dapat meningkatkan ketepatan model dengan memberikan lebih banyak contoh latihan, tetapi perlu diingat bahawa ia adalah model peri kecil (1,9 M) dan ia akan menghadapi masalah untuk mengesan objek kecil (kerana resolusi rendah).

Salah satu soalan yang saya terima dalam komen pada artikel saya sebelumnya mengenai pengecaman gambar adalah bagaimana mengirim hasil pengesanan melalui UART / I2C ke peranti lain yang disambungkan ke papan pengembangan Sipeed. Di repositori github saya, anda akan dapat mencari skrip contoh lain, raccoon_detector_uart.py, yang (anda meneka) mengesan rakun dan menghantar koordinat kotak pengikat ke atas UART. Perlu diingat, bahawa pin yang digunakan untuk komunikasi UART berbeza dengan papan yang berbeza, ini adalah perkara yang anda perlukan untuk memeriksa sendiri dalam dokumentasi.

Langkah 6: Ringkasan

Kendryte K210 adalah cip padat untuk penglihatan komputer, fleksibel, walaupun dengan memori terhad yang ada. Setakat ini, dalam tutorial saya telah membahas menggunakannya untuk mengenali objek tersuai, mengesan objek tersuai dan menjalankan beberapa tugas penglihatan komputer berdasarkan OpenMV. Saya tahu hakikat bahawa ia juga sesuai untuk pengecaman wajah dan dengan beberapa gangguan mungkin dilakukan pengesanan pose dan segmentasi gambar (anda boleh menggunakan aXeleRate untuk melatih model segmentasi semantik, tetapi saya belum menerapkan kesimpulan dengan K210). Jangan ragu untuk melihat masalah repositori aXeleRate dan membuat PR jika anda fikir ada beberapa penambahbaikan yang boleh anda sumbangkan!

Berikut adalah beberapa artikel yang saya gunakan dalam menulis tutorial ini, lihat jika anda ingin mengetahui lebih lanjut mengenai pengesanan objek dengan rangkaian saraf:

Pengesan objek kotak pengikat: memahami YOLO, Anda Hanya Melihat Sekali

Memahami YOLO (lebih banyak matematik)

Panduan lembut mengenai bagaimana Penyetempatan Objek YOLO berfungsi dengan Keras (Bahagian 2)

Pengesanan Objek masa nyata dengan YOLO, YOLOv2 dan sekarang YOLOv3

Harap anda dapat menggunakan pengetahuan yang anda miliki sekarang untuk membina beberapa projek hebat dengan penglihatan mesin! Anda boleh membeli papan Sipeed di sini, mereka adalah antara pilihan termurah yang tersedia untuk ML pada sistem tertanam.

Tambahkan saya di LinkedIn jika anda mempunyai sebarang pertanyaan dan melanggan saluran YouTube saya untuk mendapat maklumat mengenai projek yang lebih menarik yang melibatkan pembelajaran mesin dan robotik.

Disyorkan: