2026-10-09

NaGeoAI 실제 QGIS 실습 12 — Moondream2 건물 탐지와 위치 점 생성

실습일: 2026년 10월 9일. 본 실습에서는 NaGeoAI의 Moondream2 Detect와 Point를 이용하여 RGB 예제 영상에서 건물 후보의 경계 상자와 위치 점을 생성하고, QGIS에서 출력 좌표계와 속성을 확인하고자 한다. 이전 실습 11의 Caption·Query가 영상에 관한 문장을 생성하였다면, 이번 회차는 영상상의 위치 정보를 지도 레이어로 확인하는 실습이다.

1. 설치와 실행 환경 확인

NaGeoAI 1.9.1 ZIP 다운로드 후 QGIS의 플러그인 → 플러그인 관리 및 설치 → ZIP에서 설치에서 ZIP 파일을 선택하여 설치한다. 배포 페이지에서 버전과 변경 내용을 확인하고, 처음 실행할 때 환경 준비 화면에서 필요한 의존성과 모델을 준비한다. 이미 설치된 항목은 재설치하지 않는다. 자세한 설치 화면은 실습 1의 설치 안내를 참조한다. 이번 회차에는 재설치를 수행하지 않았으므로 과거 설치 화면을 오늘 새로 촬영한 화면으로 제시하지 않는다.

실제 실행 환경은 Windows, QGIS 3.44.15-Solothurn, NaGeoAI 1.9.1, GeoAI 0.43.0, PyTorch 2.14.0+cu126, Transformers 5.12.1이다. NaGeoAI에는 이전 회차에서 적용한 로컬 작업자 환경 설정 수정본이 사용되었다. 공개 ZIP을 설치하는 것만으로 이 로컬 환경 수정까지 동일하게 구성된다고 단정할 수 없다. 모델은 vikhyatk/moondream2, 장치는 명시적으로 cpu로 선택하였다. PyTorch의 CUDA 지원 빌드가 설치되어 있다는 사실과 GPU에서 추론했다는 사실은 구분해야 한다.

모델 설정에서 모델 불러오기를 누르고 Loaded (worker): moondream2 표시를 확인한다. 이번 실행은 이미 준비된 모델 캐시를 이용하였다. 캐시의 main 참조는 5d6c926f44e26b07957b0dd315bbedcb4c17a5fe였다. 패널에서 리비전을 별도 고정하여 선택한 것은 아니므로 이 값은 실행 환경을 식별하는 기록이다. 공식 모델 페이지의 사용 방법과 Apache-2.0 라이선스를 확인할 필요가 있다. CPU에서는 처리 시간이 길어질 수 있으므로 실행 중 중복으로 실행 버튼을 누르지 않는다.

2. 예제 파일 다운로드와 프로젝트 보존

예제는 Source Cooperative의 opengeos/geoai에서 제공하는 parking-lot.tif 원본 다운로드를 이용하였다. 링크에서 파일을 내려받아 사용자가 관리하는 예제 폴더에 저장하고 QGIS의 레이어 → 레이어 추가 → 래스터 레이어 추가 또는 파일 끌어놓기로 불러온다. 이번 실습은 공개 예제 자료를 이용한 기능 확인이며 현장 실측 자료가 아니다. 개별 영상의 재배포 조건을 별도로 확정하지 않았으므로 원본 영상 파일을 이 글이나 GitHub에 재배포하지 않고 제공처의 다운로드 링크를 사용한다. 다른 용도로 이용할 때에는 제공처의 이용 조건을 확인해야 한다.

입력은 1,659 × 938 픽셀, 3개 밴드의 uint8 RGB GeoTIFF이며 CRS는 EPSG:3857이다. NoData는 지정되어 있지 않다. 격자 간격은 X·Y 방향 모두 약 0.149 m이지만 Web Mercator 좌표 간격이므로 이를 그대로 현장의 지상해상도라고 해석하지 않는다. 원본 파일의 SHA-256은 CA8F112FAE10A919F4F55C3F658B9BB893F748FF45E3921DD0AA4C50D69D23C5이다.

QGIS_Play.qgz를 연 뒤 레이어를 변경하기 전에 프로젝트 → 다른 이름으로 저장하여 날짜와 기능명이 포함된 고유 복사본을 만든다. 이번 실행에서는 QGIS_Play_NaGeoAI_20261009_moondream_detection.qgz를 사용하였다. 시작 원본에는 분석 입력 레이어가 없었으므로 예제 영상을 별도로 추가하였다. 미국 지역 예제를 표시하기 위해 복사본의 프로젝트 CRS를 EPSG:3857로 설정하였다. 영상의 CRS를 임의로 다시 지정하거나 영상을 재표본화한 것은 아니다.

