สารบัญ:

การจดจำภาพด้วยบอร์ด K210 และ Arduino IDE/Micropython: 6 ขั้นตอน (พร้อมรูปภาพ)
การจดจำภาพด้วยบอร์ด K210 และ Arduino IDE/Micropython: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การจดจำภาพด้วยบอร์ด K210 และ Arduino IDE/Micropython: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การจดจำภาพด้วยบอร์ด K210 และ Arduino IDE/Micropython: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Image Recognition With Sipeed MaiX and Arduino IDE/Micropython 2024, มิถุนายน
Anonim
Image
Image

ฉันได้เขียนบทความหนึ่งเกี่ยวกับวิธีการรันการสาธิต OpenMV บน Sipeed Maix Bit และทำวิดีโอสาธิตการตรวจจับวัตถุด้วยบอร์ดนี้ หนึ่งในคำถามมากมายที่ผู้คนถามกันคือ - ฉันจะจำวัตถุที่โครงข่ายประสาทเทียมไม่ได้รับการฝึกฝนได้อย่างไร กล่าวอีกนัยหนึ่งวิธีการสร้างตัวแยกประเภทรูปภาพของคุณเองและเรียกใช้ด้วยการเร่งด้วยฮาร์ดแวร์

นี่เป็นคำถามที่เข้าใจได้ เนื่องจากสำหรับโครงการของคุณ คุณอาจไม่จำเป็นต้องจำสิ่งของทั่วไปบางอย่าง เช่น แมว สุนัข และเครื่องบิน คุณต้องการจดจำบางสิ่งที่เฉพาะเจาะจง เช่น สายพันธุ์ของสุนัขสำหรับประตูสัตว์เลี้ยงอัตโนมัตินั้น หรือพันธุ์พืชสำหรับการคัดแยก หรือการใช้งานอื่นๆ ที่คุณนึกออก!

ฉันได้คุณ! ในบทความนี้ ฉันจะสอนวิธีสร้างตัวแยกประเภทรูปภาพที่กำหนดเองด้วยการเรียนรู้การถ่ายโอนใน Keras แปลงโมเดลที่ผ่านการฝึกอบรมเป็นรูปแบบ.kmodel และเรียกใช้บนบอร์ด Sipeed (สามารถเป็นบอร์ดใดก็ได้, Bit/Dock หรือ Go) โดยใช้ Micropython หรือ Arduino IDE และจินตนาการของคุณเท่านั้นที่จะจำกัดงานที่คุณสามารถทำได้ด้วยความรู้นี้

อัปเดต พฤษภาคม 2020: เมื่อเห็นว่าบทความและวิดีโอของฉันเกี่ยวกับ Image Recognition ด้วยบอร์ด K210 ยังคงได้รับความนิยมอย่างมาก และท่ามกลางผลลัพธ์อันดับต้นๆ บน YouTube และ Google ฉันจึงตัดสินใจอัปเดตบทความเพื่อรวมข้อมูลเกี่ยวกับ aXeleRate เฟรมเวิร์กที่ใช้ Keras สำหรับ AI บน ขอบที่ฉันพัฒนา

โดยพื้นฐานแล้ว aXeleRate อิงจากคอลเล็กชันของสคริปต์ที่ฉันใช้สำหรับฝึกโมเดลการจดจำภาพ/การตรวจจับวัตถุ - รวมกันเป็นเฟรมเวิร์กเดียวและปรับให้เหมาะสมสำหรับเวิร์กโฟลว์ใน Google Colab สะดวกในการใช้งานและเป็นปัจจุบันมากขึ้น

สำหรับบทความเวอร์ชันเก่า คุณยังสามารถดูได้ใน steemit.com

ขั้นตอนที่ 1: CNN และถ่ายทอดการเรียนรู้: ทฤษฎีบางอย่าง

CNN และ Transfer Learning: ทฤษฎีบางอย่าง
CNN และ Transfer Learning: ทฤษฎีบางอย่าง

