TensorFlow

TensorFlow Lite C/C++ 환경 구축하기(CMake)

kim선달 2020. 4. 5. 17:51
Select Language

TensorFlow Lite C/C++ 환경 구축하기(CMake)






https://cppmagister.tistory.com/18 를 참고하시는게 더 좋습니다!



TensorFlow Lite C 라이브러리헤더파일, 그리고 CMake 가 필요합니다.


1. 라이브러리 빌드

    라이브러리 만드는법을 참조해주세요



2. 헤더 파일 만들기


1 에서 라이브러리를 만들었으면, 그 원본 소스 파일을 복사하면 됩니다.

아래처럼만 헤더만 남기고 다 날리면 됩니다. (용량 때문에 날린거라 굳이 안 날려도 됩니다)




3. 파일 구성하기


헤더 파일들과 라이브러리 파일들을 각각 하나의 폴더에 묶어 다음처럼 만들면 됩니다.



아래 내용은 Android 로 빌드된 라이브러리를 이용했습니다. 다른 환경에서도 똑같이 해주고 CMakeLists.txt에서만 파일에 맞게 수정해주시면 됩니다.


tftlie/include/tensorflow/ ... 헤더 파일들

tflite/lib/ ... 라이브러리들 (GPU 와 NNAPI를 사용하지 않는다면 libtensorflowlite_c.so 파일만 있으면 됩니다)



이제 TensorFlow Lite 를 보다 편하게 사용하기 위해, 이 녀석을 이용하는 Wrapper 클래스를 만들고, 외부에서는 이 Wrapper만 참조하는 형식으로 구성하겠습니다.

wrapper 폴더 안에 클래스 헤더와 구현부를 만들어주고, tflite 폴더 안에 CMakeLists.txt 파일을 만들어줍니다.



* 만약 Wrapper 을 만드는게 시간이 오래 걸릴 것 같으시면, 제가 만든 커스텀 Wrapper을 사용하시면 됩니다.

https://github.com/lackhole/CuteModel

이걸 쓰신다면 아래 CMakeLists.txt에 있는 add_library 의 Wrapper.cpp을 CuteModel.cpp 로 이름에 맞게 바꿔 주시면 됩니다.



Wrapper.cpp와 위에서 방금 만든 TensorFlow Lite 라이브러리와 헤더를 연결시켜주기 위해 CMakeListst.txt에 다음과 같이 작성해줍니다.

cmake_minimum_required(VERSION 3.4.1)
project(tflite)

set (TFLITE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set (TFLITE_LIB_PATH "${TFLITE_PATH}/lib")
set (TFLITE_INCLUDE_PATH "${TFLITE_PATH}/include")
set (WRAPPER_PATH "${TFLITE_PATH}/wrapper")

add_library(lib_tflite SHARED IMPORTED)
set_target_properties(lib_tflite PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libtensorflowlite_c.so)

add_library(lib_tflite_gpu SHARED IMPORTED)
set_target_properties(lib_tflite_gpu PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libtensorflowlite_gpu_delegate.so)

add_library(lib_nnapi STATIC IMPORTED)
set_target_properties(lib_nnapi PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libnnapi_delegate.a)

add_library(lib_nnapi_impl STATIC IMPORTED)
set_target_properties(lib_nnapi_impl PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libnnapi_implementation.a)

add_library(lib_nnapi_util STATIC IMPORTED)
set_target_properties(lib_nnapi_util PROPERTIES IMPORTED_LOCATION
${TFLITE_LIB_PATH}/libnnapi_util.a)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++14")

add_library(tflite SHARED
${WRAPPER_PATH}/Wrapper.cpp)


target_include_directories(tflite PUBLIC
${TFLITE_PATH}
${TFLITE_INCLUDE_PATH}
${TFLITE_INCLUDE_PATH}/tensorflow/lite/tools/make/downloads
${TFLITE_INCLUDE_PATH}/tensorflow/lite/tools/make/downloads/flatbuffers/include
)

target_link_libraries(tflite
lib_tflite
lib_tflite_gpu
lib_nnapi
lib_nnapi_impl
lib_nnapi_util
log )

사용하지 않는 라이브러리가 있으면 위에서 해당하는 항목을 지우면 됩니다.



자 이제 tflite 폴더를 가지고 원하는 프로젝트에 복사해서 넣으면 거기서 CMake 연결만 해주고 라이브러리를 쉽게 쓸 수 있습니다


이 과정은 CMake를 사용하는 프로젝트라면 어디에서든지 동일하게 사용가능합니다.