Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ko/lite/microcontrollers/build_convert.md
25118 views

모델 구축 및 변환하기

마이크로컨트롤러는 RAM과 스토리지가 제한되어 있어 머신러닝 모델의 크기에 제약이 따릅니다. 또한 마이크로컨트롤러용 TensorFlow Lite는 현재 제한적인 연산만 지원하므로 모든 모델 아키텍처가 가능한 것은 아닙니다.

이 문서에서는 TensorFlow 모델을 마이크로컨트롤러에서 실행되도록 변환하는 과정을 설명합니다. 또한 지원되는 연산을 간략하게 설명하고 제한된 메모리에 맞게 모델을 설계하고 훈련하는 방법에 대한 지침을 제공합니다.

모델을 빌드하고 변환하는 실행 가능한 엔드 투 엔드 예제는 Hello World 예제의 일부인 다음 Colab을 참조하세요.

train_hello_world_model.ipynb

모델 변환

훈련된 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 예제의 evaluate_test.cc를 참조하세요.

모델 아키텍처 및 훈련

마이크로컨트롤러에서 사용할 모델을 설계할 때 모델 크기, 워크로드 및 사용되는 연산을 고려하는 것이 중요합니다.

모델 크기

모델은 바이너리와 런타임 모두에서 프로그램의 나머지 부분과 함께 대상 기기의 메모리 내에 맞도록 충분히 작아야 합니다.

더 작은 모델을 만들려면 아키텍처에서 더 작은 레이어를 더 적게 사용할 수 있습니다. 그러나 작은 모델은 과소적합의 문제를 유발할 가능성이 높습니다. 따라서 메모리를 넘지 않는 범위에서 가장 큰 모델을 시도하고 사용하는 것이 합리적입니다. 그러나 더 큰 모델을 사용하면 프로세서 워크로드도 증가합니다.

참고: 마이크로컨트롤러용 TensorFlow Lite의 코어 런타임은 Cortex M3에서 16KB에 맞습니다.

워크로드

모델의 크기와 복잡성은 워크로드에 영향을 미칩니다. 크고 복잡한 모델은 효율 주기를 높이는 결과를 가져올 수 있습니다. 즉, 기기 프로세서의 작동 시간이 늘어나고 유휴 시간은 줄어듭니다. 이로 인해 전력 소비와 발열량이 증가하여 애플리케이션에 따라 문제가 될 수 있습니다.

연산 지원

마이크로컨트롤러용 TensorFlow Lite는 현재 TensorFlow 연산의 일부만 지원하기 때문에 실행 가능한 모델 아키텍처에서 제약이 따릅니다. 우리는 특정 아키텍처의 참조 구현과 최적화 측면에서 연산 지원을 확대하기 위해 노력하고 있습니다.

지원되는 연산은 micro_mutable_ops_resolver.h 파일에서 확인할 수 있습니다.