포스트

RailSem19 데이터셋으로 철도 객체 탐지를 바로 학습해도 될까: 라벨 2종과 클래스 불균형

RailSem19은 철도 장면 분할에는 바로 검토할 만하지만, 모든 철도 객체가 바운딩 박스로 제공되는 데이터셋은 아닙니다. 픽셀 라벨과 스플라인, 폴리곤, 박스 형태의 기하 라벨이 섞여 있으므로 먼저 만들 모델의 출력 형식을 정해야 합니다.

RailSem19 장면 예시

RailSem19는 철도 장면에 맞춘 라벨을 제공하지만 데이터셋 성능이 실제 선로 안전성을 곧바로 보증하지는 않습니다. 촬영 조건과 class 분포, 경계 오류, 다른 노선으로의 일반화를 분리해 평가해야 합니다.

8,500장에 무엇이 들어 있나

RailSem19은 철도와 트램의 운전석 시점 장면을 위한 의미론적 데이터셋입니다. 원문에 제시된 구성은 다음과 같습니다.

항목내용
발표2019년 CVPR Workshop
제작Austrian Institute of Technology(AIT)
이미지고해상도 8,500장
해상도1280×720~1920×1080
환경38개 도시, 여러 날씨, 계절, 조명
대상선로, 차량, 신호, 전환기, 플랫폼, 표지판
주석픽셀 단위 분할과 기하 객체 라벨

도로 중심 데이터셋에서 보기 어려운 철도 노반, 전환기, 선로 표지 같은 요소를 별도로 다룬다는 점이 핵심입니다. Cityscapes의 19개 클래스와 호환되는 구조에 철도 특화 클래스를 추가해 도로와 선로가 섞인 장면도 표현합니다.

RailSem19 데이터 구성

다만 “38개 도시와 다양한 조건”이 실제 배포 환경의 모든 날씨와 선로 유형을 대표한다는 뜻은 아닙니다. 안전 관련 모델이라면 데이터셋 안의 다양성과 자신이 운행할 노선의 차이를 따로 확인해야 합니다.

segmentation과 detection 라벨을 구분해야 한다

RailSem19의 주석은 크게 두 종류입니다.

첫째, dense segmentation은 각 픽셀에 의미 클래스를 붙입니다. 선로, 노반, 도로, 고가 선로, 도로에 매립된 선로처럼 장면의 영역을 나누는 모델에 맞습니다.

둘째, geometric annotation은 대상에 따라 표현 방식이 다릅니다.

대상원문 라벨수량형태
레일Rail58,322스플라인
기차, 트램Train-car1,951폴리곤
좌측 전환기Switch-left1,965바운딩 박스
전면 철도 표지Track-sign-front7,404바운딩 박스

RailSem19 라벨 구조

이 차이는 모델 선택보다 먼저 봐야 합니다. YOLO처럼 박스를 요구하는 학습 파이프라인에 스플라인과 폴리곤을 그대로 넣을 수는 없습니다. 박스로 변환한다면 작은 표지와 긴 레일의 모양 정보가 어떻게 달라지는지 확인해야 합니다. 반대로 선로의 연속적인 경로가 목적이라면 스플라인을 단순 박스로 축약하는 것이 적절하지 않을 수 있습니다.

따라서 “RailSem19으로 객체 탐지”라는 한 문장보다 다음처럼 과제를 좁히는 편이 낫습니다.

  • 픽셀 단위 선로, 노반 분리
  • 스플라인 기반 레일 위치 추정
  • 폴리곤 기반 철도 차량 영역 인식
  • 바운딩 박스 기반 전환기, 표지 검출

클래스 비율은 정확도보다 먼저 확인한다

원문에 소개된 dense label 통계는 클래스마다 크게 다릅니다.

클래스평균 픽셀 비율프레임 포함 비율
Road5.2%48.1%
Rail-track5.9%86.2%
Trackbed10.3%87.6%
Rail-raised3.4%87.2%
Rail-embedded1.5%14.6%

Rail-embedded는 프레임의 14.6%에만 나오고 평균 픽셀 비율도 1.5%입니다. 전체 픽셀 정확도가 높아도 이런 드문 클래스를 잘 찾는지는 별개입니다. 학습, 검증 분할에서 프레임 포함 비율이 유지되는지, 클래스별 지표를 따로 보는지 확인해야 합니다.

반대로 Trackbed처럼 많은 프레임과 넓은 픽셀 면적을 차지하는 클래스는 손실과 전체 지표에 더 큰 영향을 줄 수 있습니다. 단순 무작위 분할만으로 도시, 계절, 조명이 양쪽에 비슷하게 섞이면 새로운 환경에서의 성능을 과대평가할 수도 있으므로, 배포 목적에 맞는 분할 기준을 세워야 합니다.

철도 인식 모델의 활용 구조

어떤 연구에는 맞고 무엇은 추가로 필요할까

RailSem19만으로 바로 시작하기 좋은 과제는 철도 장면의 semantic segmentation과 제공된 기하 라벨 대상의 위치 추정입니다. 도로와 철도가 만나는 트램 환경을 Cityscapes 계열 클래스와 함께 연구하려는 경우에도 구조적 장점이 있습니다.

