# 다음 세션 시작 프롬프트 목표가 정해졌다. 이 문서를 읽고 아래 프롬프트로 이어간다. --- ## 단기 목표 > **bare earth 모델과 나머지를 분리한다. OBJ(mesh) 형태로 분리한 뒤, > 그 나머지 모델을 다시 분류한다. 지면이 없어지면 분류가 더 쉬울 것이다.** 이 순서는 타당하다. 근거: - 지면이 전체 포인트의 24~40%를 차지한다 — 제거하면 남은 문제가 그만큼 작아진다 - 지면을 걷어내면 건물·수목·차량이 **공간적으로 분리된 덩어리**가 된다. 지면이 있으면 전부 하나로 이어져 있어 연결 성분 분석이 안 된다 - 2단계 분류는 실패가 국소화된다. 1단계에서 지면을 놓쳐도 2단계가 무너지지 않는다 --- ## 프롬프트 ```` docs/sum-parts-explained.html 의 "Bare Earth" 탭과 STATUS.md 를 먼저 읽어라. 그 다음 이어서 작업한다. ## 목표 bare earth(지면)와 나머지를 분리해서 각각 OBJ 메시로 내보낸다. 그 다음 나머지를 건물/수목/차량으로 다시 분류한다. ## 현재 가진 것 - PointVector 학습 완료 (3060, voxel_max 24000, 100 epoch) SUM val 기준 지면 precision 95.24% / recall 66.10% - 서산 명천 BlockYBA 타일 1장 변환·추론 완료 - 클래스별 분리 산출물 D:\AI_Test\sum-part\{ground,building,tree,vehicle,unseen}\ 단 포인트 클라우드(.ply)이고 메시가 아니다 ## 해야 할 일 — 순서대로 ### 1. 이진 학습이 실제로 이득인지 확인 가설: 학습부터 2클래스(지면/비지면)로 하면 경계 정확도가 오른다. 근거: 13클래스 51.83% → 4클래스 통합 72.14%. 합칠수록 올랐다. 구현: 데이터로더에서 라벨 remap. terrain(1) → 1, 나머지 → 2, unclassified(0) → 0(ignore) num_classes: 3, 나머지 cfg 그대로 측정: 지면 precision / recall을 현재 95.24 / 66.10과 비교. 약 4시간. 3060으로 가능하다. ### 2. CSF를 서산 타일에 단독 적용 Cloth Simulation Filter. 학습 불필요, 파라미터 몇 개. 비탈면(절토·성토)에 강한 것이 알려져 있고, SUM(헬싱키 평지)으로는 비탈면을 배울 수 없으므로 이 부분은 기하 기법이 필요하다. 파이썬 구현: CSF (pip install cloth-simulation-filter) 또는 PDAL filters.csf 측정: 신경망 결과와 어디가 다른지. 특히 경사면에서. ### 3. 조합 신경망(의미) → 나무·차량·건물 제거 → CSF(기하) → 비탈면 보존 둘의 합의/불일치 지점을 본다. ### 4. 포인트 → 메시 복원 ← 여기가 미구현이고 핵심 현재 변환기(scripts/mesh_to_ply.py)는 면적가중 샘플링만 하고 **각 포인트가 어느 face에서 왔는지 기록하지 않는다.** 포인트 예측을 원본 메시로 되돌리려면 이 역매핑이 필요하다. 해야 할 것: a. mesh_to_ply.py에 face index 보존 추가 (PLY에 face_idx 속성) b. 포인트 예측 → face 다수결 → face별 클래스 c. 클래스별로 face를 분리해 OBJ 저장 원칙: 원본 vertex는 불가침. 분리는 재생성이 아니라 face 분할이다. 구멍 메우기는 새 vertex 덧대기만 허용된다. 검증: 분할된 face 수의 합 == 원본 face 수. 누락도 중복도 없을 것. ### 5. 나머지 재분류 지면 제거 후 남은 메시에서 건물/수목/차량 분리. 지면이 없으면 연결 성분(connected component)으로 물체가 자연히 나뉜다. 이 단계는 4번이 끝나야 의미가 있다. ## 주의사항 - WSL2에서 VRAM 초과는 OOM을 안 낸다. 호스트 RAM으로 흘려서 25~100배 느리게 조용히 완주한다. peak VRAM과 전력(W)으로 판정해라. - 파일을 만들었으면 scripts/verify_outputs.sh 로 읽히는지 확인해라. "만들었다"고 보고하기 전에 파서로 검증한다. - 포인트 클라우드는 PLY로 내라. 면 없는 OBJ는 뷰어가 아무것도 안 보여준다. - 각 단계 게이트를 통과 못 하면 다음으로 넘어가지 마라. ## 판정 기준 bare earth의 성패는 precision이다. 지면이라 부른 것에 구조물이 섞이면 지형이 왜곡된다. 반대로 지면을 놓쳐 생긴 구멍은 보간으로 메운다. 현재 기준선: precision 95.24% / recall 66.10% ```` --- ## 참고 — 이 세션에서 확인한 것 ### PointVector 핵심 특징값(스칼라)을 3D 벡터로 확장해서 **방향**을 얻는다. 회전각 α, β 두 개만 MLP로 예측한다 — 회전행렬을 직접 예측하면 원소끼리 종속이라 최적화가 어렵기 때문이다. attention이나 dynamic conv 없이 이방성(anisotropy)을 얻으므로 **PointNeXt 파라미터의 58%로 더 높은 정확도**가 나온다. ### 왜 우리 과제에 맞나 지면과 벽의 구분은 본질적으로 방향 문제다. 지면은 이웃이 수평으로, 벽은 수직으로 퍼져 있다. 등방적 집계는 이 차이를 뭉갠다. 측정치가 이를 뒷받침한다 — 비지면이 지면으로 샌 26,217 포인트 중 **49.90%가 facade_surface**였다. 벽 하단, 지면과 만나는 경계다. ### 경계 5종의 성질이 다르다 | 경계 | 성질 | 난이도 | |---|---|---| | 지면–벽 | 법선 급변 | 쉬움 | | 지면–수목 | 수직 이격 | 중간 | | 지면–자동차 | 얹힌 물체 | 중간 | | 지면–지장물 | 얹힌 물체 | 중간 | | **지면–비탈면** | **둘 다 지면** | **가장 어려움** | 비탈면만 성질이 반대다 — 나머지는 잘라내야 하고 비탈면은 남겨야 한다. "수평이면 지면"으로 가면 도로 절·성토를 통째로 날린다. ### SUM Parts의 한계 헬싱키 평지 도시라 **비탈면을 배울 수 없다.** 재학습으로도 안 고쳐진다. 데이터에 없는 개념이다. → 비탈면은 CSF 같은 기하 기법으로 보완한다. --- ## 문서 | 문서 | 내용 | |---|---| | [docs/sum-parts-explained.html](docs/sum-parts-explained.html) | 학습 정리 — 용어, 모델 계보, PointVector 원리, bare earth 전략 | | [STATUS.md](STATUS.md) | 작업 현황, 실측 수치, 미해결 문제 | | [docs/pipeline.html](docs/pipeline.html) | 6단계 공정 정의 | | [docs/papers/md/](docs/papers/md/) | 논문 6편 마크다운 + 그림 86개 (Vision 주석 완료) | | [SETUP.md](SETUP.md) · [TRAIN.md](TRAIN.md) | 새 머신 구축 |