ทำความเข้าใจไลบรารี C++

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

ดู เริ่มต้นใช้งานไมโครคอนโทรลเลอร์ สำหรับคำแนะนำการใช้งานทั่วไป

ระบบบิลด์จัดเตรียมการใช้งานเฉพาะแพลตฟอร์มของไฟล์บางไฟล์ สิ่งเหล่านี้อยู่ในไดเร็กทอรีที่มีชื่อแพลตฟอร์ม เช่น 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