SegFormer 기반 커스텀 분할 예제

실제로 커스텀 이미지 분할 프로젝트를 진행할 때, SegFormer를 선택한 이유는 높은 정확도뿐 아니라 다양한 데이터셋과 환경에 유연하게 적용할 수 있는 구조적 장점 때문이었습니다. 하지만 처음 SegFormer를 직접 적용하는 입장에서는 모델 아키텍처보다도 데이터셋 구성, 설정 파일 수정, 학습 파이프라인 이해 등의 실무적인 부분에서 어려움을 겪는 경우가 많았습니다. 본 글에서는 커스텀 데이터셋을 기반으로 SegFormer 모델을 적용하여 학습부터 추론까지 진행하는 전 과정을 예제로 정리해 보겠습니다.
1단계 – 커스텀 데이터셋 준비 및 구성
SegFormer는 이미지와 해당 마스크 파일 쌍으로 구성된 데이터셋을 요구합니다. 마스크는 클래스 별로 픽셀 값이 지정된 정수 인덱스 형식이어야 하며, 색상 기반이 아닌 단일 채널의 8비트 PNG 포맷이 일반적입니다. 각 이미지와 마스크는 동일한 파일명을 가지며, 각각의 폴더에 분리 저장됩니다.
예를 들어 자율주행 도로 분할 데이터를 활용하는 경우, 각 이미지에는 도로, 차선, 차량, 보행자 등이 포함되어 있으며, 마스크에는 각 클래스에 대응하는 픽셀 인덱스가 지정됩니다. 클래스 수가 4개라면 0부터 3까지의 값으로 마스크가 구성되어 있어야 하며, SegFormer 설정에서 `num_classes`를 4로 명시해야 합니다.
학습과 검증 데이터는 8:2 혹은 7:3 비율로 나누어 사용하는 것이 일반적이며, 이를 자동으로 수행하는 스크립트를 통해 이미지와 마스크를 `train`과 `val` 디렉토리로 이동시킬 수 있습니다. 이 과정을 자동화하면 재사용성과 실험 반복 효율이 높아집니다.
2단계 – MMSegmentation을 통한 SegFormer 설정
SegFormer를 실전에서 사용하려면 MMSegmentation 프레임워크 기반의 설정을 이해하고 수정할 필요가 있습니다. 우선 원하는 SegFormer 백본 모델 구성을 선택한 뒤, 해당 구성 파일을 복사하여 새 프로젝트에 맞게 수정합니다. 기본 구성은 configs/segformer 폴더 아래에서 확인할 수 있으며, 예를 들어 SegFormer-B2 모델을 기반으로 설정할 수 있습니다.
설정 파일에서는 아래와 같은 항목들을 수정해야 합니다. 첫째, `dataset_type`, `data_root`, `img_dir`, `ann_dir` 등을 통해 데이터셋의 위치를 지정합니다. 둘째, `num_classes`를 커스텀 클래스 수에 맞게 수정하며, `classes`와 `palette`를 통해 클래스 이름과 마스크 색상 인덱스를 정의합니다. 셋째, `crop_size`, `img_scale`, `resize_ratio` 등의 항목을 통해 이미지 전처리 크기를 지정할 수 있습니다.
또한 학습 설정에서는 `optimizer`, `lr_config`, `runner`, `checkpoint_config`, `log_config` 등을 통해 학습률, 학습 에폭 수, 체크포인트 저장 주기 등을 조정할 수 있습니다. GPU가 제한된 환경에서는 `samples_per_gpu`와 `workers_per_gpu` 값을 적절히 조절하여 자원 소모를 최소화할 수 있습니다. 전체 설정을 마친 뒤에는 해당 구성 파일을 이용하여 학습을 실행합니다.
3단계 – 학습, 추론, 시각화까지의 전체 흐름
학습은 일반적으로 `tools/train.py` 스크립트를 이용하며, 구성 파일 경로와 로그 디렉토리를 명시하여 실행합니다. 학습이 시작되면 로그와 중간 결과가 자동으로 저장되며, `interval` 설정에 따라 중간 모델 가중치가 주기적으로 저장됩니다. 학습 후 생성된 최종 체크포인트 파일은 추론 과정에 사용됩니다.
추론은 `tools/test.py` 또는 `tools/inference.py`를 사용하여 실행하며, 결과를 시각화할 수 있도록 설정할 수 있습니다. MMSegmentation은 결과를 PNG 형식의 분할 마스크로 저장해 주며, 원하는 경우 이미지 위에 오버레이 형태로 분할 결과를 시각화할 수 있는 옵션도 제공합니다. 이를 통해 추론 성능을 직관적으로 평가하고, 클래스 별 정확도를 분석할 수 있습니다.
추론 속도를 높이거나 경량화를 위해 ONNX 변환 또는 TensorRT 최적화를 적용할 수도 있습니다. 특히 실시간 응용 시스템에서는 SegFormer-B0이나 B1과 같은 경량 모델을 활용하거나 입력 해상도를 줄이는 방식으로 연산 부담을 줄일 수 있습니다. 학습된 모델은 다양한 배포 환경에서 활용 가능하며, 웹 기반 분할 서비스, 엣지 디바이스 등에도 쉽게 적용할 수 있습니다.
결론 – SegFormer 커스텀 적용은 실전에서 강력한 도구
SegFormer는 강력한 정확도와 효율성을 동시에 갖춘 분할 모델로, 커스텀 데이터셋을 기반으로 하는 실제 프로젝트에 매우 유용하게 적용될 수 있습니다. 학습 데이터 구성, 설정 파일 수정, 학습 및 추론 흐름을 정확히 이해하고 나면, 다양한 도메인에 걸쳐 SegFormer의 성능을 실현할 수 있습니다.
제가 수행한 실전 프로젝트에서는 도로 객체 분할, 공장 내부 설비 분류, 농업 이미지 분석 등 여러 데이터셋을 직접 구성하여 SegFormer로 학습을 진행했으며, 각 프로젝트마다 설정 파일과 클래스 정의만 다르게 구성하면 쉽게 반복 적용할 수 있었습니다. 무엇보다도 자동화된 데이터 분할, 설정 파일 재활용, 추론 결과 시각화를 통해 전체 파이프라인이 체계화되면서 프로젝트 효율성이 크게 향상되었습니다.
이 글이 SegFormer를 처음 적용하거나 커스텀 분할 모델을 구축하려는 분들께 실질적인 도움을 주기를 바라며, 실제 데이터를 다루는 입장에서 꼭 필요한 실무 흐름을 제공하고자 하였습니다.
댓글
댓글 쓰기