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

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

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

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

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

หากต้องการแปลงโมเดล TensorFlow ที่ได้รับการฝึกให้ทำงานบนไมโครคอนโทรลเลอร์ คุณควรใช้ Python API ของตัวแปลง TensorFlow Lite การดำเนินการนี้จะแปลงโมเดลเป็น 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

,

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

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

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

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

หากต้องการแปลงโมเดล TensorFlow ที่ได้รับการฝึกให้ทำงานบนไมโครคอนโทรลเลอร์ คุณควรใช้ Python API ของตัวแปลง TensorFlow Lite การดำเนินการนี้จะแปลงโมเดลเป็น 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