AI와 개발을 쉽게 이해하는 실험실

비개발자도 따라오는 AI 도구, 자동화, 개발 실험 기록

개발 & 기술/컴퓨터 비전

YOLO 라벨링 입문: Roboflow와 LabelImg 사용법 정리

루민 Lumin 2026. 7. 19. 12:33
반응형

YOLO 학습 데이터 라벨링은 도구 선택과 파일 구조 이해에서 시작됩니다. Roboflow와 LabelImg로 이미지에 박스를 그리고 YOLO 포맷으로 내보내는 흐름, 폴더 구조, 자주 막히는 부분을 정리했습니다.

YOLO 라벨링 입문: Roboflow와 LabelImg 사용법 정리의 핵심 개념을 단순한 테크 일러스트로 표현한 대표 이미지

YOLO 라벨링은 이미지 속 물체 위치를 사각형으로 표시해 "이 영역이 무엇이다"라고 컴퓨터에게 알려주는 작업입니다. 이 글은 라벨링 도구 두 가지(Roboflow, LabelImg)의 사용 흐름과 YOLO가 요구하는 파일 형식, 처음 시작할 때 헤매는 지점을 순서대로 정리합니다. 초보자가 인터넷 튜토리얼만 보고 따라 하면 대개 "폴더 구조는 맞췄는데 학습이 안 된다" 또는 "박스를 그렸는데 좌표가 이상하다"에서 막힙니다. 원인을 알면 설정 한두 줄로 풀립니다.

라벨링 자체는 어렵지 않지만, YOLO 특유의 좌표 규칙과 클래스 인덱스 관리 때문에 첫 프로젝트에서 시간을 많이 씁니다. 순서대로 짚어봅니다.

YOLO 라벨링이 뭘 만드는 작업인지

YOLO 라벨링은 각 이미지마다 같은 이름의 텍스트 파일 하나를 만드는 작업입니다. 이미지가 cat_01.jpg라면 라벨은 cat_01.txt가 되고, 이 텍스트 파일 안에는 "몇 번 클래스가 이미지의 어느 위치에 있는지"가 숫자로 적힙니다.

파일 한 줄의 형식은 이렇습니다.

0 0.512 0.634 0.220 0.310

각 숫자의 의미는 다음과 같습니다.

위치 의미 값의 범위
1번째 클래스 번호 (0부터 시작) 정수
2번째 박스 중심의 x 좌표 0.0 ~ 1.0
3번째 박스 중심의 y 좌표 0.0 ~ 1.0
4번째 박스 너비 0.0 ~ 1.0
5번째 박스 높이 0.0 ~ 1.0

핵심은 좌표가 픽셀이 아니라 비율이라는 점입니다. 이미지 가로가 1000픽셀이든 4000픽셀이든, 중심이 정중앙이면 x는 0.5로 저장됩니다. 이 규칙을 모른 채 픽셀 값을 그대로 넣으면 학습이 전혀 되지 않습니다.

한 이미지에 물체가 여러 개면 줄을 여러 개 씁니다. 물체가 없는 이미지는 빈 txt 파일을 두면 됩니다 (이건 배경 학습용 힌트로 쓰입니다).

도구 선택: Roboflow와 LabelImg는 언제 쓰나

라벨링 도구는 크게 웹 기반설치형으로 나뉘고, 초보자에게는 Roboflow와 LabelImg 두 가지 조합이 무난합니다.

항목 Roboflow LabelImg
형태 웹 서비스 (브라우저에서 접속) 데스크톱 프로그램 설치
장점 팀 공유, 자동 증강, 포맷 변환 인터넷 없이 오프라인 작업
단점 무료 플랜에 용량·공개 제한 혼자 쓰는 용도, 협업 불편
추천 상황 팀 프로젝트, 여러 포맷 필요 소규모·개인 실습

Roboflow는 브라우저에서 이미지를 올리고 마우스로 박스를 그리면 알아서 YOLO 형식으로 정리해 주는 웹 서비스입니다. 라벨링 외에 이미지 크기 통일, 좌우 반전 같은 데이터 증강(원본 하나로 여러 장을 만들어 학습량을 늘리는 작업)을 자동으로 해주는 게 장점입니다.

LabelImg는 컴퓨터에 직접 설치해 쓰는 프로그램입니다. 파이썬 환경이 있어야 하지만, 한 번 설치하면 인터넷 없이도 쓸 수 있고 이미지가 외부 서버로 나가지 않아 회사 내부 데이터처럼 민감한 자료에 적합합니다.

