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

Bộ vi điều khiển có 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 dành cho Vi điều khiển hiện hỗ trợ một tập hợp con hoạt động hạn chế, do đó không phải tất cả các kiến ​​trúc mô hình đều có thể thực hiện được.

Tài liệu này giải thích quá trình chuyển đổi mô hình TensorFlow để chạy trên bộ 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à huấn luyện mô hình để phù hợp với bộ nhớ hạn chế.

Để biết ví dụ toàn diện, có thể chạy được về cách xây dựng và chuyển đổi mô hình, hãy xem ví dụ Hello World .

Chuyển đổi mô hình

Để chuyển đổi mô hình TensorFlow đã được đào tạo để chạy trên bộ 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 thành mảng C

Nhiều nền tảng vi điều khiển không có hỗ trợ hệ thống tập tin 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à đưa nó vào dưới dạng 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 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ẽ trông tương tự 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 để có hiệu quả bộ nhớ tốt hơn trên 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 của bạn, hãy xem hello_world_test.cc trong ví dụ Hello World .

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 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 hoạt động được sử dụng.

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

Một 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 nhị phân và khi 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, những người mẫu 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 đề, việc thử và sử dụng mô hình lớn nhất vừa với bộ nhớ là điều hợp lý. Tuy nhiên, việc sử dụng các model 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ó tác động đến khối lượng công việc. Các mẫu lớn, phức tạp có thể dẫn đến chu kỳ hoạt động cao hơn, nghĩa là bộ xử lý trên thiết bị của bạn dành nhiều thời gian làm việc hơn và ít thời gian rảnh hơn. Điều này sẽ làm tăng mức tiêu thụ điện năng và lượng nhiệt tỏa ra, đây 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 giới hạn 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ợ vận hành, cả về triển khai tham chiếu và tối ưu hóa cho các kiến ​​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

,

Bộ vi điều khiển có 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 dành cho Vi điều khiển hiện hỗ trợ một tập hợp con hoạt động hạn chế, do đó không phải tất cả các kiến ​​trúc mô hình đều có thể thực hiện được.

Tài liệu này giải thích quá trình chuyển đổi mô hình TensorFlow để chạy trên bộ 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à huấn luyện mô hình để phù hợp với bộ nhớ hạn chế.

Để biết ví dụ toàn diện, có thể chạy được về cách xây dựng và chuyển đổi mô hình, hãy xem ví dụ Hello World .

Chuyển đổi mô hình

Để chuyển đổi mô hình TensorFlow đã được đào tạo để chạy trên bộ 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 thành mảng C

Nhiều nền tảng vi điều khiển không có hỗ trợ hệ thống tập tin 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à đưa nó vào dưới dạng 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 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ẽ trông tương tự 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 để có hiệu quả bộ nhớ tốt hơn trên 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 của bạn, hãy xem hello_world_test.cc trong ví dụ Hello World .

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 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 hoạt động được sử dụng.

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

Một 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 nhị phân và khi 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, những người mẫu 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 đề, việc thử và sử dụng mô hình lớn nhất vừa với bộ nhớ là điều hợp lý. Tuy nhiên, việc sử dụng các model 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ó tác động đến khối lượng công việc. Các mẫu lớn, phức tạp có thể dẫn đến chu kỳ hoạt động cao hơn, nghĩa là bộ xử lý trên thiết bị của bạn dành nhiều thời gian làm việc hơn và ít thời gian rảnh hơn. Điều này sẽ làm tăng mức tiêu thụ điện năng và lượng nhiệt tỏa ra, đây 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 giới hạn 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ợ vận hành, cả về triển khai tham chiếu và tối ưu hóa cho các kiến ​​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