brunch

You can make anything
by writing

C.S.Lewis

by 휘드라 Feb 07. 2023

위성사진 건축물 탐지



저는 부동산에 관심이 많습니다. 그래서 네이버부동산과 같은 플랫폼에서 자주 위성지도를 보곤 합니다. 문득 어느 날 위성지도를 바라보다가 컴퓨터비전 기술을 응용해 볼 수 있지 않을까 싶었습니다. 이외에도 "부동산 가격을 위성사진으로 예측하는 논문"을 몇 년 전 본 기억이 있었기 때문에, 이와 비슷한 모델을 만들어보면 흥미로울 것 같았습니다.  


그래서 저는 위성사진에서 건물을 자동으로 판별 & 추출해 주는 간단한 모델을 만들어보기로 했습니다.


데이터셋

해당 모델을 만들기 위해서는 위성지도 이미지 데이터셋이 필요합니다. 감사하게도 roboflow라는 곳에서 이미 제공해주고 있었습니다. roboflow는 약 6천6백만 개의 레이블링 된 이미지와 9만 개의 데이터셋을 제공한다고 합니다. 아래처럼 레이블링까지 깔끔하게 되어 있기 때문에 그냥 가져다 쓰면 됩니다. 약 1만 7천 개가량의 위성사진을 사용하였습니다.


학습

Yolov7(You Only Look Once)란 알고리즘을 이용해 봅시다. 이미 너무나도 유명한 객체탐지 모델입니다.(https://github.com/WongKinYiu/yolov7). 사실 roboflow에서 제공하는 예제가 너무나도 쉽게 잘 나와 있습니다. 하라는 대로 따라만 하였습니다. 커스텀데이터(위성사진)로 학습을 하기 위해서 colab에서 아래와 같이 코드블록을 만들었습니다.


yolov7의 가중치 파일 다운로드
%cd {HOME}/yolov7/seg
!wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-seg.pt
WEIGHTS_PATH = f"{HOME}/yolov7/seg/yolov7-seg.pt"


위성사진 데이터셋 다운로드 (Instance-Segmentation)
%cd {HOME}/yolov7/seg
!pip install roboflow --quiet
from roboflow import Roboflow
rf = Roboflow(api_key="api_key")
project = rf.workspace("roboflow-universe-projects").project("buildings-instance-segmentation")
dataset = project.version(4).download("yolov7")


학습
%cd {HOME}/yolov7/seg
!python segment/train.py --batch 16 \
 --epochs 5 \
 --data {dataset.location}/data.yaml \
 --weights $WEIGHTS_PATH \
 --device 0 \
 --name custom


어떤가요? 복잡한 코드가 아닌 간단한 명령 만으로도 커스텀데이터 학습이 가능합니다! colab GPU기준으로 약 1시간 30분이 소모되었습니다. 오래 기다리기 싫어서 5 epoch만 돌렸습니다. 



결과

잠시 여담을 하자면, 현대 전쟁에서는 정보전이 차지하는 비율이 커지고 있습니다. 이번 우크라이나-러시아 전쟁에서도 미국으로부터 정보를 건네받은 우크라이나 군이 큰 선전을 하고 있습니다. 러시아의 탱크만 찾아내 핀셋으로 타격하는 것도 이런 위성사진 판독기술이 결합된 결과물이기도 합니다.


그런 의미에서 첫 번째로 우크라이나 위성사진을 테스트 데이터로 이용해 보겠습니다. 군사목적으로도 객체탐지가 많이 쓰일 것 같아 우크라이나-러시아 전쟁에서 주요 접전지인 하르키우, 헤르손, 도네츠크 지역을 추론해 보겠습니다. 복잡하지 않고 단조로운 건물 형상이기 때문에 결과가 괜찮아 보이나, 몇몇 건물이 아닌 지형을 건물로 인식하기도 합니다. 신기하게도 그림자는 피해서 경계면을 그려주기도 합니다.


공동주택(아파트)이 많이 밀집되어 있는 대한민국의 위성사진도 추론해 보도록 합시다. 아래 사진은 서울특별시 관악구에 있는 주택들입니다. 공동주택까지 정확히 잡아내는 것을 볼 수 있습니다. 크기가 작은 몇몇 소형 주택들은 캐치하지 못하네요. 학습 시간을 늘리면 개선될 것으로 보입니다.


제가 살고 있는 아파트도 재미로 적용해 보았습니다. 그럭저럭 아파트를 깔끔하게 캐치하는 것을 볼 수 있습니다.  



응용

이렇게 뛰어난 알고리즘은 어디에서 응용될까요? IT와 건축에 대한 글을 자주 쓰는 입장에서 건설산업에 적용된 몇 가지 예를 들어보도록 하겠습니다. 


건설안전 분야에서의 객체탐지


특정 중장비 탐지



벽면 크랙 탐지



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari