เกี่ยวกับ Codelab นี้
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 ของหนังสือเล่มนี้
ขอขอบคุณและขอให้สนุกกับการสร้างสรรค์