CountryGuesser
거리 뷰 이미지로 사진의 촬영 국가를 예측하는 파인튜닝 이미지 분류기입니다 — 동일한 테스트셋에서 사람보다 약 6배 높은 정확도를 달성했습니다.
▶ 라이브 데모: tysonjohnson.dev/countryguesser — 사람 대 모델 국가 맞추기 게임을 직접 플레이해 보세요.
한눈에 보기
- 분야: 컴퓨터 비전 — 이미지 지오로케이션, 국가 수준 분류 (180개 클래스)
- 역할: 개인 개발 — 모델·웹 앱·통계 분석 전부 직접 수행; 5인 인간 집단은 케이스 스터디 참여자이며 협업자가 아님 (수업 프로젝트)
- 기술 스택: Python, PyTorch, EfficientNet-B0, OpenStreetView-5M (OSV-5M), Flask (gunicorn) 웹 앱
- 핵심 지표: 1,000장 웹 앱 벤치마크에서 Top-1 정확도 64.70% vs. 인간 평균 ~10.85% — McNemar χ²=444.7, p<0.001
- 상태: 완료 — 분석 노트북 2026년 4월 확정; 라이브 데모 배포 완료
문제 / 배경
거리 뷰 사진 한 장만으로 모델이 촬영 국가를 신뢰할 수 있게 식별할 수 있을까요? 이 과제는 생각보다 훨씬 어렵습니다. 모델은 180개 국가를 분류 대상으로 다루며, 무작위 기준선은 ~0.6%(≈1/180)이고, 경험 많은 사람 플레이어조차 12%를 넘기기 어렵습니다. 저는 OpenStreetView-5M 데이터셋에서 50만 장 이미지를 추출해 딥러닝 분류기를 구축·평가한 뒤, 구조화된 사람 대 모델 비교를 통해 모델이 사람을 앞서는 지점과 — 더 유용하게는 — 실패하는 지점을 측정했습니다.
접근 방식
OSV-5M에서 추출한 50만 장 이미지로 EfficientNet-B0 백본을 파인튜닝했으며, 국가 수준 예측을 180개 클래스 분류 문제로 설정했습니다. EfficientNet-B0는 정확도 대비 파라미터 수 비율이 유리하다는 이유로 선택했습니다 — 국가 수준의 시각적 단서(식생, 도로 표식, 간판 스타일, 지형)를 학습하기에 충분히 크면서도, 사용 가능한 하드웨어 예산 내에서 훈련할 수 있을 만큼 컴팩트합니다. 훈련은 Google Colab (NVIDIA A100)에서 배치 크기 32로 6 에폭 수행했으며, 실제 소요 시간은 약 4.7시간입니다.
정확한 진행 측정을 위해 홀드아웃 테스트 분할을 검증셋과 별도로 유지했습니다. 이전 체크포인트("구 모델")는 케이스 스터디 참여자를 모집할 당시 이미 웹 앱에 배포된 상태였으며, 최종 파인튜닝 체크포인트("신 모델")는 이후 동일한 1,000장 웹 앱 이미지에서 재채점하여 두 모델 평가 간 데이터 누출 없이 깔끔한 쌍체 비교를 구현했습니다.
사람 대 모델 분석을 위해 2026년 4월에 Python 노트북을 구축했습니다. 이 노트북은 1,000장 이미지에 대한 2,034개의 사람 응답과 두 모델의 예측을 함께 처리합니다. 쌍체 이진 결과에 적합한 방법인 McNemar 검정을 일관되게 적용하여 — 구 체크포인트에서 신 체크포인트로의 개선량을 정량화하고, 이어서 신 모델과 사람 성능을 비교했습니다.
결과
| 벤치마크 | 정확도 |
|---|---|
| 무작위 기준선 (1/180) | ~0.6% |
| 구 모델 체크포인트 (1,000장 웹 앱 세트) | 32.10% |
| 신 모델 — 홀드아웃 테스트 분할 (일반) | 57.6% |
| 신 모델 — 1,000장 웹 앱 벤치마크 | 64.70% |
| 검증 Top-1 | 75.0% |
| 인간 평균 (5인 케이스 스터디 집단) | ~10.85% |
신 모델 vs. 구 체크포인트: 동일한 1,000장 이미지에서 +32.6pp 향상 (McNemar χ²=272.5, p<0.001).
신 모델 vs. 사람: McNemar χ²=444.7, p<0.001 (임의의 사람이 정답인 경우 vs. 신 모델). 1,000장 세트에서 모델 정확도는 인간 평균의 약 6배입니다.
주요 결정 사항 / 학습 내용
미국/캐나다 혼동이 대표적인 실패 패턴입니다. 모델은 벤치마크에서 캐나다 이미지의 80.9%를 미국 또는 캐나다로 예측합니다. 사람이 모델을 이긴 22개 이미지 중 7개는 US↔Canada 오분류 사례로 — 사람이 캐나다 특유의 단서(간판 폰트, 번호판 스타일)를 인식했지만 모델은 북미 공통 시각 공간으로 통합해버린 경우입니다. 이는 모델이 지역 수준의 사전 지식(prior)은 학습했으나, 시각적으로 유사한 인접 국가를 구분하는 세밀한 판별 특징(discriminative feature)은 학습하지 못했음을 시사합니다.
모델은 과신하며, 그 정도를 정량적으로 측정할 수 있습니다. 가장 높은 소프트맥스 구간 (0.9–1.0, n=542 이미지)에서 실제 정확도는 ~89%인 반면 예측 평균 신뢰도는 ~98%입니다. 신뢰도 다이어그램은 고신뢰 구간에서 대각선 아래에 뚜렷하게 위치합니다. 이는 다중 클래스 문제에서 소프트맥스 분류기에 나타나는 알려진 현상으로, 출력 점수를 의사결정 임계값으로 사용할 경우 중요한 의미를 가집니다 — 단순히 Top-1만 보고하는 대신 이를 명시적으로 차트화한 이유입니다.
사람과 모델은 이미지 난이도 구조를 공유합니다. 관찰된 사람만 정답인 경우는 독립 가정 하의 예측값보다 훨씬 적습니다(지민: 관찰값 19 vs. 기댓값 41.7; 주헌: 관찰값 8 vs. 기댓값 30.7). 두 주체는 이미지 난이도에 대해 양의 상관관계를 보입니다. 사람이 모델을 이기는 사례는 주로 강한 문화적 단서가 있는 이미지 — 미국 정지 표지판, 알아볼 수 있는 번호판 — 에서 발생하며, 세계를 보는 일반적으로 다른 시각적 이해 때문이 아닙니다.
윌콕슨이 아닌 McNemar 검정. 여기서의 모든 통계 비교는 McNemar 쌍체 비율 검정을 사용합니다. 이 검정은 쌍체 이진 정오 결과에 적합한 방법입니다. 이전 버전의 이력서에 윌콕슨 검정이 인용된 적이 있었으나, 그것은 오류였으며 이 노트북에서 실행된 검정이 아닙니다.
한계점
- 검증(75.0%)과 테스트(57.6%) 간 격차는 실제입니다. 약 17퍼센트포인트의 일반화 손실은 의미 있는 수치이며, OSV-5M 내부의 분포 이동을 반영할 가능성이 높습니다 — 검증 분할과 테스트 분할이 국가별, 촬영 조건별로 동등하게 대표성을 갖지 않을 수 있습니다. 프로덕션 적합성을 주장하기 전에 국가별 이미지 수를 감사할 필요가 있습니다.
- 인간 코호트의 규모가 작습니다. 케이스 스터디 참여자 3인(각각 n=34~n=1,000개 응답)은 효과 크기를 고려할 때 통계적 유의성을 확보하기에 충분하지만, 더 많거나 지리적으로 다양한 플레이어 집단으로는 인간 평균이 달라질 수 있습니다.
- 과신(overconfidence)이 보정되지 않았습니다. 소프트맥스 출력은 보정되지 않은 상태입니다. 훈련 후 온도 스케일링(temperature scaling) 단계를 적용하면 신뢰도 다이어그램이 대각선에 가까워지고 신뢰도 점수의 신뢰성이 높아집니다.
- OSV-5M의 클래스 불균형. 데이터셋 내 거리 뷰 이미지가 적은 국가(예: CD, ET)는 모델 정확도가 현저히 낮습니다. 성능은 데이터가 풍부한 국가에 크게 치우쳐 있습니다(미국: ~90%, 호주: ~98%).
- 국가 수준은 거친 예측 목표입니다. 이미지로 국가를 예측하는 것은 흥미로운 벤치마크이지만, 실용적인 지오로케이션 사용 사례는 보통 더 세밀한 해상도를 요구합니다. 이 프로젝트는 도시 또는 좌표 수준의 예측을 다루지 않습니다.
- 웹 앱의 정답 드롭다운은 161개국만 나열합니다. 이 제한은 구 배포 모델에서 비롯된 레거시 제약이자 UI 아티팩트이며, 모델의 클래스 수가 아닙니다 — 커밋된 모델은 훈련된 180개 국가 전체를 분류합니다. 실제로는 그 180개 중 120개만 1,000장 벤치마크에서 정답 레이블로 등장하며, 훈련된 19개 국가는 사람이 응답으로 선택할 수 없습니다.
기술 스택
- 모델링: Python, PyTorch, EfficientNet-B0 (파인튜닝), torchvision
- 데이터: OpenStreetView-5M (OSV-5M), 50만 장 훈련 서브셋
- 분석: pandas, NumPy, matplotlib, seaborn, SciPy (McNemar 검정)
- 웹 앱 / 데이터 수집: Flask (gunicorn), Leaflet 지도 프론트엔드, SQLite 응답 로깅
- 환경: 훈련: Google Colab (NVIDIA A100); 라이브 데모: RackNerd VPS (Apache + Cloudflare)
링크
- 라이브 데모: tysonjohnson.dev/countryguesser
- GitHub: github.com/tysonjohnsondev/geolocation-project
- 분석 노트북:
human_vs_model_analysis.pdf(2026년 4월 14일) — 요청 시 제공 - 데이터셋: OpenStreetView-5M