개인 프로젝트/골목길 탐지하기

[골목길 탐지하기]_종로구 정사영상 기준 실험 (2/2)

ecosso 2026. 8. 6. 17:31

 최근 진행 중인 프로젝트의 일부로, 공개 도로 데이터를 보완할 수 있는 방법을 고민하다가 간단한 토이 프로젝트를 진행하고 있었다.

[골목길 탐지하기]_종로구 정사영상 기준 실험 (1/2)

 

 이전 실험에서는 기존 공개 도로데이터를 학습 라벨로 활용하여 정사영상에서 도로를 탐지하고자 했다. 그러나 실험을 반복하면서 모델 구조를 변경하는 것만으로 해결하기 어려운 문제가 있다는 점을 확인했다.

 

 특히 기존 도로데이터에는 실제 보행에 이용되는 일부 골목길이 포함되어 있지 않았고, 도로 중심선을 일정한 폭으로 확장하여 만든 라벨 역시 실제 영상에서 보이는 도로 경계와 정확하게 일치하지 않았다.

 

 결국 모델에게 더 복잡한 구조를 적용하기 전에 학습에 사용하는 정답 데이터부터 다시 확인할 필요가 있다고 판단했다.


 [직접 제작(디지타이징)한 라벨 사용]

 이전 과정에서는 표준도로링크와 토지피복도로부터 제작한 중심선 + 2m 버퍼 등 여러 데이터를 이용하여 학습 라벨을 구성해 보았다.

 

 하지만 위에서 기술한 것처럼 골목길을 탐지하는 것이 목적임에도 정작 학습에 사용하는 도로데이터에 일부 골목길이 존재하지 않는다는 문제가 있었다. 또한 영상의 공간해상도가 충분하지 않은 경우 좁은 도로와 주변 객체의 경계를 구분하기 어려웠다.

 

 이에 일부 지역의 도로를 직접 디지타이징하여 학습 라벨을 다시 구축하였다. 즉, 원하는 수준까지의 도로 및 도로폭까지 모두 제작을 진행하였다.

 

 

 이 과정에서 모델 구조뿐만 아니라 입력 영상의 품질과 학습 라벨의 정확도 역시 탐지 결과에 중요한 영향을 미칠 수 있다는 점을 확인할 수 있었다.

 


[하나의 모델이 아니라 세 가지 모델을 비교한 이유]

 

 라벨을 보완한 이후에는 하나의 모델로만 학습·추론을 진행하지 않고, 서로 다른 구조를 가진 세 가지 Semantic Segmentation 모델을 동일한 데이터 조건에서 비교하기로 하였다.

 

 세 모델을 비교하게 된 계기는 초기 U-Net 추론 결과에서 확인한 도로의 단절 문제였다.

 

 항공정사영상에서는 도로 위를 덮고 있는 수목이나 건물에 의해 생긴 그림자 때문에 실제로는 하나의 도로임에도 일부 구간의 형태와 색상이 크게 달라지는 경우가 있었다. 특히 수목이 우거진 구간에서는 도로가 가려지면서 모델의 예측 결과가 중간에서 끊기고, 가려진 구간 이후부터 다시 새로운 도로가 시작되는 것처럼 탐지되는 사례가 나타났다.

 

 실제 도로는 연속적인 구조를 가지고 있지만, 수목이나 그림자 등으로 도로의 시각적 특징이 크게 달라지는 구간에서는 모델이 가려진 구간의 앞뒤를 하나의 연속된 도로로 충분히 복원하지 못하는 사례가 나타났다.

 

 여기서 한 가지 질문이 생겼다. : 

 도로처럼 길고 연속적인 구조를 가진 객체를 탐지할 때, 더 넓은 주변 영역과의 관계를 고려하는 모델을 사용하면 결과가 달라질까?

 

 이 질문을 바탕으로 기존에 사용하던 U-Net을 기준 모델로 두고, 보다 넓은 범위의 공간적·문맥적 정보를 활용할 수 있는 구조를 추가로 비교하였다.

  • U-Net
     Encoder-Decoder 구조와 Skip Connection을 사용하는 대표적인 Semantic Segmentation 모델이다. 기존 실험에서 사용했던 모델이므로 비교를 위한 기준 모델(Baseline)로 설정하였다.
  • D-LinkNet
    LinkNet 계열의 Encoder-Decoder 구조에 Dilated Convolution을 활용하여, 특징맵의 해상도를 추가로 크게 낮추지 않으면서 넓은 수용영역(Receptive Field)을 확보할 수 있다. 도로처럼 가늘고 길게 이어지는 객체의 segmentation에 활용된 모델이라는 점에서, 주변 문맥을 보다 넓게 고려했을 때 단절된 도로 탐지 결과가 달라지는지 확인하기 위해 선택하였다.
  • SegFormer-B0
     CNN 중심의 앞선 두 모델과 달리 Transformer 기반 Encoder를 사용하여 CNN과 다른 방식으로 공간적 특징과 문맥 정보를 학습하는 모델이다. CNN 기반 모델과 다른 방식으로 주변 정보를 활용했을 때 도로 탐지 결과에 어떤 차이가 나타나는지 비교하기 위해 선택하였다.

 

 세 모델을 동일한 학습 데이터와 조건에서 학습한 뒤, 모델별로 설정한 임계값을 적용하여 종로구 내 2개 격자분에 해당하는 정사영상에 추론하였다.

 

 이번 단계에서는 단순히 특정 평가지표가 가장 높은 모델을 선정하기보다,  수목이나 그림자 등에 의해 도로의 시각적 특징이 부분적으로 달라지는 상황에서, 서로 다른 방식으로 주변 문맥을 학습하는 모델들이 연속적인 도로 구조를 어떻게 탐지하는지 비교하는 것에 초점을 두었다.

 

