Isi kandungan:
- Langkah 1: Senibina Model Pengesanan Objek Dijelaskan
- Langkah 2: Persiapkan Alam Sekitar
- Langkah 3: Latih Model Pengesanan Objek Dengan Keras
- Langkah 4: Tukarkannya ke Format.kmodel
- Langkah 5: Jalankan pada Micropython Firmware
- Langkah 6: Ringkasan
Video: Pengesanan Objek Dengan Papan Sipeed MaiX (Kendryte K210): 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
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
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
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
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
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
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:
Pengesanan Objek Raspberry Pi: 7 Langkah
Pengesanan Objek Raspberry Pi: Panduan ini memberikan arahan langkah demi langkah tentang cara menyiapkan API Pengesanan Objek TensorFlow pada Raspberry Pi. Dengan mengikuti langkah-langkah dalam panduan ini, anda akan dapat menggunakan Raspberry Pi anda untuk melakukan pengesanan objek pada video langsung dari P
Penjejakan Objek Berasaskan Pengesanan Warna: 10 Langkah
Penjejakan Objek Berasaskan Pengesanan Warna: Kisah Saya melakukan projek ini untuk belajar memproses gambar menggunakan Raspberry PI dan membuka CV. Untuk menjadikan projek ini lebih menarik, saya menggunakan dua motor SG90 Servo dan memasang kamera di atasnya. Satu motor digunakan untuk bergerak secara mendatar dan motor kedua digunakan untuk menggerakkan verticall
Pengesanan Objek W / Dragonboard 410c atau 820c Menggunakan OpenCV dan Tensorflow .: 4 Langkah
Pengesanan Objek W / Dragonboard 410c atau 820c Menggunakan OpenCV dan Tensorflow .: Instruksional ini menerangkan cara memasang rangka kerja OpenCV, Tensorflow, dan pembelajaran mesin untuk Python 3.5 untuk menjalankan aplikasi Objek Deteksi
Penganalisis Corak Lalu Lintas Menggunakan Pengesanan Objek Langsung: 11 Langkah (dengan Gambar)
Penganalisis Corak Lalu Lintas Menggunakan Pengesanan Objek Langsung: Di dunia masa kini, lampu isyarat penting untuk jalan raya yang selamat. Namun, berkali-kali, lampu isyarat boleh menjengkelkan dalam keadaan di mana seseorang menghampiri lampu sama seperti lampu merah. Ini membuang masa, terutamanya jika cahaya pr
Pengesanan Objek Visual Dengan Kamera (TfCD): 15 Langkah (dengan Gambar)
Pengesanan Objek Visual Dengan Kamera (TfCD): Perkhidmatan kognitif yang dapat mengenali emosi, wajah orang atau objek sederhana pada masa ini masih pada tahap awal pengembangan, tetapi dengan pembelajaran mesin, teknologi ini semakin berkembang. Kita boleh melihat lebih banyak sihir ini dalam