Life Logs && *Timeline

  • 📌 TensorFlow Lite 기반 음식 이미지 분류기 학습 및 변환 기록

    ✅ 프로젝트 개요

    목표:
    한글 폴더명으로 정리된 다중 음식 이미지 데이터셋을 활용해, 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 연동 시 해야 할 일

    1. TFLite 모델을 Android Studio 프로젝트에 추가
    2. labels.txt 파일 생성 (class 이름 순서대로)
    3. TensorImage, Interpreter, TensorBuffer를 활용한 Inference 코드 작성
    4. 입력 크기 (300, 300, 3) 고정 확인
    5. 결과값은 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 기기 테스트 및 실사용 시나리오 반영이 이어질 예정입니다.