Tạo và chuyển đổi mô hình

Bộ vi điều khiển có RAM và bộ nhớ hạn chế, gây ra hạn chế về kích thước của các mô hình học máy. Ngoài ra, TensorFlow Lite cho Bộ vi điều khiển hiện hỗ trợ một số ít thao tác, vì vậy, không phải cấu trúc mô hình nào cũng có thể thực hiện được.

Tài liệu này giải thích quy trình chuyển đổi một mô hình TensorFlow để chạy trên bộ vi điều khiển. Đồng thời cũng nêu rõ các hoạt động được hỗ trợ, đồng thời đưa ra một số hướng dẫn về cách thiết kế và huấn luyện một mô hình cho vừa với bộ nhớ hạn chế.

Để xem ví dụ toàn diện và có thể chạy về việc tạo và chuyển đổi một mô hình, hãy xem ví dụ về Hello World.

Chuyển đổi mô hình

Để chuyển đổi mô hình TensorFlow đã huấn luyện để chạy trên bộ vi điều khiển, bạn nên sử dụng API Python chuyển đổi TensorFlow Lite. Thao tác 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 để sử dụng các thao tác của 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ử hoá sau khi huấn luyện.

Chuyển đổi sang mảng C

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

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

xxd -i converted_model.tflite > model_data.cc

Kết quả sẽ có dạ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;

Sau khi tạo tệp, bạn có thể đưa tệp này vào chương trình của mình. Bạn cần thay đổi phần khai báo mảng thành const để cải thiện hiệu suất bộ nhớ trên các nền tảng được nhúng.

Để biết ví dụ về cách đưa và sử dụng mô hình trong chương trình, hãy xem hello_world_test.cc trong ví dụ về Hello World.

Cấu trúc mô hình và huấn luyện

Khi thiết kế một mô hình để sử dụng trên bộ 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 thao tác được sử dụng.

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

Mô hình phải đủ nhỏ để vừa với 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 tệp 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 và lớp nhỏ hơn trong cấu trúc của mình. Tuy nhiên, những người mẫu nhỏ có nhiều khả năng sẽ gặp phải tình trạng không phù hợp. Điều này có nghĩa là đối với nhiều vấn đề, bạn nên thử 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ỳ công việc cao hơn, nghĩa là bộ xử lý của thiết bị mất nhiều thời gian làm việc hơn và giảm thời gian ở trạng thái rảnh. Điều này sẽ làm tăng mức tiêu thụ điện năng và toả nhiệt, đây có thể là một vấn đề tuỳ thuộc vào ứng dụng của bạn.

Hỗ trợ về vận hành

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ác thao tác của TensorFlow. Việc này ảnh hưởng đến các cấu trúc mô hình có thể chạy. Chúng tôi đang nỗ lực mở rộng khả năng hỗ trợ thao tác, cả về khía cạnh triển khai tham chiếu và tối ưu hoá cho các cấu trúc cụ thể.

Bạn có thể xem các thao tác được hỗ trợ trong tệp micro_mutable_ops_resolver.h