สารบัญ:
- ขั้นตอนที่ 1: CNN และถ่ายทอดการเรียนรู้: ทฤษฎีบางอย่าง
- ขั้นตอนที่ 2: เตรียมสภาพแวดล้อมของคุณ
- ขั้นตอนที่ 3: ติดตั้ง AXeleRate และเรียกใช้การทดสอบ
- ขั้นตอนที่ 4: ฝึกโมเดลใหม่ แปลง Keras Model เป็น.kmodel
- ขั้นตอนที่ 5: เรียกใช้โมเดลบน Sipeed Maix Bit
- ขั้นตอนที่ 6: บทสรุป
วีดีโอ: การจดจำภาพด้วยบอร์ด K210 และ Arduino IDE/Micropython: 6 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ฉันได้เขียนบทความหนึ่งเกี่ยวกับวิธีการรันการสาธิต 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 และถ่ายทอดการเรียนรู้: ทฤษฎีบางอย่าง
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 บนเครื่องท้องถิ่นของคุณด้วย
pip ติดตั้ง git+https://github.com/AIWintermuteAI/aXeleRate
ในการดาวน์โหลดตัวอย่างให้รัน:
โคลน git
คุณสามารถเรียกใช้การทดสอบอย่างรวดเร็วด้วย tests_training.py ในโฟลเดอร์ aXeleRate จะทำการฝึกและการอนุมานสำหรับโมเดลแต่ละประเภท บันทึกและแปลงโมเดลที่ได้รับการฝึก เนื่องจากเป็นเพียงการฝึกอบรมสำหรับ 5 ยุคและชุดข้อมูลมีขนาดเล็กมาก คุณจะไม่สามารถรับโมเดลที่มีประโยชน์ได้ แต่สคริปต์นี้มีไว้สำหรับการตรวจสอบว่าไม่มีข้อผิดพลาดเท่านั้น
ขั้นตอนที่ 4: ฝึกโมเดลใหม่ แปลง 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: เฟิร์มแวร์ 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 บนระบบฝังตัว
แนะนำ:
Blinds Control ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: 5 ขั้นตอน (พร้อมรูปภาพ)
การควบคุมมู่ลี่ด้วย ESP8266, Google Home และ Openhab Integration และ Webcontrol: ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นว่าฉันเพิ่มระบบอัตโนมัติให้กับมู่ลี่ของฉันอย่างไร ฉันต้องการเพิ่มและลบระบบอัตโนมัติได้ ดังนั้นการติดตั้งทั้งหมดจึงเป็นแบบหนีบ ส่วนหลักคือ: สเต็ปเปอร์มอเตอร์ ตัวขับสเต็ปควบคุม bij ESP-01 เกียร์และการติดตั้ง
DIY Smart Scale พร้อมนาฬิกาปลุก (พร้อม Wi-Fi, ESP8266, Arduino IDE และ Adafruit.io): 10 ขั้นตอน (พร้อมรูปภาพ)
DIY Smart Scale พร้อมนาฬิกาปลุก (พร้อม Wi-Fi, ESP8266, Arduino IDE และ Adafruit.io): ในโครงการก่อนหน้านี้ ฉันพัฒนาเครื่องชั่งห้องน้ำอัจฉริยะพร้อม Wi-Fi สามารถวัดน้ำหนักของผู้ใช้ แสดงผลในเครื่อง และส่งไปยังระบบคลาวด์ คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ที่ลิงค์ด้านล่าง:https://www.instructables.com/id/Wi-Fi-Smart-Scale-wi
IoT Wallet (กระเป๋าเงินอัจฉริยะพร้อม Firebeetle ESP32, Arduino IDE และ Google Spreadsheet): 13 ขั้นตอน (พร้อมรูปภาพ)
IoT Wallet (กระเป๋าเงินอัจฉริยะพร้อม Firebeetle ESP32, Arduino IDE และ Google สเปรดชีต): รางวัลที่หนึ่งจากการประกวด Instructables Pocket-Sized!:Dหากคุณลงทุนเงินบางส่วนในสกุลเงินดิจิทัล คุณอาจรู้อยู่แล้วว่ามีความผันผวนสูง พวกเขาเปลี่ยนในชั่วข้ามคืน และคุณไม่มีทางรู้ได้เลยว่าเงิน 'จริง' ที่คุณยังมีอยู่ในวอลล์ของคุณ
RuuviTag และ PiZero W และ Blinkt! เทอร์โมมิเตอร์แบบ Bluetooth Beacon: 3 ขั้นตอน (พร้อมรูปภาพ)
RuuviTag และ PiZero W และ Blinkt! เครื่องวัดอุณหภูมิที่ใช้ Bluetooth Beacon: คำแนะนำนี้อธิบายวิธีการอ่านข้อมูลอุณหภูมิและความชื้นจาก RuuviTag โดยใช้ Bluetooth กับ Raspberry Pi Zero W และเพื่อแสดงค่าเป็นเลขฐานสองบน Pimoroni กะพริบตา! pHAT.หรือเรียกสั้นๆ ว่า จะสร้างสถานะอย่างไร
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): 25 ขั้นตอน (พร้อมรูปภาพ)
วิธีการสร้าง Quadcoptor (NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS 3DR Radio และ FlySky TH9X): นี่คือบทแนะนำเกี่ยวกับวิธีการสร้าง Quadcopter โดยใช้มอเตอร์ NTM 28-30S 800kV 300W และ Arducopter APM 2.6 & 6H GPS & วิทยุ 3DR ฉันพยายามอธิบายแต่ละขั้นตอนด้วยรูปภาพจำนวนหนึ่ง หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดตอบกลับ