본 실습에서는 NaGeoAI의 SAM3 텍스트 기반 분할 기능을 이용하여 항공영상의 건물 마스크를 생성하고, 입력·출력의 좌표계와 픽셀 격자 일치 여부를 확인하였다. 2026년 10월 10일 QGIS 데스크톱에서 실제 실행한 결과이며, 정확도 평가나 모델 학습 실험은 아니다.
1. 설치와 실습 환경
실행 환경은 QGIS 3.44.15, NaGeoAI 1.9.1, PyTorch 2.14.0+cu126이다. NVIDIA CUDA 사용 가능과 GPU 메모리 약 12GiB를 확인하였다. 같은 환경에서도 사용 중인 GPU 메모리와 다른 작업에 따라 실행 여부가 달라질 수 있다.
NaGeoAI 1.9.1 배포 ZIP을 내려받은 후 QGIS의 플러그인 → 플러그인 관리 및 설치 → ZIP에서 설치에서 파일을 선택한다. 설치 후 NaGeoAI 활성화 여부를 확인하고, 첫 실행 환경 설정에서 의존성 상태를 확인한다. 이 회차에서는 이미 설치된 플러그인을 사용했으며 재설치하지 않았다. 따라서 설치 화면을 새로 촬영했다고 표시하지 않는다. 최초 설치 과정은 2026년 9월 실습 1 설치 글을 참고한다.
SAM3 가중치는 Meta 공식 facebook/sam3 모델 페이지에서 이용 조건과 접근 요청 내용을 사용자가 직접 검토한 뒤 준비한다. 접근 승인은 플러그인 설치와 별개이다. 토큰은 로컬 인증에만 사용하고 글·스크린샷·공개 저장소에 기록하지 않는다. 이 실습은 리비전 3c879f39826c281e95690f02c7821c4de09afae7의 sam3.pt를 사용하였다. 파일 크기는 3,450,062,241바이트이며 SHA-256은 9999e2341ceef5e136daa386eecb55cb414446a00ac2b55eb2dfd2f7c3cf8c9e이다. 모델 파일은 이 글에서 재배포하지 않는다.
2. 예제 다운로드와 입력 확인
parking-lot.tif 원본 다운로드를 눌러 별도 자료 폴더에 저장한다. 출처는 Open Geospatial Solutions의 Source Cooperative GeoAI 공개 자료이다. 공개 자료라는 사실을 무제한 재배포 허용으로 간주하지 않으며, 이용 조건은 원본 제공처에서 확인한다. 이번 글은 사용자가 공개를 승인한 실제 실습 화면만 게시하고 원본 영상·모델은 업로드하지 않는다.
QGIS_Play.qgz를 연 뒤 원본을 보존하기 위해 실습 복사본으로 다른 이름으로 저장한다. 레이어 → 레이어 추가 → 래스터 레이어 추가에서 parking-lot.tif를 선택한다. 입력은 RGB 3밴드 uint8, 1659×938픽셀, EPSG:3857이며 NoData는 지정되어 있지 않았다. 픽셀 크기는 투영좌표 단위로 약 0.149이며 이를 지상 실측 해상도로 단정하지 않는다. 프로젝트 표시 좌표계를 EPSG:3857로 맞추었으나 입력 영상을 재투영한 것은 아니다.
입력 SHA-256: ca8f112fae10a919f4f55c3f658b9bb893f748ff45e3921dd0aa4c50d69d23c5.

3. CUDA 모델과 입력 영상 설정
NaGeoAI 메뉴에서 분할(SAM) 패널을 열고 모델 탭에서 SamGeo3 (SAM3), 백엔드 meta, 장치 cuda, 신뢰도 0.50을 선택한다. 점·박스 대화형 모드는 해제한다. 모델 불러오기를 누른 뒤 Model: SamGeo3 loaded를 확인한다. 입력 레이어 parking-lot을 선택하고 레이어에서 영상 설정을 실행하여 Image: parking-lot을 확인한다.
처음 cpu로 시도했을 때 모델 로딩은 성공했으나 텍스트 추론에서 cuda:0과 cpu 텐서의 장치 불일치 오류가 발생하였다. 이 회차의 성공 결과는 장치를 cuda로 변경하여 모델을 다시 불러온 후 얻었다. 이를 CPU 오류의 코드 수정이나 모든 PC에서의 해결로 해석하지 않는다.

4. building 텍스트 분할 실행
텍스트 탭의 프롬프트에 영어 building을 입력한다. 최소 크기 0, 최대 크기 0(제한 없음)으로 설정하고 텍스트로 분할을 누른다. 아래 설정 화면은 같은 프롬프트의 초기 입력 장면이며, 성공 실행 장치 설정은 그림 2와 같다. 프롬프트·영상·임계값에 따라 결과가 달라지므로 임의로 다른 값의 결과와 비교하지 않는다.

실행 후 패널에 Found 2 object(s).가 표시되었으며 지도에는 두 건물 마스크가 나타났다. 검정은 배경, 회색과 흰색은 서로 다른 객체 식별값이다. 표시 색상은 정확도나 신뢰도를 의미하지 않는다.

5. 영구 출력 저장과 격자 검증
출력 탭에서 Raster (GeoTIFF)를 선택하고 임시 파일이 아닌 실습 출력 폴더에 building_sam3_cuda.tif로 마스크를 저장한다. 저장한 결과를 레이어에 추가하고 속성 → 정보에서 너비·높이·자료형·값 범위를 확인한다. 임시 samgeo_masks 파일만 남겨 두면 재시작 후 경로가 사라질 수 있으므로 영구 결과를 별도로 보관할 필요가 있다.

파일 메타데이터를 별도로 비교한 결과 입력·출력은 EPSG:3857, 1659×938픽셀이며 affine transform이 정확히 일치하였다. uint8 출력의 값 0·1·2 픽셀 수는 각각 1,344,502·91,431·120,209로 합계 1,556,142픽셀이다. 이 수치는 출력 배열의 구성 검증이며 정답 경계와 비교한 정확도 지표가 아니다. 출력 SHA-256은 f011615e9ccbd2595ede23ca5551a3db5dc584fe81c717de25e9321fa3160044이다.
6. 저장·종료와 한계
출력 속성 확인 과정에서 QGIS 응답 지연이 발생하였다. 후속 확인에서 응답이 회복된 것을 확인하고 실습 복사본을 저장하였다. 저장된 QGZ의 무결성과 영구 출력 레이어 포함 여부를 확인했으며 원본 프로젝트의 해시는 변경되지 않았다. 정상 종료 명령 후 창이 닫혔고, 종료 처리 대기 후 프로세스 종료까지 확인하였다. 강제 종료하지 않았으며 응답 지연의 근본 원인은 확정하지 않았다.
본 실습은 공개 예제 한 장에 대한 사전학습 모델 추론이다. 건물 경계의 위치 정확도, 누락률, 오탐률, 면적 정확도는 평가하지 않았다. 측량 성과나 실제 재난 위험도 판단에 직접 사용할 수 없으며, 적용 시 정답 자료와 독립적인 검증이 필요하다. 모델 학습·미세조정, 점·박스 프롬프트 및 다른 영상의 성능은 이번 실습 범위에 포함되지 않는다.
그림은 모두 이번 QGIS 실제 실행 화면이며 클릭하면 원본 크기로 확인할 수 있다. 생성 이미지나 재현한 가상 화면은 사용하지 않았다.
댓글 없음:
댓글 쓰기