일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 삼성코딩테스트
- DP문제
- dfs
- TensorFlow Lite
- sort
- 알고리즘
- 초소형머신러닝
- 코딩테스트
- dfs문제
- DP
- 코테
- 딥러닝
- 그리디
- 삼성역테
- 다이나믹프로그래밍
- bfs문제
- MCU 딥러닝
- 삼성코테
- 포스코 ai 교육
- 컴퓨팅사고
- tinyml
- 코테 문제
- 영상처리
- 포스코 AI교육
- tflite
- 포스코 교육
- 임베디드 딥러닝
- BFS
- 삼성역량테스트
- 자료구조
- Today
- Total
코딩뚠뚠
[머신러닝 공부] Tiny ML -5 / 어플리케이션 구축-1 본문
Chapter5. 어플리케이션 구축
"
이번 챕터에서는 모델을 실행하는 어플리케이션을 구축해 본다.
"
5장의 목차는 아래와 같다
- 테스트코드 작성
- 프로젝트 파일의 구조 파악
- 소스코드 구성 파악
저번챕터에서는 모델을 빌드하고 훈련시켜봤다.
하지만 모델은 전체적인 어플리케이션의 일부일 뿐이며 이를 사용하려면 필요한 환경을 설정하고 입,출력을 제공해야 하며 동작하는 코드로 모델을 랩핑 해야만한다.
이번 장 에서는 모델을 TinyML 어플리케이션에 적용하는 과정을 진행해 볼 것이다.
1. 테스트코드 작성
구동을 구현한 짧은 코드로 앞으로 작성할 완성될 코드의 논리를 증명해낼 수 있다.
(동작 메커니즘이 같으나 복잡한 구현을 하지 않은 예제코드이다.)
- 위의 코드를 참고했다.
들어가기에 앞서 코드의 확장자명이 .cc 인데 이는 .cpp와 같은 c++ 코드이다.
-1. 헤더 불러오기 : 아래와 같이 테스트 작성을 위한 헤더를 불러왔다.
#include "tensorflow/lite/micro/examples/hello_world/sine_model_data.h"
#include "tensorflow/lite/micro/kernels/all_ops_resolver.h"
#include "tensorflow/lite/micro/micro_error_reporter.h"
#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/micro/testing/micro_test.h"
#include "tensorflow/lite/schema/schema_generated.h"
#include "tensorflow/lite/version.h"
-2. 테스트 설정 : 아래 두 가지 이름으로 매크로를 생성한다. (micro_test.h에 포함)
TF_LITE_MICRO_TESTS_BEGIN
TF_LITE_MICRO_TEST(LoadModelAndPerformInference) {
-3,4. 테스트 논리 코드 : 아래 코드에서부터는 계속되는 테스트 논리 코드이다.
✔ 데이터 기록 :
tflite::MicroErrorReporter micro_error_reporter;
tflite::ErrorReporter* error_reporter = µ_error_reporter
(MicroErrorReporter는 ErrorReporter 클래스의 서브 클래스이다.)
MicroErrorReporter 인스턴스를 정의한다. 이는 추론 중 디버그 정보를 기록한다. (오류를 출력)
또한 ErrorReporter 자료형의 error_reporter 포인터변수를 선언하는데, ErrorReporter의 포인터는 하위클래스의 값(MicroErrorReporter)을 가리킬 수 있다.
여기서 µ_error_reporter는 값이 아닌 포인터를 할당하고 있음을 의미한다.
중요한 점은 error_reporter는 포인터이고 이것은 디버그 정보를 출력하기 위해 쓰인다는것
✔ 모델 매핑 : 모델을 사용가능한 데이터 구조에 매핑한다. (모델을 구조체에 로드)
-5. AllOpsResolver 생성 :
tflite::ops::micro::AllOpsResolver resolver;
Tensorflow Lite 인터프리터가 Op(operation)에 접근할 수 있도록 한다.
-6. 텐서 아레나 정의 :
텐서 아레나란 모델의 입력, 출력, 중간 텐서를 저장하는데 사용되는 메모리영역이다. 이를 할당해야한다.
-7. 인터프리터 생성 :
// Build an interpreter to run the model with
tflite::MicroInterpreter interpreter(model, resolver, tensor_arena,
tensor_arena_size, error_reporter);
// Allocate memory from the tensor_arena for the model's tensors
TF_LITE_MICRO_EXPECT_EQ(interpreter.AllocateTensors(), kTfLiteOk);
모델 실행을 위한 인터프리터를 빌드한다.
interpreter 라는 이름의 Microinterpreter 를 선언하고, AllocateTensors()메서드는 메모리를 할당한다.
-8. 입력텐서 검사 :
TfLiteTensor* input = interpreter.input(0);
모델 정보를 제공하기위해 입력데이터를 모델의 입력텐서에 쓴다.
텐서는 해당 깃헙의 c_api_internal.h에 정의된 TfLiteTensor 구조체로 표시되고 텐서와 상호작용, 학습 API를 제공한다.
이 기능들을 사용해 텐서의 형태가 올바른지 확인한다.(Assertion)
> 속성, 모양, 길이, 비트 수
-9. 추론 실행 :
입력텐서에 값을 제공한 다음, 인터프리터에게 모델을 호출하도록 한다.
input->data.f[0] = 0.;
// Run the model on this input and check that it succeeds
TfLiteStatus invoke_status = interpreter.Invoke();
TF_LITE_MICRO_EXPECT_EQ(kTfLiteOk, invoke_status);
입력값을 제공한 후 그 입력값으로 모델을 호출,실행한다.( Invoke() )
이후 성공여부를 확인한다.
TFliteTensor에서 [1 2 3]을 설정하려면 아래와 같이 설정하면된다.
input->data.f[0] = 1;
input->data.f[1] = 2;
input->data.f[2] = 3;
-10. 실행 :
마이크로컨트롤러에 다운받아 실행하기전에 PC에서 미리 실행해보고 디버그를 하는 과정을 거친다.
실행(컴파일)하기 위해서는 터미널, git, make 가 필요하다.
git clone 으로 tflite-micro 레포지토리를 모두 clone 해온다
이후 상위 디렉토리에서 make 를 실행해준다. (윈도우 환경에선 make버전을 3.82이상 설치하기가 힘들어 리눅스환경으로 옮겼다.)
make -f tflite-micro/lite/micro/tools/make/Makefile test_hello_world_test
위와 같이 make가 완료되고 이전 코드에서 작성해줬던 test들이 통과됐음을 출력해준다.
여기까지 간단한 코드로 테스트를 완료했으니
다음 포스팅에서는 프로젝트 파일구조를 알아보고 실제 코드를 작성, 분석해보도록 한다.
'공부 > ML&DL' 카테고리의 다른 글
[머신러닝 공부] Tiny ML -7 / MCU에 배포하기 (0) | 2022.01.08 |
---|---|
[머신러닝 공부] Tiny ML -6 / 어플리케이션 구축-2 (0) | 2021.12.21 |
[머신러닝 공부] Tiny ML -4 / 모델 구축과 훈련 (0) | 2021.11.16 |
[머신러닝 공부] Tiny ML -3 / 머신러닝 빠르게 훑어보기 (0) | 2021.11.01 |
[머신러닝 공부] Tiny ML -2 / 서론,시작하기 (0) | 2021.10.27 |