SegFormer 다양한 데이터셋 적용법

SegFormer를 실제 프로젝트에 적용하면서 다양한 데이터셋에 대한 호환성과 유연성이 얼마나 중요한지 몸소 체감했습니다. 특히 공개 데이터셋뿐 아니라, 자체적으로 구축한 커스텀 데이터셋을 활용해야 할 때는 포맷, 클래스 정의, 분할 비율 등 여러 요소를 직접 설정해야 했습니다. 다행히도 SegFormer는 다양한 데이터셋 포맷과 구조에 유연하게 대응할 수 있도록 설계되어 있어, 기본 구조만 이해하고 나면 새로운 데이터셋을 손쉽게 적용할 수 있습니다. 본 글에서는 SegFormer를 여러 형태의 데이터셋에 적용하는 방법과 함께, 학습 및 검증 데이터셋을 자동으로 분리해 구성하는 전략까지 상세히 다루고자 합니다.
SegFormer가 지원하는 데이터셋 구조 이해
SegFormer는 보통 MMSegmentation 프레임워크 또는 Hugging Face Transformers 라이브러리를 통해 구현되며, 데이터셋은 기본적으로 이미지와 마스크 쌍으로 구성됩니다. 이때 마스크는 클래스마다 픽셀 값을 달리하여 표현되며, 색상이 아닌 인덱스 기반의 정수값으로 저장되는 것이 일반적입니다. 대표적으로 ADE20K, Cityscapes, Pascal VOC, COCO Stuff 등의 데이터셋이 공식적으로 지원되며, 커스텀 데이터셋도 동일한 구조를 따르기만 하면 적용이 가능합니다.
이러한 데이터셋은 주로 다음과 같은 형태로 구성됩니다. 먼저 `images/train`, `images/val` 디렉토리에 이미지 파일이 위치하고, 대응되는 `annotations/train`, `annotations/val`에는 같은 이름의 마스크 파일이 존재합니다. SegFormer는 설정 파일에서 데이터셋 경로, 클래스 수, 클래스 이름 등을 정의하고, 이를 바탕으로 학습 시 자동으로 데이터를 불러옵니다. 이러한 구조만 맞춰주면, 기존에 사용하던 어떤 데이터셋도 쉽게 호환시킬 수 있습니다.
또한 다양한 이미지 해상도를 지원하므로, 고해상도와 저해상도 데이터가 혼합된 경우에도 이미지 리사이즈 설정을 통해 동일한 해상도로 정규화하여 사용할 수 있습니다. 이는 특히 드론 영상이나 CCTV 영상처럼 해상도가 일정하지 않은 데이터셋에서 유용합니다.
학습 및 검증 데이터 자동 분할 전략
SegFormer 학습을 위한 데이터셋을 구성할 때 가장 먼저 고려해야 할 점 중 하나는 학습과 검증 데이터의 분할 비율입니다. 일반적으로 8:2 또는 7:3의 비율이 자주 사용되며, 데이터셋이 충분히 크다면 9:1도 가능합니다. 이때 수작업으로 이미지 파일을 나누는 것은 비효율적이기 때문에, 자동 분할 스크립트를 통해 지정된 비율에 따라 이미지와 마스크를 자동으로 나누어 저장하는 방식을 사용하는 것이 좋습니다.
실제로 Python을 이용한 간단한 스크립트를 작성하면, 전체 이미지 목록을 불러온 후 무작위로 섞고, 설정한 비율에 따라 `train`과 `val` 폴더로 자동 이동시킬 수 있습니다. 마스크 파일도 동일한 파일명을 기반으로 함께 이동시키면, SegFormer가 요구하는 구조를 그대로 자동으로 생성할 수 있습니다. 이를 통해 데이터셋을 재구성하거나 새로운 프로젝트에 맞게 빠르게 초기 세팅을 완료할 수 있습니다.
이 과정은 반복적인 작업을 줄여주고, 실험 간 일관성을 유지하는 데 큰 도움이 됩니다. 특히 여러 가지 실험을 병렬로 수행하거나, 서로 다른 조건으로 여러 모델을 학습시킬 때는 데이터셋 자동 분할 스크립트가 필수적인 도구로 작용합니다. 또한, 검증 데이터셋을 고정해 두고 학습 데이터만 교체하는 방식의 실험도 이러한 자동화 시스템에서 쉽게 구현 가능합니다.
커스텀 데이터셋 적용 시 고려할 사항
SegFormer를 커스텀 데이터셋에 적용할 때에는 몇 가지 사항을 점검해야 합니다. 첫째, 마스크 파일이 정수 인덱스로 저장되어 있는지 확인해야 합니다. 일부 라벨링 도구에서는 RGB 이미지 형태로 저장되는데, 이 경우 별도의 전처리를 통해 클래스를 정수값으로 맵핑하는 과정이 필요합니다. 각 픽셀의 색상을 클래스 인덱스로 변환하는 과정이 포함되지 않으면 학습 시 오류가 발생할 수 있습니다.
둘째, 클래스 수와 클래스 이름을 정확히 정의해야 합니다. SegFormer는 설정 파일에서 `num_classes`와 `classes` 항목을 참조하여 출력을 구성하므로, 클래스 누락이나 오타가 있을 경우 출력 결과가 왜곡될 수 있습니다. 특히 다중 클래스 분할이 필요한 경우, 클래스 간 경계가 뚜렷하도록 마스크를 정교하게 구성하는 것이 성능 향상에 중요합니다.
셋째, 입력 이미지 크기와 마스크 크기가 반드시 일치해야 합니다. 일부 데이터셋에서는 이미지와 마스크의 크기가 다르게 저장된 경우가 있으며, 이 경우 학습 중 shape mismatch 오류가 발생하게 됩니다. 이를 방지하기 위해 모든 이미지와 마스크는 동일한 해상도로 리사이즈하거나 패딩 처리를 통해 정규화된 형태로 맞춰주어야 합니다.
마지막으로, 데이터 증강 전략도 데이터셋의 특성에 맞게 조정되어야 합니다. 예를 들어 도로 분할 데이터의 경우 수평 반전은 유용하지만 수직 반전은 오히려 학습을 방해할 수 있습니다. 따라서 데이터셋의 도메인을 이해하고 그에 맞는 증강 기법을 선택하는 것이 중요합니다. MMSegmentation에서는 학습 설정 파일에서 쉽게 증강 전략을 변경할 수 있으므로 실험에 따라 유동적으로 조정할 수 있습니다.
결론 – 유연한 데이터 구성으로 SegFormer 활용도 극대화
SegFormer는 정확도와 효율성 측면에서 매우 우수한 딥러닝 이미지 분할 모델이며, 다양한 형태의 데이터셋을 유연하게 수용할 수 있는 구조적 장점을 가지고 있습니다. 학습 및 검증 데이터의 자동 분할, 클래스 정의, 입력 크기 정규화 등 몇 가지 핵심 요소만 잘 관리한다면, 어떤 데이터셋이라도 효과적으로 적용할 수 있습니다.
제가 진행했던 프로젝트 중 하나에서는 공공 도로 데이터를 기반으로 한 커스텀 세그멘테이션 모델을 개발하였으며, 초기에 데이터를 수작업으로 분할하다 오류가 반복되었습니다. 이후 자동 분할 스크립트를 도입하고, SegFormer 설정 파일과 연동하여 전체 학습 파이프라인을 자동화하자 실험 시간이 절반 이상 단축되었고, 실험 간 일관성도 유지할 수 있었습니다.
이 글이 SegFormer를 활용해 다양한 데이터셋에 적용하고자 하는 분들께 실질적인 가이드가 되기를 바랍니다. 커스텀 환경에서도 충분히 높은 성능을 끌어낼 수 있도록, 데이터 구성과 자동화 전략에 조금만 더 신경을 기울여보시기 바랍니다.
댓글
댓글 쓰기