[프로젝트 일지] polygon -> bitmap mask

김예지·2025년 1월 26일

프로젝트 일지

목록 보기
1/4
post-thumbnail

상황 설명

  1. 옥상 면적은 선정 과정에서 가장 높은 우선순위를 가지는 항목, 고성능의 모델이 필요한 상황
    -> 사전학습모델인 SAM-2를 파인 튜닝하는 방식으로 모델을 구축하기로 함
  2. SAM-2를 파인 튜닝하기 위해서는 원본 이미지, 객체의 위치를 나타낼 마스크 이미지 필요
  3. 우리가 가진 데이터: AI-Hub 항공사진 데이터(라벨 데이터 포함)
  4. 라벨 데이터의 구성: 객체 구분(도로, 야지, 건물, ...), polygon(EPSG:5186)

polygon -> bitmap

instance segmentation을 위해서는 객체별 마스크가 필요하다. 객체별 polygon이 있고, 해당 정보를 이용해 mask를 만들면 된다.

1. boundary box 계산

객체를 나타내기에 앞서, boundary box를 계산하는 과정이 필요하다. 이렇게 만들어진 결과물은 마스크로 사용될 예정이기 때문에 반드시 원본 이미지와 같은 범위의 boundary box를 만들어야 했다.

라벨 데이터에는 객체의 좌표만 포함되어 있어서 직접 boundary box를 계산해야 했다.
과정은 다음과 같다.

  1. 모든 객체의 좌표를 불러온 뒤, x와 y로 분리
  2. x와 y의 min/max 값을 구한 뒤, 해당 값을 boundary box 생성에 사용

이러한 과정을 거칠 수 있었던 건 두 가지의 조건이 있어서였다.
첫 번째는 사용한 데이터가 분할된 형태의 항공사진이었기 때문에 잘린 객체들이 반드시 존재했다는 것이고, 두 번째는 라벨 데이터에 건물 외의 다른 객체가 존재했기 때문에 잘린 객체들의 좌표를 확보할 수 있었다는 것이다.

2. 건물 필터링

라벨 데이터는 필요한 객체인 건물 객체 외에도 비대상지, 도로, 노지 등의 객체까지 포함하고 있기 때문에 필터링하는 과정이 필요했다.

3. 객체 표현

4. 마스크 이미지 저장

테스트 결과, 용량이 가장 작았던 jpg로 만들어진 마스크를 저장했다. 마스크는 이미지 형태로 저장되었다.

profile
넓고 얕게? 좁고 깊게?

0개의 댓글