ไมโครคอนโทรลเลอร์มี RAM และพื้นที่เก็บข้อมูลที่จำกัด ซึ่งทำให้ข้อจำกัดด้านขนาดของโมเดลแมชชีนเลิร์นนิง นอกจากนี้ ปัจจุบัน TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ยังรองรับการดำเนินการบางส่วนด้วย ดังนั้นสถาปัตยกรรมโมเดลบางแบบอาจใช้ไม่ได้
เอกสารนี้อธิบายกระบวนการแปลงโมเดล TensorFlow ให้ทำงานบนไมโครคอนโทรลเลอร์ นอกจากนี้ยังสรุปการดำเนินการที่รองรับและให้คำแนะนำในการออกแบบและฝึกโมเดลให้พอดีกับหน่วยความจำที่จำกัด
ดูตัวอย่างการสร้างและการแปลงโมเดลจากต้นทางถึงปลายทางได้ที่ตัวอย่าง Hello World
การแปลงโมเดล
หากต้องการแปลงโมเดล TensorFlow ที่ฝึกให้เรียกใช้บนไมโครคอนโทรลเลอร์ คุณควรใช้ TensorFlow Lite ตัวแปลง Python API
ซึ่งจะแปลงโมเดลเป็น FlatBuffer
โดยจะลดขนาดโมเดล และแก้ไขโมเดลเพื่อใช้การดำเนินการ TensorFlow Lite
หากต้องการได้ขนาดโมเดลที่เล็กที่สุดเท่าที่จะทำได้ คุณควรพิจารณาใช้การวัดปริมาณหลังการฝึก
แปลงเป็นอาร์เรย์ C
แพลตฟอร์มไมโครคอนโทรลเลอร์จำนวนมากไม่รองรับระบบไฟล์แบบเนทีฟ วิธีที่ง่ายที่สุดในการใช้โมเดลจากโปรแกรมคือการรวมเป็นอาร์เรย์ C และคอมไพล์ลงในโปรแกรมของคุณ
คำสั่ง unix ต่อไปนี้จะสร้างไฟล์ต้นฉบับ C ที่มีโมเดล TensorFlow Lite เป็นอาร์เรย์ 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
สถาปัตยกรรมโมเดลและการฝึก
เมื่อออกแบบโมเดลเพื่อใช้กับไมโครคอนโทรลเลอร์ คุณต้องพิจารณาขนาดโมเดล ภาระงาน และการดำเนินการที่ใช้
ขนาดโมเดล
โมเดลต้องมีขนาดเล็กพอที่จะอยู่ในหน่วยความจำของอุปกรณ์เป้าหมายพร้อมกับส่วนที่เหลือของโปรแกรม ทั้งในรูปแบบไบนารีและรันไทม์
หากต้องการสร้างโมเดลที่เล็กลง คุณสามารถใช้เลเยอร์ที่น้อยลงหรือเล็กลงในสถาปัตยกรรมของคุณได้ อย่างไรก็ตาม โมเดลขนาดเล็กมีแนวโน้มที่จะได้รับผลกระทบจากการปรับตัวน้อยกว่าที่ควร ซึ่งหมายความว่าในหลายๆ ปัญหา การลองใช้โมเดลขนาดใหญ่ที่สุดที่พอดีกับหน่วยความจำจึงเป็นเรื่องที่เหมาะสม อย่างไรก็ตาม การใช้โมเดลขนาดใหญ่จะทำให้ภาระงานของตัวประมวลผลเพิ่มขึ้นด้วย
ภาระงาน
ขนาดและความซับซ้อนของโมเดลมีผลต่อปริมาณงาน โมเดลขนาดใหญ่ที่ซับซ้อนอาจส่งผลให้มีรอบการทำงานสูงขึ้น ซึ่งหมายความว่าโปรเซสเซอร์ของอุปกรณ์จะใช้เวลาทำงานมากขึ้นและไม่มีการใช้งานน้อยลง วิธีนี้จะเพิ่มการใช้พลังงานและพลังงานความร้อน ซึ่งอาจเป็นปัญหาโดยขึ้นอยู่กับแอปพลิเคชันของคุณ
การสนับสนุนการดำเนินการ
ปัจจุบัน TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์รองรับการดำเนินการ TensorFlow บางส่วนที่จำกัด ซึ่งส่งผลต่อสถาปัตยกรรมโมเดลที่เรียกใช้ได้ เรากำลังดำเนินการเพื่อขยายการสนับสนุนการดำเนินการ ทั้งในแง่ของการใช้งานอ้างอิงและการเพิ่มประสิทธิภาพสำหรับสถาปัตยกรรมที่เฉพาะเจาะจง
ดูการดำเนินการที่รองรับได้ในไฟล์ micro_mutable_ops_resolver.h