기존_내장_AI_EfficientDet‐Lite0_모델_분석 - boostcampwm-2024/and04-Nature-Album GitHub Wiki
Nature Album 프로젝트에서는 AI를 활용해 사용자가 찍은 사진을 분석하고 자동으로 라벨링을 제공하고자 했다. 초기에는 TensorFlow Lite 기반 EfficientDet-Lite0 모델을 내장해 사용했으며, 이후에는 정확도 문제로 Google Gemini API를 도입했다.
이 문서는 현재 진행 중인 AI 리팩토링의 배경이 되는 기존 모델의 한계를 분석하고, Nature Album에 적합하지 않았던 이유를 정리하고자 한다.
EfficientDet-Lite0은 Google이 TensorFlow Lite 기반으로 개발한 객체 탐지(Object Detection) 모델이다.
- 백본(Backbone): EfficientNet-Lite0 구조 기반
- 특징 추출 구조: BiFPN (Bidirectional Feature Pyramid Network)
- 모델 크기: 약 4MB (TFLite 양자화 모델)
- 입력 크기: 320x320
- 탐지 수: 최대 5개의 객체 반환
- 사전 학습 데이터셋: COCO Dataset (80개 클래스)
EfficientDet-Lite0은 COCO 데이터셋을 기반으로 학습되었다. 그러나 COCO는 주로 도시 환경 및 일상 사물 중심의 객체로 구성되어 있으며, 생물 관련 라벨은 10개 수준에 불과하다.
- bird, cat, dog, horse, sheep, cow, elephant, bear, zebra, giraffe
곤충, 해양 생물, 양서류 등 다양한 생물은 포함되어 있지 않아 Nature Album의 도감 목적과는 부합하지 않았다.
앱 내에서 EfficientDet-Lite0 모델을 사용하는 기본 코드 구조는 다음과 같다:
val modelFile = copyAssetToInternalStorage(context, "EfficientDet.tflite")
val options = ObjectDetector.ObjectDetectorOptions.builder()
.setMaxResults(5)
.setScoreThreshold(0.9f)
.build()
detector = ObjectDetector.createFromFileAndOptions(modelFile, options)
- ScoreThreshold 0.9로 설정되어 있어, 신뢰도가 매우 높은 경우에만 결과 반환
- 라벨이 제한적인 COCO 기반이므로 생물 탐지 결과가 빈번히 누락됨
항목 | 문제 |
---|---|
라벨 다양성 부족 | COCO 데이터셋의 라벨 대부분이 사물에 편중됨 |
생물 분류 성능 부족 | 곤충, 해양 생물 등은 탐지가 불가능함 |
객체 탐지 모델 구조 | 현재 우리 프로젝트는 분류만 필요하나 객체 탐지 모델이라 불필요한 연산 발생 |
탐지 신뢰도 설정 문제 | 0.9 이상의 조건으로 실제 결과 누락 빈도 높음 |
AI 리팩토링에서는 기존 객체 탐지 방식 대신, 이미지 분류(Classification) 모델인 MobileNetV3-Small을 도입하고자 한다.
- 이미지 분류하는 방식으로 구조 변경
- ImageNet 1,000개 라벨 중 생물 관련 라벨 398개만 JSON으로 추출하여 사용
- 예측된 라벨이 JSON에 포함되지 않으면 "알 수 없음"으로 일괄 처리
- TFLite 기반 모델이며 실제 사용된 파일 기준 모델 크기는 약 9.8MB로 확인됨
이러한 구조는 Nature Album 프로젝트의 컨셉에 맞게 최적화되어 있으며, 향후 필요 시 Fine-Tuning을 통해 성능을 더욱 개선할 수 있다.