1. บทนำ
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ เราจะเรียนรู้วิธีใช้ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์เพื่อเรียกใช้โมเดลการเรียนรู้เชิงลึกใน Arduino Nano 33 BLE ไมโครคอนโทรลเลอร์จะเปลี่ยนเป็น "ไม้กายสิทธิ์" แบบดิจิทัล แล้วให้ผู้ใช้โบกมือและร่ายคาถาต่างๆ ขณะที่ผู้ใช้ขยับไม้กายสิทธิ์ ข้อมูลเซ็นเซอร์แบบหลายมิติที่ซับซ้อนซึ่งไม่สามารถเข้าใจในมนุษย์ได้นี้จะถูกส่งไปเป็นอินพุตสำหรับโมเดล ซึ่งจะแสดงการจัดประเภทแบบง่ายซึ่งจะแจ้งเตือนให้เราทราบหากเกิดการเคลื่อนที่หลายครั้ง
แมชชีนเลิร์นนิงในไมโครคอนโทรลเลอร์
การเรียนรู้ของเครื่องสามารถใช้เพื่อสร้างเครื่องมือ อัจฉริยะที่ทำให้ผู้ใช้ ชีวิตง่ายขึ้น เช่น Google Assistant แต่บ่อยครั้งที่ประสบการณ์เหล่านี้ต้องการการประมวลผลหรือทรัพยากรจำนวนมาก ซึ่งอาจรวมไปถึงเซิร์ฟเวอร์ระบบคลาวด์ที่มีประสิทธิภาพหรือเดสก์ท็อป แต่ปัจจุบันคุณสามารถเรียกใช้การอนุมานของแมชชีนเลิร์นนิงบนฮาร์ดแวร์ขนาดเล็กแต่ใช้พลังงานต่ำ เช่น ไมโครคอนโทรลเลอร์
ไมโครคอนโทรลเลอร์ใช้กันทั่วไป มีราคาถูก ใช้พลังงานน้อยมาก และเสถียรมาก โดยเป็นส่วนหนึ่งของอุปกรณ์ในครัวเรือนทุกประเภท ได้แก่ เครื่องใช้ รถยนต์ และของเล่น ในความเป็นจริงมีการผลิตอุปกรณ์ที่ใช้ไมโครคอนโทรลเลอร์ประมาณ 3 หมื่นล้านเครื่องต่อปี
การนำแมชชีนเลิร์นนิงเข้ามาสู่ไมโครคอนโทรลเลอร์ขนาดจิ๋ว ช่วยให้เราเพิ่มความชาญฉลาดของอุปกรณ์หลายพันล้านเครื่องที่เราใช้ในชีวิตได้โดยไม่ต้องอาศัยฮาร์ดแวร์ราคาแพงหรือการเชื่อมต่ออินเทอร์เน็ตที่เสถียร ลองจินตนาการถึงเครื่องใช้ไฟฟ้าอัจฉริยะที่สามารถปรับให้เข้ากับกิจวัตรประจำวันของคุณได้ เซ็นเซอร์อัจฉริยะในอุตสาหกรรมที่เข้าใจความแตกต่างระหว่างปัญหาและการทำงานตามปกติ และยังมีของเล่นวิเศษที่ช่วยให้เด็กๆ เรียนรู้ได้ด้วยวิธีที่สนุกและน่าประทับใจ
TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ (ซอฟต์แวร์)
TensorFlow คือเฟรมเวิร์กแมชชีนเลิร์นนิงโอเพนซอร์สของ Google สำหรับการฝึกและการเรียกใช้โมเดล TensorFlow Lite เป็นเฟรมเวิร์กซอฟต์แวร์ซึ่งเป็น TensorFlow เวอร์ชันที่ได้รับการเพิ่มประสิทธิภาพซึ่งกำหนดเป้าหมายเพื่อเรียกใช้โมเดล tensorflow ในอุปกรณ์ขนาดเล็กที่ใช้พลังงานต่ำ เช่น โทรศัพท์มือถือ
TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์คือเฟรมเวิร์กซอฟต์แวร์ซึ่งเป็น TensorFlow เวอร์ชันที่เพิ่มประสิทธิภาพซึ่งกำหนดเป้าหมายเพื่อเรียกใช้โมเดล tensorflow บนฮาร์ดแวร์ขนาดจิ๋วที่ใช้พลังงานต่ำ เช่น ไมโครคอนโทรลเลอร์ และเป็นไปตามข้อจำกัดที่จำเป็นในสภาพแวดล้อมแบบฝังเหล่านี้ กล่าวคือมีไบนารีขนาดเล็ก ไม่จำเป็นต้องมีการรองรับระบบปฏิบัติการ ไลบรารี C หรือ C++ มาตรฐานใดๆ หรือการจัดสรรหน่วยความจำแบบไดนามิก ฯลฯ
Arduino Nano 33 BLE (ฮาร์ดแวร์)
Arduino เป็นแพลตฟอร์มโอเพนซอร์สยอดนิยมที่ใช้สำหรับการสร้างโครงการอิเล็กทรอนิกส์ ซึ่งประกอบด้วย
- แผงวงจรที่ตั้งโปรแกรมได้จริง (มักเป็นไมโครคอนโทรลเลอร์) เช่น Arduino Nano 33 BLE ที่ใช้ใน Codelab นี้
- Arduino IDE (สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบบูรณาการ) คือซอฟต์แวร์ที่ใช้ในการเขียนและอัปโหลดโค้ดคอมพิวเตอร์ไปยังบอร์ดจริง
Arduino Nano 33 BLE เป็นแพลตฟอร์มที่ใช้ไมโครคอนโทรลเลอร์: คอมพิวเตอร์ขนาดเล็กบนแผงวงจรเดียว โดยมีโปรเซสเซอร์ หน่วยความจำ และฮาร์ดแวร์ I/O ที่ช่วยให้อุปกรณ์รับส่งสัญญาณดิจิทัลไปยังอุปกรณ์อื่นๆ ได้ ไมโครคอนโทรลเลอร์ต่างจากคอมพิวเตอร์ตรงที่ไม่มีประสิทธิภาพและมักไม่ได้ใช้ระบบปฏิบัติการ แต่จะมีตัวประมวลผลขนาดเล็ก ไม่มีหน่วยความจำมาก และโปรแกรมที่คุณเขียนจะทำงานบนฮาร์ดแวร์โดยตรง แต่เนื่องจากไมโครคอนโทรลเลอร์ออกแบบมาให้เรียบง่ายที่สุด ทำให้ไมโครคอนโทรลเลอร์ใช้พลังงานน้อยมาก
สิ่งที่คุณจะต้องทำ
- ตั้งค่าไมโครคอนโทรลเลอร์ Arduino Nano 33 BLE และเปลี่ยนให้เป็น "ไม้กายสิทธิ์" แบบดิจิทัล
- ตั้งค่า Arduino IDE และติดตั้งไลบรารีที่จำเป็น
- นำโปรแกรมไปใช้กับอุปกรณ์
- เสกคาถาต่างๆ ด้วยการโบกไม้กายสิทธิ์และดูคำทำนาย
สิ่งที่คุณต้องมี
- แล็ปท็อป Linux, MacOS หรือ Windows
- Arduino Nano BLE Sense 33 (ไม่มีส่วนหัว)
- สายไมโคร USB (หากใช้แล็ปท็อป USB-C ให้ใช้สาย USB-C กับไมโคร USB แทน)
- (ไม่บังคับ) แบบแท่ง ยาวประมาณ 12 นิ้ว (30 ซม.)
- (ไม่บังคับ) เทปติดหนึบ
2. ตั้งค่าไมโครคอนโทรลเลอร์ Arduino
คลายแพ็ก Arduino
นำอุปกรณ์ออกจากกล่องและดึงออกจากโฟมบรรจุหีบห่อ ไฟนี้นำไฟฟ้าและอาจสร้างปัญหาไม่ได้
เสียบเข้ากับแล็ปท็อป
- เสียบสาย MicroUSB เข้ากับเต้ารับของชิป
- เสียบปลายสายอีกด้านหนึ่งเข้ากับเต้ารับ USB บนแล็ปท็อป
- ไฟ LED ด้านซ้ายล่างบน Arduino (ด้านบนซ้ายในรูปภาพด้านล่าง) ควรสว่างขึ้น
ทำความคุ้นเคยกับเวิร์กโฟลว์
ดังที่แสดงในแผนภาพด้านบน อินฟลูเอนเซอร์ TFLite บน Arduino จะเรียกใช้การอนุมานในโมเดลเป็นระยะๆ โมเดลจะใช้ข้อมูลตัวตรวจวัดความเร่งที่ประมวลผลเป็นอินพุตและแสดงผลการคาดการณ์ ซึ่งจะแนะนำท่าทางสัมผัสที่น่าจะเกิดขึ้นมากที่สุด จากนั้น ระบบจะพิมพ์เอาต์พุตที่ต้องการและไฟ LED ด้านขวาจะสว่างขึ้น
3. ตั้งค่า Arduino IDE
1. ดาวน์โหลด Arduino IDE
ในการทําให้โปรแกรมใช้งานได้ในไมโครคอนโทรลเลอร์ Arduino เราใช้ Arduino IDE
หลังจากดาวน์โหลดแล้ว ให้ติดตั้งและเปิด Arduino IDE โดยคลิกที่แอปพลิเคชันที่มีไอคอนดังนี้
หน้า Landing Page เริ่มต้นจะเปิดขึ้นดังนี้
2. ตั้งค่า Board Manager
- จากเมนู Arduino ให้เลือก
Tools -> Board: "Arduino .." —> Boards Manager
- ค้นหา
"Arduino Nano 33 BLE"
และติดตั้งArduino nRF528x Boards (Mbed OS)
การดำเนินการนี้จะช่วยให้มั่นใจว่า Arduino Nano 33 BLE Microcontroller ของเรารองรับ Arduino IDE
- จากเมนู Arduino ให้เลือก
Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"
- สุดท้าย ให้ตรวจสอบว่ากระดานที่คุณเลือกคือ "Arduino Nano 33 BLE" ที่ด้านล่างขวาของ IDE
3. ตั้งค่าพอร์ต
จากเมนู Arduino ให้เลือก Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE)
คุณจะเห็นข้อมูลที่มีลักษณะคล้ายคลึงกันนี้
4. ตรวจสอบการเชื่อมต่อกระดาน
จากเมนู Arduino ให้เลือก Tools -> Get Board Info
คุณจะเห็นข้อมูลที่มีลักษณะคล้ายคลึงกันนี้
4. ติดตั้งไลบรารี
1. ไลบรารี TensorFlow Arduino
ไลบรารีนี้มีตัวอย่าง TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ทั้งหมด ซึ่งรวมถึงซอร์สโค้ดไม้กายสิทธิ์ที่จำเป็นสำหรับ Codelab นี้
- จากเมนู Arduino ให้เลือก
Sketch -> Include Library -> Add .ZIP Library...
- เพิ่มไลบรารี TensorFlow Arduino
.zip
ที่คุณดาวน์โหลดไว้
2. ไลบรารี LSM9DS1 Arduino
ไลบรารีนี้ช่วยให้คุณอ่านค่าของตัวตรวจวัดความเร่ง เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก และเครื่องวัดการหมุนจาก LSM9DS1 IMU ใน Arduino Nano 33 BLE Sense ได้
- จากเมนู Arduino ให้เลือก
Sketch -> Include -> Manage Libraries...
- ค้นหาและติดตั้ง
"Arduino_LSM9DS1"
5. โหลดและสร้างตัวอย่าง
1. โหลดตัวอย่าง
จากเมนู Arduino ให้เลือก File -> Examples -> Arduino_TensorFlowLite -> magic_wand
เพื่อโหลดโค้ดตัวอย่าง
ซึ่งจะเป็นการโหลดซอร์สโค้ดของไม้กายสิทธิ์
2. สร้างตัวอย่าง
คลิกปุ่ม Upload
ในหน้าต่างร่างภาพ
หลังจากนั้นสักครู่ คุณจะเห็นข้อความสีแดงที่ระบุว่ากะพริบเสร็จแล้ว ในระหว่างการอัปโหลด ไฟ LED ด้านขวาควรกะพริบและดับไปในตอนท้าย
6. สาธิต
ขณะนี้ไม้กายสิทธิ์ตรวจพบท่าทางสัมผัสได้ 3 แบบตามที่แสดงด้านล่าง
- Wing: เริ่มจากมุมซ้ายบนและค่อยๆ ตีตัวอักษร "W" 2 วินาที
- วงแหวน: เริ่มต้นตั้งตรง ขยับไม้กายสิทธิ์เป็นวงกลมตามเข็มนาฬิกา 1 วินาที
- ความชัน: เริ่มต้นด้วยการถือไม้กายสิทธิ์ขึ้นด้านบน พร้อมไฟ LED ส่องเข้าหาตัวคุณ ขยับไม้กายสิทธิ์ลงภายในแนวเอียงไปทางซ้าย แล้วเคลื่อนไปทางขวาเป็นเวลา 1 วินาที
ภาพต่อไปนี้แสดงท่าทางสัมผัส 2 แบบ โดยเริ่มจาก Slope แล้วตามด้วย Wing (ใช้ส่วนนี้เป็นข้อมูลอ้างอิงในการสาธิต)
หากต้องการเรียกใช้การสาธิต โปรดทำตามวิธีการด้านล่าง
- เมื่อเสียบ USB อยู่ ให้เลือก
Tools -> Serial Monitor
จากเมนู Arduino ซึ่งจะเปิดหน้าจอว่างที่ไม่มีเอาต์พุตในตอนแรก
- ขยับไมโครคอนโทรลเลอร์ Arduino เพื่อติดตามรูปทรงต่างๆ ข้างต้นอย่างละเอียด และดูว่าจอภาพอนุกรมตรวจพบท่าทางสัมผัสหรือไม่
- จากเอาต์พุตในหน้าจออนุกรม เราจะสังเกตเห็นว่าไม้กายสิทธิ์ตรวจพบรูปทรงทั้งหมดจริงๆ! นอกจากนี้ คุณจะเห็นว่าไฟ LED ด้านขวาสว่างขึ้นด้วย
7. ขั้นตอนถัดไป
ขอแสดงความยินดี คุณสร้างท่าทางจดจำ "ไม้กายสิทธิ์" แรกได้สำเร็จ บนไมโครคอนโทรลเลอร์ Arduino
เราหวังว่าคุณจะชอบบทนำสั้นๆ เกี่ยวกับการพัฒนาด้วย TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ แนวคิดเรื่องการเรียนรู้เชิงลึกในไมโครคอนโทรลเลอร์เป็นเรื่องใหม่ที่น่าตื่นเต้น เราขอแนะนำให้คุณออกไปทดลองเลย
เอกสารอ้างอิง
- ฝึกโมเดลของคุณเองได้เลยเมื่อมีประสบการณ์ในการทำงานกับโปรแกรมพื้นฐานแล้ว
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ ( เว็บไซต์, GitHub)
- ลองใช้ตัวอย่างอื่นๆ แล้วลองเรียกใช้บน Arduino หากระบบรองรับ
- ลองใช้ Codelab อื่น: AI ในไมโครคอนโทรลเลอร์ที่ใช้ TensorFlow Lite และ SparkFun Edge
- ลองดูหนังสือของ O'Reilly เรื่อง TinyML: Machine Learning with TensorFlow on Arduino และ Ultra-Low Power Micro-Controllers ซึ่งจะแนะนำแมชชีนเลิร์นนิงในอุปกรณ์ขนาดจิ๋วและพาไปดูโปรเจ็กต์สนุกๆ มากมาย Codelab นี้อิงตามบทที่ 11 ของหนังสือเล่มนี้
ขอขอบคุณและขอให้สนุกกับการสร้างสรรค์