Convolutional Neural Networks หรือ CNN คือกลุ่มของ Deep Neural Network ซึ่งมักใช้ในการวิเคราะห์ภาพ มีวรรณกรรมมากมายบนอินเทอร์เน็ตในหัวข้อนี้ และฉันจะให้ลิงก์บางส่วนในส่วนสุดท้ายของบทความ กล่าวโดยย่อ คุณอาจคิดว่า CNN เป็นชุดของฟิลเตอร์ที่ใช้กับรูปภาพ ฟิลเตอร์แต่ละตัวมองหาฟีเจอร์เฉพาะในภาพ - ในเลเยอร์ที่บิดเบี้ยวด้านล่าง ฟีเจอร์มักจะเป็นเส้นและรูปทรงเรียบง่าย และบนเลเยอร์ที่สูงกว่าจะมีฟีเจอร์ เฉพาะเจาะจงมากขึ้น เช่น ส่วนต่างๆ ของร่างกาย พื้นผิวเฉพาะ ชิ้นส่วนของสัตว์หรือพืช เป็นต้น การมีอยู่ของชุดคุณลักษณะบางอย่างสามารถให้เบาะแสแก่เราว่าวัตถุในภาพคืออะไร หนวดสองตาและจมูกสีดำ? ต้องเป็นแมว! ใบไม้สีเขียว ลำต้นของต้นไม้? ดูเหมือนต้นไม้!

ฉันหวังว่าคุณจะเข้าใจหลักการทำงานของ CNN ในตอนนี้ โดยปกติ โครงข่ายประสาทเทียมระดับลึกต้องการรูปภาพหลายพันภาพและใช้เวลาฝึกนานหลายชั่วโมง (ขึ้นอยู่กับฮาร์ดแวร์ที่คุณใช้สำหรับการฝึก) เพื่อ "พัฒนา" ตัวกรองที่มีประโยชน์ในการจำแนกประเภทของวัตถุที่คุณต้องการ แต่มีทางลัด

แบบจำลองที่ได้รับการฝึกฝนให้รู้จักวัตถุทั่วไปที่แตกต่างกันมากมาย (แมว สุนัข เครื่องใช้ในบ้าน การคมนาคม ฯลฯ) มีตัวกรองที่มีประโยชน์มากมาย "พัฒนาแล้ว" ดังนั้นเราจึงไม่ต้องการมันเพื่อเรียนรู้การจดจำรูปร่างและส่วนประกอบพื้นฐาน ของวัตถุอีกครั้ง เราสามารถฝึกเลเยอร์สองสามชั้นสุดท้ายของเครือข่ายใหม่เพื่อให้รู้จักคลาสเฉพาะของอ็อบเจ็กต์ ซึ่งมีความสำคัญสำหรับเรา นี้เรียกว่า "ถ่ายทอดการเรียนรู้" คุณต้องการข้อมูลการฝึกและเวลาในการประมวลผลที่น้อยลงอย่างมากด้วยการถ่ายโอนการเรียนรู้ เนื่องจากคุณฝึกอบรมเครือข่ายเพียงไม่กี่ชั้นสุดท้ายของเครือข่าย ซึ่งอาจประกอบด้วยเซลล์ประสาทไม่กี่ร้อยเซลล์

ฟังดูน่ากลัวใช่มั้ย? เรามาดูวิธีการใช้งานกัน

ขั้นตอนที่ 2: เตรียมสภาพแวดล้อมของคุณ

เตรียมสภาพแวดล้อมของคุณ
เตรียมสภาพแวดล้อมของคุณ

To เป็นสองวิธีในการใช้ aXeleRate: ทำงานบนเครื่อง Ubuntu หรือใน Google Colab สำหรับการทำงานใน Google Colab ให้ดูตัวอย่างนี้:

การจัดประเภทรูปภาพ Colab Notebook

การฝึกโมเดลของคุณภายในเครื่องและการส่งออกเพื่อใช้กับการเร่งด้วยฮาร์ดแวร์ก็ง่ายขึ้นเช่นกันในตอนนี้

สภาพแวดล้อมการทำงานของฉันคือ Ubuntu 16.04, 64 บิต คุณสามารถใช้เครื่องเสมือนเพื่อเรียกใช้อิมเมจ Ubuntu เนื่องจากเราจะไม่ใช้ GPU สำหรับการฝึกอบรม คุณสามารถรันสคริปต์การฝึกอบรมบน Windows ได้ด้วยการปรับเปลี่ยนบางอย่าง แต่สำหรับการแปลงโมเดล คุณจะต้องใช้ระบบ Linux ดังนั้น สภาพแวดล้อมที่เหมาะสำหรับคุณในการดำเนินการกวดวิชานี้คือ Ubuntu 16.04 ซึ่งทำงานโดยกำเนิดหรือในเครื่องเสมือน

เริ่มต้นด้วยการติดตั้ง Miniconda ซึ่งเป็นตัวจัดการสภาพแวดล้อมสำหรับ Python เราจะสร้างสภาพแวดล้อมที่แยกออกมา ดังนั้นเราจะไม่ทำการเปลี่ยนแปลงใดๆ ในสภาพแวดล้อม Python ของระบบของคุณโดยไม่ได้ตั้งใจ

