ขอขอบคุณที่เข้าร่วม Google I/O ดูเซสชั่นทั้งหมดตามความต้องการ ดูตามความต้องการ

ทำความเข้าใจไลบรารี 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