에지 AI는 현장에서 직접 인공지능 추론을 가능하게 하며, 데이터 보안과 네트워크 효율성을 확보하는 기술입니다. 하지만 현장 환경은 연산 자원이 제한적이기 때문에 AI 모델 성능 자체보다 전처리 과정과 추론 속도 최적화가 프로젝트의 성공을 좌우합니다. 오늘 글에서는 에지 AI 구현을 위한 데이터 전처리 전략과 추론 속도를 높이기 위한 최적화 기법을 알아보고자 합니다. 이는 실제 적용을 목표로 하는 개발자와 엔지니어들에게 팁이 될 수 있습니다.
에지 AI에서 데이터 전처리가 중요한 이유
에지 디바이스의 한계
에지 디바이스는 일반적으로 제한된 메모리(RAM), 낮은 연산 능력(CPU/GPU/NPU), 저장 공간 부족 등의 제약을 가지고 있습니다. 이에 따라 복잡하거나 무거운 전처리 코드는 시스템 병목 현상을 유발할 수 있습니다.
전처리의 목적
- 모델 입력 형식 맞춤화
- 노이즈 제거 및 특징 보강
- 연산량 감소로 추론 속도 확보
- 실시간 처리 가능성 확보
즉, 전처리는 단지 ‘데이터를 깨끗이 정리하는 작업’이 아니라 에지 AI의 효율성과 속도를 좌우하는 핵심 단계입니다.
1. 전처리 최적화를 위한 핵심 전략
1-1. 입력 이미지 해상도 축소
고해상도 이미지는 처리에 더 많은 연산을 요구합니다. 대부분의 경량화 AI 모델은 224x224 또는 320x320 크기만으로도 충분한 성능을 발휘할 수 있습니다.
import cv2
image = cv2.resize(image, (224, 224))
- 장점: 연산량 급감, 속도 향상
- 주의점: 너무 작은 해상도는 정확도 저하 유발 가능 → 테스트 필요
1-2. 정규화와 타입 변환
모델 추론 속도에 영향을 주는 주요 요인 중 하나는 데이터 타입과 범위입니다.
- float32 → uint8로 변경 (양자화 모델과 호환)
normalized = image.astype('float32') / 255.0
TensorFlow Lite, ONNX Runtime 등은 데이터 타입에 따라 추론 속도가 최대 3배 이상 차이 날 수 있습니다.
1-3. 배치 처리보다 단일 샘플 처리
에지 AI는 대부분 실시간 처리를 위해 단일 샘플 추론을 합니다. 따라서 배치 처리 기반 전처리보다는 경량 단일 샘플 중심 코드로 구성해야 합니다.
# (1, height, width, channels) 형태로 reshape
input_data = np.expand_dims(image, axis=0)
1-4. 전처리 파이프라인 병목 제거
- PIL, OpenCV, NumPy 혼용 시 병목 발생 가능
- 한 가지 프레임워크 일관 사용 권장
- 필요한 연산만 수행 (예: 필터링, 회전 제거 등)
팁 : 추론 함수 외에 전처리 시간도 측정하여 최적화 대상 파악
2. 에지 AI 추론 속도 최적화 전략
2-1. 모델 경량화: Quantization
양자화(Quantization)는 float32 모델을 int8 또는 float16 등으로 변환해 연산량을 줄이는 방법입니다.
converter.optimizations = [tf.lite.Optimize.DEFAULT]
- int8 모델: CPU/NPU에서 효율적
- float16 모델: GPU에서 속도 최적화
- 정확도 손실은 미미하지만 속도는 2~4배 향상 가능
2-2. 연산 최적화: Pruning & Operator Fusion
- Pruning: 중요하지 않은 노드를 제거하여 연산량 감소
- Operator Fusion: 여러 연산을 하나로 결합하여 병렬 처리 가능
TensorRT, OpenVINO, TFLite는 이를 자동 적용하거나 사전 설정 가능
2-3. Delegate 사용
TFLite나 ONNX Runtime은 연산을 CPU 대신 GPU나 NPU로 위임할 수 있는 Delegate 기능을 지원합니다.
interpreter = tflite.Interpreter(
model_path="model.tflite",
experimental_delegates=[tflite.load_delegate('libedgetpu.so.1')]
)
대표 Delegate 예시
하드웨어 | Delegate |
Coral Edge TPU | edgetpu_delegate |
NVIDIA GPU | gpu_delegate |
Android NPU | nnapi_delegate |
2-4. 추론 지연 시간 분석
import time
start = time.time()
interpreter.invoke()
print("Inference Time:", time.time() - start)
실시간성이 필요한 경우, 100ms 이하 추론 시간이 이상적입니다. 영상 처리 시스템은 30fps 기준, 약 33ms 이하가 되어야 실시간 대응이 가능합니다.
2-5. 입력 정렬과 메모리 최적화
- 입력 텐서 shape 미리 고정 → 동적 shape 사용 시 오버헤드 발생
- 연속된 메모리 배열 구조(NCHW 또는 NHWC)를 모델 구조와 맞추기
- 파이프라인 내에서 중간 결과 캐시 활용으로 재연산 방지
3. 실제 시스템에서의 전처리 + 추론 통합 예시
import cv2
import numpy as np
import tflite_runtime.interpreter as tflite
# 모델 로드
interpreter = tflite.Interpreter(model_path="model_quant.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
# 카메라 영상 캡처
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
image = cv2.resize(frame, (224, 224))
image = image.astype('float32') / 255.0
input_data = np.expand_dims(image, axis=0)
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
result = interpreter.get_tensor(output_details[0]['index'])
print("추론 결과:", result)
4. 에지 AI 환경별 최적화 포인트 요약
환경 | 최적화 포인트 |
Raspberry Pi | float16 모델, OpenCV 전처리, TFLite |
Jetson Nano | TensorRT 변환, GPU Delegate, CUDA 전처리 |
Coral TPU | int8 양자화 모델, Edge TPU Delegate 적용 |
Android NPU | NNAPI Delegate, Java 전처리 코드 최적화 |
결론: 빠른 추론은 전처리에서 시작된다
에지 AI는 단순히 모델만 경량화한다고 실시간 성능을 보장하지 않습니다. 전처리 시간, 입력 데이터 구조, 연산 최적화, Delegate 설정 등 전체 시스템 관점에서의 최적화가 필요합니다. 실제 현장에서는 모델 추론보다 전처리와 후처리가 더 많은 리소스를 사용하는 경우도 많습니다. 따라서 에지 AI 프로젝트를 성공적으로 운영하기 위해서는 데이터 흐름 전체를 이해하고 최적화하는 전략적 접근이 필요합니다.
요약 체크리스트: 에지 AI 최적화를 위한 핵심
- 입력 이미지 해상도는 모델에 맞춰 축소
- float32 대신 int8 또는 float16으로 양자화
- 전처리 코드는 NumPy/OpenCV 중심으로 간결화
- Delegate 설정으로 연산 위임
- 추론 시간, 전처리 시간 따로 측정하여 병목 확인
- 메모리 사용 최적화 및 입력 shape 고정
'에지 AI' 카테고리의 다른 글
에지 AI 기술 동향과 2025년 전망 (0) | 2025.06.18 |
---|---|
에지 AI 비즈니스 모델 (2) | 2025.06.16 |
에지 AI 프로젝트 구축 시 주의 사항 (1) | 2025.06.13 |
에지 AI를 활용한 물류 산업 혁신 (2) | 2025.06.12 |
에지 AI 기반 제조업 자동화 (3) | 2025.06.11 |