QGIS 실습 복사본과 주차장 RGB 예제 영상
그림 1. 실습 복사본에 입력 영상을 추가한 실제 QGIS 화면. 레이어 이름과 영상의 RGB 표시, 프로젝트 CRS를 확인한다. 그림을 누르면 원본 크기로 볼 수 있다.

3. Detect로 건물 후보 경계 상자 생성

NaGeoAI 도구 모음의 Moondream 시각언어 모델을 눌러 패널을 연다. 모델을 불러온 뒤 영상 입력의 레이어를 Parking lot RGB example로 선택하고 영상 불러오기를 누른다. Loaded: parking-lot.tif 표시를 확인한 다음 모드를 Detect, Prompt를 영어 building으로 설정한다. 결과 색상은 빨간색을 사용하고 결과를 지도에 추가를 선택한다. Length는 이 모드에서 비활성화되므로 변경하지 않는다.

Moondream2 Detect 모드 building 프롬프트와 CPU 설정
그림 2. 실행 전 설정. 모델·장치·입력 영상·Detect·building·지도 추가를 확인한다. 그림을 누르면 원본 크기로 볼 수 있다.

실행을 누르면 처리 중 실행 버튼이 비활성화되고 진행 표시가 나타난다. 아래 화면은 실행 직후의 실제 상태이며, 별도의 처리 로그를 만들어 삽입한 것이 아니다.

Detect 실행 직후 비활성화된 실행 버튼과 진행 표시
그림 3. Detect 처리 중 화면. 완료 전에 같은 작업을 다시 실행하지 않는다. 그림을 누르면 원본 크기로 볼 수 있다.

처리 완료 후 결과 영역에 Detected 'building': 2 object(s)와 Bounding boxes added to map.이 표시되었다. 레이어 목록에는 Detections: building이 추가되었으며 영상의 두 흰색 지붕에 빨간 경계 상자가 중첩되었다. 이 개수는 모델이 제시한 후보 개수이지 별도 정답 자료로 계산한 정확도가 아니다.

건물 후보 2개의 경계 상자와 Detect 완료 메시지
그림 4. Detect 결과. 지도상의 두 경계 상자와 패널의 후보 개수 2를 대조한다. 그림을 누르면 원본 크기로 볼 수 있다.

4. Point로 건물 후보 위치 점 생성

같은 입력을 유지하고 모드만 Point로 바꾼다. Prompt는 동일한 building이며 지도 추가와 빨간색을 유지한다. Detect 결과 레이어는 삭제하지 않고 비교용으로 남겨 둔다.

Point 모드로 전환한 뒤 building 입력을 유지한 화면
그림 5. Point 실행 전 설정. 결과 영역에 남아 있는 문장은 앞서 수행한 Detect 결과이며 Point 결과가 아니다. 그림을 누르면 원본 크기로 볼 수 있다.

실행을 누른 뒤 완료를 기다린다. 처리 중에는 결과 영역이 비워지고 진행 표시가 나타나는 것을 확인하였다.

Point 실행 직후 진행 표시와 빈 결과 영역
그림 6. Point 처리 중 실제 화면. 아직 위치 점 생성이 완료된 상태가 아니다. 그림을 누르면 원본 크기로 볼 수 있다.

완료 후 결과 영역에는 Located 'building': 2 point(s)와 Points added to map.이 표시되었다. Points: building 레이어의 두 점이 앞서 탐지한 두 건물 지붕 내부에 표시되었다. Point의 위치는 모델이 제안한 대표 위치이며 건물의 기하학적 중심점이나 측량 기준점을 의미하지 않는다.

경계 상자 2개와 위치 점 2개가 중첩된 완료 화면
그림 7. Point 결과. 두 점의 영상상 위치와 완료 메시지를 확인한다. 그림을 누르면 원본 크기로 볼 수 있다.

5. 속성·좌표·출력 파일 검증

레이어 목록에서 Points: building을 선택하고 F6으로 속성표를 연다. 총 피처 2개와 x, y, px_x, px_y 필드를 확인하였다. x·y는 정규화 위치이며 지도의 동·북 좌표가 아니다. 첫 점은 x=0.171875, y=0.4970703125이고 두 번째 점은 x=0.7060546875, y=0.47265625였다. 정수 픽셀 속성은 각각 (285, 466), (1171, 443)이다.

