SegFormer 학습 데이터 준비 가이드

SegFormer를 실제 프로젝트에 적용하기 위해 처음으로 마주한 과제는 학습 데이터를 어떻게 구성할 것인가였습니다. 분할 모델의 성능은 대부분 데이터 품질과 라벨링 정확도에 크게 좌우되기 때문에, 단순히 이미지와 마스크를 모으는 것 이상으로 많은 요소를 고려해야 했습니다. 특히 다양한 해상도의 이미지와 복잡한 객체가 혼재된 환경에서 SegFormer를 학습시키기 위해선 체계적인 데이터 준비 과정이 필수였습니다. 이 글에서는 SegFormer 학습에 필요한 데이터 구성 방법, 라벨 포맷, 전처리 과정까지 전반적인 준비 가이드를 설명드리겠습니다.
SegFormer 학습을 위한 데이터셋 구성
SegFormer는 시맨틱 분할(Semantic Segmentation) 모델로, 각 픽셀이 어떤 클래스에 속하는지를 예측하는 방식입니다. 따라서 학습에는 두 가지 정보가 필요합니다. 첫째는 원본 이미지이며, 둘째는 각 이미지와 1:1로 대응되는 분할 마스크입니다. 이 마스크는 이미지와 동일한 크기의 흑백 또는 팔레트 이미지로, 각 픽셀의 값이 클래스 ID를 의미합니다.
데이터셋을 구성할 때 가장 중요한 것은 이미지와 마스크 간의 정확한 일치입니다. 크기나 비율이 다를 경우 학습 과정에서 에러가 발생할 수 있으며, 작은 오차도 모델 성능에 큰 영향을 미칠 수 있습니다. 일반적으로는 이미지와 마스크 파일명이 동일하고, 디렉터리 내에 각각 분리된 상태로 배치하는 것이 좋습니다.
클래스 수가 많을수록 라벨 간의 혼동 가능성이 높아지므로, 가능한 명확하게 클래스 정의를 해두는 것이 필요합니다. 예를 들어 road, building, tree, person, car 등 클래스별로 고유한 ID를 할당하고, 이를 학습 스크립트 또는 config 파일 내에서 명시해주어야 합니다. 특히 background 클래스의 경우 ID를 0으로 설정하는 것이 일반적이며, 이를 기준으로 나머지 클래스가 순차적으로 번호가 부여됩니다.
데이터셋이 많지 않은 경우에는 공개된 데이터셋(Cityscapes, ADE20K, Pascal VOC 등)을 활용하거나, 적은 양의 데이터라도 클래스별 균형이 맞춰지도록 구성하는 것이 바람직합니다. 특정 클래스만 과다하게 포함된 데이터셋은 편향된 모델을 만들어낼 수 있으므로, 클래스 분포를 통계적으로 점검하고 부족한 클래스에 대해 데이터를 추가 확보하거나 증강을 적용하는 방법이 유용합니다.
분할 마스크 라벨링과 전처리 전략
SegFormer 학습에 사용할 분할 마스크는 일반적인 객체 탐지에서 사용하는 바운딩 박스 형태가 아닌, 픽셀 단위의 클래스 정보가 포함되어야 합니다. 이를 위해서는 라벨링 도구를 이용하여 직접 마스크를 생성하거나, 기존의 어노테이션을 변환해주는 작업이 필요합니다.
가장 많이 사용되는 라벨링 도구로는 CVAT, LabelMe, Supervisely, Segment Anything UI 등이 있으며, 이들 툴을 통해 생성한 데이터는 PNG 형식의 마스크 이미지로 저장됩니다. 저장된 마스크 이미지는 각 픽셀의 색상이 아닌, 해당 위치의 클래스 ID를 나타내는 정수값으로 구성되어 있어야 합니다. 컬러 기반 마스크를 사용하는 경우에는 별도의 매핑 과정이 필요합니다.
이미지와 마스크의 전처리는 모델의 입력 조건에 맞게 이루어져야 합니다. SegFormer는 다양한 해상도를 지원하지만, 훈련 효율성을 위해 일반적으로 512x512 또는 1024x1024와 같은 정사각형 크기로 리사이징합니다. 이때, 이미지와 마스크는 반드시 동일한 방식으로 리사이징되어야 하며, 이미지 보간(interpolation) 방식과 마스크 보간 방식이 다르게 설정되어야 합니다. 예를 들어 이미지는 bilinear 보간, 마스크는 nearest 보간을 사용해야 라벨 값이 손상되지 않습니다.
데이터 증강(Augmentation)도 중요한 전처리 요소 중 하나입니다. 좌우 반전, 회전, 색상 변화, 크기 조절 등의 기법은 모델이 다양한 상황에 잘 대응할 수 있도록 도와줍니다. 그러나 마스크 이미지에 동일한 변형을 적용하지 않으면 학습이 무의미해지므로, 증강 라이브러리는 이미지와 마스크를 동시에 처리할 수 있는 기능이 있어야 합니다. 대표적으로 Albumentations는 강력한 증강 기능과 함께 이미지-마스크 동시 처리를 지원하므로 널리 사용됩니다.
클래스 매핑, config 설정과 데이터 검증
SegFormer를 학습시키기 위해서는 클래스 정보가 정확히 매핑되어 있어야 하며, 모델 설정 파일(config)과 일관되게 정의되어야 합니다. 일반적으로는 class_names 목록과 class_id의 순서를 명시하고, 학습 코드에서 이 정보를 불러와 학습 및 평가 지표에 활용합니다. 예를 들어, 클래스가 background, road, car, person이라면 순서에 따라 0~3번의 ID가 할당되고, 마스크 이미지에서도 해당 픽셀 값으로 표현됩니다.
클래스 매핑이 잘못되었을 경우에는 평가 지표가 비정상적으로 계산되거나, 모델이 학습되지 않는 문제가 발생할 수 있습니다. 이를 방지하기 위해 학습 전 사전 점검을 수행하는 것이 바람직합니다. 예를 들어, 무작위로 몇 개의 이미지와 마스크를 시각화하여 클래스별 색상이 정확히 대응되는지 확인하고, 통계 분석을 통해 클래스별 픽셀 분포를 파악함으로써 데이터 불균형 여부를 판단할 수 있습니다.
마지막으로, 전체 데이터셋은 학습(train), 검증(val), 테스트(test)로 구분되어야 하며, 각 세트는 가능한 클래스 분포가 유사하도록 구성하는 것이 좋습니다. 불균형한 구성은 모델 성능 평가를 왜곡할 수 있고, 특정 클래스에 대한 일반화 성능이 떨어질 수 있습니다. 이를 위해 stratified split 또는 클래스 균형 기준의 샘플링 전략을 활용할 수 있습니다.
결론 – SegFormer 성공 학습의 출발점, 데이터 준비
SegFormer는 고성능의 시맨틱 분할 모델이지만, 그 진정한 성능은 학습에 사용되는 데이터셋의 품질에 달려 있습니다. 데이터 구성, 라벨링, 전처리, 클래스 매핑까지 모든 과정이 세심하게 설계되어야만 모델이 실제 환경에서도 유효한 예측을 수행할 수 있습니다.
제가 진행했던 프로젝트에서도 초기에 라벨 포맷 오류와 클래스 매핑 실수로 인해 모델 성능이 낮았고, 이를 바로잡기까지 많은 시행착오가 있었습니다. 그러나 데이터셋을 구조화하고, 클래스 불균형을 해소하며, 정확한 전처리 과정을 거친 후에는 의미 있는 결과를 얻을 수 있었습니다.
SegFormer를 처음 접하시는 분이라면, 모델 구조만큼이나 데이터 준비가 중요하다는 점을 꼭 기억하시기 바랍니다. 본 가이드가 여러분의 프로젝트에 도움이 되기를 바랍니다.
댓글
댓글 쓰기