ดาวน์โหลดตัวติดตั้งได้ที่นี่

หลังจากการติดตั้งเสร็จสมบูรณ์ ให้สร้างสภาพแวดล้อมใหม่:

conda create -n ml python=3.7

มาเปิดใช้งานสภาพแวดล้อมใหม่กันเถอะ

conda เปิดใช้งาน ml

คำนำหน้าก่อน bash shell ของคุณจะปรากฏขึ้นพร้อมกับชื่อของสภาพแวดล้อม ซึ่งบ่งชี้ว่าขณะนี้คุณทำงานอยู่ในสภาพแวดล้อมนั้น

ขั้นตอนที่ 3: ติดตั้ง AXeleRate และเรียกใช้การทดสอบ

ติดตั้ง AXeleRate และเรียกใช้การทดสอบ
ติดตั้ง AXeleRate และเรียกใช้การทดสอบ

ติดตั้ง aXeleRate บนเครื่องท้องถิ่นของคุณด้วย

pip ติดตั้ง git+https://github.com/AIWintermuteAI/aXeleRate

ในการดาวน์โหลดตัวอย่างให้รัน:

โคลน git

คุณสามารถเรียกใช้การทดสอบอย่างรวดเร็วด้วย tests_training.py ในโฟลเดอร์ aXeleRate จะทำการฝึกและการอนุมานสำหรับโมเดลแต่ละประเภท บันทึกและแปลงโมเดลที่ได้รับการฝึก เนื่องจากเป็นเพียงการฝึกอบรมสำหรับ 5 ยุคและชุดข้อมูลมีขนาดเล็กมาก คุณจะไม่สามารถรับโมเดลที่มีประโยชน์ได้ แต่สคริปต์นี้มีไว้สำหรับการตรวจสอบว่าไม่มีข้อผิดพลาดเท่านั้น

ขั้นตอนที่ 4: ฝึกโมเดลใหม่ แปลง Keras Model เป็น.kmodel

ฝึกโมเดลใหม่ แปลง Keras Model เป็น.kmodel
ฝึกโมเดลใหม่ แปลง Keras Model เป็น.kmodel

สำหรับตัวอย่างของเล่นนี้ เราจะฝึกโมเดลให้รู้จักซานตาคลอสและ Arduino Uno แน่นอนคุณสามารถเลือกคลาสอื่นได้ ดาวน์โหลดชุดข้อมูลจากที่นี่ สร้างสำเนาของไฟล์ classifier.json ในโฟลเดอร์ config จากนั้นเปลี่ยนตามนั้น คล้ายกับไฟล์ config ในภาพหน้าจอ - ตรวจสอบให้แน่ใจว่าเส้นทางไปยังโฟลเดอร์การฝึกอบรมและการตรวจสอบความถูกต้องนั้นถูกต้อง!

เรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์ aXeleRate:

หลาม axelerate/train.py - c configs/santa_uno.json

การอบรมจะเริ่มขึ้น หากความแม่นยำในการตรวจสอบความถูกต้อง (ตัววัดการตรวจสอบของเรา) ไม่ดีขึ้นสำหรับ 20 ยุค การฝึกอบรมจะหยุดก่อนเวลาอันควร ทุกครั้งที่มีการปรับปรุงความถูกต้องของการตรวจสอบ โมเดลจะถูกบันทึกไว้ในโฟลเดอร์โครงการ หลังจากการฝึกสิ้นสุดลง aXeleRate จะแปลงโมเดลที่ดีที่สุดเป็นรูปแบบที่ระบุโดยอัตโนมัติ - คุณสามารถเลือก "tflite", "k210" หรือ "edgepu" ได้ ณ ตอนนี้

ขั้นตอนที่ 5: เรียกใช้โมเดลบน Sipeed Maix Bit

เรียกใช้โมเดลบน Sipeed Maix Bit
เรียกใช้โมเดลบน Sipeed Maix Bit
เรียกใช้โมเดลบน Sipeed Maix Bit
เรียกใช้โมเดลบน Sipeed Maix Bit
เรียกใช้โมเดลบน Sipeed Maix Bit
เรียกใช้โมเดลบน Sipeed Maix Bit

