วิธีเรียกใช้โมเดลการเรียนรู้ของเครื่อง “Hello World” บนไมโครคอนโทรลเลอร์ STM32
Contributed By DigiKey's North American Editors
2022-08-18
Machine Learning (ML) ได้รับความนิยมอย่างมากในเซิร์ฟเวอร์และแอปพลิเคชันมือถือมาหลายปีแล้ว แต่ขณะนี้ได้ย้ายข้อมูลและกลายเป็นสิ่งสำคัญในอุปกรณ์ Edge เนื่องจากอุปกรณ์ Edge นั้นจำเป็นต้องประหยัดพลังงาน นักพัฒนาจึงต้องเรียนรู้และเข้าใจวิธีปรับใช้โมเดล ML กับระบบที่ใช้ไมโครคอนโทรลเลอร์ โมเดล ML ที่ทำงานบนไมโครคอนโทรลเลอร์มักเรียกว่า tinyML น่าเสียดาย การนำโมเดลไปใช้กับไมโครคอนโทรลเลอร์ไม่ใช่ความพยายามเล็กน้อย อย่างไรก็ตาม มันเริ่มง่ายขึ้น และนักพัฒนาที่ไม่มีการฝึกอบรมเฉพาะทางจะพบว่าพวกเขาสามารถทำได้ในเวลาที่เหมาะสม
บทความนี้สำรวจวิธีที่นักพัฒนาแบบฝังตัวสามารถเริ่มต้นกับ ML โดยใช้ STMicroelectronics ไมโครคอนโทรลเลอร์ STM32 โดยจะแสดงวิธีการสร้างแอปพลิเคชัน "Hello World" โดยแปลงรุ่น TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ สำหรับใช้ในSTM32CubeIDE โดยใช้X-CUBE-AI
รู้เบื้องต้นเกี่ยวกับกรณีการใช้งานของ tinyML
TinyML เป็นสาขาที่กำลังเติบโตซึ่งนำพลังของ ML มาสู่อุปกรณ์ที่มีข้อจำกัดด้านพลังงาน เช่น ไมโครคอนโทรลเลอร์ ซึ่งมักจะใช้โครงข่ายประสาทเทียมระดับลึก อุปกรณ์ไมโครคอนโทรลเลอร์เหล่านี้สามารถเรียกใช้รุ่น ML และทำงานที่มีคุณค่าที่ขอบได้ มีหลายกรณีการใช้งานที่ tinyML น่าสนใจทีเดียว
กรณีการใช้งานครั้งแรก ซึ่งเห็นได้ในอุปกรณ์พกพาและอุปกรณ์ระบบอัตโนมัติในบ้านจำนวนมาก คือการจำแนกคำหลัก การจำคำสำคัญช่วยให้อุปกรณ์ฝังตัวใช้ไมโครโฟนเพื่อจับคำพูดและตรวจจับคำสำคัญที่ฝึกไว้ล่วงหน้า โมเดล tinyML ใช้อินพุตอนุกรมเวลาที่แทนคำพูดและแปลงเป็นคุณลักษณะเสียงพูด โดยปกติแล้วจะเป็นสเปกโตรแกรม สเปกโตรแกรมประกอบด้วยข้อมูลความถี่ในช่วงเวลาหนึ่ง จากนั้นสเปกโตรแกรมจะถูกป้อนเข้าไปในโครงข่ายประสาทเทียมที่ได้รับการฝึกฝนเพื่อตรวจหาคำที่เฉพาะเจาะจง และผลลัพธ์ที่ได้คือความน่าจะเป็นที่จะตรวจพบคำบางคำ รูปที่ 1 แสดงตัวอย่างของกระบวนการนี้
รูปที่ 1: การจำแนกคำหลักเป็นกรณีการใช้งานที่น่าสนใจสำหรับ tinyML คำพูดอินพุตจะถูกแปลงเป็นสเปกโตรแกรมแล้วป้อนลงในโครงข่ายประสาทเทียมที่ได้รับการฝึกอบรมเพื่อตรวจสอบว่ามีคำที่ฝึกไว้ล่วงหน้าอยู่หรือไม่ (ที่มาของภาพ:Arm®)
กรณีการใช้งานต่อไปสำหรับ tinyML ที่นักพัฒนาระบบฝังตัวจำนวนมากสนใจคือการจดจำภาพ ไมโครคอนโทรลเลอร์จะจับภาพจากกล้อง แล้วป้อนลงในโมเดลที่ได้รับการฝึกอบรมล่วงหน้า โมเดลสามารถแยกแยะสิ่งที่อยู่ในภาพได้ ตัวอย่างเช่น เราอาจระบุได้ว่ามีแมว สุนัข ปลา และอื่น ๆ ตัวอย่างที่ดีของวิธีการใช้การจดจำภาพที่ขอบคือออดวิดีโอ กริ่งประตูแบบวิดีโอมักจะตรวจจับได้ว่ามีมนุษย์อยู่ที่ประตูหรือไม่ หรือว่ามีพัสดุเหลืออยู่หรือไม่
กรณีการใช้งานล่าสุดที่ได้รับความนิยมสูงคือการใช้ tinyML สำหรับการบำรุงรักษาเชิงคาดการณ์ การบำรุงรักษาเชิงคาดการณ์ใช้ ML เพื่อคาดการณ์สถานะของอุปกรณ์ตามการตรวจจับความผิดปกติ อัลกอริธึมการจำแนกประเภท และแบบจำลองการคาดการณ์ อีกครั้ง มีการใช้งานมากมายตั้งแต่ระบบ HVAC ไปจนถึงอุปกรณ์ในโรงงาน
แม้ว่ากรณีการใช้งานสามกรณีข้างต้นกำลังเป็นที่นิยมสำหรับ tinyML แต่ก็มีกรณีการใช้งานที่เป็นไปได้มากมายที่นักพัฒนาซอฟต์แวร์สามารถค้นหาได้ นี่คือรายการด่วน:
- การจำแนกท่าทาง
- การตรวจจับความผิดปกติ
- เครื่องอ่านมิเตอร์แบบอนาล็อก
- คำแนะนำและการควบคุม (GNC)
- การตรวจจับพัสดุ
ไม่ว่ากรณีการใช้งานจะเป็นเช่นไร วิธีที่ดีที่สุดในการเริ่มทำความคุ้นเคยกับ TinyML คือการใช้แอปพลิเคชัน “Hello World” ซึ่งช่วยให้นักพัฒนาเรียนรู้และเข้าใจกระบวนการพื้นฐานที่พวกเขาจะปฏิบัติตามเพื่อให้ระบบทำงานได้น้อยที่สุด มีห้าขั้นตอนที่จำเป็นในการรันโมเดล tinyML บนไมโครคอนโทรลเลอร์ STM32:
- เก็บข้อมูล
- ข้อมูลฉลาก
- ฝึกโครงข่ายประสาท
- แปลงโมเดล
- เรียกใช้โมเดลบนไมโครคอนโทรลเลอร์
จับภาพ ติดฉลาก และฝึกโมเดล “Hello World”
โดยทั่วไปแล้ว นักพัฒนาจะมีตัวเลือกมากมายสำหรับวิธีที่พวกเขาจะรวบรวมและติดป้ายกำกับข้อมูลที่จำเป็นในการฝึกโมเดลของตน ประการแรก มีฐานข้อมูลการฝึกอบรมออนไลน์มากมาย นักพัฒนาสามารถค้นหาข้อมูลที่ใครบางคนได้รวบรวมและติดป้ายกำกับ ตัวอย่างเช่น สำหรับการตรวจจับภาพพื้นฐาน มี CIFAR-10 หรือ ImageNet ในการฝึกโมเดลให้ตรวจจับรอยยิ้มในภาพถ่าย มีคอลเลกชั่นรูปภาพด้วยเช่นกัน ที่เก็บข้อมูลออนไลน์เป็นที่ที่ดีในการเริ่มต้นอย่างชัดเจน
หากข้อมูลที่จำเป็นยังไม่ได้เปิดเผยต่อสาธารณะบนอินเทอร์เน็ต อีกทางเลือกหนึ่งคือให้นักพัฒนาสร้างข้อมูลของตนเอง Matlab หรือเครื่องมืออื่นๆ สามารถใช้สร้างชุดข้อมูลได้ หากการสร้างข้อมูลอัตโนมัติไม่ใช่ตัวเลือก ก็สามารถทำได้ด้วยตนเอง สุดท้าย หากทั้งหมดนี้ดูเหมือนใช้เวลานานเกินไป มีชุดข้อมูลบางชุดสำหรับซื้อ รวมทั้งบนอินเทอร์เน็ตด้วย การรวบรวมข้อมูลมักจะเป็นตัวเลือกที่น่าตื่นเต้นและน่าสนใจที่สุด แต่ก็เป็นงานที่ดีที่สุดเช่นกัน
ตัวอย่าง “Hello World” ที่กำลังสำรวจอยู่ที่นี่แสดงวิธีการฝึกแบบจำลองเพื่อสร้างคลื่นไซน์และปรับใช้กับ STM32 ตัวอย่างนี้รวบรวมโดย Pete Warden และ Daniel Situnayake ซึ่งเป็นส่วนหนึ่งของงานที่ Google เกี่ยวกับ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ สิ่งนี้ทำให้งานง่ายขึ้นเพราะพวกเขาได้รวบรวมบทแนะนำสาธารณะที่เรียบง่ายเกี่ยวกับการจับภาพ การติดฉลาก และการฝึกโมเดล สามารถพบได้ใน Github ที่นี่ เมื่อมีนักพัฒนาควรคลิกปุ่ม "เรียกใช้ใน Google Colab" Google Colab ย่อมาจาก Google Collaboratory ช่วยให้นักพัฒนาสามารถเขียนและเรียกใช้ Python ในเบราว์เซอร์โดยไม่มีการกำหนดค่าใด ๆ และให้การเข้าถึง Google GPU ได้ฟรี
ผลลัพธ์จากการเดินผ่านตัวอย่างการฝึกอบรมจะมีไฟล์โมเดลที่แตกต่างกันสองไฟล์ model.tflite โมเดล TensorFlow ที่ถูกหาปริมาณสำหรับไมโครคอนโทรลเลอร์ และโมเดล model_no_quant.tflite ที่ไม่ถูกวัดปริมาณ การหาปริมาณจะระบุวิธีการจัดเก็บการเปิดใช้งานโมเดลและอคติในรูปแบบตัวเลข เวอร์ชันควอนไทซ์จะสร้างโมเดลที่เล็กกว่าซึ่งเหมาะกับไมโครคอนโทรลเลอร์มากกว่า สำหรับผู้อ่านที่อยากรู้อยากเห็น ผลลัพธ์ของแบบจำลองที่ได้รับการฝึกอบรมกับผลลัพธ์ของคลื่นไซน์จริงสามารถดูได้ในรูปที่ 2 เอาต์พุตของโมเดลเป็นสีแดง เอาต์พุตคลื่นไซน์ไม่สมบูรณ์แบบ แต่ทำงานได้ดีพอสำหรับโปรแกรม "Hello World"
รูปที่ 2: การเปรียบเทียบระหว่างการทำนายแบบจำลอง TensorFlow สำหรับคลื่นไซน์กับค่าจริง (แหล่งรูปภาพ: Beningo Embedded Group)
การเลือกบอร์ดพัฒนา
ก่อนที่จะดูวิธีการแปลงโมเดล TensorFlow ให้ทำงานบนไมโครคอนโทรลเลอร์ จำเป็นต้องเลือกไมโครคอนโทรลเลอร์สำหรับการปรับใช้ในโมเดลก่อน บทความนี้จะเน้นที่ไมโครคอนโทรลเลอร์ STM32 เนื่องจาก STMicroelectronics มีเครื่องมือ tinyML/ML จำนวนมากที่ทำงานได้ดีสำหรับการแปลงและใช้งานโมเดล นอกจากนี้ STMicroelectronics ยังมีชิ้นส่วนต่าง ๆ ที่เข้ากันได้กับเครื่องมือ ML (ภาพที่ 3)
รูปที่ 3: แสดงเป็นไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์ (MPU) ซึ่งปัจจุบันรองรับโดยระบบนิเวศ AI ของ STMicroelectronics (แหล่งที่มารูปภาพ: STMicroelectronics)
หากหนึ่งในบอร์ดเหล่านี้วางอยู่รอบ ๆ สำนักงาน เหมาะอย่างยิ่งสำหรับการติดตั้งแอปพลิเคชัน “Hello World” อย่างไรก็ตาม สำหรับผู้ที่สนใจที่จะก้าวข้ามตัวอย่างนี้และเข้าสู่การควบคุมด้วยท่าทางสัมผัสหรือการระบุคำหลัก ให้เลือก STM32 B-L4S5I-IOT01A โหนดการค้นพบ IoT (รูปที่ 4)
บอร์ดนี้มีโปรเซสเซอร์ Arm Cortex®-M4 ที่ใช้ซีรี่ส์ STM32L4+ โปรเซสเซอร์มีหน่วยความจำแฟลช 2 เมกะไบต์ (Mbytes) และ RAM 640 กิโลไบต์ (Kbytes) ซึ่งให้พื้นที่มากมายสำหรับรุ่น tinyML โมดูลนี้ปรับเปลี่ยนได้สำหรับกรณีทดลองของ tinyML เนื่องจากมี MP34DT01 ไมโครโฟนระบบไมโครเครื่องกลไฟฟ้า (MEMS) จาก STMicroelectronics ที่สามารถใช้สำหรับการพัฒนาแอปพลิเคชันการจำคำสำคัญ นอกจากนี้ LIS3MDLTR onboard มาตรความเร่งแบบสามแกนจาก STMicroelectronics เช่นกัน สามารถใช้สำหรับการตรวจจับท่าทางสัมผัสแบบ TinyML
รูปที่ 4: STM32 B-L4S5I-IOT01A Discovery IoT Node เป็นแพลตฟอร์มการทดลองที่ปรับเปลี่ยนได้สำหรับ tinyML เนื่องจากมีโปรเซสเซอร์ Arm Cortex-M4 ออนบอร์ด ไมโครโฟน MEMS และมาตรความเร่งแบบสามแกน (แหล่งที่มารูปภาพ: STMicroelectronics)
การแปลงและรันโมเดล TensorFlow Lite โดยใช้ STM32Cube.AI
ด้วยบอร์ดพัฒนาที่สามารถใช้รันโมเดล tinyML ได้ ตอนนี้นักพัฒนาสามารถเริ่มแปลงโมเดล TensorFlow Lite เป็นสิ่งที่สามารถทำงานบนไมโครคอนโทรลเลอร์ได้ โมเดล TensorFlow Lite สามารถทำงานบนไมโครคอนโทรลเลอร์ได้โดยตรง แต่ต้องใช้สภาพแวดล้อมรันไทม์เพื่อประมวลผล
เมื่อรันโมเดล จะต้องดำเนินการชุดของฟังก์ชันต่าง ๆ ฟังก์ชันเหล่านี้เริ่มต้นด้วยการรวบรวมข้อมูลเซ็นเซอร์ จากนั้นกรอง แยกคุณลักษณะที่จำเป็น และป้อนไปยังโมเดล ตัวแบบจะคายผลลัพธ์ออกมาซึ่งสามารถกรองเพิ่มเติมได้ จากนั้นโดยปกติจะมีการดำเนินการบางอย่าง รูปที่ 5 แสดงภาพรวมของกระบวนการนี้
รูปที่ 5: วิธีที่ข้อมูลไหลจากเซ็นเซอร์ไปยังรันไทม์ จากนั้นไปยังเอาต์พุตในแอปพลิเคชัน tinyML (แหล่งรูปภาพ: Beningo Embedded Group)
ปลั๊กอิน X-CUBE-AI สำหรับ STM32CubeMx จัดเตรียมสภาพแวดล้อมรันไทม์เพื่อตีความโมเดล TensorFlow Lite และเสนอรันไทม์อื่นและเครื่องมือการแปลงที่นักพัฒนาสามารถใช้ประโยชน์ได้ ปลั๊กอิน X-CUBE-AI ไม่ได้เปิดใช้งานตามค่าเริ่มต้นในโปรเจ็กต์ อย่างไรก็ตาม หลังจากสร้างโปรเจ็กต์ใหม่และเริ่มต้นบอร์ดแล้ว ภายใต้ Software Packs-> Select Components จะมีตัวเลือกในการเปิดใช้งานรันไทม์ AI มีหลายตัวเลือกที่นี่ ตรวจสอบให้แน่ใจว่าใช้เทมเพลตแอปพลิเคชันสำหรับตัวอย่างนี้ ดังแสดงในรูปที่ 6
รูปที่ 6: ต้องเปิดใช้งานปลั๊กอิน X-CUBE-AI โดยใช้เทมเพลตแอปพลิเคชันสำหรับตัวอย่างนี้ (แหล่งรูปภาพ: Beningo Embedded Group)
เมื่อเปิดใช้งาน X-CUBE-AI หมวดหมู่ STMicroelectronics X-CUBE-AI จะปรากฏใน toolchain การคลิกที่หมวดหมู่จะทำให้ผู้พัฒนาสามารถเลือกไฟล์โมเดลที่สร้างขึ้นและตั้งค่าพารามิเตอร์ของโมเดลดังแสดงในรูปที่ 7 ปุ่มวิเคราะห์จะวิเคราะห์โมเดลและให้ข้อมูล RAM, ROM และรอบการดำเนินการแก่นักพัฒนา ขอแนะนำอย่างยิ่งให้นักพัฒนาเปรียบเทียบตัวเลือกรุ่น Keras และ TFLite ในตัวอย่างแบบจำลองคลื่นไซน์ ซึ่งมีขนาดเล็ก จะไม่มีอะไรแตกต่างกันมาก แต่สามารถสังเกตได้ สามารถสร้างโครงการได้โดยคลิก "สร้างรหัส"
รูปที่ 7: ปุ่มวิเคราะห์จะให้ข้อมูล RAM, ROM และรอบการดำเนินการแก่นักพัฒนา (แหล่งรูปภาพ: Beningo Embedded Group)
ตัวสร้างโค้ดจะเริ่มต้นโครงการและสร้างในสภาพแวดล้อมรันไทม์สำหรับโมเดล tinyML อย่างไรก็ตาม ตามค่าเริ่มต้น จะไม่มีสิ่งใดป้อนโมเดล นักพัฒนาจำเป็นต้องเพิ่มโค้ดเพื่อให้ค่าอินพุตของโมเดล - ค่า x - ซึ่งโมเดลจะตีความและใช้เพื่อสร้างค่าไซน์ y ต้องเพิ่มโค้ดสองสามส่วนในฟังก์ชัน earn_and_process_data และ post_process ดังแสดงในรูปที่ 8
รูปที่ 8: รหัสที่แสดงจะเชื่อมต่อค่าเซ็นเซอร์อินพุตปลอมกับแบบจำลองคลื่นไซน์ (แหล่งรูปภาพ: Beningo Embedded Group)
ณ จุดนี้ ตัวอย่างพร้อมที่จะเรียกใช้แล้ว หมายเหตุ: เพิ่มคำสั่ง printf เพื่อรับเอาต์พุตโมเดลสำหรับการตรวจสอบอย่างรวดเร็ว การคอมไพล์และการปรับใช้ที่รวดเร็วส่งผลให้โมเดล TinyML ของ “Hello World” ทำงานอยู่ การดึงเอาท์พุตของแบบจำลองสำหรับวงจรเต็มจะส่งผลให้เกิดคลื่นไซน์ที่แสดงในรูปที่ 9 มันไม่สมบูรณ์แบบ แต่มันยอดเยี่ยมสำหรับแอปพลิเคชั่น tinyML ตัวแรก จากที่นี่ นักพัฒนาสามารถผูกเอาท์พุตกับโมดูเลเตอร์ความกว้างพัลส์ (PWM) และสร้างคลื่นไซน์
รูปที่ 9: เอาต์พุตแบบจำลองคลื่นไซน์ "Hello World" เมื่อทำงานบน STM32 (แหล่งรูปภาพ: Beningo Embedded Group)
คำแนะนำและเคล็ดลับสำหรับ ML บนระบบฝังตัว
นักพัฒนาที่ต้องการเริ่มต้นใช้งาน ML บนระบบที่ใช้ไมโครคอนโทรลเลอร์จะมีส่วนไม่น้อยในการทำให้แอปพลิเคชั่น tinyML ตัวแรกเริ่มทำงาน อย่างไรก็ตาม มี "เคล็ดลับและลูกเล่น" หลายประการที่ควรคำนึงถึงซึ่งสามารถลดความซับซ้อนและเพิ่มความเร็วในการพัฒนาได้:
- ดู TensorFlow Lite สำหรับตัวอย่างไมโครคอนโทรลเลอร์ "Hello World" รวมถึงไฟล์ Google Colab ใช้เวลาในการปรับพารามิเตอร์และทำความเข้าใจว่าพารามิเตอร์เหล่านี้ส่งผลต่อโมเดลที่ได้รับการฝึกอบรมอย่างไร
- ใช้แบบจำลองเชิงปริมาณสำหรับแอปพลิเคชันไมโครคอนโทรลเลอร์ โมเดลเชิงปริมาณถูกบีบอัดเพื่อทำงานกับ uint8_t แทนที่จะเป็นตัวเลขทศนิยม 32 บิต ส่งผลให้โมเดลมีขนาดเล็กลงและดำเนินการเร็วขึ้น
- สำรวจตัวอย่างเพิ่มเติมในที่เก็บ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ ตัวอย่างอื่นๆ ได้แก่ การตรวจจับท่าทางสัมผัสและการตรวจจับคำสำคัญ
- นำตัวอย่าง “Hello World” โดยการเชื่อมต่อเอาท์พุตของโมเดลเข้ากับ PWM และฟิลเตอร์กรองความถี่ต่ำเพื่อดูคลื่นไซน์ที่เป็นผลลัพธ์ ทดลองกับรันไทม์เพื่อเพิ่มและลดความถี่คลื่นไซน์
- เลือกบอร์ดพัฒนาที่มีเซ็นเซอร์ "พิเศษ" ที่จะอนุญาตให้ใช้แอปพลิเคชัน ML ได้หลากหลาย
- แม้ว่าการรวบรวมข้อมูลจะเป็นเรื่องสนุก แต่โดยทั่วไปแล้วการซื้อหรือใช้ฐานข้อมูลโอเพนซอร์สเพื่อฝึกโมเดลนั้นง่ายกว่า
นักพัฒนาซอฟต์แวร์ที่ปฏิบัติตาม "คำแนะนำและเคล็ดลับ" เหล่านี้จะช่วยประหยัดเวลาและความเศร้าโศกได้ไม่น้อยเมื่อรักษาความปลอดภัยให้กับแอปพลิเคชันของตน
สรุป
ML มาถึงขอบเครือข่ายแล้ว และระบบที่ใช้ไมโครคอนโทรลเลอร์ที่มีข้อจำกัดด้านทรัพยากรเป็นเป้าหมายหลัก เครื่องมือล่าสุดช่วยให้สามารถแปลงโมเดล ML และปรับให้เหมาะสมเพื่อให้ทำงานบนระบบแบบเรียลไทม์ได้ ดังที่แสดงไว้ การติดตั้งโมเดลและใช้งานบนบอร์ดพัฒนา STM32 นั้นค่อนข้างง่าย แม้จะมีความซับซ้อนที่เกี่ยวข้องก็ตาม ในขณะที่การอภิปรายตรวจสอบโมเดลอย่างง่ายที่สร้างคลื่นไซน์ แต่โมเดลที่ซับซ้อนกว่ามาก เช่น การตรวจจับท่าทางสัมผัสและการจำแนกคำหลักก็เป็นไปได้

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.