모델/성과 소개
이 서비스가 어떤 데이터로, 어떤 과정을 거쳐 지금의 모델에 도달했는지 정리했습니다.
데이터셋
| 출처 | AML-Cytomorphology_LMU (Matek et al. 2019), 뮌헨대학병원(LMU) |
| 종류 | 말초혈액도말(peripheral blood smear), 100배율 오일 침지 |
| 형식 | .tiff, 400×400 |
| 분할 | train 12,862 / val 2,748 / test 2,755 (70/15/15, stratified) |
augmented 폴더는 왜 뺐나
원본 폴더에는 15개 클래스(18,365장)만 있는데, 실은 16번째 클래스(PRO)와 8개 클래스의 증강본이 augmented/라는 별도 폴더에 더 있습니다. 이번 프로젝트는 이 폴더를 처음부터 의도적으로 제외했습니다.
- Data leakage 위험 — 증강본은 원본을 회전·반전한 복제본이라, 섞어서 나누면 같은 원본이 train과 test에 걸쳐 들어갈 수 있어 test 성능이 실제보다 부풀려집니다.
- PRO는 원본이 아예 없음 — 증강본 426장만 있고 원본 이미지가 하나도 없어서, 모델이 실제 세포 특징을 배우는지 증강 아티팩트를 배우는지 구분할 수 없습니다.
- 증강 방법이 기록에 없음 — 정확히 어떤 변환으로 만들어졌는지 알 수 없어, "왜 그런지 설명 가능해야 한다"는 이번 프로젝트 목표와 맞지 않습니다.
- 순수 baseline 확보 — 증강 없이 먼저 성능을 재고, 이후 Day4에서 증강을 직접 추가해 그 효과만 독립적으로 검증하기 위해서입니다.
그 결과 실제 학습 스코프는 15클래스이고, 그중 4개(PMO 70장·PMB 18장·KSC 15장·LYA 11장)는 원본만으로도 극단적으로 표본이 적은 희귀 클래스입니다 — 아래 개발 과정 내내 이 문제가 계속 등장합니다.
모델 개발 과정
숫자를 올리는 것보다, 왜 그 선택을 했는지를 검증하는 데 더 많은 시간을 썼습니다.
ML 베이스라인부터 시작
색상 특징(54차원)만으로 RF·SVM·LogisticRegression을 비교했습니다. SVM이 정확도(0.91)는 가장 높았지만 macro F1은 세 모델 다 0.35~0.36에 그쳤어요 — 표본이 적은 클래스를 거의 못 맞힌다는 뜻이었고, 이후 모든 결정은 이 문제를 어떻게 풀지에 맞춰졌습니다.
어떤 백본을 쓸지 결정
MobileNetV2와 EfficientNetB0의 전이학습 특징을 같은 분류기로 비교한 결과, EfficientNetB0이 정확도·macro F1·weighted F1 세 지표 모두에서 앞섰습니다. 이후 전 과정에서 이 백본을 그대로 사용했습니다.
불균형과 정면으로 붙다
기본 모델(v1) 위에 class_weight·L2 정규화·Dropout을 더한 v2, 거기에 희귀 클래스 자체 증강까지 더한 v3를 비교했습니다. v2가 macro F1 0.46으로 가장 좋았고, 오히려 증강(v3)은 소폭 하락했습니다 — 증강만으로는 근본적인 표본 부족 문제를 못 푼다는 걸 확인한 결과였습니다. v2를 대표 모델로 확정했습니다.
파인튜닝, 그리고 숫자만 보면 안 되는 이유
여유 시간에 backbone 상위 레이어를 풀어서 재학습(파인튜닝)해봤습니다. 범위를 넓힌 wide 버전이 macro F1 0.48로 지금까지 중 가장 높은 수치를 기록했어요. 하지만 극소 클래스 표본 수 때문에, 이 개선폭을 그대로 믿어도 되는지는 확신할 수 없었습니다.
지표가 좋아졌다고 실제로 나아진 건 아니었다
v2와 wide 모델에 같은 이미지 9장을 넣고 Grad-CAM으로 실제 판단 근거를 비교했습니다. 결과는 예상 밖이었어요 — 예측이 뒤집힌 사례는 0건이었고, 가장 위험했던 고확신 오답(MOB→MON)은 오히려 확률이 0.96→0.97로 더 나빠졌습니다. 집계 지표가 올랐다고 실제로 더 나은 판단을 하게 된 건 아니라는 뜻이었죠. 그래서 지표상으로는 더 낮은 v2를 최종 모델로 유지하기로 결정했습니다.
최종 모델 성능 (v2, EfficientNetB0)
이렇게 확정된 v2의 test셋 성능입니다.
Accuracy(90%)와 macro F1(0.46) 사이의 큰 격차는, 표본이 많은 클래스는 잘 맞히지만 표본이 적은 희귀 클래스는 여전히 어려워한다는 뜻입니다 — 아래 "알려진 한계"에서 더 설명합니다.
Grad-CAM으로 확인한 것
숫자만으로는 "왜 맞혔는지/왜 틀렸는지"를 알 수 없어서, Grad-CAM으로 모델이 이미지의 어느 부분을 보고 그 클래스로 판단했는지 히트맵으로 확인했습니다. 예측 결과 화면에서 원본과 나란히 보여주는 그 이미지가 바로 이 결과입니다.
- 정분류 사례는 실제 형태학적 정의 특징에 정확히 집중했습니다 — 분엽핵(NGS), smudge 텍스처(KSC), 과립성 염색질(PMO) 등.
- 오분류는 두 유형으로 나뉩니다: 세포가 아닌 배경에 시선이 쏠린 경우(PMO→MYO), 세포 내 국소 지점에 과도하게 의존한 경우(LYA→PMB, MOB→MON).
- 위험 신호: MOB→MON 오분류는 확률 0.96의 고확신 오답이었습니다 — 파인튜닝 이후에도(0.97) 개선되지 않아, 확신도가 높다고 항상 믿을 수 있는 건 아니라는 걸 보여줍니다.
알려진 한계
- 극소 표본 클래스(LYA, MMZ)는 class_weight·증강·파인튜닝을 다 시도해도 F1=0.00에서 바뀌지 않았습니다 — 근본 원인은 학습 데이터 자체의 표본 수 부족입니다.
- 이 모델은 "이미지 1장 = 세포 1개"라는 전제 위에 있습니다. 실제 다중 세포가 찍힌 원본 도말 사진 전체를 분류하는 용도는 아닙니다.
- 판독 설명(LLM)은 의료 전문가의 검증을 거치지 않았습니다. 참고용 정보이며, 진단을 대체하지 않습니다.
그래서 이 서비스는 "확정 진단"이 아니라, 3단계 수동 판독 과정 중 분류·설명 구간을 보조하는 도구로 설계했습니다.