สร้างและแปลงโมเดล

ไมโครคอนโทรลเลอร์มี RAM และพื้นที่เก็บข้อมูลจำกัด ซึ่งทำให้ขนาดของโมเดลแมชชีนเลิร์นนิงมีข้อจำกัด นอกจากนี้ LiteRT สำหรับไมโครคอนโทรลเลอร์ ยังรองรับการดำเนินการบางอย่างเท่านั้น จึงอาจใช้กับสถาปัตยกรรมโมเดล บางอย่างไม่ได้

เอกสารนี้อธิบายกระบวนการแปลงโมเดล TensorFlow เพื่อเรียกใช้ใน ไมโครคอนโทรลเลอร์ นอกจากนี้ ยังระบุการดำเนินการที่รองรับและให้คำแนะนำบางอย่างเกี่ยวกับการออกแบบและการฝึกโมเดลให้พอดีกับหน่วยความจำที่จำกัด

ดูตัวอย่างที่สร้างและแปลงโมเดลได้ตั้งแต่ต้นจนจบและเรียกใช้ได้ที่ตัวอย่าง Hello World

การแปลงโมเดล

หากต้องการแปลงโมเดล TensorFlow ที่ฝึกแล้วให้ทำงานบนไมโครคอนโทรลเลอร์ คุณควรใช้ LiteRT converter Python API ซึ่งจะ แปลงโมเดลเป็น FlatBuffer ลดขนาดโมเดล และแก้ไขให้ใช้การดำเนินการ LiteRT

หากต้องการให้โมเดลมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ คุณควรพิจารณาใช้การวัดปริมาณหลังการฝึก

แปลงเป็นอาร์เรย์ C

แพลตฟอร์มไมโครคอนโทรลเลอร์จำนวนมากไม่รองรับระบบไฟล์เนทีฟ วิธีที่ง่ายที่สุดในการใช้โมเดลจากโปรแกรมคือการรวมไว้เป็นอาร์เรย์ C และ คอมไพล์ลงในโปรแกรม

คำสั่ง Unix ต่อไปนี้จะสร้างไฟล์ต้นฉบับ C ที่มีโมเดล LiteRT เป็นอาร์เรย์ char

xxd -i converted_model.tflite > model_data.cc

เอาต์พุตจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

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

ดูตัวอย่างวิธีรวมและใช้โมเดลในโปรแกรมได้ที่ hello_world_test.cc ในตัวอย่าง Hello World

สถาปัตยกรรมและการฝึกโมเดล

เมื่อออกแบบโมเดลเพื่อใช้ในไมโครคอนโทรลเลอร์ สิ่งสำคัญที่ต้องพิจารณาคือ ขนาดของโมเดล ปริมาณงาน และการดำเนินการที่ใช้

ขนาดโมเดล

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

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

ภาระงาน

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

การสนับสนุนการปฏิบัติงาน

ปัจจุบัน LiteRT for Microcontrollers รองรับการดำเนินการของ TensorFlow บางส่วนเท่านั้น ซึ่งส่งผลต่อสถาปัตยกรรมของโมเดลที่สามารถเรียกใช้ได้ เรา กำลังขยายการรองรับการทำงาน ทั้งในแง่ของการอ้างอิง การใช้งานและการเพิ่มประสิทธิภาพสำหรับสถาปัตยกรรมที่เฉพาะเจาะจง

การดำเนินการที่รองรับจะแสดงในไฟล์ micro_mutable_ops_resolver.h