Skip to main content

라벨링

이미지 라벨링(Labeling)은 학습 데이터에 정답(Ground Truth)을 부여하는 과정입니다. 이 문서에서는 Label Studio를 활용하여 분류, 탐지, 세그멘테이션 라벨링 워크플로우를 구축합니다.

환경 준비

1
Label Studio 설치
2
pip install label-studio
3
Label Studio 실행
4
label-studio start --port 8080
5
브라우저에서 http://localhost:8080으로 접속합니다. 최초 실행 시 계정을 생성합니다.
6
프로젝트 생성
7
  • Create Project 클릭
  • 프로젝트 이름 입력 (예: safety-helmet-detection)
  • 이미지 파일 업로드 또는 클라우드 스토리지 연결
  • 태스크에 맞는 라벨링 인터페이스 선택
  • 태스크별 라벨링 설정

    이미지 분류

    <View>
      <Image name="image" value="$image"/>
      <Choices name="label" toName="image">
        <Choice value="양품"/>
        <Choice value="불량"/>
      </Choices>
    </View>
    

    객체 탐지 (바운딩 박스)

    <View>
      <Image name="image" value="$image" zoom="true"/>
      <RectangleLabels name="label" toName="image">
        <Label value="person" background="red"/>
        <Label value="helmet" background="green"/>
        <Label value="no_helmet" background="orange"/>
      </RectangleLabels>
    </View>
    

    세그멘테이션 (다각형)

    <View>
      <Image name="image" value="$image" zoom="true"/>
      <PolygonLabels name="label" toName="image">
        <Label value="tumor" background="red"/>
        <Label value="normal" background="green"/>
      </PolygonLabels>
    </View>
    

    라벨링 워크플로우

    라벨링 가이드라인 작성 요령

    효과적인 라벨링을 위해 사전에 가이드라인을 명확히 정의해야 합니다.
    항목정의 내용예시
    클래스 정의각 클래스의 명확한 기준”안전모를 착용한 사람” vs “안전모를 들고 있는 사람”
    경계 사례모호한 상황의 판단 기준안전모가 반쯤 벗겨진 경우 → no_helmet
    바운딩 박스 규칙여백, 가림(Occlusion) 처리객체에 밀착, 가림 50% 이상은 미라벨링
    최소 크기라벨링할 최소 객체 크기20x20 픽셀 이상만 라벨링

    라벨링 결과 내보내기

    Label Studio에서 다양한 포맷으로 내보낼 수 있습니다.
    ExportCOCO 선택바운딩 박스와 세그멘테이션 어노테이션을 COCO JSON 형식으로 내보냅니다.

    라벨링 도구 비교

    도구라이선스특징추천 용도
    Label StudioApache 2.0다양한 태스크 지원, 웹 기반범용 추천
    CVATMIT영상 라벨링 강점, 팀 협업영상 프로젝트
    Roboflow상용 (무료 티어)자동 증강, 모델 학습 통합빠른 프로토타이핑
    LabelImgMIT가벼운 데스크톱 앱소규모 바운딩 박스
    소규모 프로젝트에는 Label Studio의 로컬 설치로 충분합니다. 팀 단위 대규모 라벨링에는 Label Studio Enterprise 또는 CVAT를 검토하세요.

    라벨링 품질 관리

    교차 검증 (Inter-Annotator Agreement)

    def calculate_iou(box1, box2):
        """두 바운딩 박스의 IoU를 계산합니다."""
        x1 = max(box1[0], box2[0])
        y1 = max(box1[1], box2[1])
        x2 = min(box1[2], box2[2])
        y2 = min(box1[3], box2[3])
    
        intersection = max(0, x2 - x1) * max(0, y2 - y1)
        area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
        area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
        union = area1 + area2 - intersection
    
        return intersection / union if union > 0 else 0
    
    # 두 작업자의 라벨링 일치도 확인
    iou = calculate_iou(annotator1_box, annotator2_box)
    print(f"라벨링 일치도 (IoU): {iou:.3f}")
    # IoU > 0.7이면 양호한 수준
    
    1. 사전학습 모델로 예측 후 교정: 모델의 예측 결과를 초기값으로 제공하고 사람이 수정합니다. 2) Active Learning: 모델이 불확실한 이미지만 선별하여 라벨링합니다. 3) SAM 활용: 클릭 한 번으로 세그멘테이션 마스크를 자동 생성합니다.
    명확한 가이드라인 문서를 작성하고, 파일럿 라벨링으로 품질을 검증한 뒤 본격 작업을 시작하세요. 교차 검증으로 작업자 간 일관성을 정기적으로 확인하는 것이 중요합니다.