반려동물 품종 분류기 만들기 (1) 프로젝트 설계
37개 품종 분류라는 문제 정의, Oxford-IIIT Pet을 고른 이유, baseline부터 fine-tuning까지 세 단계 모델 계획과 실험 원칙을 정리했습니다.
반려동물 품종 분류기 만들기 (1) 프로젝트 설계
들어가며
딥러닝 기초 시리즈에서 CNN과 transfer learning을 개념으로 정리했고, PyTorch 기초 시리즈에서 학습 루프를 짜는 법까지 다뤘습니다. 이번에는 그 재료로 실제 프로젝트를 하나 끝까지 만듭니다. 데이터 준비부터 학습, 오류 분석, 예측 API까지가 범위입니다.
무엇을 만드나
사진 한 장이 주어졌을 때 반려동물의 품종을 예측합니다.
- 입력: RGB 이미지 한 장 (크기 제각각, 전처리에서 224x224로 통일)
- 출력: 37개 품종에 대한 확률 분포와 top-3 예측
- 평가 지표: top-1 accuracy를 기본으로, 클래스별 성능 확인을 위해 macro F1을 함께 기록
정확도 수치 하나로 끝내지 않고, 학습 시간과 추론 시간도 모델마다 같이 기록합니다.
데이터: Oxford-IIIT Pet
데이터셋은 Oxford-IIIT Pet을 사용합니다. 고른 이유는 세 가지입니다.
- 크기가 적당합니다. 총 7,349장(trainval 3,680장, test 3,669장)이라 Colab 무료 GPU로도 한 번의 실험이 수십 분 안에 끝납니다.
- 문제가 적당히 어렵습니다. 개와 고양이를 구분하는 문제가 아니라 37개 품종을 구분하는 fine-grained 분류입니다. 품종 간 생김새가 비슷해서 scratch 학습과 transfer learning의 차이가 뚜렷하게 드러납니다.
- torchvision에 내장되어 있습니다.
torchvision.datasets.OxfordIIITPet으로 다운로드부터 라벨까지 한 번에 해결됩니다.
클래스당 이미지가 약 200장으로 거의 균등해서, 클래스 불균형 처리 없이 accuracy를 기본 지표로 쓸 수 있습니다.
전체 흐름
flowchart TD
A[Oxford-IIIT Pet 다운로드] --> B[EDA와 전처리, augmentation]
B --> C[Baseline: 직접 만든 CNN]
B --> D[ResNet fine-tuning]
C --> E[동일 조건 비교 평가]
D --> E
E --> F[confusion matrix와 Grad-CAM 오류 분석]
F --> G[TorchScript export]
G --> H[FastAPI 예측 API]
모델은 단순한 것부터
처음부터 사전학습 모델을 쓰지 않고, 세 단계로 나눠 동일한 데이터 분할과 지표로 비교합니다.
- Baseline: conv 블록 3개짜리 작은 CNN을 처음부터 학습
- Linear probing: 사전학습 ResNet의 backbone을 얼리고 마지막 분류층만 학습
- Full fine-tuning: backbone까지 전부 낮은 learning rate로 학습
Baseline을 먼저 두는 이유는 명확합니다. 3,000장 남짓한 데이터로 scratch 학습이 어디까지 가는지 숫자로 확인해야, transfer learning이 정확히 몇 %p를 벌어주는지 말할 수 있기 때문입니다. 딥러닝 기초 11편에서 “작은 데이터셋에는 fine-tuning이 유리하다”고 정리했는데, 이 프로젝트가 그 명제를 직접 측정하는 실험이기도 합니다.
실험 원칙
프로젝트 내내 지킬 원칙을 미리 정해뒀습니다.
- test 셋은 6편의 최종 평가 전까지 열어보지 않는다. 모델 선택은 전부 validation 셋으로 한다
- 모든 모델은 동일한 train/validation 분할, 동일한 입력 크기(224x224)로 비교한다
- seed를 고정하고, 실험마다 config와 결과 지표를 JSON 파일로 남긴다
- augmentation은 train에만 적용하고, validation과 test는 동일한 결정적 전처리를 쓴다
앞으로의 계획
- uv 기반 개발환경과 프로젝트 구조 세팅
- 데이터 다운로드, EDA, Dataset과 DataLoader 구성
- Baseline CNN 학습과 과적합 관찰
- ResNet fine-tuning 두 단계 실험
- test 셋 최종 평가, confusion matrix와 Grad-CAM 분석
- TorchScript export와 FastAPI 서빙
다음 글에서는 개발환경을 세팅합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.