SETR: Transformer 기반 시퀀스-투-시퀀스 접근의 세그멘테이션 구현
SETR(Sequence-to-Sequence with Transformers for Semantic Segmentation)는 2021년 CVPR에서 발표된, 전통적인 컨볼루셔널 네트워크 대신 트랜스포머를 활용한 새로운 세그멘테이션 아키텍처입니다. 이 프로젝트는 이미지 분할을 시퀀스 예측 문제로 재정의하여, 전역적 관계를 효과적으로 모델링합니다.
프로젝트 구조 개요
프로젝트의 주요 폴더 구조는 다음과 같습니다:
SETR/
├── configs/ # 다양한 실험 설정 파일 저장
│ └── SETR/ # SETR 모델 전용 설정들
│ ├── SETR_PUP.py # PUP 아키텍처 설정
│ └── SETR_MLA.py # MLA 아키텍처 설정
├── data/ # 데이터셋 링크 또는 처리 스크립트
├── mmseg/ # MMsegmentation 기반 핵심 라이브러리 포함
├── tools/ # 실행 스크립트 모음
│ ├── dist_train.sh # 다중 GPU 분산 학습 스크립트
│ ├── test.py # 모델 평가 스크립트
│ └── eval.py # 지표 계산용 툴
├── models/ # 모델 정의 파일 (예: setr_pup.py)
└── README.md # 사용법 및 구성 설명 문서
각 configs 폴더 내의 .py 파일은 모델 구조, 데이터 경로, 학습 파라미터 등을 명시하며, 실질적인 실행 환경을 결정합니다.
학습 및 평가 실행 방법
1. 학습 실행
다음과 같은 명령어를 통해 8개의 GPU를 사용해 Cityscapes 데이터셋에 대해 SETR-PUP 모델을 학습할 수 있습니다:
/tools/dist_train.sh configs/SETR/SETR_PUP_768x768_40k_cityscapes_bs_8.py 8
768x768: 입력 이미지 크기40000: 전체 반복 횟수 (iterations)bs_8: 배치 사이즈 88: 사용할 GPU 수
학습 중에는 로그와 체크포인트가 work_dirs/ 폴더에 자동으로 저장됩니다.
2. 모델 평가
학습된 모델을 평가하고 mIoU(mean Intersection over Union) 등의 지표를 산출하려면 아래 명령어를 사용합니다:
/tools/dist_test.sh configs/SETR/SETR_PUP_768x768_40k_cityscapes_bs_8.py \
work_dirs/SETR_PUP_768x768_40k_cityscapes_bs_8/iter_40000.pth \
8 --eval mIoU
이 명령어는 지정된 체크포인트를 기반으로 평가를 수행하며, 결과는 콘솔 출력과 함께 로그 파일에도 기록됩니다.
설정 파일 이해하기
설정 파일은 학습 및 평가 과정의 모든 요소를 제어합니다. 예시 파일 SETR_PUP_768x768_40k_cityscapes_bs_8.py는 다음을 포함합니다:
- 모델 유형:
PUP(Pyramid Upsampling) 아키텍처 - 입력 크기:
768×768 - 데이터 경로:
data/cityscapes/내부의images,annotations폴더 - 전처리 옵션: 정규화, 리사이징, 마스크 변환
- 옵티마이저: AdamW, 학습률 스케줄링 (CosineAnnealing)
- 배치 크기 및 반복 수:
batch_size=8,total_iters=40000 - 평가 지표:
mIoU,pixel_acc
사용자는 필요에 따라 학습률, 최적화 알고리즘, 데이터 증강 방식 등을 수정하여 실험을 진행할 수 있습니다.
결론
SETR는 트랜스포머 기반 세그멘테이션의 가능성을 보여주는 중요한 사례입니다. 이를 성공적으로 활용하려면, 구성 파일의 내용을 깊이 이해하고, 하이퍼파라미터를 적절히 조정하는 것이 필수적입니다. 프로젝트의 공식 문서와 mmseg 라이브러리의 기능을 참조하면, 확장성 있는 연구나 실용적 적용이 가능합니다.
자세한 정보 및 소스 코드는 공식 저장소에서 확인할 수 있습니다.