마이크로 컨트롤러는 RAM 및 저장용량이 제한되어 있어 머신러닝 모델의 크기에 제약이 있습니다. 또한 TensorFlow Lite for Microcontrollers는 현재 제한된 작업 하위 집합을 지원하므로 일부 모델 아키텍처는 사용할 수 없습니다.
이 문서에서는 마이크로 컨트롤러에서 실행되도록 TensorFlow 모델을 변환하는 프로세스를 설명합니다. 또한 지원되는 작업을 간략하게 설명하고 제한된 메모리에 맞게 모델을 설계하고 학습시키는 방법에 대한 안내를 제공합니다.
모델을 빌드하고 변환하는 실행 가능한 엔드 투 엔드 예시를 보려면 Hello World 예시를 참조하세요.
모델 변환
학습된 TensorFlow 모델을 마이크로컨트롤러에서 실행하도록 변환하려면 TensorFlow Lite 변환기 Python API를 사용해야 합니다.
이렇게 하면 모델이 FlatBuffer
로 변환되어 모델 크기가 줄어들고 TensorFlow Lite 작업을 사용하도록 수정됩니다.
가능한 최소 모델 크기를 얻으려면 학습 후 양자화 사용을 고려해야 합니다.
C 배열로 변환
많은 마이크로컨트롤러 플랫폼은 기본 파일 시스템을 지원하지 않습니다. 프로그램에서 모델을 사용하는 가장 쉬운 방법은 모델을 C 배열로 포함하고 프로그램으로 컴파일하는 것입니다.
다음 Unix 명령어는 TensorFlow Lite 모델을 char
배열로 포함하는 C 소스 파일을 생성합니다.
xxd -i converted_model.tflite > model_data.cc
출력은 다음과 비슷합니다.
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;
파일을 생성했으면 프로그램에 포함할 수 있습니다. 내장 플랫폼에서 메모리 효율을 높이려면 배열 선언을 const
로 변경하는 것이 중요합니다.
프로그램에 모델을 포함하고 사용하는 방법의 예시는 Hello World 예시의 hello_world_test.cc
를 참조하세요.
모델 아키텍처 및 학습
마이크로 컨트롤러에서 사용할 모델을 설계할 때는 모델 크기, 워크로드, 사용되는 작업을 고려하는 것이 중요합니다.
모델 크기
모델은 대상 기기의 메모리 내에 프로그램의 나머지 부분과 함께 바이너리 및 런타임 시 맞도록 충분히 작아야 합니다.
더 작은 모델을 만들려면 아키텍처에서 더 적은 수의 더 작은 레이어를 사용할 수 있습니다. 그러나 작은 모델은 과소적합 문제를 겪을 가능성이 큽니다. 즉, 많은 문제의 경우 메모리에 맞는 가장 큰 모델을 사용하는 것이 합리적입니다. 그러나 더 큰 모델을 사용하면 프로세서 워크로드가 증가합니다.
워크로드
모델의 크기와 복잡성은 워크로드에 영향을 미칩니다. 모델이 크고 복잡한 경우 듀티 사이클이 높아질 수 있습니다. 즉, 기기의 프로세서가 작업에 더 많은 시간을 소비하고 유휴 시간을 줄일 수 있습니다. 이렇게 하면 전력 소비와 열 출력이 증가하며, 이는 애플리케이션에 따라 문제가 될 수 있습니다.
운영 지원
TensorFlow Lite for Microcontrollers는 현재 TensorFlow 작업의 제한된 하위 집합을 지원하며 이는 실행 가능한 모델 아키텍처에 영향을 미칩니다. Google에서는 특정 아키텍처의 참조 구현 및 최적화 측면에서 작업 지원을 확대하기 위해 노력하고 있습니다.
지원되는 연산은 micro_mutable_ops_resolver.h
파일에서 확인할 수 있습니다.