포스트

반려동물 품종 분류기 만들기 (6) 평가와 오류 분석

test 셋으로 최종 성능을 확정하고, confusion matrix로 가장 많이 혼동되는 품종 쌍을 찾고, Grad-CAM으로 모델이 이미지의 어디를 보고 판단하는지 확인했습니다.

반려동물 품종 분류기 만들기 (6) 평가와 오류 분석

Test 셋 최종 평가

1편의 원칙대로 지금까지 모든 모델 선택은 validation으로 했고, test 셋은 이번이 첫 사용입니다. 5편의 full fine-tuning 모델을 test 3,669장으로 평가했습니다.

지표validationtest
top-1 accuracy93.1%92.4%
macro F10.9300.921

validation과 test의 차이가 0.7%p로 작습니다. validation으로 하이퍼파라미터를 고르는 동안 validation에 과적합되지 않았다는 뜻이고, 이 수치는 새 데이터에서도 기대할 수 있는 성능으로 볼 수 있습니다. macro F1이 accuracy와 비슷한 것은 특정 클래스만 못 맞히는 쏠림이 없다는 의미입니다.

Confusion matrix: 누구와 누구를 헷갈리나

scikit-learn으로 confusion matrix를 만들고, 대각선 밖에서 값이 큰 항목을 뽑았습니다.

1
2
3
from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_true, y_pred)

37x37 행렬을 그림으로 그려보면 오답이 고르게 퍼져 있지 않고 몇 개의 쌍에 몰려 있습니다. 가장 많이 혼동된 세 쌍입니다.

실제 품종예측 품종특징
American Pit Bull TerrierStaffordshire Bull Terrier두 품종 모두 근육질 몸에 짧은 털, 넓은 머리
British ShorthairRussian Blue둘 다 회청색 단모 고양이
RagdollBirman둘 다 장모에 포인트 무늬, 파란 눈

세 쌍 모두 사람이 봐도 구분이 어려운 조합입니다. 모델의 오답이 무작위가 아니라 실제로 닮은 품종에 집중되어 있다는 것은, 모델이 품종의 시각 특징을 제대로 배웠고 그 특징이 실제로 겹치는 지점에서만 틀린다는 의미입니다.

Grad-CAM: 모델은 어디를 보는가

정확도가 높아도 엉뚱한 근거로 맞히는 모델일 수 있습니다. 배경의 소파를 보고 실내묘 품종을 맞히는 식입니다. Grad-CAM으로 마지막 conv 층이 이미지의 어느 영역에 반응했는지 확인합니다.

1
2
3
4
5
from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.model_targets import ClassifierOutputTarget

cam = GradCAM(model=model, target_layers=[model.layer4[-1]])
heatmap = cam(input_tensor=x, targets=[ClassifierOutputTarget(pred)])

정답을 맞힌 이미지 수십 장을 확인한 결과, heatmap은 대부분 동물의 얼굴과 귀 주변에 몰려 있었습니다. 배경이나 사람 손 같은 무관한 영역에 반응하는 경우는 찾지 못했습니다. 틀린 이미지에서는 두 가지 패턴이 보였습니다.

  • 동물이 작게 찍혀 있거나 얼굴이 가려진 경우. 모델이 볼 특징 자체가 부족합니다
  • 위 표의 혼동 쌍처럼 특징이 실제로 겹치는 경우. heatmap은 얼굴을 제대로 보고 있는데 결론이 틀립니다

첫 번째는 crop augmentation을 조정해 개선할 여지가 있고, 두 번째는 더 큰 backbone이나 고해상도 입력이 필요한 영역입니다.

개선 여지

92.4%에서 더 올리려면 시도할 것들은 명확합니다.

  1. backbone을 ResNet-50이나 ConvNeXt로 교체
  2. 입력 해상도를 224에서 384로 상향
  3. TrivialAugment 같은 자동 augmentation 정책 적용

다만 이 프로젝트의 목표는 리더보드가 아니라 전체 사이클을 완성하는 것이므로, 성능은 여기서 멈추고 다음 글에서 모델을 export해 예측 API를 만듭니다.

다음 글: 반려동물 품종 분류기 만들기 (7) 모델 export와 FastAPI 서빙

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.