feat: 단계 비교 뷰어 + factory structure 분리 + gap 스윕
make_stage_viewer.py 신규. 같은 사진 위에서 검출 -> claim -> 병합을
갈아끼워 본다. 사진은 그대로 두고 폴리곤만 바뀌므로 무엇이 달라졌는지
바로 보인다. 바뀐 폴리곤(claim 재배정, 2개 이상 병합)은 빨갛게 강조하고,
커서를 올리면 라벨과 원본 픽셀 좌표, 바뀐 이유를 띄운다.
factory structure 를 [building] 에서 뺐다. 공장 구조물이 일반 건물에
흡수되면 병합 후 되돌릴 수 없다. 집합 밖 라벨은 merge_labels.py 가
그대로 통과시키므로 독립 클래스로 남는다.
16장 실측 24개. 부작용으로 building 이 466 -> 490 으로 늘었다 —
전에는 factory structure 폴리곤이 건물 사이 다리 노릇을 해 여러 건물을
한 덩어리로 잇고 있었다. 라벨 14 -> 15종, 폴리곤 6,370 -> 6,418.
gap 스윕(사진 4장, 폴리곤 3,280): 0px 2,081 · 2px 2,032 · 3px 2,014 ·
8px 1,954 · 16px 1,801 · 32px 1,574. 꺾이는 지점이 없다. 1~3px 차이는
폴리곤 2.4%, 무라벨 0.13pp 로 노이즈 수준이라 2px 를 유지한다.
과다 병합은 16px 부터 보인다 (vehicle 240 -> 229, 32px 에서 209).
status 에서 틀린 이슈 하나를 지웠다. "콘 검출이 버려진다"는 서술은
사실이 아니다 — passthrough 로 독립 클래스로 남는다. 검출 0 프롬프트
목록도 v1 기준 8개에서 확정 설정 16장 기준 12개로 고쳤다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@
docs: 집합 조정(M2) 보류 기록 + 반입 목록 실측
M2 는 교통시설물을 가르는 안까지 만들고 보류했다. 16장 실측으로
structure 1,079 -> utility pole 608 / streetlight pole 372 /
road sign 358 / culvert 9, fence 702 -> guardrail 668 / fence 46 /
roadside barrier 17 로 갈라지는 것을 확인했다 (라벨 14 -> 19종).
사용자 지시로 v4 로 되돌렸고 v5 는 보류 표시와 함께 남긴다.
culvert 9개, roadside barrier 17개는 16장 기준 표본이 부족하다.
정정: "집합 없는 검출은 버려진다"는 앞선 판단은 틀렸다.
merge_labels.py 의 merge_by_group 은 집합에 없는 라벨을 passthrough 로
그대로 통과시킨다. 16장 병합 결과에 orange traffic cone 114 개와
yellow safety cone 6 개가 독립 클래스로 살아 있다. [cone] 으로 묶으면
오히려 나란히 선 콘이 gap 2px 에서 한 덩어리가 되어 개수를 잃는다.
envsetting.md 에 반입 목록을 실측 크기로 정리했다:
git 으로 오는 것 (복사 금지)
손으로 복사할 것 체크포인트 3.3GB / BPE 1.4MB / JPEG 69장 1.2GB
복사하면 안 되는 것 venv(절대경로), output/, theater 뷰어 JPEG 55MB
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@
docs: 확정 설정 16장 검증 + 4090 이관 지시서
16장 실측 무라벨(conf 0.10): 0.5% ~ 6.4%, 평균 3.44%.
15/16 장이 목표 5% 이하. 같은 16장 기준선 평균은 19.9%.
소요 466~907초/장 (평균 585초).
예상이 틀린 곳: 물 많은 사진이 위험할 것으로 봤으나 0423 이 0.5% 로
16장 중 최저였다. water surface / reservoir 프롬프트가 검출 0 이어도
다른 프롬프트가 그 면적을 덮는다.
유일한 5% 초과인 0581(6.4%)은 큰 구멍이 없다. 구멍 1,554개 중 최대가
0.83%, 상위 6개 합이 2.15% 뿐이고 나머지 4.25%가 작은 조각 1,548개로
흩어져 있다. 자재 야적장·건물 밀집 구역이라 폴리곤이 1,079개 나왔는데도
객체 사이 얇은 틈이 누적된 것이다. 0654 유형(큰 필지 통째 누락)과 다르고
프롬프트로는 못 줄인다.
docs/envsetting.md: RTX 4090 PC 로 옮기는 작업 지시 프롬프트.
git 이 안 실어 나르는 3가지(체크포인트, 원본 JPEG, venv)와
브랜치 체크아웃 누락 시 증상을 명시했다.
docs/pilot/theater_v4/ (뷰어 JPEG 55MB)는 커밋하지 않았다.
tools/make_viewer.py 로 다시 구울 수 있다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@
feat: SAM 3.1 검출 커버리지 튜닝 — 무라벨 16% → 3.6%
2D 검출 단계에서 미검출을 없애는 작업. 지표는 "무라벨 화면%" —
마스크 합집합으로 재서 겹침을 뺀 값이다. 다각형 넓이 단순 합(105%)은
겹침 때문에 미검출을 못 잡아낸다.
원인은 프롬프트가 아니라 통짜 패스였다. wide_v1.txt 의 21개 프롬프트는
8192x5460 을 1x1 로 넣어 대상 하나에 인스턴스가 하나만 살아남았다.
도로는 한쪽 차로만, 논은 한 필지만 잡혔다.
BlockYYX 실측 (사진 8장):
기준선 무라벨 평균 21.6% (69장 전체로는 16.1%, 최악 52.1%)
튜닝후 무라벨 평균 3.6% (최대 5.0%)
기여도 (0654 기준):
통짜 -> 타일 패스 -36.7pp
conf 0.25 -> 0.10 -5.4pp
타일 4x3 -> 6x4 -4.6pp
프롬프트 추가 9개 -0.5pp <- 거의 기여 없음
비용은 140 -> 548초/장 (3.9배).
sam3_multi_prompt.py: --wide-in-tiles 플래그 추가. 통짜 프롬프트를
타일 패스에서도 돌린다. 겹치는 결과는 NMS 가 지운다.
신규 도구:
coverage_stats.py 마스크 합집합으로 무라벨% 측정
prompt_stats.py 카테고리-프롬프트별 검출 집계
make_merge_monitor.py 모니터 HTML 생성 (수치는 집계 JSON 에서만)
vote_labels.py 에 --rescue-pred 추가 (투표에 졌지만 표가 있고 모델도
동의하는 면을 되돌린다). 3D 작업이 다른 담당으로 넘어가 중단된 상태.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@
feat: SAM3.1 다중 프롬프트 배치 검출 및 라벨 병합 후처리
sam3_multi_prompt.py: 프롬프트 N개를 forward 1회에 배치 처리한다.
서버(프롬프트당 forward 1회) 대비 forward 횟수가 1/N로 줄고, 이미지
임베딩과 텍스트 인코딩을 타일 전체에서 재사용한다. RTX 3060 12GB
기준 배치 16이 최적(32 이상은 VRAM 압박으로 4배 이상 느려짐).
타일보다 큰 대상(숲, 도로, 주차장)은 타일 경계에서 잘려 사각형
마스크가 되므로 --wide-prompts 로 지정해 이미지 전체를 한 장으로
처리한다.
merge_labels.py: 검출 결과 후처리. 같은 병합 그룹에 속한 라벨끼리
외곽선이 gap px 이내로 인접하면 하나로 합치고 대표 라벨을 붙인다
(building + building rooftop + blue roof -> building). 병합 전
claim 규칙으로 소유권을 재배정해, 차량 위에 잡힌 *roof 폴리곤이
건물이 아니라 차량에 합쳐지도록 한다.
make_viewer.py: 라벨별 on/off 가능한 단독 HTML 뷰어 생성.
프롬프트 파일의 그룹 주석 기준으로 라벨을 묶어 나열하고, 줌/팬과
선택 상태 저장을 지원한다.
cut_tiles.py: R{행}C{열} 격자 오버레이 + 원본 배율 타일 저장.
전역 규칙 반영:
- CUDA 사용 불가 시 CPU로 폴백하지 않고 즉시 에러
- set_per_process_memory_fraction 으로 드라이버의 시스템 메모리
폴백(10배 이상 느려짐) 전에 OOM 발생
- 체크포인트/BPE 경로 하드코딩 제거. CLI 인자 -> 환경변수 ->
sam31server 설정파일 순으로 해결
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@