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

ไมโครคอนโทรลเลอร์มี 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