@
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> @
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
# ==========================================================
|
||||
# 보류 (2026-09-02). 세부 세그멘테이션은 후순위로 미뤘다.
|
||||
# 현재 쓰는 정의는 configs/merge_groups_v4.txt 다.
|
||||
#
|
||||
# 이 파일은 교통시설물을 뭉치지 않고 가른 안이다. 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종, 폴리곤 6,370 -> 6,667.
|
||||
#
|
||||
# 다시 쓸 때 주의: culvert 9개, roadside barrier 17개는 16장 기준
|
||||
# 표본이 너무 적다. 69장 전체를 돌린 뒤 클래스로 쓸지 판단해라.
|
||||
# ==========================================================
|
||||
|
||||
# 병합 그룹 정의 — 대괄호 안이 병합 후 대표 라벨.
|
||||
# 같은 그룹에 속한 라벨끼리 외곽선이 --gap px 이내로 인접하면 하나로 합친다.
|
||||
# 어느 그룹에도 없는 라벨은 건드리지 않는다.
|
||||
#
|
||||
# 여기서 나누지 않는 구분이 있다. SAM은 사진만 보므로 미터도 규모도 모른다.
|
||||
# 아래는 2D가 아니라 3D 메시에서 갈라야 정확하다:
|
||||
# 낮은수목 / 수목 CSF 지면 위 높이
|
||||
# 수목 / 숲 [vegetation] 연결성분 면적
|
||||
# 지형 / 경사면 면 법선 경사각
|
||||
# 건물 / 빌딩 [building] 연결성분 면적·높이
|
||||
# 그래서 tree canopy와 dense forest, building과 residential house는
|
||||
# 일부러 같은 그룹에 둔다 — 2D에서 갈라봐야 중복 마스크만 나온다.
|
||||
|
||||
# [building]
|
||||
building
|
||||
building rooftop
|
||||
building facade
|
||||
residential house
|
||||
warehouse
|
||||
factory structure
|
||||
storage container
|
||||
blue roof
|
||||
red roof
|
||||
green roof
|
||||
gray roof
|
||||
dark gray roof
|
||||
black roof
|
||||
white roof
|
||||
silver metal roof
|
||||
orange roof
|
||||
brown roof
|
||||
yellow roof
|
||||
greenhouse roof
|
||||
plastic greenhouse
|
||||
vinyl greenhouse tunnel
|
||||
|
||||
# [road]
|
||||
gravel shoulder
|
||||
asphalt road
|
||||
concrete pavement
|
||||
parking lot
|
||||
pedestrian sidewalk
|
||||
crosswalk
|
||||
bridge
|
||||
|
||||
# 아래는 비활성 — discovery_v1.txt에서 프롬프트를 통째로 껐다.
|
||||
# 최종 목표가 지면 대 나머지라 차선은 도로면의 일부지 별도 클래스가 아니다.
|
||||
# 검출량 1위였지만(583개 중 277개) 전부 [road] 안에서 버려지고,
|
||||
# 논밭 이랑을 yellow center dividing line으로 오인하기까지 했다.
|
||||
# [road marking]
|
||||
# road lane marking
|
||||
# yellow center dividing line
|
||||
# white solid lane marking
|
||||
# white dashed lane marking
|
||||
# white directional arrow marking
|
||||
# yellow parking stall line
|
||||
# white parking stall line
|
||||
# blue handicap parking space
|
||||
# pink pedestrian safety marking
|
||||
# green bike lane marking
|
||||
|
||||
# [vegetation]
|
||||
yellow grass field
|
||||
overgrown weeds
|
||||
shrub
|
||||
tree canopy
|
||||
dense forest
|
||||
green hedge
|
||||
grass lawn
|
||||
|
||||
# [farmland]
|
||||
ripening rice field
|
||||
harvested field
|
||||
crop field
|
||||
farmland
|
||||
plowed field
|
||||
bare soil field
|
||||
rice paddy
|
||||
vegetable field
|
||||
|
||||
# [ground]
|
||||
bare ground
|
||||
dirt field
|
||||
earth bank
|
||||
dirt path
|
||||
|
||||
# [stored material]
|
||||
blue plastic drum
|
||||
orange plastic barrel
|
||||
yellow plastic container
|
||||
white industrial tank
|
||||
metallic storage tank
|
||||
blue waterproof tarp
|
||||
green waterproof tarp
|
||||
black protective sheet
|
||||
white canvas canopy
|
||||
|
||||
# [retaining wall]
|
||||
retaining wall
|
||||
concrete retaining wall
|
||||
gabion wall
|
||||
|
||||
# [slope]
|
||||
grass covered embankment
|
||||
road embankment slope
|
||||
cut slope
|
||||
riprap slope
|
||||
|
||||
# [water]
|
||||
water surface
|
||||
pond
|
||||
reservoir
|
||||
stream
|
||||
irrigation canal
|
||||
drainage ditch
|
||||
|
||||
# 교통시설물은 나중에 더 자세히 봐야 하므로 하나로 뭉치지 않는다.
|
||||
# 전주/가로등/표지판은 형태도 역할도 다르다 — [structure] 로 묶으면
|
||||
# 병합 후에 다시 못 가른다. 같은 물건의 다른 이름만 한 집합에 둔다.
|
||||
|
||||
# [utility pole]
|
||||
utility pole
|
||||
|
||||
# [streetlight pole]
|
||||
streetlight pole
|
||||
|
||||
# [road sign]
|
||||
road sign
|
||||
|
||||
# [structure]
|
||||
culvert
|
||||
|
||||
# [fence]
|
||||
gray metal fence
|
||||
green wire fence
|
||||
|
||||
# [guardrail]
|
||||
guardrail
|
||||
metal guardrail
|
||||
|
||||
# [roadside barrier]
|
||||
red roadside barrier
|
||||
|
||||
# [vehicle]
|
||||
white vehicle
|
||||
black vehicle
|
||||
silver vehicle
|
||||
gray vehicle
|
||||
red vehicle
|
||||
blue vehicle
|
||||
yellow vehicle
|
||||
orange vehicle
|
||||
green vehicle
|
||||
white cargo truck
|
||||
blue cargo truck
|
||||
yellow school bus
|
||||
commercial bus
|
||||
tractor
|
||||
farm tractor
|
||||
excavator
|
||||
|
||||
# 콘은 일부러 어느 집합에도 넣지 않는다.
|
||||
# merge_labels.py 는 집합에 없는 라벨을 건드리지 않고 그대로 통과시킨다
|
||||
# (merge_by_group 의 passthrough). 그래서 콘은 버려지지 않고 독립 클래스로 남는다.
|
||||
# [cone] 으로 묶으면 나란히 선 콘이 gap 2px 에서 한 덩어리가 되어 개수를 잃는다.
|
||||
# 16장 실측: orange traffic cone 114 · yellow safety cone 6 이 그대로 살아 있다.
|
||||
@@ -75,9 +75,9 @@
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"name": "집합 정의 조정",
|
||||
"state": "todo",
|
||||
"detail": "튜닝 검출 결과(라벨 79종)를 보고 집합을 다시 짠다. 1차는 Claude, 이후 사용자."
|
||||
"name": "집합 정의 조정 — 보류",
|
||||
"state": "blocked",
|
||||
"detail": "교통시설물을 가르는 안(configs/merge_groups_v5.txt)을 만들고 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 로 되돌렸다. 세부 세그멘테이션은 후순위."
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
@@ -87,6 +87,10 @@
|
||||
}
|
||||
],
|
||||
"issues": [
|
||||
{
|
||||
"state": "closed",
|
||||
"text": "'집합 없는 검출은 버려진다'는 앞선 판단은 틀렸다. merge_labels.py 의 merge_by_group 은 집합에 없는 라벨을 passthrough 로 그대로 통과시킨다. 16장 병합 결과에 orange traffic cone 114 · yellow safety cone 6 이 독립 클래스로 살아 있다. 콘을 [cone] 으로 묶으면 오히려 나란한 콘이 gap 2px 에서 한 덩어리가 되어 개수를 잃는다 — 지금처럼 집합 밖에 두는 게 맞다."
|
||||
},
|
||||
{
|
||||
"state": "closed",
|
||||
"text": "통짜(1×1) 패스는 대상 하나에 인스턴스가 하나만 남는다 — 도로 한쪽 차로, 논 한 필지만 잡힘. --wide-in-tiles 로 해결(측정치는 M1e)."
|
||||
|
||||
+38
-5
@@ -18,7 +18,40 @@ RTX 4090 이 달린 이 PC 에 드론 사진 SAM 3.1 검출 환경을 세워라.
|
||||
|
||||
- OS: Windows (원래 환경과 같음). Linux 면 경로 구분자만 바꿔라.
|
||||
- GPU: RTX 4090 24GB. `nvidia-smi` 로 드라이버가 올라와 있는지 먼저 확인해라.
|
||||
- 소스 PC 에서 가져와야 하는 큰 파일이 2종 있다 (아래 3, 4단계). git 에 없다.
|
||||
|
||||
### 반입 목록 (실측 크기)
|
||||
|
||||
**git 으로 오는 것 — 복사하지 마라**
|
||||
|
||||
| 경로 | 리포 |
|
||||
|---|---|
|
||||
| `prompts/discovery_v4.txt` (94개 프롬프트) | railway-client, `sam31-coverage-tuning` 브랜치 |
|
||||
| `prompts/wide_v1.txt` | 〃 |
|
||||
| `configs/merge_groups_v4.txt` (현재 활성 집합 정의) | 〃 |
|
||||
| `tools/*.py` 전부 | 〃 |
|
||||
| `sam3/` 패키지 | sam31server |
|
||||
| `configs/auto_labeling/segment_anything_3.yaml` | 〃 |
|
||||
|
||||
`merge_groups_v5.txt` 도 리포에 있지만 **보류 상태다. 쓰지 마라.** 활성은 v4 다.
|
||||
|
||||
**손으로 복사해야 하는 것 — git 에 없다**
|
||||
|
||||
| 항목 | 실측 크기 | 원본 위치 | 왜 git 에 없나 |
|
||||
|---|---|---|---|
|
||||
| SAM3.1 체크포인트 | **3.3 GB** | `C:\Users\<사용자>\.cache\huggingface\hub\models--facebook--sam3.1\` | `.gitignore` 가 `*.pt` 제외 |
|
||||
| BPE 사전 `bpe_simple_vocab_16e6.txt.gz` | 1.4 MB | `sam31server\bpe_simple_vocab_16e6.txt.gz` | `.gitignore` 가 `*.gz` 제외 |
|
||||
| 원본 JPEG `stage_BlockYYX\` 69장 | **1.2 GB** | `railway-client\output\sam3\stage_BlockYYX\` | `.gitignore:42` 가 `output/` 제외 |
|
||||
|
||||
체크포인트는 복사 대신 HuggingFace 에서 새로 받아도 된다
|
||||
(`huggingface-cli download facebook/sam3.1`). 회선이 느리면 복사가 빠르다.
|
||||
|
||||
**복사하면 안 되는 것**
|
||||
|
||||
| 항목 | 이유 |
|
||||
|---|---|
|
||||
| `.venv\` | 절대경로가 박혀 있어 다른 PC 에서 깨진다. 새로 만들어라 |
|
||||
| `output\` 의 나머지 (`tune_t64` 등) | 이쪽 PC 의 산출물이다. 4090 은 새로 만든다 |
|
||||
| `docs\pilot\theater*\` | 뷰어 JPEG 55MB. `make_viewer.py` 로 다시 굽는다 |
|
||||
|
||||
### 1. 리포 2개 clone
|
||||
|
||||
@@ -75,13 +108,13 @@ pip install -r requirements.txt
|
||||
```
|
||||
`True` 와 `NVIDIA GeForce RTX 4090` 이 나와야 한다.
|
||||
|
||||
### 3. 체크포인트 + BPE 사전 (git 에 없음, 수 GB)
|
||||
### 3. 체크포인트 + BPE 사전 (git 에 없음, 실측 3.3GB + 1.4MB)
|
||||
|
||||
`.gitignore` 가 `*.pt`, `*.gz` 를 뺀다.
|
||||
|
||||
필요한 것:
|
||||
- `sam3.1_multiplex.pt` — HuggingFace `facebook/sam3.1`
|
||||
- `bpe_simple_vocab_16e6.txt.gz`
|
||||
- `sam3.1_multiplex.pt` — HuggingFace `facebook/sam3.1` (캐시 폴더 전체 3.3GB)
|
||||
- `bpe_simple_vocab_16e6.txt.gz` (1.4MB)
|
||||
|
||||
받는 방법 둘 중 하나:
|
||||
1. HuggingFace 에서 새로 받는다 (`huggingface-cli download facebook/sam3.1`)
|
||||
@@ -97,7 +130,7 @@ pip install -r requirements.txt
|
||||
3번 파일에는 **원래 PC 의 절대경로가 적혀 있다.** 그대로 쓰면 파일을 못 찾는다.
|
||||
환경변수로 덮거나 이 파일을 고쳐라.
|
||||
|
||||
### 4. 원본 사진 (git 에 없음, 블록당 약 1.2GB)
|
||||
### 4. 원본 사진 (git 에 없음, 실측 1.2GB)
|
||||
|
||||
`.gitignore:42` 가 `output/` 을 통째로 뺀다.
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ border-radius:6px;padding:5px 8px;font:inherit;font-size:13px}
|
||||
<div class="wrap">
|
||||
<h1>SAM 3.1 후처리 — 검출 커버리지 · 집합 병합</h1>
|
||||
<p class="sub">1단계는 미검출을 없애는 것이다. 지표는 '무라벨 화면%' — 마스크 합집합으로 재서 겹침을 뺀 값. 목표 5% 이하, 8장 평균 3.6% 로 달성. 2단계는 집합으로 묶고 외곽선이 gap px 이내로 인접한 폴리곤을 합치는 것.</p>
|
||||
<p class="sub" style="font-size:12px">생성 2026-09-01 22:36 · 집계 <code>tune_t64</code></p>
|
||||
<p class="sub" style="font-size:12px">생성 2026-09-02 09:19 · 집계 <code>tune_t64</code></p>
|
||||
<h2>실측</h2><div class="cards">
|
||||
<div class="card"><div class="k">사진</div><div class="v">16</div></div>
|
||||
<div class="card"><div class="k">폴리곤</div><div class="v">11,169</div></div>
|
||||
@@ -113,9 +113,10 @@ border-radius:6px;padding:5px 8px;font:inherit;font-size:13px}
|
||||
<div class="step"><span class="id">M1h</span><span class="badge" style="color:#1a7f4b;background:#e3f5ea">완료</span><div><div>v4 프롬프트 (익은 논·갓길)</div><div class="d">ripening rice field / yellow grass field / harvested field / gravel shoulder 추가. 효과 없음 — 0006 5.8→5.7%, 0654 9.5→9.6%. 프롬프트 추가는 포화.</div></div></div>
|
||||
<div class="step"><span class="id">M1i</span><span class="badge" style="color:#1a7f4b;background:#e3f5ea">완료</span><div><div>타일 4×3 → 6×4 (목표 달성)</div><div class="d">conf 0.10 · v4 프롬프트 · --wide-in-tiles 와 함께. 4장 실측 무라벨: 0654 5.0% (기준선 52.1) · 0484 3.0% (38.7) · 0079 4.4% (27.1) · 0006 5.0% (19.4). 평균 34.3% → 4.35%. 비용 466~616초/장, 평균 523초 = 기준선 140초의 3.7배. 69장 재검출 시 약 10시간.</div></div></div>
|
||||
<div class="step"><span class="id">M1j</span><span class="badge" style="color:#1a7f4b;background:#e3f5ea">완료</span><div><div>확정 설정 16장 검증</div><div class="d">16장 실측 무라벨(conf 0.10): 최소 0.5%(0423) ~ 최대 6.4%(0581), 평균 3.44%. 15/16 장이 5% 이하. 같은 16장 기준선 평균 19.9%. 소요 466~907초/장(평균 585초). 예상이 틀린 곳: 물 많은 사진이 위험할 것으로 봤으나 0423 이 0.5% 로 최저였다 — water surface/reservoir 검출이 0이어도 다른 프롬프트가 그 면적을 덮는다.</div></div></div>
|
||||
<div class="step"><span class="id">M2</span><span class="badge" style="color:#5a5f66;background:#eceef0">대기</span><div><div>집합 정의 조정</div><div class="d">튜닝 검출 결과(라벨 79종)를 보고 집합을 다시 짠다. 1차는 Claude, 이후 사용자.</div></div></div>
|
||||
<div class="step"><span class="id">M2</span><span class="badge" style="color:#a12a2a;background:#fbe6e6">막힘</span><div><div>집합 정의 조정 — 보류</div><div class="d">교통시설물을 가르는 안(configs/merge_groups_v5.txt)을 만들고 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 로 되돌렸다. 세부 세그멘테이션은 후순위.</div></div></div>
|
||||
<div class="step"><span class="id">M3</span><span class="badge" style="color:#5a5f66;background:#eceef0">대기</span><div><div>gap 값 조정</div><div class="d">외곽선 인접 판정 1~3 px. 파일럿 기준 2 px 로 시작.</div></div></div>
|
||||
<h2>이슈 · 기각된 시도</h2>
|
||||
<div class="issue"><span class="badge" style="color:#1a7f4b;background:#e3f5ea">해결</span><div>'집합 없는 검출은 버려진다'는 앞선 판단은 틀렸다. merge_labels.py 의 merge_by_group 은 집합에 없는 라벨을 passthrough 로 그대로 통과시킨다. 16장 병합 결과에 orange traffic cone 114 · yellow safety cone 6 이 독립 클래스로 살아 있다. 콘을 [cone] 으로 묶으면 오히려 나란한 콘이 gap 2px 에서 한 덩어리가 되어 개수를 잃는다 — 지금처럼 집합 밖에 두는 게 맞다.</div></div>
|
||||
<div class="issue"><span class="badge" style="color:#1a7f4b;background:#e3f5ea">해결</span><div>통짜(1×1) 패스는 대상 하나에 인스턴스가 하나만 남는다 — 도로 한쪽 차로, 논 한 필지만 잡힘. --wide-in-tiles 로 해결(측정치는 M1e).</div></div>
|
||||
<div class="issue"><span class="badge" style="color:#a12a2a;background:#fbe6e6">미해결</span><div>0581 무라벨 6.4% — 16장 중 유일한 5% 초과. 원인 확인함: 큰 구멍이 없다. 구멍 1,554개 중 최대가 0.83%, 상위 6개 합이 2.15% 뿐이고 나머지 4.25%가 작은 조각 1,548개로 흩어져 있다. 자재 야적장·건물 밀집 구역이라 폴리곤이 1,079개 나왔는데도 객체 사이 얇은 틈이 누적된 것. 0654 유형(큰 필지 통째 누락)과 다르다. 프롬프트로는 못 줄인다 — 후처리(폴리곤 팽창·구멍 메우기) 영역.</div></div>
|
||||
<div class="issue"><span class="badge" style="color:#a12a2a;background:#fbe6e6">미해결</span><div>orange traffic cone / yellow safety cone 은 어느 집합에도 없어 검출 52 폴리곤이 버려진다. [cone] 그룹이 주석 처리돼 있음 — 나란히 놓인 콘이 한 덩어리로 융합된다는 이유.</div></div>
|
||||
|
||||
Reference in New Issue
Block a user