💡 무료 플랜의 용량·공개 정책은 자주 바뀝니다. 최신 조건은 Roboflow 공식 문서(요금 페이지)에서 직접 확인하세요.

Roboflow로 라벨링하는 흐름

Roboflow의 기본 흐름은 가입 → 프로젝트 생성 → 이미지 업로드 → 박스 그리기 → 데이터셋 생성 → 다운로드 순서입니다.

가입 & 프로젝트 생성
      ↓
이미지 업로드 (드래그)
      ↓
클래스 이름 등록
      ↓
이미지마다 박스 그리기
      ↓
Train/Valid/Test 분할
      ↓
YOLO 포맷으로 내보내기

프로젝트를 새로 만들 때 "Object Detection"을 고르는 것이 첫 관문입니다. 다른 옵션(분류, 세그멘테이션)을 고르면 결과 파일 구조가 달라져 YOLO 학습에 그대로 못 씁니다.

박스를 그릴 때는 물체의 가장자리에 딱 맞게 감싸는 것이 원칙입니다. 여백을 너무 많이 남기면 모델이 배경까지 물체로 배웁니다. 반대로 물체를 잘라 먹으면 특징을 놓칩니다.

클래스 이름은 처음부터 확정해 두는 편이 좋습니다. 나중에 "cat"을 "Cat"으로 바꾸면 이전 라벨이 새 클래스로 인식되지 않을 수 있어, 통일된 소문자·단수형으로 시작하는 게 안전합니다.

내보내기 단계에서는 "YOLOv5 PyTorch"나 "YOLOv8" 같은 세부 포맷을 고릅니다. 버전이 달라도 텍스트 라벨 형식은 거의 같지만, 함께 나오는 data.yaml 파일의 경로 표기가 조금씩 다릅니다.

LabelImg로 오프라인 라벨링하기

LabelImg는 파이썬 패키지 관리 도구인 pip(파이썬 라이브러리를 설치하는 프로그램)로 설치하는 데스크톱 앱입니다. 파이썬이 이미 설치돼 있다면 명령 프롬프트나 터미널(컴퓨터에 직접 명령어를 입력하는 검은 창)에서 다음 한 줄로 설치됩니다.

pip install labelImg

이 명령은 "labelImg라는 프로그램을 내 파이썬 환경에 추가해달라"는 뜻입니다. 설치가 끝나면 같은 창에서 labelImg를 입력해 실행합니다.

실행 후 반드시 해야 할 설정이 하나 있습니다. 좌측 메뉴에서 저장 형식을 PascalVOC에서 YOLO로 바꿔야 합니다. 기본값은 XML 형식이라, 이걸 놓치면 YOLO가 못 읽는 파일이 쌓입니다.

기본 사용 순서는 다음과 같습니다.

  • "Open Dir"로 이미지 폴더 열기
  • "Change Save Dir"로 라벨 저장 폴더 지정
  • 좌측 저장 형식을 YOLO로 변경
  • W 키로 박스 그리기 시작
  • 클래스 이름 입력 후 저장(Ctrl+S)
  • D 키로 다음 이미지, A 키로 이전 이미지

단축키에 익숙해지면 작업 속도가 눈에 띄게 오릅니다. 마우스 클릭만으로 진행하는 것보다 키보드 단축키를 병행하는 편이 훨씬 효율적입니다.

LabelImg는 classes.txt 파일을 자동으로 만들어 클래스 이름을 순서대로 저장합니다. 이 순서가 곧 클래스 인덱스(0, 1, 2…)가 되므로 함부로 수정하면 이전 라벨의 의미가 어긋납니다.

YOLO 학습 폴더 구조 만들기

라벨링을 끝냈다면 YOLO가 기대하는 폴더 구조로 파일을 정리해야 합니다. 이 구조가 어긋나면 학습 스크립트가 이미지를 찾지 못합니다.

dataset/
├── images/
│   ├── train/
│   └── val/
├── labels/
│   ├── train/
│   └── val/
└── data.yaml

핵심 규칙은 이미지 파일과 같은 이름의 라벨 파일이 대응되는 위치에 있어야 한다는 점입니다. images/train/cat_01.jpg가 있으면 labels/train/cat_01.txt가 반드시 짝을 이뤄야 합니다.

data.yaml은 YOLO에게 데이터셋의 위치와 클래스 정보를 알려주는 안내문 같은 파일입니다. 대략 이런 모양입니다.

train: ./images/train
val: ./images/val
nc: 2
names: ['cat', 'dog']

