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

TensorFlow Lite สำหรับไลบรารี Microcontrollers 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

การดำเนินการนี้จะใช้เวลาสักครู่ เนื่องจากจะต้องดาวน์โหลด Toolchain ขนาดใหญ่จำนวนหนึ่งสำหรับทรัพยากร Dependency เมื่อเสร็จสิ้นแล้ว คุณควรจะเห็นโฟลเดอร์บางโฟลเดอร์สร้างขึ้นภายในเส้นทาง เช่น gen/linux_x86_64/prj/ (เส้นทางที่แน่นอนจะขึ้นอยู่กับระบบปฏิบัติการของโฮสต์) โฟลเดอร์เหล่านี้มีไฟล์ โปรเจ็กต์และแหล่งที่มาที่สร้างขึ้น

หลังจากเรียกใช้คำสั่งแล้ว คุณจะค้นหาโปรเจ็กต์ Hello World ได้ใน gen/linux_x86_64/prj/hello_world เช่น hello_world/keil จะมีโปรเจ็กต์ Keil

ทำการทดสอบ

หากต้องการสร้างไลบรารีและทำการทดสอบ 1 หน่วยทั้งหมด ให้ใช้คำสั่งต่อไปนี้

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