ไลบรารี TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ C++ เป็นส่วนหนึ่งของ พื้นที่เก็บข้อมูล TensorFlow ออกแบบมาให้อ่านง่าย ปรับเปลี่ยนง่าย ผ่านการทดสอบอย่างดี ผสานรวมได้ง่าย และเข้ากันได้กับ TensorFlow Lite ทั่วไป
เอกสารต่อไปนี้สรุปโครงสร้างพื้นฐานของไลบรารี C++ และให้ข้อมูลเกี่ยวกับการสร้างโปรเจ็กต์ของคุณเอง
โครงสร้างไฟล์
ไดเร็กทอรี micro
ทมีโครงสร้างที่ค่อนข้างง่าย อย่างไรก็ตาม เนื่องจากตั้งอยู่ภายในพื้นที่เก็บข้อมูล TensorFlow ที่กว้างขวาง เราจึงสร้างสคริปต์และไฟล์โปรเจ็กต์ที่สร้างไว้ล่วงหน้าซึ่งจัดเตรียมไฟล์ต้นฉบับที่เกี่ยวข้องโดยแยกออกจากกันภายในสภาพแวดล้อมการพัฒนาแบบฝังต่างๆ
ไฟล์สำคัญ
ไฟล์ที่สำคัญที่สุดสำหรับการใช้ล่าม TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์จะอยู่ที่รูทของโปรเจ็กต์ พร้อมด้วยการทดสอบ:
[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.
-
micro_error_reporter.h
ส่งออกข้อมูลการดีบัก -
micro_interpreter.h
มีโค้ดสำหรับจัดการและรันโมเดล
ดู เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ สำหรับคำแนะนำการใช้งานทั่วไป
ระบบบิลด์จัดเตรียมการใช้งานเฉพาะแพลตฟอร์มของไฟล์บางไฟล์ สิ่งเหล่านี้อยู่ในไดเร็กทอรีที่มีชื่อแพลตฟอร์ม เช่น cortex-m
มีไดเร็กทอรีอื่น ๆ อีกหลายไดเร็กทอรี รวมไปถึง:
-
kernel
ซึ่งมีการดำเนินการและโค้ดที่เกี่ยวข้อง -
tools
ซึ่งมีเครื่องมือสร้างและผลลัพธ์ -
examples
ซึ่งมีโค้ดตัวอย่าง
เริ่มโครงการใหม่
เราขอแนะนำให้ใช้ตัวอย่าง Hello World เป็นเทมเพลตสำหรับโปรเจ็กต์ใหม่ คุณสามารถขอรับเวอร์ชันสำหรับแพลตฟอร์มที่คุณเลือกได้โดยทำตามคำแนะนำในส่วนนี้
ใช้ไลบรารี Arduino
หากคุณใช้ Arduino ตัวอย่าง Hello World จะรวมอยู่ในไลบรารี Arduino_TensorFlowLite
Arduino ซึ่งคุณสามารถติดตั้งด้วยตนเองใน Arduino IDE และใน Arduino Create
เมื่อเพิ่มไลบรารีแล้ว ให้ไปที่ File -> Examples
คุณควรเห็นตัวอย่างบริเวณด้านล่างสุดของรายการชื่อ TensorFlowLite:hello_world
เลือกแล้วคลิก hello_world
เพื่อโหลดตัวอย่าง จากนั้นคุณสามารถบันทึกสำเนาของตัวอย่างและใช้เป็นพื้นฐานของโปรเจ็กต์ของคุณเองได้
สร้างโครงการสำหรับแพลตฟอร์มอื่นๆ
TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์สามารถสร้างโปรเจ็กต์แบบสแตนด์อโลนที่มีไฟล์ต้นฉบับที่จำเป็นทั้งหมดได้ โดยใช้ Makefile
สภาพแวดล้อมที่รองรับในปัจจุบันคือ Keil, Make และ Mbed
หากต้องการสร้างโปรเจ็กต์เหล่านี้ด้วย Make ให้โคลน พื้นที่เก็บข้อมูล TensorFlow/tflite-micro และรันคำสั่งต่อไปนี้:
make -f tensorflow/lite/micro/tools/make/Makefile generate_projects
การดำเนินการนี้จะใช้เวลาสักครู่ เนื่องจากต้องดาวน์โหลด toolchains ขนาดใหญ่บางส่วนสำหรับการขึ้นต่อกัน เมื่อเสร็จแล้ว คุณจะเห็นบางโฟลเดอร์ที่สร้างขึ้นภายในเส้นทาง เช่น gen/linux_x86_64/prj/
(เส้นทางที่แน่นอนขึ้นอยู่กับระบบปฏิบัติการโฮสต์ของคุณ) โฟลเดอร์เหล่านี้ประกอบด้วยโปรเจ็กต์ที่สร้างขึ้นและไฟล์ต้นฉบับ
หลังจากรันคำสั่งแล้ว คุณจะสามารถค้นหาโปรเจ็กต์ Hello World ได้ใน gen/linux_x86_64/prj/hello_world
ตัวอย่างเช่น hello_world/keil
จะมีโปรเจ็กต์ Keil
ดำเนินการทดสอบ
หากต้องการสร้างไลบรารีและรันการทดสอบหน่วยทั้งหมด ให้ใช้คำสั่งต่อไปนี้:
make -f tensorflow/lite/micro/tools/make/Makefile test
หากต้องการรันการทดสอบแต่ละรายการ ให้ใช้คำสั่งต่อไปนี้ โดยแทนที่ <test_name>
ด้วยชื่อของการทดสอบ:
make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>
คุณสามารถค้นหาชื่อการทดสอบได้ใน Makefiles ของโปรเจ็กต์ ตัวอย่างเช่น examples/hello_world/Makefile.inc
ระบุชื่อการทดสอบสำหรับตัวอย่าง Hello World
สร้างไบนารี
หากต้องการสร้างไบนารีที่รันได้สำหรับโปรเจ็กต์ที่กำหนด (เช่นแอปพลิเคชันตัวอย่าง) ให้ใช้คำสั่งต่อไปนี้ โดยแทนที่ <project_name>
ด้วยโปรเจ็กต์ที่คุณต้องการสร้าง:
make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin
ตัวอย่างเช่น คำสั่งต่อไปนี้จะสร้างไบนารีสำหรับแอปพลิเคชัน Hello World :
make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin
ตามค่าเริ่มต้น โปรเจ็กต์จะถูกคอมไพล์สำหรับระบบปฏิบัติการโฮสต์ หากต้องการระบุสถาปัตยกรรมเป้าหมายอื่น ให้ใช้ TARGET=
และ TARGET_ARCH=
ตัวอย่างต่อไปนี้แสดงวิธีสร้างตัวอย่าง Hello World สำหรับ cortex-m0 ทั่วไป:
make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin
เมื่อระบุเป้าหมายแล้ว ไฟล์ต้นฉบับเฉพาะเป้าหมายที่มีอยู่จะถูกนำมาใช้แทนโค้ดต้นฉบับ ตัวอย่างเช่น ไดเร็กทอรีย่อย examples/hello_world/cortex_m_generic
มีการใช้งาน SparkFun Edge ของไฟล์ constants.cc
และ output_handler.cc
ซึ่งจะถูกใช้เมื่อมีการระบุ cortex_m_generic
เป้าหมาย
คุณสามารถค้นหาชื่อโปรเจ็กต์ได้ใน Makefiles ของโปรเจ็กต์ ตัวอย่างเช่น examples/hello_world/Makefile.inc
ระบุชื่อไบนารีสำหรับตัวอย่าง Hello World
เมล็ดที่ได้รับการปรับปรุงประสิทธิภาพ
เคอร์เนลอ้างอิงในรูทของ tensorflow/lite/micro/kernels
ถูกนำมาใช้ใน C/C++ ล้วนๆ และไม่รวมการปรับแต่งฮาร์ดแวร์เฉพาะแพลตฟอร์ม
เคอร์เนลเวอร์ชันที่ได้รับการปรับปรุงให้เหมาะสมจะมีอยู่ในไดเร็กทอรีย่อย ตัวอย่างเช่น kernels/cmsis-nn
มีเคอร์เนลที่ได้รับการปรับปรุงหลายตัวซึ่งใช้ไลบรารี CMSIS-NN ของ Arm
หากต้องการสร้างโปรเจ็กต์โดยใช้เคอร์เนลที่ปรับให้เหมาะสม ให้ใช้คำสั่งต่อไปนี้ โดยแทนที่ <subdirectory_name>
ด้วยชื่อของไดเร็กทอรีย่อยที่มีการออปติไมซ์:
make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects
คุณสามารถเพิ่มการเพิ่มประสิทธิภาพของคุณเองได้โดยการสร้างโฟลเดอร์ย่อยใหม่สำหรับการปรับปรุงเหล่านั้น เราสนับสนุนคำขอดึงสำหรับการใช้งานที่ได้รับการปรับปรุงใหม่
สร้างไลบรารี Arduino
หากคุณต้องการสร้างไลบรารีบิวด์ใหม่ คุณสามารถเรียกใช้สคริปต์ต่อไปนี้ได้จากที่เก็บ TensorFlow:
./tensorflow/lite/micro/tools/ci_build/test_arduino.sh
ไลบรารีผลลัพธ์สามารถพบได้ใน gen/arduino_x86_64/prj/tensorflow_lite.zip
พอร์ตไปยังอุปกรณ์ใหม่
คำแนะนำเกี่ยวกับการย้าย TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ไปยังแพลตฟอร์มและอุปกรณ์ใหม่ๆ มีอยู่ใน micro/docs/new_platform_support.md