하지만 다음 주장은 구분해야 합니다.

  • 고해상도 영상이 있다는 사실이 실시간 처리 속도를 보장하지는 않습니다.
  • 의미 라벨이 있다는 사실이 장애물의 거리나 움직임 정보를 제공한다는 뜻은 아닙니다.
  • 카메라 데이터로 학습한 모델이 라이다, 레이더 융합 모델이 되는 것은 아닙니다.
  • 한 데이터셋의 정확도가 철도 운행에 필요한 안전성을 입증하지는 않습니다.

실행 순서는 간단합니다. 먼저 필요한 출력이 픽셀, 스플라인, 폴리곤, 박스 중 무엇인지 정하고 해당 주석 수를 확인합니다. 다음으로 클래스별 프레임 비율을 유지한 분할을 만들고, 전체 평균뿐 아니라 드문 철도 클래스의 성능을 따로 측정합니다. 마지막으로 실제 운행 환경의 날씨, 조명, 도시 구조와 데이터셋의 차이를 별도 검증 데이터로 확인해야 합니다.

RailSem19의 가치는 “철도용 이미지가 있다”는 데서 끝나지 않습니다. 철도 장면을 픽셀 영역과 기하 객체로 나눠 제공하기 때문에, 연구 질문과 라벨 형식을 제대로 맞출 때 의미 있는 출발점이 됩니다.

Class 분포를 먼저 읽어야 하는 이유

철도 영상에서는 선로, 하늘, 식생처럼 넓은 영역이 많은 pixel을 차지하고 신호기, 표지, 사람처럼 중요한 객체는 작게 나타날 수 있습니다. 전체 pixel accuracy만 보면 큰 class를 잘 맞힌 모델이 높게 평가되고 작은 안전 관련 객체의 누락이 가려집니다. class별 IoU와 작은 객체 recall을 함께 보는 이유입니다.

라벨에는 경계가 모호한 영역도 있습니다. 먼 거리의 rail과 ballast, 가려진 표지, motion blur가 있는 frame은 사람 annotator 사이에서도 차이가 날 수 있습니다. 모델 오류를 분석할 때 원본과 mask를 확대해 라벨 자체의 불확실성과 예측 실패를 구분해야 합니다.

Split 누수를 어떻게 피할까

연속 영상의 이웃 frame을 무작위로 train과 validation에 나누면 거의 같은 장면이 양쪽에 들어갈 수 있습니다. 높은 점수는 새 환경 일반화보다 장면 기억을 반영할 수 있습니다. 주행 sequence나 촬영 구간 단위로 split하고 가능하면 다른 날씨, 노선, camera를 test에 남기는 편이 좋습니다.

augmentation도 실제 변화와 맞아야 합니다. 밝기, 안개, 비, 작은 blur는 현실 조건을 흉내 낼 수 있지만 좌우 반전이 신호 배치나 선로 방향 규칙을 깨뜨리는지는 확인해야 합니다. class 색상 palette와 ignore index가 loader에서 정확히 보존되는지도 첫 batch 시각화로 점검합니다.

실제 적용 전 Failure Set을 만든다

터널 입출구의 급격한 밝기 변화, 비, 눈, 역광, 곡선 선로, 공사 구간, 작은 신호기와 선로 위 사람을 별도 집합으로 둡니다. mIoU 외에 critical class의 false negative, 경계 거리, frame 간 깜빡임을 기록합니다. 한 frame의 segmentation이 좋아도 시간에 따라 label이 흔들리면 제어 시스템에는 불안정한 입력이 됩니다.

RailSem19로 pretraining하거나 비교하는 것은 유용하지만 실제 노선 데이터의 사람 검토를 대체하지 않습니다. 센서와 camera 위치가 바뀌면 재평가하고, 낮은 confidence에서 속도를 줄이거나 다른 sensor로 확인하는 안전층이 필요합니다. 데이터셋은 모델 개발의 기준점이지 운행 승인 절차가 아닙니다.

원문과 버전 확인

함께 읽으면 이해가 이어지는 글

자주 묻는 질문

RailSem19의 전체 pixel accuracy만 보면 되나요?

아닙니다. 넓은 배경 class가 점수를 지배할 수 있으므로 class별 IoU와 작은 신호, 사람의 recall을 함께 봐야 합니다.

Frame을 무작위로 train과 test에 나눠도 되나요?

연속 영상의 이웃 frame 누수가 생길 수 있습니다. sequence, 구간 단위로 분리하고 다른 날씨나 노선을 test에 남기는 편이 좋습니다.

높은 mIoU면 실제 철도에 바로 쓸 수 있나요?

그렇지 않습니다. 실제 camera와 노선에서 critical class 누락, 시간 깜빡임, 악천후 실패를 검증하고 별도 안전층을 둬야 합니다.

THE END / OPSOAI

여기까지 읽었습니다

핵심 장면을 한 번 더 떠올려 보세요. 이해가 남았다면 이 책은 제 역할을 다했습니다.

다른 책 고르기
표지 1

키와 좌우 스와이프를 지원합니다. 읽던 페이지는 이 기기에 저장됩니다.

CONTENTS

이 책의 목차

    10개 장 15 분읽는 시간