1. 시작: TFLite Model Maker의 문제
원래는 TFLite Model Maker를 이용해서 Object Detection 모델을 학습하려고 했습니다. TFLite Model Maker는 TensorFlow Lite 모델을 간편하게 만들 수 있는 라이브러리로, 데이터셋만 준비하면 비교적 쉽게 모델을 학습하고 변환할 수 있습니다. 하지만 라이브러리를 설치하고 실행하는 과정에서 여러 가지 오류가 발생했습니다.
대표적인 문제는 다음과 같습니다:
- 라이브러리 의존성 충돌
- 특정 버전의 TensorFlow Lite와 호환되지 않는 문제
- Colab 환경에서 제대로 동작하지 않는 버그
이러한 문제들로 인해 결국 TFLite Model Maker를 포기하고, Mediapipe Model Maker를 활용하기로 결정했습니다.
2. Mediapipe Model Maker로 전환
Mediapipe Model Maker는 Google의 Mediapipe 프레임워크를 활용하여 Object Detection 모델을 학습할 수 있도록 지원하는 도구입니다. Mediapipe는 주로 실시간 컴퓨터 비전에 강점을 가지며, 모바일 및 임베디드 환경에서도 원활하게 동작합니다.
TFLite Model Maker 대신 Mediapipe Model Maker를 선택한 이유는 다음과 같습니다:
- Colab 환경에서 원활하게 실행 가능
- 비교적 간단한 API를 제공
- TensorFlow 기반이라 TFLite와 호환 가능
따라서 Mediapipe Model Maker를 활용하여 Object Detection 모델을 학습하고 배포하는 과정을 진행했습니다.
3. Colab에서 Mediapipe Model Maker 실행하기
3.1. 환경 설정 및 라이브러리 설치
Colab에서 Mediapipe Model Maker를 실행하기 위해 필요한 라이브러리를 설치했습니다.
!pip install mediapipe-model-maker
설치 후 의존성 충돌이 발생하지 않는지 확인한 뒤, 다음 단계로 진행했습니다.
3.2. Colab에서 GPU 설정 문제 해결
Colab 환경에서 GPU를 제대로 인식하지 못하는 문제가 발생했습니다. 해결을 위해 다음과 같은 단계를 수행했습니다:
- Colab에서 런타임 유형을 변경:
- 런타임 > 런타임 유형 변경 > 하드웨어 가속기를 GPU로 설정
- 현재 GPU 상태 확인:
import tensorflow as tf
print("Num GPUs Available:", len(tf.config.list_physical_devices('GPU')))
- 만약 0이 출력되면 GPU가 제대로 인식되지 않은 것임
- NVIDIA 드라이버 및 CUDA 버전 확인:
!nvidia-smi
- 이 명령어를 실행했을 때, GPU 정보가 제대로 표시되지 않으면 런타임을 다시 시작하거나 CPU 모드로 실행한 후 다시 GPU로 변경
- TensorFlow 및 Keras 버전 조정 (2.16 이상에서 오류 발생)
!pip install tensorflow[and-cuda]==2.15.1 keras==2.15.0 tensorboard==2.15.2 tensorflow-hub
- 설치 후 버전 확인:
import tensorflow as tf
import keras
print("TensorFlow Version:", tf.__version__)
print("Keras Version:", keras.__version__)
- 위 코드에서 TensorFlow 2.15.1, Keras 2.15.0이 제대로 표시되면 정상적으로 설정된 것임
위 과정을 거친 후, GPU가 정상적으로 인식되었음을 확인한 뒤 학습을 진행했습니다.
3.3. 데이터셋 준비
Object Detection을 위해 적절한 데이터셋이 필요했습니다. 이번 실험에서는 3마리 개(dog)를 식별하는 모델을 만들기로 했습니다. 데이터를 수집하고 라벨링하는 과정은 다음과 같습니다:
- Open Images Dataset 또는 기존 이미지 데이터를 활용
- 이미지와 바운딩 박스를 포함한 라벨링 파일(.csv 또는 .json) 준비
- Mediapipe Model Maker의 데이터 포맷에 맞게 변환
데이터셋 다운로드 및 준비 과정은 다음과 같이 진행했습니다:
!wget https://storage.googleapis.com/mediapipe-assets/dogs2.zip --no-check-certificate
!unzip dogs2.zip
train_dataset_path = "dogs/train"
validation_dataset_path = "dogs/validate"
train_data = object_detector.Dataset.from_pascal_voc_folder(
'dogs copy/train',
cache_dir="/tmp/od_data/train",
)
val_data = object_detector.Dataset.from_pascal_voc_folder(
'dogs copy/validate',
cache_dir="/tmp/od_data/validatation"
)
Object Detection을 위해 적절한 데이터셋이 필요했습니다. 이번 실험에서는 3마리 개(dog)를 식별하는 모델을 만들기로 했습니다. 데이터를 수집하고 라벨링하는 과정은 다음과 같습니다:
- Open Images Dataset 또는 기존 이미지 데이터를 활용
- 이미지와 바운딩 박스를 포함한 라벨링 파일(.csv 또는 .json) 준비
- Mediapipe Model Maker의 데이터 포맷에 맞게 변환
3.4. 모델 학습
데이터 준비가 끝난 후, Mediapipe Model Maker를 사용하여 학습을 시작했습니다. 간단한 코드 예제는 다음과 같습니다.
from mediapipe_model_maker import object_detector
# 하이퍼파라미터 설정
hparams = object_detector.HParams(batch_size=8, learning_rate=0.3, epochs=50, export_dir='exported_model')
options = object_detector.ObjectDetectorOptions(
supported_model=object_detector.SupportedModels.MOBILENET_V2,
hparams=hparams
)
# 모델 생성 및 학습
model = object_detector.ObjectDetector.create(
train_data=train_data,
validation_data=val_data,
options=options
)
Mediapipe Model Maker는 EfficientDet 기반의 다양한 모델을 지원하며, 원하는 모델을 선택하여 학습할 수 있습니다.
3.5. 모델 평가 및 변환
학습이 완료된 후, 모델을 평가하고 TFLite 포맷으로 변환하여 모바일 환경에서 사용할 준비를 했습니다.
# 모델 평가
metrics = model.evaluate(val_data)
print("Evaluation metrics:", metrics)
# TFLite 변환
model.export(export_dir='exported_model')
4. 결론 및 느낀 점
이번 실험을 통해 Mediapipe Model Maker를 사용하여 Object Detection 모델을 성공적으로 학습할 수 있었습니다. 처음에는 TFLite Model Maker를 사용하려고 했지만, 여러 가지 문제로 인해 Mediapipe Model Maker로 전환했고, 결과적으로 더 간편하고 빠르게 모델을 만들 수 있었습니다.
Mediapipe Model Maker의 장점:
✅ Colab 환경에서 쉽게 실행 가능 ✅ TensorFlow Lite와 호환되어 모바일 배포 가능 ✅ 직관적인 API 제공
하지만 단점도 있었습니다: ❌ 공식 문서가 상대적으로 부족하여 디버깅이 어려운 부분이 있음 ❌ 일부 고급 기능(예: 커스텀 모델 구조 변경)에 제약이 있음 ❌ Colab에서 GPU 설정이 원활하지 않아 추가적인 설정이 필요함
앞으로는 Mediapipe Model Maker의 다양한 기능을 더 실험해보고, 실제 프로젝트에 적용할 방법을 모색해볼 계획입니다. Mediapipe Model Maker를 활용하여 Object Detection을 고려하는 분들에게 도움이 되었길 바랍니다!
'Deep Learning > Computer Vision' 카테고리의 다른 글
augmentation을 통해서 data imbalance 맞춰주기 (0) | 2023.11.06 |
---|---|
ChatGPT 로 쓴 data split script (Image classification) (0) | 2023.10.05 |
keras를 이용한 image classification 구현하고 저장하기 (mobilenet, tflite) (0) | 2023.06.20 |
Yolov5를 이용해서 Transfer Learning에서 Early Overfitting을 방지하는 방법 (0) | 2022.02.17 |
Yolov5의 model을 Tx2 engine을 만들어봅시다 (Onnx, netron) (2) | 2022.01.10 |