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

Thư viện TensorFlow Lite cho Vi điều khiển C++ là một phần của kho lưu trữ TensorFlow. TensorFlow được thiết kế để dễ đọc, dễ sửa đổi, đã được thử nghiệm, dễ tích hợp và tương thích với TensorFlow Lite 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

Thư mục gốc micro có cấu trúc tương đối đơn giản. Tuy nhiên, vì tập hợp này nằm bên trong kho lưu trữ TensorFlow rộng lớn, nên chúng tôi đã tạo các tập lệnh và tệp dự án tạo sẵn nhằm cung cấp riêng các tệp nguồn có liên quan 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 TensorFlow Lite cho bộ diễn giải Vi điều khiển nằm ở gốc của dự án, đi kèm với các 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 Làm quen với bộ vi điều khiển để biết các bước sử dụng thông thường.

Hệ thống xây dựng cung cấp các hoạt động triển khai theo nền tảng của một số tệp nhất định. Các tệp này nằm trong một thư mục có tên nền tảng, ví dụ: cortex-m.

Ngoài ra, còn có một số thư mục khác:

  • kernel, chứa các phương thức triển khai thao tác và mã liên kết.
  • tools chứa các công cụ bản dựng và dữ liệu đầu ra của các công cụ đó.
  • examples chứa mã mẫu.

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

Bạn nên dùng ví dụ về 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 API đó 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.

Dùng thư viện Arduino

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

Sau khi thêm thư viện, hãy truy cập vào 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 tham số đó rồi nhấp vào hello_world để tải ví dụ. Sau đó, bạn có thể lưu một bản sao của ví dụ và sử dụng bản sao đó làm cơ sở cho dự án của riêng mình.

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

TensorFlow Lite cho Vi điều khiển có thể sử dụng Makefile để tạo các dự án độc lập chứa tất cả tệp nguồn cần thiết. Các môi trường hiện đượ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ì ứng dụng 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/ (đường dẫn chính xác phụ 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 dự án và tệp nguồn đã tạo.

Sau khi chạy lệnh, bạn sẽ có thể tìm thấy các dự án Hello World trong gen/linux_x86_64/prj/hello_world. 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ả kiểm thử đơn vị của thư viện, hãy dùng lệnh sau:

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

Để chạy một kiểm thử riêng lẻ, hãy sử dụng lệnh sau, thay <test_name> bằng tên kiểm thử:

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

Bạn có thể tìm thấy tên chương trình kiểm thử trong Makefile của dự án. Ví dụ: examples/hello_world/Makefile.inc chỉ định tên kiểm thử cho ví dụ Hello 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 <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 tệp nhị phân cho ứng dụng Hello World:

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ủ. Để chỉ định một cấu trúc mục tiêu khác, hãy sử dụng TARGET=TARGET_ARCH=. Ví dụ sau đây trình bày cách xây dựng ví dụ Hello World cho một cortex-m0 chung:

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ụ thể hiện có 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ác phương thức triển khai SparkFun Edge của các tệp constants.ccoutput_handler.cc. Các tệp này sẽ được dùng khi chỉ định cortex_m_generic mục tiêu.

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

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

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

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

Để 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 nội dung 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 chế độ tối ưu hoá của riêng mình bằng cách tạo một thư mục con mới cho chúng. Chúng tôi khuyến khích các yêu cầu lấy dữ liệu cho các phương thức 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 cho thư viện, bạn có thể chạy tập lệnh sau 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 thu được trong gen/arduino_x86_64/prj/tensorflow_lite.zip.

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

Bạn có thể xem hướng dẫn về cách chuyển TensorFlow Lite cho Vi điều khiển sang các nền tảng và thiết bị mới trong micro/docs/new_platform_support.md.