โปรเจกต์ Arduino® Nicla Vision - Smart Trash Collector
เปลี่ยน Arduino Nicla Vision ให้เป็น edge model ขนาดจิ๋วเพื่อคัดแยกขยะ (plastic, paper, glass, organic, general) และแสดงผลผ่าน RGB LED บนบอร์ดเพื่อช่วยแนะนำการคัดแยกแบบ real time
เปลี่ยน Arduino Nicla Vision ให้เป็น edge model ขนาดจิ๋วเพื่อคัดแยกขยะ (plastic, paper, glass, organic, general) และแสดงผลผ่าน RGB LED บนบอร์ดเพื่อช่วยแนะนำการคัดแยกแบบ real time
Project Supporter Team
โพสต์โดย
การลดปริมาณขยะรีไซเคิลในบ่อฝังกลบมักขึ้นอยู่กับการคัดแยกที่รวดเร็วและแม่นยำ Nicla-SmartTrashCollector เปลี่ยน Arduino Nicla Vision ให้กลายเป็น tiny edge model ที่สามารถคัดแยกขยะ (plastic, paper, glass, organic, general) และควบคุม onboard RGB LED เพื่อช่วยแนะนำการคัดแยกแบบ real time
การ Training และ quantization ของ object-detection model ทำผ่านแพลตฟอร์ม Focoos AI ซึ่งช่วยให้สามารถ export quantized model ในรูปแบบ ONNX format ได้ Format นี้สามารถใช้งานร่วมกับ Z-Ant command line interface ซึ่งช่วยให้สามารถ deployment quantized ONNX model ลงบน Nicla Vision ได้
Dataset นี้เปิดให้ใช้งานแบบสาธารณะตามลิงก์นี้: https://www.kaggle.com/datasets/ceciliacasarella/waste-classification-dataset โดยเป็นการรวบรวมรูปภาพจากหลายแหล่งข้อมูลเพื่อให้ครอบคลุมหมวดหมู่ของวัสดุต่างๆ อย่างสมดุล
เมื่อดาวน์โหลดไฟล์ Dataset `.zip` เรียบร้อยแล้ว ควรทำการ upload ไปยัง Focoos Platform โดยใช้ตัวเลือก “Add New Dataset” เลือกประเภทงานเป็น Classification และที่สำคัญที่สุดคือเลือก Classification Folder Layout เพื่อให้แน่ใจว่าข้อมูลถูกจัดระเบียบอย่างถูกต้องสำหรับการ training


สำหรับขั้นตอนการเรียนรู้วิธีการ train, quantize และ export custom model โดยใช้ Focoos AI สามารถศึกษาได้จากสองลิงก์นี้:
การ Training ดำเนินการบน Focoos AI Platform ที่มี GPU support
เมื่อ upload dataset เรียบร้อยแล้ว ขั้นตอนต่อไปคือการกำหนด model ใหม่ สิ่งสำคัญคือต้องแน่ใจว่าประเภทงานยังคงตั้งค่าเป็น “Classification” ระหว่างการกำหนดค่านี้ เลือก nano model ( fai-cls-n-coco ) ซึ่งมีขนาด model ที่เหมาะสมและเข้ากับ RAM ของบอร์ด Nicla Vision ได้ดีที่สุด

หลังจากกำหนดค่า dataset และ model แล้ว สามารถเริ่มขั้นตอนการ training ใหม่ได้ โดยพารามิเตอร์เฉพาะที่ใช้ในโปรเจกต์นี้มีดังนี้:


เมื่อได้ ONNX model มาแล้ว ขั้นตอนแรกคือการ clone Z-Ant official repository
ต่อไปนี้คือสิ่งที่จำเป็นต้องมีเพื่อดำเนินการต่อ:
ให้นำ ONNX model ของคุณ เช่น `my_model.onnx` ไปไว้ที่ `Z-Ant/datasets/models/my_model/my_model.onnx` จากนั้นคุณสามารถใช้คำสั่งต่อไปนี้เพื่อสร้างไฟล์ `libzant.a` ซึ่งจะถูกนำไปไว้ใน Arduino library เพื่อให้ไฟล์ .ino ของ Arduino สามารถเรียกใช้งานได้
zig build lib-gen -Dmodel="YOUR_MODEL" -Dxip=true -Ddynamic -Ddo_export zig build lib-test -Dmodel="YOUR_MODEL" -Dxip=true -Ddynamic -Ddo_export zig build lib -Dmodel="YOUR_MODEL" -Dtarget=thumb-freestanding -Dcpu=cortex_m7 -Dxip=true -Doptimize=ReleaseSmall Library ที่สร้างขึ้นควรถูกคัดลอกไปยัง Arduino Sketch โดยใช้คำสั่งดังนี้:
cp zig-out/YOUR_MODEL/libzant.a examples/Nicla-SmartTrashCollector/ZantLib/src/cortex-m7/ในการ compile และ flash บอร์ด Nicla จะมี bash script สองตัวที่ต้องปรับปรุงเล็กน้อยตามระบบของคุณ ตัวแรกคือ `flash_nicla_xip.sh` และอีกตัวคือ `compile_and_flash.sh` ทั้งคู่จะอยู่ใน repository ของโปรเจกต์ที่เกี่ยวข้องกับโพสต์นี้ https://github.com/ZantFoundation/Z-Ant/tree/main/examples/Nicla-SmartTrashCollector
กระบวนการ (pipeline) เดียวกันนี้สามารถนำไปปรับใช้กับสถานที่หรือวัสดุอื่นๆ ได้ ผลลัพธ์ที่ได้คือ vision node ขนาดกะทัดรัดและประหยัดพลังงาน ซึ่งง่ายต่อการนำไปทำซ้ำและใช้งานร่วมกับระบบอื่น
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้