Points building 속성표의 피처 2개와 정규화·픽셀 좌표 필드
그림 8. Point 속성표. 정규화 좌표와 정수 픽셀 속성을 지도 좌표와 구분한다. 그림을 누르면 원본 크기로 볼 수 있다.

Detections: building도 같은 방법으로 속성표를 열어 총 피처 2개와 x_min, y_min, x_max, y_max, 픽셀 경계 필드를 확인하였다. 경계 상자는 축에 평행한 사각형이며 건물 외곽을 따라 생성한 정밀 분할 폴리곤이 아니다.

Detections building 속성표의 경계 상자 2개와 경계 좌표 필드
그림 9. Detect 속성표. 후보 개수와 경계·픽셀 필드를 확인한다. 그림을 누르면 원본 크기로 볼 수 있다.

출력 GeoJSON을 별도 결과 폴더에 보존하고 프로젝트의 레이어 연결도 보존된 파일로 변경하였다. 이번 실행의 저장 보조 동작은 임시 결과 파일을 복사하고 데이터 소스를 다시 연결하는 용도이며 추론 결과를 새로 만들어 대체한 것이 아니다. 일반적인 수동 작업에서는 레이어의 내보내기 → 객체를 다른 이름으로 저장으로 별도 파일을 저장하고 영구 파일을 프로젝트에 연결할 수 있다. 임시 폴더의 파일만 참조한 채 프로젝트를 저장하면 다음 실행 때 자료를 찾지 못할 수 있다.

검증 결과 Detect와 Point 출력은 모두 EPSG:3857, 각각 피처 2개이며 모든 도형이 유효하고 입력 영상 범위 내부에 있었다. 점 도형 좌표는 약 (-10622235.0661, 3462293.7472), (-10622102.7745, 3462297.1667)이다. 입력의 아핀 변환에 정규화 좌표 × 영상 폭·높이를 적용한 값과 점 도형 좌표가 일치하였다. 정수 픽셀 필드는 반올림된 값이므로 이를 이용한 역산에는 소수 픽셀 차이가 생길 수 있다. 이러한 좌표 일관성 검증은 현장 위치 정확도 검증과 다르다.

6. 최종 저장과 해석의 한계

속성표를 닫고 실습용 복사본을 최종 저장하였다. 저장 시 보조 동작으로 갱신된 복사본에 대해 디스크 변경 확인창이 나타났으며, 대상이 원본이 아니라 실습 복사본임을 확인하고 현재 상태를 저장하였다. 저장 파일의 생성·갱신과 원본 프로젝트 해시 유지 여부를 확인한 뒤 QGIS를 정상 종료하였고 QGIS 창이 닫힌 것을 확인하였다.

본 실습을 통하여 동일한 building 입력에 대해 경계 상자 2개와 위치 점 2개가 생성되고 영상과 중첩됨을 확인하였다. 별도의 정답 건물 경계나 현장 측량 자료가 없으므로 탐지율, 누락률, 위치 정확도는 평가하지 않았다. 그림자의 영향, 영상 해상도, 객체 종류와 프롬프트에 따라 결과가 달라질 수 있으므로 실제 시설물 관리에 적용하려면 독립 정답 자료와 현장 검증이 필요하다. 이번 회차에서는 학습 데이터 타일 내보내기나 모델 재학습은 수행하지 않았다.

공개 그림은 오늘 QGIS 데스크톱에서 촬영한 실제 화면 9장이며 GitHub의 고정 커밋 주소를 사용하였다. 원본 예제 영상과 모델 파일은 업로드하지 않았다.

참고 및 다운로드

NaGeoAI 저장소 · GeoAI 공식 교재 · Moondream2 공식 모델·이용 조건 · 실습 영상 원본

댓글 없음:

댓글 쓰기

지구관측 파운데이션 모델이란? 범용 AI가 지도에 오다 | GeoAI 기초 21편

지구관측 파운데이션 모델은 대규모 위성영상으로 미리 학습해 다양한 재난 탐지 작업에 적은 데이터로도 적응하는 범용 인공지능 모델을 말한다. 📌 3줄 요약 지구관측 파운데이션 모델은 대량 위성영상으로 미리 학습한 범용 AI다 적은 라벨로도 홍수·산...