Sprint 1 Evidence

데모 앱 모델 교체 및 시연 검증

2026-05-17 새 MobileCLIP2-S4 checkpoint를 Landmark Assistant 데모 앱에 반영하고, PyTorch, FP32 ONNX, dynamic INT8 ONNX 경로에서 Sprint 1 시연 흐름을 다시 검증한 기록이다.

13 landmark classes
18/18 image smoke pass
10/10 text smoke pass
100% INT8 Top-1 agreement

결론

Sprint 1 시연은 Landmark Assistant 데모 앱 + dynamic INT8 ONNX artifact를 기본 경로로 둔다. 새 모델은 이미지 검색, 자연어 검색, Top-3, 상세보기, 신뢰도 정책, 로그 저장을 통과했다. 이름 검색 탭은 제거했고, 장소명 입력은 자연어 검색의 keyword/catalog 검색으로 처리한다.

광화문과 경복궁 근정문은 새 데이터 보강 후 대표 fixture에서는 분리된다. 다만 넓은 광화문 전경처럼 청와대/산/궁궐 배경이 함께 들어오는 장면은 점수가 낮아 out_of_scope 또는 ambiguous로 내려갈 수 있으므로 Sprint 2 hard-case 데이터 과제로 유지한다.

사용한 모델과 데이터 기준

Checkpoint landmark-demo-app/best.pt (MobileCLIP2-S4)
W&B export mobileclip2_s4_fold0_20260517_095559
Dataset split 4,848 records, 4,569 confirmed, 13 classes, fingerprint 9f1c5b9e7d47ebf46de487370a029ada9437a5e5
Prototype source ArcFace head weight. 로컬 CPU에서 전체 image-average prototype 재생성이 너무 느려 Sprint 1 검증에는 학습된 class head를 class center로 사용했다.
Text catalog fix contrast_with 문장은 text embedding 입력에는 유지하되 keyword 직접 매칭에서는 제외했다. 부정 문장에 들어간 단어가 검색을 오염시키는 문제를 막기 위해서다.

구현 변경

검증 결과

검증 명령/대상 결과
Unit tests python -m pytest tests -q 3 passed
PyTorch smoke scripts/demo_smoke_test.py --config config.toml image 18/18, text 10/10, all pass
FP32 ONNX smoke config.onnx.local.toml image 18/18, text 10/10, all pass
INT8 ONNX smoke config.int8.local.toml image 18/18, text 10/10, all pass
Streamlit UI smoke scripts/ui_smoke_test.py 이름 탭 제거, 자연어 Top-3 상세 버튼, 상세 페이지 렌더 통과
INT8 regression FP32 ONNX vs dynamic INT8 ONNX, 15 fixture Top-1 agreement 100%, decision agreement 100%, cosine mean 0.99942

대표 케이스

케이스 Top-3 판정 해석
광화문 대표 이미지 gwanghwamun, cheonggyecheon, statue_of_king_sejong matched Top-1 0.46대, Top-2 0.07 이하라 isolated match로 통과.
경복궁 근정문 대표 이미지 gyeongbokgung_geunjeongmun, gwanghwamun, jogyesa matched Top-1 0.45대, 광화문이 Top-2로 남아 있어 Sprint 2 confusion set으로 추적.
광화문 wide shot + 청와대 배경 gwanghwamun, changgyeonggung, cheongwadae out_of_scope Top-1은 맞지만 전체 점수가 낮다. 확정 답처럼 보이지 않도록 보수적으로 처리한다.
광화문 gate crop gwanghwamun, deoksugung, jogyesa matched 대상이 크게 잡히면 광화문으로 안정적으로 분리된다.
화면 캡처 합성 OOS mmca_seoul, cheonggyecheon, statue_of_king_sejong out_of_scope 후보는 계산되지만 threshold에서 확정 답으로 표시하지 않는다.
art gallery mmca_seoul 포함 Top-1 matched 영어 자연어 검색은 MMCA로 복구.
palace gate gwanghwamun, gyeongbokgung_geunjeongmun 포함 matched 또는 ambiguous ONNX/INT8 경로에서는 keyword/catalog 기반이라 후보 선택형으로 보여주는 것이 적절하다.
stream in Seoul cheonggyecheon 포함 Top-1 matched 또는 ambiguous 청계천 검색 의도는 충족하지만 ONNX 계열에서는 semantic encoder가 아니라 text catalog matching에 의존한다.

Artifact 결과

Artifact 크기 latency reference 상태
FP32 ONNX 1,233.16 MB warm median 684.13 ms 기준선
dynamic INT8 ONNX 983.02 MB warm median 658.95 ms 팀원 실행 기본값

위 latency는 Windows 노트북 ONNX Runtime CPU 기준의 회귀 수치다. 스마트폰 브라우저 시연은 노트북 서버에 접속하는 구조이므로, 실제 스마트폰 NPU 실행 수치와 분리해서 설명한다.

Sprint 1 평가 기준 점검

평가 질문 판단 근거
제시한 Sprint Goal이 결과물로 구현되었는가? 부분 이상 달성 발표 당시 Goal은 US 07, 즉 모델 준비와 핵심 기능 토대작업이었다. 실제 구현은 이를 넘어서 demo app, artifact, 회귀 테스트, 문서화까지 포함했다.
핵심 기능이 실제로 동작하는가? 동작 확인 이미지 검색, 자연어 검색, Top-3, 상세보기, confidence policy, 로그 저장을 smoke/UI 테스트로 확인했다.
사용자가 이해하고 사용할 수 있는가? 시연 가능 이름 탭을 제거해 입력 방식을 이미지/자연어로 단순화했다. 애매한 결과는 확정처럼 보이지 않고 후보 선택형으로 설명한다.
Sprint 2 발전 가능성이 보이는가? 명확함 광화문/근정문 sub-landmark, OOS negative 데이터, 실제 모바일 runtime, text encoder export/QAT가 다음 개선 축이다.

Planning과 결과가 달라 보이는 이유는 Sprint 1 중간에 “모델을 준비하는 것”만으로는 시연 신뢰성을 설명하기 어렵다고 판단했기 때문이다. 그래서 US 07의 토대작업을 유지하되, 팀원이 만질 수 있는 데모 앱과 검증 문서를 함께 만든 방향으로 범위를 조정했다.

남은 리스크

Sprint 2 제안