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

ไลบรารี LiteRT for Microcontrollers C++ เป็นส่วนหนึ่งของ ที่เก็บ TensorFlow ข้อความนี้ออกแบบมาให้อ่าน แก้ไขง่าย ผ่านการทดสอบมาอย่างดี ผสานรวมได้ง่าย และเข้ากันได้กับ LiteRT ปกติ

เอกสารต่อไปนี้สรุปโครงสร้างพื้นฐานของไลบรารี C++ และ ให้ข้อมูลเกี่ยวกับการสร้างโปรเจ็กต์ของคุณเอง

โครงสร้างไฟล์

micro ไดเรกทอรีรากมีโครงสร้างที่ค่อนข้างเรียบง่าย แต่เนื่องจากมีสถานที่ตั้ง ภายในที่เก็บ TensorFlow ขนาดใหญ่ เราได้สร้างสคริปต์และ ไฟล์โปรเจ็กต์ที่สร้างไว้ล่วงหน้าซึ่งมีไฟล์แหล่งที่มาที่เกี่ยวข้องแยกออกมาต่างหาก ภายในสภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบฝังที่หลากหลาย

ไฟล์คีย์

ไฟล์ที่สำคัญที่สุดสำหรับการใช้ LiteRT สำหรับไมโครคอนโทรลเลอร์ ล่ามจะอยู่ในรากของโครงการ พร้อมด้วยการทดสอบ:

[`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 Arduino_TensorFlowLite รายการ ซึ่งคุณสามารถติดตั้งได้ใน Arduino IDE และใน Arduino Create

เมื่อเพิ่มคลังแล้ว ให้ไปที่ File -> Examples คุณจะเห็น ตัวอย่างบริเวณด้านล่างของรายการที่ชื่อ TensorFlowLite:hello_world เลือก แล้วคลิก hello_world เพื่อโหลดตัวอย่าง จากนั้นคุณก็สามารถบันทึกสำเนาของ ตัวอย่างและใช้เป็นพื้นฐานสำหรับโครงการของคุณ

สร้างโปรเจ็กต์สำหรับแพลตฟอร์มอื่นๆ

LiteRT สำหรับไมโครคอนโทรลเลอร์สามารถสร้างโปรเจ็กต์แบบสแตนด์อโลน ที่มีไฟล์ต้นฉบับที่จำเป็นทั้งหมดโดยใช้ Makefile องค์ประกอบปัจจุบัน สภาพแวดล้อมที่รองรับได้แก่ Keil, Make และ Mbed

หากต้องการสร้างโปรเจ็กต์เหล่านี้ด้วย Make ให้โคลน ที่เก็บ TensorFlow/tflite-micro และเรียกใช้คำสั่งต่อไปนี้

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

การดำเนินการนี้จะใช้เวลาสักครู่ เนื่องจากต้องดาวน์โหลด Toolchain ขนาดใหญ่สำหรับ ทรัพยากร Dependency เมื่อเสร็จแล้ว คุณควรเห็นบางโฟลเดอร์สร้างขึ้น ภายในเส้นทาง เช่น 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>

คุณดูชื่อการทดสอบได้ในไฟล์ Makefile ของโปรเจ็กต์ ตัวอย่างเช่น examples/hello_world/Makefile.inc ระบุชื่อทดสอบสำหรับ Hello ตัวอย่างการทำงานทั่วโลก

สร้างไบนารี

วิธีสร้างไบนารีที่เรียกใช้ได้สำหรับโปรเจ็กต์ที่ระบุ (เช่น แอปพลิเคชันตัวอย่าง) ใช้คำสั่งต่อไปนี้โดยแทนที่ <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 เป้าหมายแล้ว

คุณสามารถดูชื่อโปรเจ็กต์ได้ในไฟล์ Makefile ของโปรเจ็กต์ ตัวอย่างเช่น examples/hello_world/Makefile.inc ระบุชื่อไบนารีสำหรับ Hello ตัวอย่างการทำงานทั่วโลก

เคอร์เนลที่เพิ่มประสิทธิภาพ

เคอร์เนลอ้างอิงในรากของ tensorflow/lite/micro/kernels คือ ดำเนินการใน C/C++ ที่แท้จริง และไม่รวมถึงฮาร์ดแวร์เฉพาะแพลตฟอร์ม การเพิ่มประสิทธิภาพ

เคอร์เนลเวอร์ชันที่ได้รับการเพิ่มประสิทธิภาพจะอยู่ในไดเรกทอรีย่อย ตัวอย่างเช่น kernels/cmsis-nn มีเคอร์เนลที่เพิ่มประสิทธิภาพหลายรายการซึ่งใช้ประโยชน์จาก Arm ไลบรารี CMSIS-NN

หากต้องการสร้างโปรเจ็กต์โดยใช้เคอร์เนลที่เพิ่มประสิทธิภาพ ให้ใช้คำสั่งต่อไปนี้ แทนที่ <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

พอร์ตไปยังอุปกรณ์ใหม่

คำแนะนำเกี่ยวกับการย้าย LiteRT สำหรับไมโครคอนโทรลเลอร์ไปยังแพลตฟอร์มใหม่และ สามารถพบอุปกรณ์ได้ใน micro/docs/new_platform_support.md