Model Threshold 도로 폴리곤 수 중심선 수
U-Net 0.700 10,431 36,114
D-LinkNet 0.625 16,652 65,815
SegFormer-B0 0.625 47,294 89,404

 

▲ U-Net 적용

 

▲ D-Linknet 적용

 

▲ SegFormer-B0 적용

 

 종로구 내 2개 격자의 항공영상에 적용한 결과, 모델에 따라 추출되는 도로 영역의 양과 형태에 상당한 차이가 나타났다.

 

 U-Net은 세 모델 가운데 가장 적은 수의 도로 폴리곤과 중심선을 생성하여 상대적으로 보수적인 탐지 양상을 보였다. D-LinkNet은 U-Net보다 많은 도로 영역과 중심선을 추출했으며, SegFormer-B0은 47,294개의 폴리곤과 89,404개의 중심선을 생성하여 가장 많은 영역을 도로로 탐지하였다.

 

 다만 생성된 폴리곤이나 중심선의 개수만으로 탐지 성능의 우열을 판단할 수는 없다는 것을 알 수 있었다. 기존 도로데이터에서 누락된 협소도로를 추가로 탐지하여 개수가 증가할 수도 있지만, 반대로 비도로 영역을 잘못 탐지하거나 하나의 도로가 여러 조각으로 분절되면서 개수가 증가할 수도 있기 때문이다.

 

 실제 결과를 함께 확인했을 때 SegFormer-B0에서는 다른 두 모델보다 탐지 영역이 크게 증가하는 한편, 비도로 영역까지 도로로 판단하거나 결과가 잘게 분절되는 사례도 상대적으로 많이 관찰되었다. 반면 U-Net은 비교적 보수적인 탐지 결과를 보였으며, D-LinkNet은 두 모델의 중간적인 양상을 나타냈다.

 

 이 결과를 통해 도로 탐지 모델을 평가할 때에는 탐지 영역의 양뿐만 아니라 실제 공간에서 나타나는 도로의 연속성, 단절, 누락, 오탐 및 불필요한 가지와 같은 공간적 특성도 함께 확인할 필요가 있다고 판단하였다.

 

 특히 이번 프로젝트의 최종 목적은 탐지된 도로를 중심선으로 변환하여 보행 네트워크 분석에 활용하는 것이므로, 최종 모델 선정 역시 단순한 탐지량보다는 실제 도로망과의 정합성 및 네트워크 연결성을 추가로 검증한 뒤 결정할 필요가 있다.

 

 따라서 현재 단계에서는 특정 모델을 최종 모델로 확정하기보다, 서로 다른 구조의 모델이 동일한 영상에서도 상당히 다른 공간적 결과를 생성한다는 점을 확인한 비교 실험으로 정리하였다.

 


[반복 실험을 위한 CUDA 환경 구축]

 

 이번 실험에서 또 하나의 문제는 연산시간이었다.

 초기에는 별도의 GPU가 없는 학원 컴퓨터에서 모델을 학습했는데, 한 번의 학습에 약 7~9시간이 소요될 것으로 예상되었다. 학습이 진행되는 동안에는 컴퓨터를 다른 용도로 활용하기도 어려웠다.

 

 처음에는 이러한 제약을 해결하기 위해 여러 컴퓨터에 지역별 학습을 분산하고, 각 지역에서 학습한 모델을 활용하는 방법도 검토하였다. 그러나 사용할 수 있는 컴퓨터가 제한적이었고 일부 장비는 정상적으로 활용하기 어려웠다. 무엇보다 한 번의 실험에 반나절 가까운 시간이 필요한 상황에서는 여러 조건을 바꾸어가며 결과를 반복적으로 확인하는 것 자체가 쉽지 않았다.

 

 Semantic Segmentation 실험에서는 한 번 모델을 학습하는 것으로 끝나는 것이 아니라 결과를 확인한 뒤,

 

학습 → 결과 확인 → 문제 추정 → 데이터·라벨·모델 조정 → 재학습

 

