ไลบรารี 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