Tìm hiểu về thư viện C++

Thư viện C++ LiteRT cho Vi điều khiển là một phần của Kho lưu trữ TensorFlow. Mã này được thiết kế để dễ đọc, dễ sửa đổi, được thử nghiệm kỹ lưỡng, dễ tích hợp, và tương thích với LiteRT thông thường.

Tài liệu sau đây trình bày cấu trúc cơ bản của thư viện C++ và cung cấp thông tin về cách tạo dự án của riêng bạn.

Cấu trúc tệp

Chiến lược phát hành đĩa đơn micro Thư mục gốc có cấu trúc tương đối đơn giản. Tuy nhiên, vì vị trí bên trong kho lưu trữ TensorFlow rộng lớn, chúng tôi đã tạo các tập lệnh và các tệp dự án được tạo trước cung cấp các tệp nguồn có liên quan một cách riêng biệt trong nhiều môi trường phát triển được nhúng.

Tệp khoá

Các tệp quan trọng nhất để sử dụng LiteRT cho Vi điều khiển trình phiên dịch nằm ở thư mục gốc của dự án, kèm theo các bài kiểm thử:

[`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.

Hãy xem bài viết Bắt đầu sử dụng bộ vi điều khiển để biết hướng dẫn sử dụng thông thường.

Hệ thống xây dựng cung cấp một số cách triển khai dành riêng cho nền tảng tệp. Ví dụ: các tệp này nằm trong một thư mục có tên nền tảng cortex-m.

Một số thư mục khác còn tồn tại, bao gồm:

  • kernel! chứa các cách triển khai thao tác và mã liên quan.
  • tools! chứa các công cụ xây dựng và kết quả của chúng.
  • examples! có chứa mã mẫu.

Bắt đầu dự án mới

Bạn nên dùng ví dụ Hello World làm mẫu cho các dự án mới. Bạn có thể tải một phiên bản của ứng dụng đó cho nền tảng mà bạn chọn bằng cách làm theo hướng dẫn trong phần này.

Sử dụng thư viện Arduino

Nếu bạn đang sử dụng Arduino, ví dụ Hello World sẽ có trong Thư viện Arduino Arduino_TensorFlowLite mà bạn có thể cài đặt thủ công trong Arduino IDE và trong Arduino Create.

Sau khi thêm thư viện, hãy chuyển đến File -> Examples. Bạn sẽ thấy một ví dụ ở gần cuối danh sách có tên TensorFlowLite:hello_world. Chọn tệp đó rồi nhấp vào hello_world để tải ví dụ. Sau đó, bạn có thể lưu bản sao của và sử dụng làm cơ sở cho dự án của riêng bạn.

Tạo dự án cho các nền tảng khác

LiteRT cho Vi điều khiển có thể tạo các dự án độc lập chứa tất cả tệp nguồn cần thiết bằng cách sử dụng Makefile. Dòng điện các môi trường được hỗ trợ là Keil, Make và Mbed.

Để tạo các dự án này bằng Make, hãy sao chép Kho lưu trữ TensorFlow/tflite-micro rồi chạy lệnh sau:

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

Quá trình này sẽ mất vài phút vì phải tải một số chuỗi công cụ lớn xuống cho các phần phụ thuộc. Sau khi hoàn tất, bạn sẽ thấy một số thư mục được tạo bên trong một đường dẫn như gen/linux_x86_64/prj/ (phương thức đường dẫn chính xác tuỳ thuộc vào hệ điều hành của máy chủ lưu trữ). Các thư mục này chứa phần tử dự án và tệp nguồn đã tạo.

Sau khi chạy lệnh, bạn có thể thấy các dự án Hello World trong gen/linux_x86_64/prj/hello_world. Cho ví dụ: hello_world/keil sẽ chứa dự án Keil.

Chạy kiểm thử

Để tạo thư viện và chạy tất cả các kiểm thử đơn vị của thư viện, hãy sử dụng lệnh sau:

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

Để chạy từng kiểm thử riêng lẻ, hãy sử dụng lệnh sau và thay thế <test_name> với tên thử nghiệm:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

Bạn có thể tìm tên các chương trình kiểm thử trong Makefiles của dự án. Ví dụ: examples/hello_world/Makefile.inc chỉ định tên thử nghiệm cho câu lệnh Hello Ví dụ về World.

Tạo tệp nhị phân

Để tạo tệp nhị phân có thể chạy cho một dự án cụ thể (chẳng hạn như một ứng dụng mẫu), hãy sử dụng lệnh sau, thay thế <project_name> bằng dự án mà bạn muốn để tạo:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Ví dụ: lệnh sau đây sẽ tạo một tệp nhị phân cho lệnh Hello World ứng dụng:

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

Theo mặc định, dự án sẽ được biên dịch cho hệ điều hành của máy chủ lưu trữ. Người nhận chỉ định một cấu trúc mục tiêu khác, hãy sử dụng TARGET=TARGET_ARCH=. Chiến lược phát hành đĩa đơn ví dụ sau đây cho thấy cách tạo ví dụ Hello World cho một tệp chung cortex-m0:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

Khi một mục tiêu được chỉ định, mọi tệp nguồn dành riêng cho mục tiêu có sẵn sẽ được sử dụng thay cho mã gốc. Ví dụ: thư mục con examples/hello_world/cortex_m_generic chứa cách triển khai SparkFun Edge trong số các tệp constants.ccoutput_handler.cc. Các tệp này sẽ được dùng khi cortex_m_generic mục tiêu đã được chỉ định.

Bạn có thể tìm thấy tên dự án trong Makefiles của dự án. Ví dụ: examples/hello_world/Makefile.inc chỉ định tên nhị phân của lệnh Hello Ví dụ về World.

Hạt nhân được tối ưu hoá

Các hạt nhân tham chiếu trong gốc của tensorflow/lite/micro/kernels là được triển khai trong C/C++ thuần tuý và không bao gồm phần cứng dành riêng cho nền tảng tối ưu hoá.

Các phiên bản được tối ưu hoá của hạt nhân được cung cấp trong các thư mục con. Ví dụ: kernels/cmsis-nn chứa một số nhân được tối ưu hoá tận dụng Arm Thư viện CMSIS-NN.

Để tạo dự án bằng hạt nhân được tối ưu hoá, hãy dùng lệnh sau, thay thế <subdirectory_name> bằng tên của thư mục con chứa tối ưu hoá:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

Bạn có thể thêm các tùy chọn tối ưu hóa của riêng mình bằng cách tạo một thư mục con mới cho các tùy chọn đó. T4 khuyến khích các yêu cầu kéo để triển khai mới được tối ưu hoá.

Tạo thư viện Arduino

Nếu cần tạo một bản dựng mới của thư viện, bạn có thể chạy lệnh sau tập lệnh từ kho lưu trữ TensorFlow:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

Bạn có thể tìm thấy thư viện kết quả trong gen/arduino_x86_64/prj/tensorflow_lite.zip.

Chuyển sang các thiết bị mới

Hướng dẫn chuyển LiteRT cho Vi điều khiển sang các nền tảng mới và thiết bị có thể được tìm thấy trong micro/docs/new_platform_support.md.