GeoAI를 이용한 건물과 비닐하우스에 대한 Detection

GeoAI는 공간정보과학(Geospatial Science; Spatial Data Science)과 인공지능(Artificial Intelligence)의 합성어이며, 공간 빅데이터(Spatial Big Data)로부터 유의미한 정보를 도출하기 위해 인공지능 기술(A.I.: Machine Learning, Deep Learning)과 고성능 컴퓨터를 활용하는 분야로써, 이 글은 항공영상으로부터 탐지하고자 하는 객체를 자동으로 획득하는 GeoAI의 한가지 기술 개발을 위해 직접 학습 DB를 구축하고, 실제 딥러닝 학습을 통한 도출된 모델을 이용하여 테스트한 내용을 소개합니다.

항공영상으로부터 탐지하고자 하는 객체는 건물과 비닐하우스로 정하고, 이 두가지에 대한 학습 DB인 레이블 데이터를 구축하고, 구축된 학습 데이터를 이용해 Detection에 대한 신경망 모델인 Faster R-CNN을 학습시켰습니다. 구축 건수는 건물와 비닐하우스에 대해 각각 6000개, 2000개이고, 레이블 데이터 구축 툴은 아래의 글에서 소개한 GeoAI Labeling Tool입니다.

GeoAI Labeling Tool 소개

총 35 Epoch만큼 학습된 모델을 이용해 항공영상을 테스트했으며, 그 중 테스트한 순서대로 3개정도의 이미지만을 언급하면 다음과 같습니다. 참고로 Class1은 건물, Class2는 비닐하우스입니다.

모델 성능 검증을 위해 소량의 데이터와 작은 반복의 학습했으므로, 높은 정확도를 기대한 것은 아니지만, 소량의 학습 DB임에도 상당수의 건물(Class1) 또는 비닐하우스(Class2)에 대해서 종류별로 검출이 되는 것을 볼 수 있습니다. 하지만 3번째 이미지를 보시면, 좌상단 부분의 건물 몇개가 검출되지 않는 결과를 볼 수 있습니다.

해서, 3번 이미지 중 검출되지 않는 부분만을 짤라내어 다시 검출을 시도해 보면 다음처럼 검출되는 것을 볼 수 있었습니다.

실제 프로젝트에서는 더 많은 수의 학습 데이터를 구축하고, 이를 다시 데이터 증강기법을 이용한 보강을 통해 더욱 높은 포퍼먼스를 얻을 수 있습니다. 또한 Faster R-CNN 보다는 항공영상에서의 건물 등과 같은 객체 탐지를 위한 더 나은 모델을 활용하는 것이 옳을 것입니다. 즉, Faster R-CNN처럼 먼저 영역(Region)을 추출하고, 이 영역에 대한 분류(Classification)을 수행하는 방식이 아닌, 픽셀 단위로 바로 분류 하는 모델이 정확성과 업무의 응용성이 더 높을 것입니다. 물론 Faster R-CNN의 장점은 정확한 학습 DB를 빠르게 구축할 수 있다는 장점이 있으므로 적용하고자 하는 분야에 따라 신경망 모델을 결정해야 할 것입니다. 아울러 학습 DB 구축에 대해 덧붙이자면 건물이나 비닐하우스 등은 지역과 계절에 따라 그 형상 및 색감이 다르므로 계절별로, 또 보다 더 넓은 지역을 범위로 해야 합니다.

GeoAI Labeling Tool 소개

GIS 기반의 AI 기술 중, 항공영상이나 위성영상 지도로부터 특정 대상을 추출해 내는 기능이 있습니다. 특정 대상이라함은 영상 지도에서 ‘건물’이나 ‘차량’, ‘비닐하우스’ 등과 같은 것을 말합니다. AI에서는 이처럼 특정 대상을 분류하고 검출하는 모델을 딥러닝(Deep Learning)을 통해 신경망 차원에서 학습 및 개발할 수 있는데요. 이처럼 이미지를 통해 특정 대상을 검출하는 방식으로는 Detection과 Segmentation 방식이 있습니다. 이 두가지에 대한 보다 자세한 내용은 아래의 글을 참고 하시기 바랍니다.

