본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Raspberry Pi

[TensorFlow Lite] TensorFlow를 Raspberry Pi에서 사용

by zpstls 2023. 1. 5.
반응형

 

 

보통 High Spec PC 또는 Server PC, Cloud에서 AI 프로그램을 구동하게 되는데, AI를 간단하게 Microprocessor 환경에서 구동하는 방법에 대해 다뤄보도록 하겠습니다.

 

< Raspberry Pi에서 TensorFlow-Lite를 설치하고 구동하는 부분에 있어서 Pre-Trained Model과 관련된 내용은 다루지 않습니다.

TensorFlow에서 사용할 수 있는 Pre-Trained Model 파일이 이미 있다는 전제하에 진행됩니다. >

 

 

Raspberry Pi에 TensorFlow를 설치하기에 앞서, 다음 과정을 참고해 Raspberry Pi의 초기 Setting을 진행합니다.

다음 URL에서 Raspberry Pi imager Install File을 Download 합니다.

 

URL : https://www.raspberrypi.com/software/

 

Raspberry Pi OS – Raspberry Pi

From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.

www.raspberrypi.com

다운로드가 완료되면 imager를 실행시킵니다. 다음과 같은 결과를 얻을 수 있습니다.

Raspberry Pi Imageer

Choose OS를 Click 하면 설치할 OS를 고를 수 있습니다. Raspberry Pi OS (32-bit)를 선택하고 Choose Storage를 Click 하여 Raspberry Pi에서 사용할 SD Card를 선택합니다.

마지막으로 Write를 눌러 SD Card에 OS를 준비합니다. SD Card를 Raspberry Pi에 장착하고 전원을 인가하면 OS를 설치할 수 있습니다.

 

Raspberry Pi camera Module이 아닌 일반 Webcam을 연결해 사용할 것이므로 다음과 같은 명령어를 통해 webcam이 제대로 연결되었는지 확인해 봅니다.

>> lsusb

>> sudo apt install fswebcam
>> fswebcam -r 1280x720 --no-banner ./image1.jpg

>> sudo apt install ffmpeg
>> ffmpeg -f v4l2 -video_size 1280x720 -i /dev/video0 -frames 1 out.jpg

이미지 파일이 정상적으로 저장되었다면 Webcam 연결이 제대로 된 것입니다.

 

 

 

 

 

다음으로는 AI 프로그램 구동을 위한 환경을 조성합니다.

Raspberry Pi에서는 TensorFlow Lite를 Python으로 간단하게 구동 시킬 것이기에, Model 구성과 Train 부분은 PC에서 진행하고 이 결과물을 Tensorflow Lite로 변환하여 사용할 수 있도록 하는 TensorFlow Lite runtime Package만 Raspberry Pi에 설치하여 사용할 것입니다.

 

다음과 같은 과정을 통해 설치할 수 있습니다.

>> pip install tflite-runtime

설치가 완료되었으면 Python에서 다음과 같은 import가 제대로 수행되는지 확인해 봅니다.

import tflite_runtime.interpreter as tflite

정상적으로 수행되었다면, 이제 TensorFlow Model을 Raspberry Pi에서 구동시키기 위한 Code를 작성하고 구동해 봅니다.

해당 부분의 핵심 코드는 다음과 같습니다.

tflite_model_file = 'converted_model.tflite'
with open(tflite_model_file, 'rb') as fid:
    tflite_model = fid.read()

# Load TFLite model and allocate tensors
interpreter = Interpreter(model_content=tflite_model)
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Preprocess image
img = camera_image

# Add a batch dimension
input_data = np.expand_dims(img, axis=0)

# Point the data to be used for testing and run the interpreter
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()

# Obtain results and print the predicted category
predictions = interpreter.get_tensor(output_details[0]['index'])
predicted_label = np.argmax(predictions)
    
classify_result = labels[predicted_label]

tflite model 파일을 Load 하고 해당 Data를 Interpreter에 넣어 TensorFlow-Lite를 위한 Model을 준비합니다. 이후, Input Data를 구성한 TensorFlow-Lite Model (= Interpreter)에 넣고 계산한 후 Output을 얻어 출력합니다.

 

참고로 TensorFlow환경에서 Model을 구성하고 학습시킨 결과 파일은 보통 .h5 등과 같은 Format인데, 이는 tflite Format과 다르므로 Convert시켜주어야 합니다. Convert관련 Code는 다음과 같습니다.

loaded = tf.saved_model.load(CUSTOM_MODEL)
converter = tf.lite.TFLiteConverter.from_saved_model(CUSTOM_MODEL)
converter.optimizations = [tf.lite.Optimize.DEFAULT]

tflite_model = converter.convert()
with open("converted_model.tflite", "wb") as f:
  f.write(tflite_model)

전반적으로 위와 같은 과정을 통해 TensorFlow → TensorFlow-Lite로 구성하여 HW Spec이 낮은 Microprossor 환경에서 AI를 구동할 수 있게 되었습니다.

 

 

Raspberry Pi에서 TensorFlow-Lite를 이용해 AI 프로그램을 구동시키는 부분에 대해 다루어 보았습니다.

과정 자체는 간단합니다.

다만, 실제 구동해본 결과 정말 느리더군요...

Model 자체가 무거운 것도 있겠지만 HW 스펙이 확실히 AI를 구동시키기에는 역부족이라는 느낌이 들었습니다.

 

이번 포스팅은 여기까지 작성하도록 하겠습니다.

 

 

반응형

댓글