2026-10-14

GeoAI 실제 QGIS 실습 19 — DeepForest 탐지 결과를 PASCAL VOC·COCO·YOLO 학습 자료로 내보내기

본 실습에서는 NaGeoAI 수목 분할(DeepForest) 패널로 나무를 탐지한 뒤, 출력 탭의 학습 데이터 내보내기로 탐지 결과를 PASCAL VOC·COCO·YOLO 세 가지 학습 자료 형식으로 저장하였다. 모델이 찾은 결과를 사람이 검토·수정하여 다음 학습의 라벨로 쓰는 흐름의 첫 단계에 해당한다. 2026년 10월 14일 QGIS 데스크톱(3.44.15)에서 모델 불러오기·탐지·내보내기와 프로젝트 저장·정상 종료까지 실제로 수행하였다. 이번 회차도 사람이 마우스로 조작하지 않았다. QGIS 시작 스크립트가 NaGeoAI 패널의 입력란을 채우고 버튼을 눌러 실행했으며, 본문의 그림은 그 스크립트가 QGIS 창을 캡처한 것이다. 아래 메뉴 경로와 입력값으로 손으로 재현할 수 있다.

1. 플러그인 설치와 예제 다운로드

현재 설치 환경은 QGIS 3.44.15-Solothurn과 NaGeoAI 1.9.1이다. NaGeoAI 배포 페이지에서 설치용 ZIP을 확인한 뒤 플러그인 → 플러그인 관리 및 설치 → ZIP에서 설치로 설치하고 플러그인을 활성화한다. 이번 실행에서는 재설치하지 않았다.

입력 영상은 실습 8과 같은 OSBS-029.tif이다(EPSG:32617, 400×400픽셀, RGB 3밴드 uint8, 0.1 m). Source Cooperative의 Open Geospatial Solutions 자료 페이지에서 받을 수 있으며, 원본 영상과 내보낸 학습 자료는 재배포하지 않는다.

원본 QGIS_Play.qgz를 열고 프로젝트 → 다른 이름으로 저장에 해당하는 방식으로 QGIS_Play_NaGeoAI_20261014_export19.qgz 복사본을 만들었다(최초 5,686바이트, 레이어 0개, 표시 좌표계 EPSG:5187). 원본 파일의 SHA-256은 실행 전후 동일하였다.

2. 모델 불러오기와 영상 지정

NaGeoAI → 수목 분할을 열고 모델 탭에서 기본 모델 weecology/deepforest-tree, 장치 auto로 모델 불러오기를 누른다. 이번 실행에서는 약 12초 뒤 "Model: weecology/deepforest-tree loaded"가 표시되었다. 처음 실행할 때는 모델을 내려받으므로 더 오래 걸릴 수 있다. 이어서 영상 경로에 OSBS-029.tif를 지정하고 파일에서 영상 설정을 누르면 "Image: OSBS-029.tif (400 x 400 px)"가 표시되고 영상이 지도에 추가된다.

수목 분할 패널 모델 탭에서 weecology deepforest-tree 모델이 불러와졌다는 녹색 상태 문구가 표시된 QGIS 화면
그림 1. 모델 탭에서 모델 불러오기를 마친 상태. 그림을 클릭하면 원본 크기로 확인할 수 있다.

3. 나무 탐지

예측 탭에서 모드 Single Image, 점수 임계값 0.30을 지정하고 예측 실행을 누른다. 400×400픽셀의 작은 영상이므로 한 장 전체를 한 번에 처리하는 Single Image 모드를 사용하였다. 약 3초 뒤 "Found 55 detection(s)."가 표시되었고 탐지 상자가 deepforest_detections 레이어로 지도에 추가되었다. 점수 범위는 0.303~0.799로, 같은 영상·같은 임계값을 쓴 실습 8과 탐지 개수가 같다.

예측 탭에 Single Image 모드와 점수 임계값 0.30이 입력되고 OSBS-029 영상이 지도에 표시된 QGIS 화면
그림 2. 예측 실행 전 설정. 그림을 클릭하면 원본 크기로 확인할 수 있다.
나무 탐지 결과 55개가 빨간 상자로 영상 위에 표시되고 예측 탭에 탐지 개수가 표시된 QGIS 화면
그림 3. 탐지 결과 55개. 상자는 나무 후보이며 실제 나무 수나 정확도를 확인한 것은 아니다. 그림을 클릭하면 원본 크기로 확인할 수 있다.

