Accepted for Sprint 1 execution

ADR-0002: Training Model Design

작성일: 2026-05-13 · 범위: 모델 구조, loss, 학습 단계, ONNX 산출물

Decision

Sprint 1 모델은 teacher-assisted student retrieval classifier로 설계한다. 사용자에게는 Top-3 landmark 후보를 보여주지만, 내부 모델은 classification head와 embedding retrieval head를 함께 가진다. 배포 artifact는 student ONNX 하나와 JSON prototype index를 기본으로 한다.

Model Stack

역할 모델 사용 목적 Sprint 1 결정
Teacher baseline DINOv2/DINOv3 계열 frozen visual encoder 이미지 특징 품질 baseline, prototype retrieval 기준점. 학습 대상이 아니라 embedding 추출 및 baseline 평가에 사용.
Image-text reference MobileCLIP2-S0/S2 또는 SigLIP2 frozen image-text encoder caption/name 기반 retrieval 가능성 확인. MobileCLIP2는 경량 image-text 후보로 우선 비교. Sprint 1 배포 모델에는 text encoder를 싣지 않음.
Primary student MobileNetV4 medium 또는 EfficientNet-B2 ONNX 변환과 휴대폰/노트북 local runtime 시연. 먼저 MobileNetV4 Conv/Hybrid Medium, EfficientNet-B2로 end-to-end 성능을 비교한다.
Accuracy fallback MobileNetV4 Conv Large, ConvNeXt-Tiny, EfficientNet-B3급 작은 student 정확도가 부족할 때 사용. 정확도 개선 후보. ONNX/mobile latency 확인 전까지 기본값은 아님.

Student Architecture

student는 하나의 backbone 위에 두 개의 head를 둔다.

구성 출력 용도
Backbone global pooled feature 이미지의 시각 특징 추출.
Embedding head 512-d L2-normalized embedding prototype cosine similarity로 Top-3 후보 검색.
Classification head 10~15 class logits closed-set accuracy, auxiliary supervision, confidence 보조.

Loss Design

Loss 기본 가중치 역할
Cross Entropy + label smoothing 1.0 지정 landmark class를 정확히 맞히는 기본 목표.
ArcFace 또는 cosine margin head 0.5 비슷한 건물끼리 embedding 간격을 벌려 Top-k 혼동을 줄임.
Teacher distillation cosine loss 0.25 student embedding이 teacher representation을 따라가게 함. Stage 2부터 적용.

Sprint 1의 가장 작은 성공 경로는 CE-only 또는 CE+ArcFace다. distillation은 baseline이 안정된 뒤 추가한다. 처음부터 모든 loss를 켜지 않는다.

Training Stages

  1. Stage 0: dataset audit, labels_master.json, split manifest 검증.
  2. Stage 1: frozen teacher prototype retrieval baseline. 학습 없이 Top-3 Accuracy를 얻는다.
  3. Stage 1b: MobileCLIP2-S0/S2 frozen image-text/prototype retrieval baseline을 비교한다.
  4. Stage 2: student CE-only 1 batch overfit, single-GPU smoke, 1 epoch baseline.
  5. Stage 3: CE+ArcFace 또는 SupCon으로 embedding retrieval 품질 개선.
  6. Stage 4: teacher distillation 추가. 성능이 오르지 않으면 제거한다.
  7. Stage 5: ONNX export, Python local inference wrapper, Flutter handoff package 생성.

Inference Scoring

기본 ranking은 student embedding과 class prototype의 cosine similarity로 계산한다. classification softmax는 confidence 보조 신호로만 사용한다. 사용자 표시값은 validation set 기반 calibration이 있으면 calibration percent를 쓰고, Sprint 1 초기에는 prototype score를 class 내 min/max 또는 softmax 형태로 임시 percent 변환한다.

percent는 사용자 친화 표시값이지 확률이라고 주장하지 않는다. 시연 문구에서는 "신뢰도" 또는 "유사도"로 표현한다.

Evaluation Gates

Gate 통과 기준 실패 시 조치
Data gate audit 통과, split 생성, class별 train/val/test 존재. labels/file_name/image 구조 수정.
Baseline gate teacher frozen Top-3 baseline 기록. 데이터 누락/라벨 품질/전처리 확인.
Student gate student가 val Top-3에서 teacher baseline에 근접하거나 초과. student 용량 상향, ArcFace, distillation, augmentation 조정.
ONNX gate PyTorch와 ONNX output cosine 차이가 작고 Python local demo가 동작. unsupported op, preprocessing parity, export opset 확인.
Demo gate 사진 입력 → Top-3 percentage 출력 → out_of_scope 안내/log 동작. Flutter 대신 Python local demo로 fallback.