✅ 프로젝트 개요
목표:
한글 폴더명으로 정리된 다중 음식 이미지 데이터셋을 활용해, TensorFlow 기반 이미지 분류 모델을 학습하고, 이를 Android에서 실행 가능한 .tflite
모델로 변환.
환경:
- GPU: NVIDIA H100 (80GB)
- Python 3.12 (venv)
- TensorFlow 2.x (GPU 버전 설치)
- 총 이미지 수: 약 145,000장
- 클래스 수: 38개 (예: 어묵국, 양파샐러드 등)
🗂 데이터 구조 및 전처리
- 데이터 폴더 구조는 다음과 같음:
bashCopyEdit/everything/
├── 어묵국/
│ ├── img1.jpg
│ ├── img2.jpg
├── 양배추/
│ └── ...
- TensorFlow의
image_dataset_from_directory()
함수를 통해 자동으로 class 이름을 폴더명 기준으로 인식.
pythonCopyEdittrain_ds = tf.keras.preprocessing.image_dataset_from_directory(
directory=dataset_path,
image_size=(300, 300),
batch_size=32,
validation_split=0.2,
subset="training",
seed=123
)
🧠 모델 아키텍처 및 학습
- EfficientNetB3 + GlobalAveragePooling + Dense 구조
- Data Augmentation 포함
- 총 Epoch: 50 / Batch Size: 32
- GPU 메모리 최적화 및 과적합 방지를 위해 EarlyStopping 사용 고려 가능
pythonCopyEditbase_model = EfficientNetB3(include_top=False, input_shape=(300, 300, 3), weights='imagenet')
base_model.trainable = False
...
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
- 학습 결과:
train_accuracy ≒ 91.2%
val_accuracy ≒ 93.1%
🛠 모델 저장 및 변환
.keras
형식으로 저장 후.tflite
변환tf.lite.TFLiteConverter.from_keras_model()
사용
pythonCopyEditmodel.save("my_food_classifier.keras")
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open("my_food_classifier.tflite", "wb") as f:
f.write(tflite_model)
📱 향후 Android 연동 시 해야 할 일
- TFLite 모델을 Android Studio 프로젝트에 추가
labels.txt
파일 생성 (class 이름 순서대로)TensorImage
,Interpreter
,TensorBuffer
를 활용한 Inference 코드 작성- 입력 크기
(300, 300, 3)
고정 확인 - 결과값은
softmax
기반 확률 벡터로 출력됨
📚 향후 복습/심화 학습할 주제
주제 | 설명 |
---|---|
TFLite 모델 최적화 | Quantization (int8, float16) 사용해 모델 용량 및 추론 속도 향상 |
정확도 개선 전략 | Fine-tuning, Mixup, Label Smoothing, SAM Optimizer |
다국어 클래스 대응 | 클래스 이름이 한글이므로 Android 내 다국어 지원 처리 필요 |
YOLO → TFLite 전환 | Object Detection 모델(YOLOv8) → TFLite 변환 경로도 병행 고려 |
Custom Android UI | 사용자에게 top-3 class 예측결과를 보기 좋게 시각화하는 UI 구성 |
✅ 마무리
이번 작업은 고성능 H100 환경에서 대량 한글 데이터셋을 학습하고, Android 앱에서 사용할 수 있는 실용적인 .tflite
모델까지 완성한 매우 중요한 기록입니다. 다음 단계로는 실제 Android 기기 테스트 및 실사용 시나리오 반영이 이어질 예정입니다.