Xây dựng và chuyển đổi mô hình

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bộ vi điều khiển có bộ nhớ RAM và bộ nhớ hạn chế, điều này đặt ra những hạn chế về kích thước của các mô hình học máy. Ngoài ra, TensorFlow Lite for Microcontrollers hiện hỗ trợ một tập hợp con hoạt động hạn chế, vì vậy không phải tất cả các kiến ​​trúc mô hình đều khả thi.

Tài liệu này giải thích quá trình chuyển đổi mô hình TensorFlow để chạy trên vi điều khiển. Nó cũng phác thảo các hoạt động được hỗ trợ và đưa ra một số hướng dẫn về thiết kế và đào tạo một mô hình để phù hợp với bộ nhớ hạn chế.

Để biết ví dụ từ đầu đến cuối, có thể chạy được về việc xây dựng và chuyển đổi một mô hình, hãy xem Colab sau đây là một phần của ví dụ Hello World :

train_hello_world_model.ipynb

Chuyển đổi mô hình

Để chuyển đổi mô hình TensorFlow được đào tạo để chạy trên vi điều khiển, bạn nên sử dụng API Python của trình chuyển đổi TensorFlow Lite . Điều này sẽ chuyển đổi mô hình thành FlatBuffer , giảm kích thước mô hình và sửa đổi nó để sử dụng các hoạt động TensorFlow Lite.

Để có được kích thước mô hình nhỏ nhất có thể, bạn nên cân nhắc sử dụng lượng tử hóa sau đào tạo .

Chuyển đổi sang mảng C

Nhiều nền tảng vi điều khiển không có hỗ trợ hệ thống tệp gốc. Cách dễ nhất để sử dụng một mô hình từ chương trình của bạn là bao gồm nó dưới dạng một mảng C và biên dịch nó vào chương trình của bạn.

Lệnh unix sau sẽ tạo tệp nguồn C có chứa mô hình TensorFlow Lite dưới dạng mảng char :

xxd -i converted_model.tflite > model_data.cc

Đầu ra sẽ giống như sau:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Khi bạn đã tạo tệp, bạn có thể đưa nó vào chương trình của mình. Điều quan trọng là phải thay đổi khai báo mảng thành const để hiệu quả bộ nhớ tốt hơn trên nền tảng nhúng.

Kiến trúc mô hình và đào tạo

Khi thiết kế một mô hình để sử dụng trên vi điều khiển, điều quan trọng là phải xem xét kích thước mô hình, khối lượng công việc và các hoạt động được sử dụng.

Kích thước mô hình

Một mô hình phải đủ nhỏ để nằm gọn trong bộ nhớ của thiết bị mục tiêu cùng với phần còn lại của chương trình, cả ở dạng nhị phân và trong thời gian chạy.

Để tạo một mô hình nhỏ hơn, bạn có thể sử dụng ít lớp hơn và nhỏ hơn trong kiến ​​trúc của mình. Tuy nhiên, các mô hình nhỏ có nhiều khả năng bị thiếu trang bị hơn. Điều này có nghĩa là đối với nhiều vấn đề, bạn nên thử và sử dụng mô hình lớn nhất phù hợp với bộ nhớ. Tuy nhiên, việc sử dụng các mô hình lớn hơn cũng sẽ dẫn đến khối lượng công việc của bộ xử lý tăng lên.

Khối lượng công việc

Kích thước và độ phức tạp của mô hình có ảnh hưởng đến khối lượng công việc. Các mô hình lớn, phức tạp có thể dẫn đến chu kỳ làm việc cao hơn, có nghĩa là bộ xử lý của thiết bị của bạn đang dành nhiều thời gian hơn để làm việc và ít thời gian nhàn rỗi hơn. Điều này sẽ làm tăng mức tiêu thụ điện năng và sản lượng nhiệt, có thể là một vấn đề tùy thuộc vào ứng dụng của bạn.

Hỗ trợ hoạt động

TensorFlow Lite dành cho Vi điều khiển hiện hỗ trợ một tập hợp con hạn chế của các hoạt động TensorFlow, tác động đến kiến ​​trúc mô hình mà nó có thể chạy. Chúng tôi đang nỗ lực mở rộng hỗ trợ hoạt động, cả về triển khai tham chiếu và tối ưu hóa cho các kiến ​​trúc cụ thể.

Các hoạt động được hỗ trợ có thể được nhìn thấy trong tệp all_ops_resolver.cc