nc는 클래스 개수, names는 클래스 이름 목록입니다. 순서는 라벨 파일 안 클래스 번호(0, 1, …)와 정확히 일치해야 합니다. 0번이 cat인데 yaml에서 첫 번째를 dog로 적으면, 모델은 고양이 사진을 개로 배웁니다.

Roboflow에서 내보내면 이 구조와 data.yaml이 함께 담겨 나옵니다. LabelImg만 쓴 경우엔 폴더 정리와 yaml 작성을 직접 해야 합니다.

자주 막히는 부분과 확인 순서

라벨링 후 학습이 안 되거나 결과가 이상할 때 가장 먼저 확인할 항목을 순서대로 정리했습니다.

1. 이미지와 라벨 파일 이름이 정확히 일치하는가

cat_01.jpgcat_01.txt처럼 확장자만 다르고 이름은 완전히 같아야 합니다. 대소문자도 구분하는 시스템에서는 Cat_01cat_01도 다른 파일입니다.

2. 라벨 좌표가 0~1 범위 안에 들어가는가

텍스트 편집기로 몇 개 열어봤을 때 0.512 같은 값이면 정상, 512 같은 픽셀 값이면 잘못된 형식입니다. 이 경우 도구의 저장 형식 설정을 확인해야 합니다.

3. data.yaml의 클래스 순서가 라벨 파일과 맞는가

라벨 파일에 없는 클래스 번호가 등장하거나, yaml의 nc 숫자가 실제 클래스 수보다 적으면 학습이 시작조차 안 됩니다.

4. 빈 라벨 파일과 라벨 없는 이미지를 혼동하지 않았는가

빈 txt는 "이 이미지에는 배울 물체가 없다"는 뜻이라 배경 학습에 쓰입니다. 반대로 txt 자체가 없으면 학습기가 이미지를 그냥 건너뛸 수 있습니다. 의도한 쪽이 어느 것인지 명확히 정하고 통일해야 합니다.

5. 클래스 이름을 중간에 바꾸지 않았는가

라벨링 도중 "cat"을 "cats"로 바꾸면, 이전에 작업한 파일의 클래스 인덱스가 뒤로 밀리면서 전체 데이터가 어긋납니다. 이름은 프로젝트 시작 시점에 확정하고, 정말 바꿔야 한다면 스크립트로 전체 라벨을 일괄 수정해야 합니다.

라벨링 품질을 높이는 실전 팁

라벨링은 일관성이 정확도를 결정합니다. 같은 물체를 어떤 날은 넉넉히, 어떤 날은 빡빡하게 감싸면 모델이 기준을 못 잡습니다.

  • 물체가 잘려 있을 때(예: 화면 밖으로 반쯤 나간 자동차)의 처리 규칙을 정해 둡니다 — "환경에 따라 보이면 라벨링" 같은 기준.
  • 겹친 물체는 각각 별도 박스로 표시합니다. 하나로 묶으면 모델이 두 물체를 하나로 배웁니다.
  • 애매한 경우(개인지 늑대인지 헷갈리는 사진)는 처음부터 데이터셋에서 제외하는 편이 더 낫습니다.
  • 팀 작업이면 라벨링 가이드 문서를 짧게라도 먼저 만들고, 몇 장씩 서로 교차 검수합니다.

또한 클래스 불균형을 초기에 확인해야 합니다. 예를 들어 cat이 1000장, dog가 50장이면 모델은 대부분의 입력을 cat으로 예측하는 쪽으로 치우칩니다. 도구의 통계 화면(Roboflow는 자동 제공)이나 간단한 파이썬 스크립트로 클래스별 개수를 세어 보고, 부족한 쪽은 이미지를 더 모으거나 데이터 증강으로 보충합니다.

다음에 확인하면 좋은 것

라벨링을 마쳤다면 그다음은 학습 스크립트 실행입니다. Ultralytics의 공식 문서(YOLOv8/YOLO11 계열)를 기준으로 삼아 data.yaml 경로만 넣으면 바로 학습이 시작됩니다. 학습 중 손실(loss) 값이 줄지 않거나 mAP 지표가 낮게 유지된다면, 모델이 아니라 라벨 품질을 먼저 의심하는 것이 실무의 순서입니다.

라벨링 도구는 여러 개를 다 배울 필요가 없습니다. 처음에는 하나를 골라 100~200장을 직접 그려 보는 것이 훨씬 빠르게 감을 잡는 방법입니다. 손이 좌표 규칙과 단축키에 익숙해지면, 그때 팀 협업이나 대규모 데이터에 맞는 도구로 옮겨가도 늦지 않습니다.

함께 보면 좋은 글

반응형