이미지 분류를 위한 첫 번째 머신러닝 분류기 구축
카테고리
서브카테고리
대상자
- 초보 개발자 및 데이터 과학자
- 기초적인 머신러닝/딥러닝 지식을 가진 사람
- 실무 적용 중심의 간단한 예제 학습을 원하는 사람
핵심 요약
- 이미지 분류 문제는 이진 분류 (Binary Classification)로 정의 (예: "강아지" vs "아니오")
- 전이 학습 (Transfer Learning)을 활용한 CNN 모델 구축 (예:
ResNet-18
활용)
- 데이터 정제 및 평가 지표 (정확도, F1, 혼동행렬) 기반 모델 평가
섹션별 세부 요약
1. 문제 정의 및 분류 유형
- 분류 문제는 이진 분류 (예: 강아지/아니오) 또는 다중 분류 (예: 강아지/고양이/사자)로 구분
- 레이블의 모호성과 오류에 대한 우선순위를 명확히 해야 함
2. 데이터 준비 및 전처리
- Stanford Dogs Dataset 또는 Kaggle Dogs vs. Cats와 같은 데이터셋 사용
- 이미지 정규화, 크기 조정, 데이터 불균형 방지 (70% Train, 15% Validation, 15% Test)
- 데이터 품질이 모델 성능에 직접적 영향 (예: "Bad data beats good models")
3. 모델 선택 및 구현
- CNN (ResNet-18) 활용, 최종 레이어 수정 (
model.fc = nn.Linear(..., 1)
)
- 이진 교차 엔트로피 손실 (Binary Cross-Entropy Loss), Adam 최적화기 (lr=1e-4), 배치 크기 32/64
- PyTorch 코드 예제:
import torchvision.models as models
model = models.resnet18(pretrained=True)
model.fc = nn.Linear(model.fc.in_features, 1)
4. 모델 평가 및 최적화
- 정확도보다 혼동행렬, F1, Precision/Recall 분석을 통해 모델 이해
- 테스트 세트에 특이 사례 추가 (예: 강아지 옷, 흐린 이미지)
- 조기 중단 (Early Stopping) 및 최적 모델 저장
5. 모델 배포 및 서비스화
- FastAPI를 활용한 웹 API 구축 (
/predict
엔드포인트)
- 예제 요청/응답:
"input": "dog.jpg"
"output": {"class": "dog", "confidence": 0.94}
Docker로 컨테이너화 및 로깅 추가
6. 머신러닝 핵심 원칙
- "모든 모델은 잘못되지만, 일부는 유용하다" → 실용성 중심의 모델 설계
- 데이터 정제는 모델 성능에 직접적 영향 (예: "Bad data beats good models")
결론
- 이미지 분류는 데이터 준비 → 모델 설계 → 평가 → 배포의 순서로 접근
- 전이 학습 (Transfer Learning)과 FastAPI 활용으로 실무 적용 가능
- 모델 평가 시 정확도보다 F1, 혼동행렬 분석을 통해 성능 향상
- Docker를 통한 서비스화로 확장성과 안정성 확보