콘텐츠로 이동
Search

Data annotation

데이터 주석은 기계가 정보를 이해할 수 있도록 데이터 세트의 관련 정보/메타데이터에 라벨을 지정하거나 태그를 지정하는 것입니다. 데이터 세트는 이미지, 오디오 파일, 비디오 영상, 텍스트 등 어떤 형식이든 될 수 있습니다.

데이터는 인공지능 발전의 3대 핵심요소 중 하나이다. 컴퓨터 인식 엔진의 개발에는 주석을 달아야 하는 대규모 훈련 데이터가 필요합니다. 이러한 데이터에는 이미지, 사운드, 텍스트 등이 포함됩니다. 이러한 유형의 데이터에 대한 주석에는 분류, 프레임, 주석, 표시 등이 포함됩니다.

Categories

라벨링 주의 사항

작업본

작업 수정본

Data_annotation_Error_Case_01.png
Data_annotation_Error_Case_01_-_Fix.png

ddrm의 플레이트 상단부는 중요하지만 대충 그어버리지 말자.

작업본

작업 수정본

Data_annotation_Error_Case_02.png
Data_annotation_Error_Case_02_-_Fix.png

ddrm의 플레이트 좌/우 엣지는 중요함.

분류

  • 자동화 라벨링(Auto-labeling)
    • 인공지능과 머신러닝 알고리즘을 이용하여 라벨링 작업을 자동화.
    • 모델이 데이터를 자동으로 라벨링하고, 사람이 검토 및 수정하는 방식.
  • 반자동 라벨링(Semi-automatic Labeling)
    • 라벨링 도구가 초기 라벨을 생성하고, 사람이 이를 검토하고 수정.
    • 효율성을 높이며 정확도를 유지하는 방법.
  • 클라우드 기반 라벨링(Cloud-based Labeling)
    • 클라우드 플랫폼을 통해 라벨링 작업을 수행.
    • 데이터 저장, 협업, 접근성이 용이.
  • 협업 라벨링(Collaborative Labeling)
    • 여러 사람이 동시에 라벨링 작업을 수행할 수 있는 협업 기능 제공.
    • 프로젝트 관리와 작업 분담이 쉬움.
  • 데이터 증강(Data Augmentation)
    • 라벨링된 데이터를 변형하여 데이터셋을 확장.
    • 모델의 성능을 높이기 위한 방법.

3D 포인트 클라우드 라벨링 방식 정리

포인트마다 class id와 instance id를 스칼라 값으로 부여하는 방식(per-point labeling)은 3D 포인트 클라우드 semantic / instance / panoptic segmentation 라벨링에서 가장 보편적인 표현 방식이다.

거의 모든 공개 데이터셋과 학습 프레임워크는 최종적으로 포인트 수와 길이가 같은 정수 배열 2개(semantic, instance) 형태로 수렴한다.

단, 공식 표준(ISO 등)은 존재하지 않으며, 저장 포맷은 데이터셋마다 다르다.

사실상 표준(de facto) 포맷

포맷 / 출처

저장 방식

주 사용 분야

ASPRS LAS 1.4

포인트 레코드의 classification 필드 (코드 정의됨: 2=Ground, 6=Building 등). instance는 표준 필드가 없어 Extra Bytes 사용

항공/지상 LiDAR, GIS 업계 (유일하게 "공식 규격"에 가까움)

SemanticKITTI .label

포인트당 uint32 하나: 하위 16bit = semantic, 상위 16bit = instance

자율주행 LiDAR, 연구 커뮤니티에서 널리 차용

nuScenes lidarseg / panoptic

포인트당 uint8 semantic, panoptic은 class * 1000 + instance

자율주행

ScanNet

메시 정점 + over-segmentation(segs.json) + 세그먼트를 객체로 묶는 aggregation.json + 라벨 매핑 .tsv

실내 RGB-D

S3DIS

방마다 인스턴스별 txt 파일 (chair_1.txt, table_2.txt …) — 파일 단위로 instance 표현

실내

Pointcept 전처리 포맷

장면별 폴더에 coord.npy, color.npy, normal.npy, segment.npy, instance.npy (무시 라벨은 -1)

PTv3 등 최신 백본 학습

ScanNet, S3DIS처럼 저장 구조가 달라 보여도 로더 단계에서는 모두 포인트별 semantic 배열 + instance 배열로 변환된다. 따라서 포인트별 스칼라 필드 방식은 원본 데이터 표현으로서 가장 범용적인 형태이다.

라벨링 도구

Segmentation 계열

  • CloudCompare — 영역 잘라내기(Segment) → 스칼라 필드 상수 채우기 → 병합. 연구실·소규모 산업 프로젝트에서 매우 흔한 워크플로
  • point_labeler — SemanticKITTI 제작에 사용된 도구
  • Semantic Segmentation Editor — Hitachi 제작
  • 상용 툴 — Segments.ai, Supervisely, BasicAI 등

위 도구들의 출력은 모두 결국 포인트별 라벨 배열이다.

Detection 계열 (참고)

  • CVAT, labelCloud 등은 주로 3D bounding box(cuboid) 라벨링용
  • detection 태스크용이며 세그멘테이션과는 다른 계열

실무 권장 사항

1. 클래스 매핑 파일 별도 관리

  • id → name 매핑과 ignore 라벨 값(보통 -1 또는 255)을 명시한 yaml/json 파일 작성
  • 데이터와 함께 버전 관리하는 것이 사실상 관례

2. instance id 규칙 정의

  • 장면(scene) 내에서 유일하게 부여
  • 배경/stuff 클래스는 -1(또는 0)로 지정

3. CloudCompare 스칼라 필드 주의점

  • 스칼라 필드는 기본적으로 float으로 저장됨
  • PLY 내보내기 시 속성 이름에 scalar_ 접두어가 붙음 (예: scalar_class)
  • 로더에서 속성 이름을 맞추고 정수로 캐스팅할 것:
# Round float scalar field and cast to int / float 스칼라 필드를 반올림 후 정수로 변환
segment = np.rint(ply["vertex"]["scalar_class"]).astype(np.int32)

4. 원본과 학습용 포맷 분리

  • 원본은 PLY(스칼라 필드)로 유지
  • 학습 시에는 프레임워크 요구 포맷(예: Pointcept의 segment.npy, instance.npy)으로 변환하는 스크립트를 별도로 둠
  • 라벨링 도구와 학습 코드가 분리되어 관리가 용이해짐

See also

Favorite site

lastmod 2026-09-30created 2026-09-30author Zer0 sitemap