//
Search
▶️

C/C++에서 TFLite 활용하기

본 문서에서는 Tensorflow Lite의 C/C++ API를 활용하여 딥러닝 모델을 활용하는 방법을 소개합니다. 먼저 아래 튜토리얼을 참고하여 TFLite C/C++를 설치 후 활용합니다.

모델 초기화 하기

파일로 부터 모델 로드하기

// 파일(*.tflite)로 부터 모델 로드하기 TfLiteModel* tflite_model = TfLiteModelCreateFromFile(model_path.c_str());
C++
복사

버퍼로 부터 모델 로드하기

TfLiteModel* tflite_model = TfLiteModelCreate(tflite_buf, tflite_buf_size);
C++
복사

모델 옵션 설정하기

// 모델 옵션 설정하기 TfLiteInterpreterOptions* tflite_options = TfLiteInterpreterOptionsCreate(); // 스레드 개수 설정 TfLiteInterpreterOptionsSetNumThreads(tflite_options, num_threads);
C++
복사

인터프리터 생성하기

// 모델과 옵션을 이용하여 인터프리터 생성하기 TfLiteInterpreter* tflite_interpreter = \ TfLiteInterpreterCreate(tflite_model, tflite_options);
C++
복사

최종 세팅하기

// 할당할 텐서값(입력,출력) 세팅하기 TfLiteStatus tflite_status = TfLiteInterpreterAllocateTensors(tflite_interpreter); // 정상적으로 세팅됬는지 확인 if (tflite_status != kTfLiteOk) { return; }
C++
복사

Delegate를 활용하여 CPU/GPU/NPU 설정하기

// CPU의 경우 별도 처리를 하지 않습니다. // GPU를 사용할 경우 TfLiteDelegate* delegate_tflite = \ TfLiteGpuDelegateV2Create(/*default options=*/nullptr); tflite_status = TfLiteInterpreterModifyGraphWithDelegate( interpreter_tflite, delegate_tflite); // NPU를 사용할 경우 TfLiteInterpreterOptionsSetUseNNAPI(options_tflite, true); // Delegate 삭제 TfLiteGpuDelegateV2Delete(delegate_tflite); // NPU 사용 끄기 TfLiteInterpreterOptionsSetUseNNAPI(options_tflite, false);
C++
복사

모델 실행하기

// 입력값 (example. Opencv::Mat Class) cv::Mat &input_mat // 입력 텐서 설정 int input_tensor_idx = 0; TfLiteTensor* input_tensor = \ TfLiteInterpreterGetInputTensor(tflite_interpreter, input_tensor_idx); // 입력 텐서에 입력값 세팅. 포인터 전달 tflite_status = \ TfLiteTensorCopyFromBuffer( input_tensor, input_mat.ptr<float>(0), model_input_size * sizeof(float)); // 모델 실행 tflite_status = TfLiteInterpreterInvoke(tflite_interpreter); // 출력 텐서 개수 세기 int output_count = TfLiteInterpreterGetOutputTensorCount(tflite_interpreter); // 출력 텐서 가져오기 int output_tensor_idx = 0; const TfLiteTensor* output_tensor = \ TfLiteInterpreterGetOutputTensor(tflite_interpreter, output_tensor_idx);
C++
복사

모델 삭제하기

// 모델 삭제 TfLiteModelDelete(tflite_model); // 인터프리터 삭제 TfLiteInterpreterDelete(tflite_interpreter); // 모델 옵션 삭제 TfLiteInterpreterOptionsDelete(tflite_options);
C++
복사

참고