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

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

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

สำหรับตัวอย่างการสร้างและแปลงโมเดลแบบ end-to-end ที่รันได้ โปรดดู Colab ต่อไปนี้ซึ่งเป็นส่วนหนึ่งของตัวอย่าง Hello World :

train_hello_world_model.ipynb

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

หากต้องการแปลงโมเดล 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