데이터셋 YAML 작성하기
Ultralytics가 폴더를 찾고 클래스를 이름으로 표시할 수 있도록 data.yaml을 작성하고, 경로가 어디서든 올바르게 확인되도록 설정한 뒤 yolo val로 간단히 테스트하세요.
데이터셋 YAML은 폴더와 모든 Ultralytics 명령 간의 계약입니다. 경로를 잘못 지정하면 아무것도 실행되지 않고, 클래스 순서를 잘못 지정하면 모든 작업이 실행되지만 모든 예측에 잘못된 이름이 붙으며 어디에도 경고가 표시되지 않습니다.
이 단원에서는 알약 데이터셋을 위한 data.yaml을 작성하고, 팀원의 머신에서도 작동하도록 Ultralytics가 경로를 확인하는 방식을 정확히 알아봅니다. 또한 한 줄짜리 검증 명령으로 이를 확인하고, 학습 결과가 넘어야 할 기준선도 구합니다.
실습형
파일 작성하기#

Ultralytics Platform의 데이터셋에는 자체 클래스와 분할이 있으며, data=ul://username/datasets/name 같은 URI로 학습 대상을 지정합니다. 개인 머신에서는 YAML이 이 역할을 합니다. 다음 내용을 my_dataset/data.yaml로 저장하세요:
path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test # optional held-out split
names:
0: pill| 키 | 필수 | 의미 |
|---|---|---|
path | 아니요 | 데이터셋 루트. train, val, test는 이 경로를 기준으로 합니다. 생략하면 YAML 파일이 있는 폴더를 사용합니다. |
train, val | 예 | 이미지 폴더, 이미지 경로를 나열한 .txt 파일, 또는 둘 중 하나의 목록 |
test | 아니요 | 별도로 보관한 테스트 이미지. split=test에서만 평가합니다. |
names | 예 | 클래스 인덱스 → 이름. 항목 수가 클래스 수를 결정합니다. |
download | 아니요 | 이미지가 없을 때 데이터셋을 가져오는 URL 또는 스크립트 |
train과 val은 이미지 폴더를 가리킵니다. images를 labels으로 바꾸어 레이블을 찾습니다. coco8 YAML은 최소 구성의 작동 예시이며, VOC YAML은 더 큰 구성의 예시입니다.
예제: 간단히 테스트하기#
사전 학습 모델을 사용한 검증은 전체 과정을 가장 빠르게 점검하는 방법입니다. 모든 이미지와 레이블을 읽고 문제를 보고한 뒤 지표를 계산합니다:
yolo val model=yolo26n.pt data=my_dataset/data.yamlval: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.0256 0.00251 0.001 0.0002순서대로 확인하세요:
Scanning my_dataset/labels/val: Ultralytics가 실제로 경로를 확인한 폴더입니다. 의도한 폴더인지 확인하세요.23 images, 0 backgrounds, 0 corrupt: 모든 검증 이미지에 유효한 레이블 파일이 있습니다. 의도하지 않은 배경 이미지가 있거나 파일 수가 손상된 경우 이전 단원으로 돌아가세요.399인스턴스: 레이블 파일에는 알약 399개가 있습니다.- mAP50-95가 0.0002: 오류가 아니라 정상입니다. COCO에는 알약 클래스가 없으므로 사전 학습 모델이 알약을 찾지 못합니다. 이처럼 거의 0에 가까운 점수가 기준선입니다. 사람이나 자동차처럼 클래스가 COCO에 실제로 존재한다면 같은 명령으로 유의미한 기준선을 얻을 수 있습니다.
어디서든 경로가 올바르게 확인되도록 설정하기#
"이미지를 찾을 수 없음" 오류는 대부분 경로 문제입니다. Ultralytics는 path을 다음과 같이 확인합니다:
datasets_dir은 Ultralytics 설정이며, yolo settings로 값을 출력할 수 있습니다. 설정을 변경하는 방법은 설정 가이드를 참조하세요. 기본 제공 데이터셋은 이 대체 설정에 의존합니다. coco8.yaml은 path: coco8와 download: URL을 설정하므로, 어느 폴더에서든 data=coco8.yaml이 작동합니다.
결정 규칙:
- 본인만 사용하며 항상 프로젝트 폴더에서 실행하나요? 상대 경로
path을 사용해도 됩니다. - 다른 폴더에 있는 팀원, 서버, CI 또는 노트북에서 사용하시나요? 절대 경로
path을 사용하세요. - 데이터가 다른 위치에 있고 직접 가져와야 하나요? zip URL을 포함해
download:을 추가하세요.
클래스 인덱스를 계약으로 유지하세요#
각 레이블 줄의 시작 부분에 있는 정수는 names의 인덱스입니다. Ultralytics는 범위(Label class 1 exceeds dataset class count 1)를 확인하지만 의미는 확인할 수 없습니다. 레이블링 도구에서 0: forklift, 1: person를 내보내고 YAML에 0: person, 1: forklift이라고 지정했다면 학습은 성공하고 검증 mAP도 정상으로 보이지만, 모든 예측에 잘못된 이름이 붙습니다. 레이블링 도구, 변환 스크립트, YAML, 배포 코드에서 공유하는 클래스 목록을 단일 정보 소스로 유지하세요.
이런 실수는 피하세요#
증상: 데이터셋 다운로드 디렉터리에 관한 메모와 함께 FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val'이 표시됩니다. 원인: 다른 폴더에서 실행했기 때문에 상대 경로 path이 존재하지 않았고, Ultralytics가 대신 datasets_dir를 기준으로 검색했습니다. 해결 방법: 프로젝트 폴더에서 실행하거나 path을 절대 경로로 지정하세요.
레이블을 다시 지정하지 않은 채 names의 항목을 바꾸거나 삭제하면 모든 레이블의 의미가 조용히 바뀝니다. 모델은 오류 없이 학습을 진행하고 잘못된 클래스를 예측합니다. 기존 클래스의 번호는 변경하지 말고, 새 클래스는 다음 빈 인덱스를 사용해 끝에 추가하세요.
val: [images/val_day, images/val_night]은 두 폴더를 하나의 검증 세트로 합쳐 점수 하나만 보고합니다. 낮과 밤을 따로 확인하거나, 선별한 회귀 테스트 세트를 새 프로덕션 샘플과 비교하려면 각 세트에 YAML 파일을 하나씩 두고 각각 검증하세요. 한 번만 평가하고 split=test를 사용하는 test 분할에 대해서는 데이터셋을 올바르게 분할하기에서 다룹니다.
증강 및 캐싱과 같은 학습 설정은 YAML 키가 아니라 train의 인수입니다. 모든 설정은 구성 참조에 나와 있습니다.
정답 보기
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
all 23 399 0.0256 0.00251 0.001 0.0002다른 폴더에서는 상대 경로 버전이 Dataset ... images not found 오류와 함께 실패했습니다. 해당 위치에 my_dataset이 없었고 datasets_dir 대체 경로에도 복사본이 없었기 때문입니다. 절대 경로 path을 사용하면 경로 조회 문제를 해결할 수 있습니다. 기준 mAP50-95는 약 0입니다. 사전 학습 모델에는 pill 클래스가 없습니다.