사람에 대한 Detection, Segmentation @A.I-TestBed

위의 글은 Detection과 Segmentation에 대한 개념적 소개와 그 차이점, 그리고 실제로 웹에서 이미지를 입력하면 해당 이미지에서 ‘사람’을 추출해 내는 실제 개발된 시스템에 대한 소개입니다.

이미지에 대한 Detection과 Segmentation에 대한 신경망 모델은 매우 다양합니다. 모델에 따라 분류 정확도 및 정밀도에 대한 지표에 차이가 있습니다. 이런 점에서 신경망 모델의 선택도 중요하지만, 이보다 훨씬 더 중요한 것은 신경망 학습에 사용되는 데이터, 즉 학습 데이터가 얼마나 정확하고 얼마나 더 많은가가 더욱 중요합니다.

이 글에서 소개하는 GeoAI 레이블링 툴은 항공영상이나 위성영상에 대해 Detection과 Segmentation을 위한 데이터를 빠르게 구축할 수 있는 툴로써 다음과 같은 장점을 갖습니다.

아래의 동영상은 GeoAI Labeling Tool에서 Detection 데이터를 구축하는 내용을 담고 있습니다.

추가로 아래의 동영상은 GeoAI Labeling Tool에서 Segmentation 데이터를 구축하는 내용을 담고 있습니다.

psql을 설치된 서버에서 직접 실행하기

PostgreSQL에 대한 콘솔 관리자는 psql입니다. 현재 CentOS에서 설치해 사용중이고, DB 작업시에는 Telnet을 통해 작업을 해왔는데, 시간을 단축하고자 원격방식이 아닌 직접 서버단에서 작업을 했습니다. 원격 작업시 준비된 SQL에 대한 처리에만 2일정도 소요되는 작업이 10시간정도 소요되었습니다.

이 글은 추후 PostgreSQL이 설치된 서버에서 직접 psql을 실행하고자 할때 입력했던 콘솔 명령을 기록해 둡니다.

먼저 아래처럼 root로 로그인한 상태에서 postgres 계정으로 전환합니다.

sudo -i -u postgres

그리고 psql을 실행합니다. 바로 암호를 묻는데 postgres 계정에 대한 암호를 입력합니다.

기본적으로 psql은 postgres라는 이름의 데이터베이스에 연결됩니다. 이를 내가 원하는 데이터베이스로 연결하고자할 때 아래처럼 입력합니다.

\c database_name_to_be_connected

필요하다면, SQL 문의 인코딩 방식을 변경해줘야 하는데요. 아래처럼 입력하여 원하는 방식으로 변경할 수 있습니다.

set client_encoding = 'UTF8';

이제 준비된 SQL문이 저장된 파일로부터 SQL 문을 실행하기 위해 아래처럼 입력합니다.

\i /somewhere_dir/file_name_to_be_ran

넥스젠(NexGen)의 지오코딩(Geocoding) 기능

NexGen에서 제공하는 지오코딩 기능을 소개합니다. 지오코딩을 통해 주소를 좌표로 변환하여 원하는 심벌로 지도에 표시할 수 있는데요. 넥스젠에서는 지오코딩을 통해 변환된 공간 데이터는 기본적인 수치지도 레이어와 동일하게 라벨 등과 같은 모든 기능을 활용할 수 있습니다. 아래는 NexGen의 지오코딩 기능에 대한 소개 동영상입니다.

넥스젠의 지오코딩 기능은 사용이 심플하지만 그 어떤 GIS 프로그램에서 제공하는 지오코딩 보다 직관적이고 강력합니다. 넥스젠의 지오코딩은 이미 2014년부터 현재까지 매우 많은 분들이 사용하고 있는, Geocoder-Xr의 기반 서비스를 그대로 활용하고 있습니다.

주소 좌표 변환 툴, Geocoder-Xr

NexGen의 지오코딩은 항상 최신 주소 DB 사용할 수 있습니다. 최신 주소 DB를 통해 변환된 위치를 최신의 배경지도 위에 중첩할 수 있습니다. 이제 NexGen을 통해 웹에서도 바로 지오코딩을 하고, 지도 상에서 빠르게 시각화해 보세요.