모델 빌드 및 변환

마이크로 컨트롤러는 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 파일에서 확인할 수 있습니다.