라벨링 방법
| 항목 | 내용 |
|---|---|
| 핵심 목적 | 이미지 속 객체의 위치와 종류를 바운딩 박스로 표시 |
| 대표 형식 | YOLO 형식 (txt 파일, 정규화 좌표) |
| 주요 도구 | Roboflow, CVAT, Label Studio, LabelImg |
| 자동화 동향 | SAM, LLM 기반 자동 라벨링, Active Learning |
| 철도 드론 적용 | 궤도 결함, 침목, 체결구 등 소형 객체 정밀 라벨링 필요 |
문서 탐색
라벨링이란?
라벨링(Annotation)은 AI 모델이 학습할 수 있도록 이미지 속 객체에 위치 정보(바운딩 박스) 와 종류 정보(클래스) 를 함께 표시하는 작업입니다.
드론으로 촬영한 철도 이미지에서는 다음과 같은 객체를 라벨링합니다.
- 궤도 결함 (균열, 마모, 변형)
- 침목 (목침목, 콘크리트 침목)
- 체결구 (스파이크, 클립, 볼트)
- 장애물 (낙석, 이물질)
바운딩 박스는 객체를 감싸는 직사각형 영역으로, YOLO 형식에서는 중심점 좌표와 너비·높이로 표현합니다.
YOLO 형식 좌표 설명
YOLO 형식의 라벨 파일은 이미지와 동일한 이름의 .txt 파일로 저장되며, 한 줄이 객체 하나를 의미합니다.
형식
class_id x_center y_center width height
정규화 공식
이미지 크기가 W x H 픽셀일 때, 바운딩 박스의 픽셀 좌표 (x1, y1, x2, y2)를 다음과 같이 변환합니다.
x_center = (x1 + x2) / 2 / W
y_center = (y1 + y2) / 2 / H
width = (x2 - x1) / W
height = (y2 - y1) / H
모든 값은 0.0 ~ 1.0 사이로 정규화됩니다. 이미지 크기와 무관하게 동일한 형식을 유지할 수 있어 크기가 다른 드론 이미지에도 일관성 있게 적용됩니다.
예시
이미지 크기: 1280 x 720, 체결구 1개 (x1=640, y1=288, x2=700, y2=360)
# class_id x_center y_center width height
2 0.5234 0.4500 0.0469 0.1000
라벨 파일 전체 예시 (frame_001.txt):
0 0.2500 0.3500 0.1200 0.0800
1 0.6000 0.5000 0.0800 0.0600
2 0.5234 0.4500 0.0469 0.1000
각 줄의 첫 번째 숫자가 클래스 ID이며, data.yaml 파일의 names 목록 순서와 일치해야 합니다.
주요 라벨링 도구 비교
| 도구 | 유형 | 핵심 기능 | 가격 | 추천 대상 |
|---|---|---|---|---|
| Roboflow | 웹 기반 | 자동 라벨링, 증강, 버전 관리, 팀 협업 | 무료 (1000장) / 유료 | 빠른 시작, 팀 프로젝트 |
| CVAT | 웹/로컬 | 영상 트래킹, 반자동 라벨링, 오픈소스 | 완전 무료 | 대용량, 보안 민감 환경 |
| Label Studio | 웹/로컬 | 멀티모달, ML 모델 연동, 플러그인 | 무료 / 유료(Enterprise) | 커스텀 워크플로우 |
| LabelImg | 로컬 데스크탑 | YOLO/VOC 직접 저장, 경량 | 완전 무료 | 소규모, 단독 작업 |
| Autodistill | Python 라이브러리 | Grounding DINO + SAM 자동 라벨링 | 완전 무료 | 자동화, 대규모 드론 이미지 |
2026 선택 가이드
| 사용 사례 | 추천 도구 | 이유 |
|---|---|---|
| 개인 소규모 프로젝트 | LabelImg 또는 Roboflow 무료 | 빠른 시작, 설치 간단 |
| 팀 협업 + 품질 관리 | Roboflow | 버전 관리, QA, 통계 제공 |
| 보안·폐쇄망 환경 (철도 현장) | CVAT 로컬 설치 | 인터넷 불필요, 데이터 외부 유출 없음 |
| 드론 대용량 이미지 자동화 | Autodistill | SAM 기반 자동 라벨링으로 인력 최소화 |
| 복잡한 멀티클래스 파이프라인 | Label Studio | ML 모델 연동, 커스텀 인터페이스 |
라벨링 Best Practice
일관성 규칙
작업자가 여러 명이라면 라벨링 기준서를 반드시 작성하세요.
- 바운딩 박스는 객체를 최소한으로 감싸도록 설정 (여백 2~5px 이내)
- 50% 이상 잘린 객체는 라벨링에서 제외
- 흐릿하거나 판단이 어려운 객체는 별도 클래스(
uncertain)로 분리하거나 제외 - 드론 이미지에서 고도·각도별 라벨링 기준을 통일
바운딩 박스 품질
좋은 예시: 객체를 타이트하게 감싸는 박스
나쁜 예시: 박스가 너무 크거나 객체의 일부만 포함
- IoU(교집합/합집합) 기준으로 라벨 간 겹침이 0.5 이하가 되도록 유지
- 소형 객체(체결구, 균열)는 이미지 확대 후 라벨링
- 드론 고도에 따른 객체 크기 변화를 고려해 최소 박스 크기 기준 설정
QA (품질 검수)
- 전체 라벨의 10~20% 를 무작위 샘플링하여 2차 검수
- Roboflow의 Health Check 기능으로 누락·중복 라벨 자동 감지
- 클래스 분포 시각화로 불균형 여부 확인
데이터셋 구성 팁
| 항목 | 권장 기준 | 이유 |
|---|---|---|
| 클래스당 이미지 수 | 1,500장 이상 | 일반화 성능 확보 |
| 배경 이미지 비율 | 0 ~ 10% | False Positive 억제 |
| Train / Val / Test 비율 | 70 / 20 / 10 | 표준 분할 |
| 다양한 환경 비율 | 맑음/흐림/야간 각 30% 이상 | 드론 촬영 환경 다양성 |
| 클래스 불균형 비율 | 최대 클래스 / 최소 클래스 ≤ 10 | 편향 방지 |
자동/반자동 라벨링 동향
2025~2026년 기준으로 라벨링 자동화 기술이 빠르게 발전하고 있습니다.
SAM (Segment Anything Model)
Meta의 SAM 2는 클릭 한 번으로 객체 경계를 자동 분할합니다. 바운딩 박스 라벨링 시간을 70% 이상 단축할 수 있습니다.
# Autodistill + SAM 자동 라벨링 예시
from autodistill_grounded_sam import GroundedSAM
from autodistill.detection import CaptionOntology
ontology = CaptionOntology({
"rail crack": "crack",
"rail fastener": "fastener",
"sleeper": "sleeper"
})
model = GroundedSAM(ontology=ontology)
model.label(
input_folder="./drone_images",
output_folder="./labeled_dataset"
)LLM 기반 자동 라벨링
GPT-4V, Gemini Vision 등 멀티모달 LLM을 활용해 이미지 설명을 바탕으로 라벨을 자동 생성합니다. 초기 라벨 초안 작성에 활용한 후 사람이 검수하는 방식으로 사용합니다.
Model-in-the-Loop
일부 이미지를 먼저 라벨링하고 모델을 학습한 뒤, 나머지 이미지에 모델 예측값을 초안 라벨로 사용하는 방식입니다. 반복적으로 모델 성능을 개선할 수 있습니다.
Active Learning
모델이 불확실해하는 이미지(낮은 confidence, 높은 entropy)를 우선 라벨링하는 전략입니다. 같은 라벨링 비용으로 더 높은 성능을 달성할 수 있습니다.
자동 라벨링 실전 시나리오
상황에 맞는 자동 라벨링 접근 방법을 선택합니다.
시나리오 A: 빠른 프로토타입 (1~2주)
추천 도구: Roboflow 또는 Autodistill
단계:
1. 드론 이미지 100~500장 수집
2. Roboflow 업로드 → SAM 자동 라벨링
3. 라벨 검수 (20~30% 샘플 확인)
4. YOLO 학습 (Roboflow 클라우드 또는 로컬)
5. 결과 평가 → 개선 반복
시나리오 B: 로컬 환경 + 데이터 보안
추천 도구: Grounding DINO + SAM + Label Studio
이유: 모든 처리가 로컬에서 수행, 외부 데이터 전송 없음
단계:
1. GPU 환경 설정 (CUDA, PyTorch)
2. groundingdino, sam2, label-studio 설치
3. 자동 라벨링 스크립트 실행
4. Label Studio로 검수
5. YOLO 포맷 내보내기 → 학습
시나리오 C: 최고 품질 (철도 안전 도메인)
추천: 자동 라벨링 + 전문가 검수 병행
단계:
1. 자동 라벨링으로 초안 생성
2. 철도 전문가가 전체 검수/수정
3. 검수 완료 데이터로 YOLO 학습
4. 학습 모델로 새 이미지 예측
5. 예측 결과를 전문가가 수정 (Active Learning 반복)
드론 이미지 자동 라벨링 팁
텍스트 프롬프트 설계
Grounding DINO + SAM 파이프라인 사용 시 프롬프트 품질이 결과에 큰 영향을 미칩니다.
- 영어로 작성하는 것이 Grounding DINO 성능에 유리
- 구체적일수록 좋음:
"railway track">"track","railroad tie on ballast">"tie" - 철도 전문 용어는 사전 테스트로 최적 프롬프트 탐색 필요
고해상도 이미지 처리
- SAM은 기본 1024px 기준으로 처리
- 드론 4K~8K 이미지는 타일(Tile) 분할 후 처리 권장
- 타일 크기: 640x640 또는 1280x1280, 오버랩 10~20%
sahi(Slicing Aided Hyper Inference) 라이브러리 활용 가능
검수(QA) 워크플로우
전체 이미지 → 자동 라벨링 (SAM + Grounding DINO)
↓
자동 신뢰도 점수로 정렬
↓
신뢰도 낮은 상위 10~20% → 수동 검수/수정
신뢰도 높은 80~90% → 그대로 사용
↓
YOLO 학습 → 예측 결과 검토 → 파이프라인 개선
자동 라벨링 하드웨어 요구사항
| 구성 | 최소 사양 | 권장 사양 |
|---|---|---|
| Grounding DINO + SAM 자동 라벨링 | VRAM 8GB (RTX 3070) | VRAM 16GB+ (RTX 4080/A4000) |
| YOLO nano/small 학습 | VRAM 4GB | VRAM 8GB+ |
| YOLO medium/large 학습 | VRAM 8GB | VRAM 16GB+ |
| CPU만으로 라벨링 | 가능 (1장당 30초~수 분) | 권장하지 않음 |
RTX 4060 8GB 환경에서는 Grounding DINO + SAM 실행이 가능하지만 여유롭지 않습니다. 배치 크기를 줄이거나 이미지를 순차 처리하세요.