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