Vi điều khiển có RAM và dung lượng lưu trữ hạn chế, đặt ra các hạn chế đối với kích thước của các mô hình học máy. Ngoài ra, LiteRT cho Vi điều khiển hiện chỉ hỗ trợ một tập hợp con nhỏ các thao tác, vì vậy không phải tất cả có thể có bất kỳ cấu trúc mô hình nào.
Tài liệu này giải thích quy trình chuyển đổi mô hình TensorFlow để chạy vi điều khiển. Lớp này cũng trình bày các thao tác được hỗ trợ và cung cấp một số thao tác hướng dẫn về cách thiết kế và huấn luyện một mô hình sao cho phù hợp với bộ nhớ có giới hạn.
Để xem ví dụ toàn diện và có thể chạy về cách xây dựng và chuyển đổi mô hình, hãy xem Xin chào mọi người ví dụ:
Chuyển đổi mô hình
Để chuyển đổi mô hình TensorFlow đã huấn luyện nhằm chạy trên vi điều khiển, bạn nên sử dụng
thời gian
API Python chuyển đổi LiteRT.
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 toán tử LiteRT.
Để 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 định lượng sau đào tạo.
Chuyển đổi thành một mảng C
Nhiều nền tảng bộ vi điều khiển không hỗ trợ hệ thống tệp gốc. Chiến lược phát hành đĩa đơn cách dễ nhất để sử dụng mô hình từ chương trình của bạn là đưa mô hình đó vào dưới dạng mảng C và hãy biên dịch mã đó vào chương trình của bạn.
Lệnh unix sau đây sẽ tạo tệp nguồn C chứa phần tử
Mô hình LiteRT dưới dạng mảng char
:
xxd -i converted_model.tflite > model_data.cc
Kết quả đầu ra 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 đó vào chương trình của mình. Đó là
bạn cần thay đổi phần khai báo mảng thành const
để có bộ nhớ tốt hơn
trên các nền tảng nhúng.
Để biết ví dụ về cách đưa và sử dụng mô hình vào chương trình, hãy tham khảo
hello_world_test.cc
trong ví dụ Hello World.
Cấu trúc và huấn luyện mô hình
Khi thiết kế mô hình để sử dụng trên bộ vi điều khiển, điều quan trọng là phải cân nhắc 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ẫu điện thoại phải đủ nhỏ để vừa với bộ nhớ của thiết bị mục tiêu phần còn lại của chương trình, cả dưới 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à nhỏ hơn trong cấu trúc. Tuy nhiên, người mẫu nhỏ có nhiều khả năng bị thiếu hụt. Điều này có nghĩa là đối với nhiều bài toán, việc thử và sử dụng mô hình lớn nhất là hợp lý sao cho vừa 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 làm tăng khối lượng công việc của bộ xử lý.
Khối lượng công việc
Quy mô và độ phức tạp của mô hình này có tác động đến khối lượng công việc. Lớn, phức tạp các kiểu máy có thể dẫn đến chu kỳ làm việc cao hơn, tức là bộ xử lý của thiết bị đang dành nhiều thời gian làm việc hơn và ít thời gian nhàn rỗi hơn. Thao tác này sẽ tăng công suất và năng suất tiêu thụ nhiệt. Đây có thể là vấn đề tuỳ thuộc vào .
Hỗ trợ hoạt động
LiteRT cho Vi điều khiển hiện hỗ trợ một tập hợp con giới hạn Các hoạt động của TensorFlow ảnh hưởng đến kiến trúc mô hình có khả năng xảy ra để chạy. Chúng tôi đang nỗ lực mở rộng phạm vi hỗ trợ hoạt động, cả về phương diện tham khảo các cách triển khai và tối ưu hoá cho 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