라벨링 방법

항목내용
핵심 목적이미지 속 객체의 위치와 종류를 바운딩 박스로 표시
대표 형식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 직접 저장, 경량완전 무료소규모, 단독 작업
AutodistillPython 라이브러리Grounding DINO + SAM 자동 라벨링완전 무료자동화, 대규모 드론 이미지

2026 선택 가이드

사용 사례추천 도구이유
개인 소규모 프로젝트LabelImg 또는 Roboflow 무료빠른 시작, 설치 간단
팀 협업 + 품질 관리Roboflow버전 관리, QA, 통계 제공
보안·폐쇄망 환경 (철도 현장)CVAT 로컬 설치인터넷 불필요, 데이터 외부 유출 없음
드론 대용량 이미지 자동화AutodistillSAM 기반 자동 라벨링으로 인력 최소화
복잡한 멀티클래스 파이프라인Label StudioML 모델 연동, 커스텀 인터페이스

라벨링 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 4GBVRAM 8GB+
YOLO medium/large 학습VRAM 8GBVRAM 16GB+
CPU만으로 라벨링가능 (1장당 30초~수 분)권장하지 않음

RTX 4060 8GB 환경에서는 Grounding DINO + SAM 실행이 가능하지만 여유롭지 않습니다. 배치 크기를 줄이거나 이미지를 순차 처리하세요.


문서 탐색


참고 자료