มีสองวิธีในการรันโมเดลที่คุณมีบนฮาร์ดแวร์ Sipeed Maix: เฟิร์มแวร์ micropython และ Arduino IDE ฮาร์ดแวร์ Micropython ใช้งานง่ายกว่า แต่ใช้หน่วยความจำส่วนใหญ่ที่มีอยู่ ดังนั้นจึงมีพื้นที่เหลือน้อยกว่าสำหรับรุ่น Arduino IDE นั้นเป็นรหัส C ซึ่งมีประสิทธิภาพมากกว่ามากและมีหน่วยความจำน้อยกว่า โมเดลของฉันมีขนาดเพียง 1.9Mb ดังนั้นทั้งสองตัวเลือกจึงใช้งานได้ คุณสามารถใช้โมเดลที่มีขนาดใหญ่ถึง 2.9 Mb กับ Micropython ได้ สำหรับสิ่งใดก็ตามที่ใหญ่กว่านั้น คุณต้องพิจารณาโดยใช้ Arduino IDE

ดาวน์โหลด OpenMV IDE จากที่นี่ และเฟิร์มแวร์ micropython ขั้นต่ำจากที่นี่

เบิร์นเฟิร์มแวร์ด้วยเครื่องมือ kflash_gui คุณยังสามารถเลือกที่จะเบิร์นโมเดลที่ได้รับการฝึกมาเพื่อแฟลชได้อีกด้วย ดังที่แสดงในภาพหน้าจอ หรือคัดลอกไปยังการ์ด SD (ในกรณีนี้ให้คัดลอก.kmodel ไปยังรูทของการ์ด SD และใส่การ์ด SD ลงใน Sipeed Maix Bit)

เปิด OpenMV IDE แล้วกดปุ่มเชื่อมต่อ เปิดสคริปต์ santa_uno.py จากโฟลเดอร์ example_scripts แล้วกดปุ่มเริ่ม คุณควรเห็นการสตรีมสดจากกล้อง และหากคุณเปิด Serial Terminal คุณจะได้ผลการจดจำภาพสูงสุดพร้อมคะแนนความมั่นใจ!

สำหรับการใช้งานกับ Arduino IDE ก่อนอื่นคุณต้องทำตามขั้นตอนในการเพิ่มบอร์ด Sipeed ลงใน Arduino IDE ซึ่งบันทึกไว้ที่นี่ เวอร์ชัน Arduino IDE ของคุณต้องมีอย่างน้อย 1.8.12 หลังจากที่คุณเพิ่มบอร์ดแล้ว ให้เปิดร่าง mobilenet_v1_transfer_learning.ino แล้วอัปโหลดไปยัง Sipeed Maix Bit เปลี่ยนชื่อรุ่นในการ์ด SD เป็น "รุ่น" (หรือทำสำเนาด้วยชื่อนี้) คุณสามารถเปลี่ยนชื่อป้ายกำกับใน names.cpp มันจะแสดงสตรีมกล้องถ่ายทอดสดบนหน้าจอ Sipeed Maix พร้อมกับผลการจดจำภาพด้านบน

ขั้นตอนที่ 6: บทสรุป

ต่อไปนี้คือเอกสารเพิ่มเติมบางส่วนที่ควรอ่านในหัวข้อ CNN และถ่ายทอดการเรียนรู้:

ถ่ายโอนการเรียนรู้โดยใช้ Mobilenet และ Keras คำอธิบายที่ยอดเยี่ยมของการถ่ายโอนการเรียนรู้ บทช่วยสอนนี้ใช้โค้ดเวอร์ชันแก้ไขจากบทความนั้น

แมวและสุนัขและโครงข่ายประสาทเทียม อธิบายพื้นฐานเบื้องหลัง CNN และแสดงภาพตัวกรองบางส่วน กับแมว!

ฝึกฝน แปลง เรียกใช้ MobileNet บน Sipeed MaixPy และ MaixDuino! บทช่วยสอนจากทีม Sipeed เกี่ยวกับวิธีฝึก Mobilenet 1000 คลาสตั้งแต่เริ่มต้น (ไม่มีการโอนย้ายการเรียนรู้) คุณสามารถดาวน์โหลดโมเดลที่ฝึกไว้ล่วงหน้าแล้วลองใช้ได้เลย!

หวังว่าคุณจะสามารถใช้ความรู้ที่คุณมีเพื่อสร้างโปรเจ็กต์ที่ยอดเยี่ยมด้วยแมชชีนวิชั่น! คุณสามารถซื้อบอร์ด Sipeed ได้ที่นี่ ซึ่งเป็นตัวเลือกที่ถูกที่สุดสำหรับ ML บนระบบฝังตัว

แนะนำ: