METI · 자체 판독 모델
운영 중 · 2026-09-22 기준

A6000 자체 판독 모델

위성사진에서 "핀 자리에 태양광 패널이 있는가"를 판독하는 사내 모델. 14서버(RTX A6000) 상주. 규약 v3.1부터 확정 등급의 필수 근거 · v3.2(9/22)부터 확정 기준은 십자선이 어레이 안(열 사이 통로 포함, ±2m).

판독 방법
위성사진으로 핀 위치의 패널 확인
① 모델 1: 83m 타일에 패널 유무 확인
② 모델 2: 십자선(핀 중심)이 어레이 안인지 확인
③ 히트맵: 패널 위치를 찾아 핀 이동
학습 방법
상용 AI(Opus × Sonnet) 판독 결과 27만 장 + 사람 라벨 1,488장으로 학습
사전학습 모델(ConvNeXt-Tiny) 미세조정 · 사람 200장 × 3회 검증
확정 근거인 이유
상용 AI는 사진 어디든 패널이 있으면 "있음"으로 판독
확정2의 11~15%가 십자선 밖 → 십자선 위치만 보는 모델 2를 확정 근거로 사용, 상용 판독은 유력까지

1. 판독 예시

모델 1 — 왼쪽 83m 타일 전체를 보고 패널 유무 확인 → 없음 / 있음 / 있지만 십자선 밖
모델 2 — 오른쪽 16m 확대(십자선 중심, 십자선 지움)를 보고 십자선이 어레이 안인지 확인 → 어레이 안일 가능성을 0~1(p)로 산출 · 0.5 이상 패널 위(어레이 안) · 0.3~0.5 애매 · 0.3 미만 패널 밖

모듈 위 예시 타일모듈 위 16m 크롭
83m 타일16m 크롭
모듈 위모델 1: 있음
모델 2: p 0.96 → 패널 위✔ → 확정
열 간 틈새 예시 타일열 간 틈새 16m 크롭
83m 타일16m 크롭
열 간 틈새모델 1: 있음
모델 2: p 0.96 → 패널 위 — 열 사이 통로, 어레이 안✔ → 확정 (v3.2: 어레이 안)
부지 안 도로 예시 타일도로 16m 크롭
83m 타일16m 크롭
같은 부지, 십자선은 도로모델 1: 있음
모델 2: p 0.06 → 패널 밖✕ → 확인필요 · 이동 후보
패널 없음 예시 타일패널 없음 16m 크롭
83m 타일16m (모델 2 미실행)
패널 없음모델 1: 없음
모델 2: 실행 안 함✕ → 확인필요 · 보류
히트맵 이동 후보 예시

히트맵 — 위 "도로" 핀의 이동 후보

  • 주황 = 모델 2 창을 3.9m 간격으로 옮기며 얻은 "어레이 안" 격자 (p ≥ 0.5)
  • 흰 점 = 핀에서 가장 가까운 덩어리 안의 후보 좌표 · 북쪽 14m · p 0.77
  • 게이트(v3.2): p ≥ 0.9 · 이동 5~45m 또는 p ≥ 0.8 · 이동 5~20m · 덩어리 ≥ 10셀 → 이 예시는 p 미달로 이동 보류
  • 이동 후 새 타일로 재판독 → 모델 2 ✔이면 확정 복귀
공통 규칙: 판독 대상은 십자선(핀) 자리뿐. 프레임 안 다른 곳의 패널은 "십자선 밖"으로 기록 · 그 패널이 등록 설비의 것인지는 판단 안 함(주소 자격의 몫).

2. 구성

① 타일위성사진 수집핀 중심 83m 범위
십자선으로 핀 위치 표시
② 모델 1사진에 패널 유무 확인없음 → 패널 없음(✕)
있지만 십자선 밖 → 패널 밖(✕)
있음 → 모델 2로
③ 모델 2십자선이 패널 위인지 확인패널 위일 가능성을 0~1로 산출
0.5 이상 → 패널 위(✔)
0.3~0.5 → 애매(?) · 0.3 미만 → 패널 밖(✕)
④ 등급 엔진판정표로 등급 결정주소 정확도 × 패널 확인 상태
모델 2의 ✔ 없이는 확정 불가
모델 1모델 2히트맵
확인하는 것타일에 패널이 있는가십자선이 패널 위인가패널이 어디에 있는가
보는 사진83m 타일 전체십자선 중심 16m (십자선 지움)16m 창을 3.9m 간격으로 옮기며 타일 전체
결과없음 / 있음 / 있지만 십자선 밖패널 위일 가능성 (0~1)격자별 p · 핀 이동 후보 좌표
쓰임1차 거름망확정 근거확인필요 핀의 자동 이동
모델 구조ConvNeXt-Tiny (사전학습 모델) · 27.8M 파라미터 · 파일 111MB모델 2 그대로 사용
모델을 둘로 나눈 이유
83m 타일 전체를 한 번에 보면 십자선 자리(16m)는 화면의 4% → 모델 1의 십자선 판별 정밀도 26%
→ 십자선 주변 16m만 확대해서 보는 모델 2를 별도로 학습 · 부지 전체 확인은 모델 1이 담당

3. 학습

정답 데이터 = 상용 AI(Opus × Sonnet) 판독 결과 + 사람 라벨(v3b부터)
두 상용 모델의 답이 일치한 사진 + 사람 라벨 1,488장(9/22 · 모델이 애매해하는 p 0.3~0.7 구간)
사람 검증 200장(9/11)은 모델 채택 판단에만 사용 · 학습에는 미반영
모델 1 clf_v3모델 2 center_v3b (9/22)
정답 출처전국 전수 판독 결과 (Q1·Q2)Q1 정밀 판독 결과 중 두 모델 만장일치 사진 + 사람 라벨 1,488장
사진 수251,409장 (학습 238,025 · 검증 13,384)20,749장 (학습 17,685 · 검증 3,064 · 애매 구간 미라벨 1,555 · 상용 밖 판정인데 모델 p≥0.7인 1,122 제외)
정답 분포없음 116,725 · 있음 89,429 · 십자선 밖 45,255패널 위 15,438 · 패널 밖 5,311 (사람 라벨: 위 1,400 · 밖 88)
학습·검증 분리좌표 기준으로 분리 — 같은 사진이 학습과 검증에 동시에 들어가지 않음
학습 설정AdamW · 학습률 3e-4 · 배치 96 · 6회 반복동일 · 배치 48 · 클래스 가중 없음 · 사람 라벨 가중 2배 · 10회 중 5회째 채택
장비14서버 RTX A6000 48GB 1장
판독 속도246,658장 5.5분246,655장 18분 · 히트맵 20,857장 45분
정답 데이터의 한계와 사람 라벨
모델 2의 '패널 밖' 정답(상용 판독)은 사람이 확인하면 63%만 맞음 → v1의 패널 밖 정밀도 78%는 정답 데이터를 넘어선 수치 · 데이터를 4배 늘린 center_v2는 71%로 하락해 폐기
사람 라벨 1,488장(9/22)로 재학습한 v3b: 패널 밖 정밀도 78% → 85% · 애매 구간(p 0.3~0.7)은 사람이 보면 94%가 어레이 안

4. 검증

모델 1 · 검증 13,384장
94.3%

정확도
없음 97.4% · 있음 97.1% · 십자선 밖 77.3%

정답 = 상용 판독 합의
모델 2 v3b · 검증 3,064장
85.9%

정확도
패널 위 96.3% · 패널 밖 60.3%

정답 = 상용 판독 만장일치 (패널 밖 정답 자체가 63%만 맞음)
모델 2 v3b · 사람 검증 200장 (9/22)
96.0%

정확도 (v1 93.5%)
패널 위 정밀도 99.3% · 패널 밖 정밀도 85.1%

기준 = 십자선이 어레이 안 · v1: 98.7% · 78.0%
사람 검증 200장 (9/21, 모델 2 v1) — 기준: 십자선이 모듈 표면 위 (통로·틈새는 불합격) · 판정 구간의 근거
모델 2 p (모델 1 = 있음)장수모듈 위처리 (v3.1~)
p ≥ 0.72080%✔ 패널 위
p 0.5~0.74075%✔ 패널 위
p 0.3~0.56050%? 애매 → 유력
p < 0.33020%✕ 패널 밖 → 확인필요
모델 1 = 십자선 밖205%✕ 패널 밖 → 확인필요
모델 1 = 없음1050%상용 판독이 '있음'이면 ? 애매
확정 기준을 "어레이 안"으로 둔 이유 (v3.2)
사람 라벨 1,500장(9/22): 같은 사진을 두 사람이 매겨 "열 사이 통로" 비율이 32% 대 67% · 모듈/통로 구분 모델 정확도 63%
위성 0.24m 사진에서 통로(1~2m)는 4~8픽셀 → 모듈 표면과 통로는 사람도 모델도 구분 불가 → 재현되는 기준은 어레이 안/밖만
모듈 표면 여부는 Google z20(0.15m) 사진 기반 핀 미세조정 프로젝트로 분리(핀 위치만 조정, 등급 불변)
히트맵 핀 이동 — 사람 검증
대상이동 조건장수정밀도
확인필요 핀 (v1)p ≥ 0.8 · 5~45m10092%
확인필요 핀 (v3b · 9/22)p 0.8~0.9 · 5~45m100어레이 안 95% (이동 ≤20m 96%)
확인필요 핀 (v3b · 9/22)p 0.7~0.8 · 5~45m100어레이 안 94% (모듈 위 56%)
겹침 주소 핀 (60m 안에 다른 설비 없음)p ≥ 0.9 · 패널 면적이 등록 용량과 일치20098%

5. 운영 반영 (2026-09-22 stage17 기준)

판독 완료
375,588핀

전체의 99.95%
나머지 171핀은 상용 판독만 있음 → 유력까지

판독 결과

패널 위(어레이 안) 224,955
십자선 밖 33,205 · 없음 110,202
애매 7,397

히트맵으로 핀 이동
116,222핀

이동 전 좌표·이력 전부 보존

모델 결과 → 등급 (주소가 필지 단위로 정확한 경우)
모델 1모델 2확인 상태등급
있음p ≥ 0.5✔ 패널 위 (어레이 안)확정2 (폴리곤 안이면 확정1)
있음p 0.3~0.5? 애매유력
있음p < 0.3✕ 패널 밖 (어레이 밖)확인필요 → 히트맵으로 핀 이동 → 재판독
있지만 십자선 밖—✕ 패널 밖확인필요 → 핀 이동
없음—✕ 없음확인필요 (최근 준공이면 보류)
있음미실행판정 안 함이전 등급 유지 — 모델 1만으로는 확정 불가

6. 모델 관리 현황

버전 이력

파일 위치

  • 코드: github.com/bworx-io/panel-scanner
  • 모델 파일: 14서버 /srv/models/panel-scanner/
  • 학습 데이터·사람 라벨: 14서버 /srv/datasets/panel-scanner/
  • 판독 결과: reread.sqlite

재실행

  • 학습 데이터 생성: train/build_*_dataset.py
  • 학습: train/train_*_classifier.py
  • 검증: eval/eval_center.py · eval/eval_human.py
  • 판독: predict.py · predict_center.py · heatmap.py
  • 사람 라벨링 화면: tools/review_sheet.py

7. 한계 · 다음 학습

모델 2가 틀리는 경우

규칙적인 직사각형 무늬를 패널로 오인

  • 패널 줄 사이 흙·잡초 · 지붕 패널 사이 통로
  • 컨테이너·트레일러 적재장
  • 공장 지붕 채광창 · 비닐하우스

큰 발전소일수록 통로·여백이 많아 정밀도 하락

다음 학습 · 핀 미세조정

  • 사람 라벨 1,500장 재학습(v3b) 완료 — 패널 밖 정밀도 78% → 85% (목표 달성, 47장 중 40장으로 여유 한 장)
  • 남은 오류: 컨테이너·채광창·비닐하우스 — 밖 라벨 88장뿐이라 다음 라벨링은 이 유형 위주
  • 핀 미세조정(모듈 표면으로 1~2m 이동): Google z20(0.15m) 사진 — 확정 핀 60개 표본 중 62%에 존재 · 별도 프로젝트

정의: 확정 = 어레이 안(v3.2) · 모듈 표면 여부는 등급이 아니라 핀 위치 문제

모델이 판단하지 않는 것
그 패널이 등록된 설비의 것인지 (주소 정확도가 담당) · 사진 촬영 시점 (준공 전 사진은 등급 엔진이 보류 처리)