위의 과정을 반복해야 했다.

 

 예를 들어 결과가 좋지 않다면 학습 라벨의 품질이 원인인지, 입력 영상의 문제인지, 모델 구조나 학습 조건의 문제인지를 확인하기 위해 다시 실험해야 한다. 그러나 한 번의 결과를 확인하는 데 7~9시간이 걸린다면 몇 가지 가설을 검증하는 데만 며칠이 필요하고, 이후 서울시 여러 지역으로 실험을 확장하는 것은 현실적으로 더 큰 시간적 제약이 될 수밖에 없었다.

 

 따라서 단순히 모델의 성능을 높이는 것뿐만 아니라 실험 한 번에 필요한 시간을 줄여 반복적인 검증이 가능한 환경을 만드는 것 자체가 먼저 해결해야 할 문제라고 판단하였다.

 

 관련 논문과 딥러닝 학습 사례를 찾아보는 과정에서 NVIDIA GPU의 병렬연산을 활용하는 CUDA에 대해 알게 되었고, 개인 컴퓨터에 NVIDIA GPU가 탑재되어 있다는 점을 활용하여 PyTorch·CUDA 기반 GPU 학습환경을 직접 구축하였다.

 

 이를 통해 대용량 정사영상과 여러 모델을 반복적으로 학습·추론할 수 있는 환경을 마련하였고, 동일한 조건에서 U-Net, D-LinkNet, SegFormer-B0의 결과를 비교하는 실험도 보다 현실적으로 수행할 수 있게 되었다.

 

 이번 경험에서 CUDA 자체를 사용하는 것이 목적은 아니었다. 오히려 의미가 있었던 부분은 한정된 인프라와 시간 안에서 더 많은 가설을 검증하기 위해 실험환경 자체를 개선했다는 점이었다.

 

 모델 개발에서는 정확도뿐만 아니라 데이터 규모, 연산시간, 메모리, 사용 가능한 하드웨어와 같은 현실적인 제약 역시 실험 설계의 일부이며, 빠르게 결과를 확인하고 다음 실험으로 이어갈 수 있는 환경을 만드는 것 또한 모델 개선 과정의 중요한 요소라는 점을 경험할 수 있었다.


 

[이번 실험에서 확인한 것]

 

 이번 프로젝트를 진행하면서 가장 크게 느낀 점은 모델의 성능은 모델 구조 하나만으로 결정되지 않는다는 것이었다.

 초기 실험에서는 기대했던 만큼 협소도로를 탐지하지 못했지만, 원인을 확인하는 과정에서 모델뿐만 아니라 영상의 공간해상도와 학습 라벨의 품질이 결과에 큰 영향을 미친다는 점을 확인하였다. 이에 더 높은 해상도의 영상을 확보하고 일부 지역의 라벨을 직접 구축하여 학습 데이터를 개선하였다.

 

 이후에는 수목이나 그림자 등에 의해 실제로는 연속된 도로가 중간에서 끊겨 탐지되는 문제에 주목하였다. 이를 바탕으로 주변 문맥을 서로 다른 방식으로 학습하는 모델에서는 결과가 달라지는지 확인하기 위해 U-Net, D-LinkNet, SegFormer-B0을 동일한 조건에서 비교하였다. 종로구 영상에 적용한 결과 모델별로 탐지 영역의 양과 분절 양상이 상당히 다르게 나타났으며, 이를 통해 탐지량뿐만 아니라 실제 도로의 연속성, 누락, 오탐과 같은 공간적 특성을 함께 검토할 필요가 있다고 판단하였다.

 

 반복적인 학습과 비교 과정에서는 연산시간 자체가 실험의 병목이 되기도 했다. 이를 해결하기 위해 PyTorch·CUDA 기반 GPU 환경을 구축하면서, 분석에서는 모델과 데이터뿐만 아니라 제한된 시간과 연산자원 안에서 반복적인 실험이 가능한 환경을 만드는 것도 중요하다는 점을 경험하였다.

 

 물론 아직 한계는 남아 있다. 건물이나 그림자 등 도로와 유사한 영역을 잘못 탐지하거나 일부 협소도로를 놓치는 사례가 있으며, 현재 종로구를 중심으로 한 실험 결과만으로 특정 모델이 다른 지역에서도 가장 우수하다고 일반화하기는 어렵다. 따라서 향후에는 다른 지역에서도 모델의 성능과 탐지 양상이 유지되는지 추가적인 검증이 필요하다.

 

 이번 프로젝트에서는 다음의 과정을 하나의 흐름으로 직접 수행하였다.

  • 공간데이터와 영상데이터의 전처리 및 정합
  • 학습 라벨 구축과 품질 검토
  • 서로 다른 Semantic Segmentation 모델의 학습·비교
  • GPU 기반 반복 학습·추론 환경 구축
  • 종로구 내 영상에 대한 모델별 추론 결과 비교
  • 예측 Mask의 Polygon·Centerline 변환 및 후속 공간분석 연결

 이번 프로젝트의 가장 큰 수확은 단순히 ‘도로를 얼마나 잘 찾았는가’라는 최종 성능보다, 결과가 기대와 다를 때 하나의 원인으로 단정하지 않고 데이터, 라벨, 모델, 학습환경을 차례로 점검하며 다음 실험을 설계해 본 경험이었다.