LiteRT : 엣지 온디바이스 기기를 위한 AI 런타임
LiteRT (Lite Runtime) 란?
LiteRT는 예전에 Tensorflow Lite라고 불리던 것으로 2017년 구글에서 공개한 Edge(온디바이스) 용 AI 런타임입니다. 당시 다양한 ML/DL 작업을 Edge 장비에서 실행할 수 있도록 모델을 경량 최적화 변환을 한 후 동작시킬 수 있도록 해 주어 영상 분야 등에 활용하는 사례가 많았었습니다.
'Tensorflow Lite' 라는 이름 때문에 구글 자사가 만든 Tensorflow만 지원하는거 아니냔 오해가 있었는데 이후 PyTorch, JAX, Keras 등에서 만든 모델들을 고루 지원하는 형태로 바뀌면서 멀티 플랫폼을 지원한다는 느낌을 주기 위해 이름도 바꾼게 아닐까... 하는 추측을 해 봅니다. 왜냐면 이름 외에는 크게 바뀐 것이 없기 때문이죠. ^^
LiteRT의 특징
LiteRT는 다음과 같은 특징을 가지고 있습니다.
- 경량화된 런타임 라이브러리 :
LiteRT는 모바일 및 임베디드 환경에서 딥러닝 모델의 추론(inference)을 빠르고 효율적으로 수행할 수 있도록 성능 최적화된 경량 런타임입니다. - Google AI Edge와의 연계 :
Google AI Edge 에코 시스템 내에서 제공되는 LiteRT는 안드로이드와 같은 제한된 리소스 환경에서도 최신 딥러닝 모델을 원활하게 구동할 수 있도록 지원합니다. - 효율성과 최적화 :
메모리 사용량과 처리 지연(latency)을 줄이는 데 중점을 두어, 실시간 객체 검출 및 기타 비전 애플리케이션에 적합합니다. - 다양한 플랫폼 지원 :
모바일 및 임베디드 장비에서 동작하는 Android, iOS, Linux 플랫폼을 지원합니다.
LiteRT를 이용한 추론 절차
- 모델 로드 : *.tflite 모델을 메모리에 로드합니다.
- Interpreter 빌드 : 기존 모델 기반으로 Interpreter를 빌드합니다.
- 입력 데이터 변환 :입력 데이터를 모델이 필요로 하는 형식 및 크기로 변환합니다.
- 모델 추론 : LiteRM을 이용해 입력 데이터 기반으로 모델을 실행해서 예측 결과값을 출력합니다.
- 출력 해석 : 원하는 형식으로 변환해서 어플리케이션에서 사용합니다.
Ultralytics와 LiteRT 간 연계 처리
LiteRT의 주 용도가 주로 신호처리, 영상분석(객체감지, 분할, 식별, 분류 등) 등을 온디바이스에서 처리하는 것이라서 그런지 Yolo 시리즈를 개발하고 있는 Ultralytics에서는 이를 손쉽게 연계할 수 있는 방법을 제공하고 있습니다.
다음 그림은 Pytorch로 개발된 Yolov10-n 모델을 LiteRT를 이용해 안드로이드에서 실행할 수 있도록 배포하는 과정을 보여주고 있습니다.
YOLOv10과 LiteRT의 연계 사용 개요
예시로 YOLOv10을 LiteRT 환경에 적용하여 안드로이드에서 효율적인 객체 검출 기능을 구현하는 방법을 다룹니다. 주요 단계는 다음과 같습니다.
- 모델 준비 및 변환 :
- YOLOv10 모델을 학습한 후, 안드로이드에서 사용 가능한 형식(TFLite 또는 LiteRT 전용 형식)으로 변환합니다.
- 이 과정에서 모델의 경량화 및 최적화(예를 들어, 양자화 등)를 수행하여 모바일 환경에 적합하도록 조정합니다.
- LiteRT 라이브러리 통합 :
- 안드로이드 프로젝트에 LiteRT 라이브러리를 추가합니다.
- Gradle 의존성이나 NDK 등으로 필요한 라이브러리들을 연동하여, 런타임에서 모델 추론이 가능하도록 구성합니다.
- 모델 로딩 및 추론:
- 애플리케이션 초기화 시 변환된 YOLOv10-n 모델을 LiteRT를 통해 로드합니다.
- 카메라 입력이나 저장된 이미지를 받아서 추론을 수행합니다.
- 추론 결과(예: 객체의 바운딩 박스, 클래스, 신뢰도 등)를 후처리하여 사용자에게 시각적으로 표시합니다.
- 실시간 객체 검출 애플리케이션 구현:
- 위 과정을 통합하여, 실시간으로 객체 검출을 수행하는 안드로이드 애플리케이션을 개발할 수 있습니다.
- 간단한 API 호출과 후처리 코드만으로도 고성능 객체 검출 기능을 구현할 수 있어, 개발 난이도를 낮추고 빠른 프로토타이핑이 가능합니다.
YOLOv10과 LiteRT 연계 사용의 간단한 방법 (예시)
아래는 개념적으로 YOLOv10 모델을 LiteRT와 연계하여 안드로이드 앱에서 객체 검출을 구현하는 방법에 대한 예시 코드 흐름입니다.
프로젝트에 LiteRT 의존성 추가 (Gradle 예시) :
dependencies { implementation 'com.google.ai.edge:litert:버전번호' }
모델 파일 준비 및 로딩 :
// LiteRT 라이브러리를 사용하여 모델 로드
LiteRTModel model = LiteRTModel.load("path/to/yolov10_model.litert");
입력 이미지에 대한 객체 검출 수행:
// 카메라나 이미지 파일로부터 입력 데이터를 준비
Bitmap inputImage = ...;
// 모델을 통해 객체 검출 실행
DetectionResult[] results = model.detect(inputImage);
결과 후처리 및 UI 표시:
// 검출 결과(바운딩 박스, 클래스 등)를 기반으로 UI에 그리기
for (DetectionResult result : results) {
// 결과 정보 추출 후, 캔버스나 오버레이 뷰에 박스와 라벨 표시 drawBoundingBox(result);
}
이와 같이, YOLOv10 모델을 LiteRT와 통합하면 안드로이드 환경에서도 실시간 객체 검출 애플리케이션을 간단하고 효율적으로 구현할 수 있습니다. 자세한 구현 방법과 최적화 팁은 원문 글에서 추가적으로 제공되며, 이를 참고하면 더욱 정교한 애플리케이션 개발이 가능합니다.
참고자료
- 문서) LiteRT Documentation (링크)
- LiteRT 샘플 코드 github repository (링크)
- 블로그) Yolov10에서 LiteRT까지 (링크)
- Tensorflow Lite for Microcontrollers (링크)