4. 세 가지 형식으로 학습 데이터 내보내기

출력 탭 아래쪽 학습 데이터 내보내기에서 형식을 고르고 저장 폴더를 지정한 뒤 내보내기를 누른다. 형식마다 다른 빈 폴더를 지정하여 PASCAL_VOC, COCO, YOLO 순서로 세 번 실행하였다. 내보내기는 각각 즉시 끝나며 탐지 결과 창에 저장 경로가 기록된다.

출력 탭 학습 데이터 내보내기에서 YOLO 형식과 저장 폴더가 지정되고 결과 창에 세 형식의 내보내기 경로가 기록된 QGIS 화면
그림 4. 마지막(YOLO) 내보내기 직후 화면. 결과 창에 PASCAL VOC 55개 기록과 세 폴더의 저장 경로가 남았다. 첫 줄의 Auto-saved 경로는 탐지 결과를 임시 GeoPackage로 자동 저장한 위치이다. 그림을 클릭하면 원본 크기로 확인할 수 있다.

5. 내보낸 자료 검증

저장된 파일은 QGIS 밖에서 읽기 전용으로 열어 구성과 개수를 확인하였다.

형식생성 파일내용 확인
PASCAL VOCAnnotations/OSBS-029.xml, JPEGImages/OSBS-029.tifobject 55개, 라벨 Tree, 영상 크기 400×400×3, 모든 상자가 영상 범위 안(폭 8~56픽셀)
COCOannotations.json, OSBS-029.tifimages 1, annotations 55, 범주 Tree, bbox는 [x, y, 폭, 높이] 픽셀 값
YOLOOSBS-029.txt, classes.txt, OSBS-029.tif55줄, 클래스 번호 0(Tree), 좌표는 모두 0~1로 정규화

세 형식 모두 55개로 탐지 개수와 같다. 각 폴더에 복사된 영상은 원본과 SHA-256이 같아(8521dbb5e8063d37d61895867dfcca7476491d1345103dc1b3fd96f71b186353) 영상 자체는 바뀌지 않는다. 주의할 점이 두 가지 있다. 첫째, PASCAL VOC 폴더 이름은 관례대로 JPEGImages이지만 실제로는 원본 GeoTIFF가 그대로 복사되므로, JPEG만 읽는 학습 도구를 쓴다면 변환이 필요하다. 둘째, 상자 좌표는 영상 픽셀 기준이며 지리 좌표가 아니다. 지도 위 위치가 필요하면 원본 GeoTIFF의 좌표 정보와 함께 사용해야 한다.

무엇보다 이 자료는 모델이 만든 후보이므로 그대로 정답 라벨로 쓰면 모델의 오류까지 학습하게 된다. 학습 자료로 쓰기 전에 QGIS에서 상자를 검토하여 놓친 나무를 추가하고 잘못된 상자를 지우는 과정이 필요하다. 이번 회차에서는 이러한 검토와 재학습은 하지 않았다.

6. 프로젝트 저장과 정상 종료

모든 단계를 마친 뒤 실습 복사본을 저장하였다. 저장 후 파일 크기는 10,505바이트였고 미저장 표시가 없었으며, 원본 QGIS_Play.qgz의 SHA-256은 실행 전후 동일하였다. 이후 QGIS 자체 종료 동작으로 정상 종료하였고 QGIS 프로세스가 남아 있지 않은 것을 확인하였다. 강제 종료하지 않았다.

이번 회차로 NaGeoAI 패널의 주요 기능(탐지·분류·분할·학습·추론·벡터화·학습 자료 내보내기)을 실습으로 한 번씩 확인하였다. 큰 영상을 조각으로 나누어 처리하는 DeepForest의 Large Tile 모드와 Moondream 탐지 결과의 타일 내보내기는 이번 연재에서 따로 다루지 않았다.

댓글 없음:

댓글 쓰기

GeoAI 실제 QGIS 실습 19 — DeepForest 탐지 결과를 PASCAL VOC·COCO·YOLO 학습 자료로 내보내기

본 실습에서는 NaGeoAI 수목 분할(DeepForest) 패널로 나무를 탐지한 뒤, 출력 탭의 학습 데이터 내보내기 로 탐지 결과를 PASCAL VOC·COCO·YOLO 세 가지 학습 자료 형식으로 저장하였다. 모델이 찾은 결과를 사람이 검토·수정...