Raspberry Pi 5에서 EfficientDet-Lite0 모델로 실시간 객체 탐지 구현

by DD
1개월 전
조회수 40

TensorFlow Lite(TFLite)를 사용하여 Raspberry Pi 5와 같은 엣지 디바이스(Edge Device)에서 AI 모델을 효율적으로 실행

온디바이스 AI(On-device AI) 트렌드에 맞춰 네트워크 의존성 감소, 프라이버시 보호, 저전력 환경 최적화를 달성

EfficientDet-Lite0 모델을 활용하여 실시간 객체 탐지 시스템을 구축하고, PiCamera2를 통해 영상 데이터를 처리

양자화(Quantization)를 통해 모델 경량화를 수행하여 정확도 손실(Accuracy Loss) 발생 가능

TFLite의 동작 원리: 모델 변환부터 추론까지

본문에서는 TFLite 모델을 Raspberry Pi 5에서 실행하기 위한 전반적인 과정을 설명한다. 먼저, TensorFlow 모델을 TFLite Converter를 사용해 .tflite 파일로 변환한다. 변환된 모델은 엣지 디바이스에서 TFLite Interpreter를 통해 로드되며, 인터프리터는 메모리 할당(allocate_tensors()), 입력 텐서 설정(set_tensor()), 추론 실행(invoke()), 결과 추출(get_tensor()) 등의 과정을 거쳐 객체 탐지 결과를 반환한다. 특히, XNNPACK 가속 라이브러리를 통해 ARM CPU에서 부동소수점 연산을 최적화하여 추론 속도를 향상시킨다.

EfficientDet-Lite0 모델의 특징과 Raspberry Pi 5 적용

EfficientDet-Lite0 모델은 경량화된 구조를 통해 Raspberry Pi 5와 같은 제한된 환경에서도 실시간 객체 탐지를 가능하게 한다. 이 모델은 uint8 타입의 입력 데이터를 사용하며, 이는 전체 정수 양자화(Quantization)를 적용했기 때문이다. PiCamera2를 통해 캡처된 이미지는 전처리 과정을 거쳐 모델 입력 형식에 맞게 변환된다. 전처리 과정에서 입력 데이터 타입에 따라 정규화(Normalization)가 수행되며, 모델은 최대 25개의 객체를 탐지하고, SCORE_THRESHOLD 이상의 결과만 화면에 표시한다.

양자화(Quantization) 기법을 통한 모델 경량화

TFLite는 모델의 크기를 줄이고 추론 속도를 높이기 위해 양자화(Quantization)를 핵심 기술로 사용한다. 양자화는 모델의 가중치와 연산을 낮은 정밀도로 변환하는 기법으로, float32(32bit)에서 int8(8bit) 또는 uint8(8bit)로 변환하여 모델 크기를 줄인다. 특히, 전체 정수 양자화(Full Integer Quantization)는 가장 빠른 속도를 제공하지만, 정확도 손실(Accuracy Loss)을 발생시킬 수 있다. 본문에서는 EfficientDet-Lite0 모델의 입력 타입이 uint8인 이유가 전체 정수 양자화 적용 때문이라고 설명한다.

실시간 객체 탐지 시스템의 주요 함수 분석

본문에서 제시된 실시간 객체 탐지 시스템은 여러 함수로 구성되어 있다. load_labels() 함수는 COCO2017_classes.txt 파일을 읽어 클래스 이름을 로드하고, load_model() 함수는 TFLite 모델을 로드하고 인터프리터를 반환한다. init_camera() 함수는 PiCamera2를 초기화하고, preprocess() 함수는 카메라 프레임을 모델 입력 형식으로 변환한다. draw_detections() 함수는 탐지된 객체를 이미지에 박스 및 레이블로 표시하며, FPSCounter 클래스는 FPS를 측정하고 화면에 표시한다. 마지막으로, main() 함수는 위 함수들을 조합하여 실시간 객체 탐지 루프를 실행한다.

Raspberry Pi 5 환경 설정 및 실행 방법

본문에서는 Raspberry Pi 5에서 실시간 객체 탐지 시스템을 구축하기 위한 환경 설정 및 실행 방법을 상세히 안내한다. 먼저, picamera2, opencv-python, tensorflow, numpy 패키지를 설치해야 한다. 하드웨어 요구 사항으로는 Raspberry Pi 5와 PiCamera2가 필요하다. 실행 방법은 `python test_tflite6.py` 명령어를 사용하며, 종료는 'q' 키 또는 Ctrl+C를 통해 가능하다. 설정값(IMG_SIZE, SCORE_THRESHOLD, MODEL_PATH, LABEL_PATH 등)을 코드 상단에서 수정하여 시스템을 커스터마이징할 수 있다.

EfficientDet-Lite0 모델을 활용한 실시간 객체 탐지 (Raspberry Pi 5)