C++ 라이브러리 이해

TensorFlow Lite for Microcontrollers C++ 라이브러리는 TensorFlow 저장소의 일부입니다. TensorFlow Lite는 읽기 쉽고, 수정하기 쉬우며, 철저한 테스트를 거쳤으며, 통합하기 쉽고, 일반 TensorFlow Lite와 호환되도록 설계되었습니다.

다음 문서에서는 C++ 라이브러리의 기본 구조를 간략히 설명하고 자체 프로젝트를 만드는 방법에 대한 정보를 제공합니다.

파일 구조

micro 루트 디렉터리 구조는 비교적 단순합니다. 하지만 광범위한 TensorFlow 저장소 내에 위치하므로 다양한 내장 개발 환경 내에서 관련 소스 파일을 격리된 상태로 제공하는 스크립트와 사전 생성된 프로젝트 파일을 만들었습니다.

키 파일

TensorFlow Lite for Microcontrollers 인터프리터를 사용하는 데 가장 중요한 파일은 테스트와 함께 프로젝트의 루트에 있습니다.

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

일반적인 사용법을 알아보려면 마이크로 컨트롤러 시작하기를 참고하세요.

빌드 시스템은 특정 파일의 플랫폼별 구현을 제공합니다. 이러한 디렉터리는 플랫폼 이름이 있는 디렉터리에 있습니다(예: cortex-m).

다음을 포함한 여러 디렉터리가 있습니다.

  • kernel: 작업 구현 및 관련 코드를 포함합니다.
  • tools - 빌드 도구와 해당 출력이 포함되어 있습니다.
  • examples - 샘플 코드가 포함되어 있습니다.

새 프로젝트 시작

Hello World 예를 새 프로젝트의 템플릿으로 사용하는 것이 좋습니다. 이 섹션의 안내에 따라 선택한 플랫폼에 맞는 버전을 얻을 수 있습니다.

Arduino 라이브러리 사용

Arduino를 사용하는 경우 Hello World 예가 Arduino_TensorFlowLite Arduino 라이브러리에 포함되어 있으며 이 라이브러리는 Arduino IDE 및 Arduino Create에 수동으로 설치할 수 있습니다.

라이브러리가 추가되면 File -> Examples로 이동합니다. 목록 하단 근처에 TensorFlowLite:hello_world이라는 예가 표시됩니다. 이를 선택하고 hello_world를 클릭하여 예를 로드합니다. 그런 다음 예의 사본을 저장하고 자체 프로젝트의 기초로 사용할 수 있습니다.

다른 플랫폼용 프로젝트 생성

TensorFlow Lite for Microcontrollers는 Makefile를 사용하여 필요한 모든 소스 파일을 포함하는 독립형 프로젝트를 생성할 수 있습니다. 현재 지원되는 환경은 Keil, Make, Mbed입니다.

Make를 사용하여 이러한 프로젝트를 생성하려면 TensorFlow/tflite-micro 저장소를 클론하고 다음 명령어를 실행합니다.

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

종속 항목의 대규모 도구 모음을 다운로드해야 하므로 몇 분 정도 걸립니다. 작업이 완료되면 gen/linux_x86_64/prj/와 같은 경로 내에 생성된 일부 폴더가 표시됩니다 (정확한 경로는 호스트 운영체제에 따라 다름). 이러한 폴더에는 생성된 프로젝트와 소스 파일이 포함됩니다.

명령어를 실행하면 gen/linux_x86_64/prj/hello_world에서 Hello World 프로젝트를 찾을 수 있습니다. 예를 들어 hello_world/keil에는 Keil 프로젝트가 포함됩니다.

테스트 실행

라이브러리를 빌드하고 모든 단위 테스트를 실행하려면 다음 명령어를 사용합니다.

make -f tensorflow/lite/micro/tools/make/Makefile test

개별 테스트를 실행하려면 다음 명령어를 사용합니다. 여기서 <test_name>을 테스트 이름으로 바꿉니다.

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

프로젝트의 Makefile에서 테스트 이름을 찾을 수 있습니다. 예를 들어 examples/hello_world/Makefile.incHello World 예시의 테스트 이름을 지정합니다.

빌드 바이너리

애플리케이션 예와 같은 특정 프로젝트용으로 실행 가능한 바이너리를 빌드하려면 다음 명령어를 사용합니다. 이때 <project_name>를 빌드할 프로젝트로 바꿉니다.

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

예를 들어 다음 명령어는 Hello World 애플리케이션용 바이너리를 빌드합니다.

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

기본적으로 프로젝트는 호스트 운영체제용으로 컴파일됩니다. 다른 대상 아키텍처를 지정하려면 TARGET=TARGET_ARCH=를 사용하세요. 다음 예는 일반 Cortex-m0용 Hello World 예를 빌드하는 방법을 보여줍니다.

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

대상이 지정되면 사용 가능한 모든 타겟별 소스 파일이 원본 코드 대신 사용됩니다. 예를 들어 examples/hello_world/cortex_m_generic 하위 디렉터리에는 대상 cortex_m_generic이 지정될 때 사용되는 constants.ccoutput_handler.cc 파일의 SparkFun Edge 구현이 포함되어 있습니다.

프로젝트의 Makefile에서 프로젝트 이름을 찾을 수 있습니다. 예를 들어 examples/hello_world/Makefile.incHello World 예시의 바이너리 이름을 지정합니다.

최적화된 커널

tensorflow/lite/micro/kernels의 루트에 있는 참조 커널은 순수한 C/C++로 구현되며 플랫폼별 하드웨어 최적화를 포함하지 않습니다.

최적화된 커널 버전은 하위 디렉터리에 제공됩니다. 예를 들어 kernels/cmsis-nn에는 Arm의 CMSIS-NN 라이브러리를 활용하는 여러 최적화된 커널이 포함되어 있습니다.

최적화된 커널을 사용하여 프로젝트를 생성하려면 다음 명령어를 사용합니다. 여기서 <subdirectory_name>을 최적화가 포함된 하위 디렉터리 이름으로 바꿉니다.

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

최적화 작업의 새 하위 폴더를 만들어 자체적인 최적화를 추가할 수 있습니다. 새롭게 최적화된 구현에 대해서는 pull 요청을 권장합니다.

Arduino 라이브러리 생성

라이브러리의 새 빌드를 생성해야 하는 경우 TensorFlow 저장소에서 다음 스크립트를 실행할 수 있습니다.

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

결과 라이브러리는 gen/arduino_x86_64/prj/tensorflow_lite.zip에서 확인할 수 있습니다.

새 기기로 포팅

TensorFlow Lite for Microcontrollers를 새 플랫폼 및 기기로 포팅하는 방법에 관한 안내는 micro/docs/new_platform_support.md에서 확인할 수 있습니다.