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