사용자 지정 데이터로 YOLOv5 학습하기#
📚 이 가이드는 YOLOv5 모델 🚀을 사용하여 자신만의 커스텀 데이터셋을 학습하는 방법을 설명합니다. 커스텀 모델 학습은 범용 객체 검출을 넘어 특정 실제 응용 프로그램에 컴퓨터 비전 솔루션을 맞춤화하는 핵심 단계입니다.
시작하기 전에#
먼저 필요한 환경이 설정되어 있는지 확인하세요. YOLOv5 리포지토리를 복제하고 requirements.txt에서 필수 종속성을 설치합니다. Python>=3.8.0 환경과 PyTorch>=1.8이 필수적입니다. 모델과 데이터셋이 로컬에 없으면 최신 YOLOv5 릴리스에서 자동으로 다운로드됩니다.
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies사용자 지정 데이터로 학습하기#
커스텀 객체 검출 모델 개발은 반복적인 프로세스입니다:
- 이미지 수집 및 구성: 특정 작업과 관련된 이미지를 수집합니다. 고품질의 다양한 데이터가 매우 중요합니다. 데이터 수집 및 주석(Data Collection and Annotation) 가이드를 참조하세요.
- 객체 라벨링: 이미지 내 관심 객체를 정확하게 주석 처리하십시오.
- 모델 학습: 레이블이 지정된 데이터를 사용하여 YOLOv5 모델을 학습시킵니다. 사전 학습된 가중치로 시작하여 전이 학습(transfer learning)을 활용하세요.
- 배포 및 예측: 새로 본 적 없는 데이터에 대한 추론(inference)에 학습된 모델을 활용합니다.
- 엣지 케이스 수집: 모델의 성능이 저조한 시나리오(엣지 케이스)를 식별하고 유사한 데이터를 데이터셋에 추가하여 견고성을 향상시킵니다. 이 주기를 반복합니다.
Ultralytics Platform은 데이터셋 관리, 모델 학습 및 배포를 포함하여 전체 머신러닝 운영(MLOps) 주기에 대한 간소화된 노코드 솔루션을 제공합니다.
Ultralytics는 다양한 사용 시나리오를 수용하기 위해 두 가지 라이선스 옵션을 제공합니다:
- AGPL-3.0 License: 이 OSI 승인 오픈소스 라이선스는 개방형 협업과 지식 공유에 열정적인 학생, 연구원, 애호가에게 이상적입니다. 파생 저작물은 동일한 라이선스에 따라 공유해야 합니다. 자세한 내용은 LICENSE 파일을 참조하세요.
- Enterprise License: 개발 및 프로덕션 용도를 위한 이 라이선스는 AGPL-3.0의 오픈소스 요구사항을 우회하여 내부 도구, 자동화된 워크플로, 프로덕션 배포를 포함한 비즈니스 제품 및 서비스에 Ultralytics 소프트웨어와 AI 모델을 원활하게 통합할 수 있도록 지원합니다. 시작하려면 Ultralytics Licensing을 통해 문의해 주세요.
Ultralytics Licensing 페이지에서 라이선스 옵션을 자세히 살펴보세요.
학습을 시작하기 전에 데이터셋 준비가 필수입니다.
데이터셋 생성#
YOLOv5 모델은 객체 클래스의 시각적 특성을 학습하기 위해 라벨링된 데이터가 필요합니다. 데이터셋을 올바르게 구성하는 것이 핵심입니다.
1.1 dataset.yaml 생성#
데이터셋 구성 파일(예: coco128.yaml)은 데이터셋의 구조, 클래스 이름, 이미지 디렉터리 경로를 개략적으로 보여줍니다. COCO128은 광범위한 COCO 데이터셋에서 처음 128개의 이미지로 구성된 소형 예제 데이터셋 역할을 합니다. 학습 파이프라인을 빠르게 테스트하고 오버fitting(과적합)과 같은 잠재적 문제를 진단하는 데 유용합니다.
dataset.yaml 파일 구조는 다음을 포함합니다:
path: 데이터셋을 포함하는 루트 디렉터리.train,val,test:path에서 학습, 검증, 테스트 세트의 이미지 경로를 나열하는 이미지 또는 텍스트 파일이 포함된 디렉터리로의 상대 경로.names: 클래스 인덱스(0부터 시작)를 해당 클래스 이름에 매핑하는 딕셔너리.
YOLOv5 리포지토리 루트에서 학습을 시작할 때 path을 절대 디렉터리(예: /home/user/datasets/coco128) 또는 ../datasets/coco128와 같은 상대 경로로 설정할 수 있습니다.
다음은 coco128.yaml의 구조입니다(GitHub에서 보기):
# Dataset root directory relative to the yolov5 directory
path: coco128
# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images
# Classes (example using 80 COCO classes)
names:
0: person
1: bicycle
2: car
# ... (remaining COCO classes)
77: teddy bear
78: hair drier
79: toothbrush1.2 자동 라벨링을 위한 모델 활용#
수동 라벨링은 일반적인 접근 방식이지만 시간이 많이 걸립니다. 파운데이션 모델은 주석을 자동화하거나 반자동화하여 데이터셋 생성을 가속화할 수 있습니다. 라벨 생성에 도움이 될 수 있는 모델의 예는 다음과 같습니다:
- Google Gemini: Gemini와 같은 대형 멀티모달 모델은 강력한 이미지 이해 능력을 갖추고 있습니다. 이미지 내의 객체를 식별하고 위치를 파악하도록 프롬프트를 입력할 수 있으며, YOLO 형식 레이블로 변환할 수 있는 바운딩 박스나 설명을 생성합니다. 제공된 튜토리얼 노트북에서 그 잠재력을 살펴보세요.
- SAM2 (Segment Anything Model 2): SAM2와 같은 세분화(segmentation) 중심의 파운데이션 모델은 높은 정밀도로 객체를 식별하고 윤곽을 그릴 수 있습니다. 주로 세분화를 위한 것이지만, 결과 마스크는 종종 객체 검출 작업에 적합한 바운딩 박스 주석으로 변환될 수 있습니다.
- YOLOWorld: 이 모델은 개방형 어휘(open-vocabulary) 검출 기능을 제공합니다. 관심 있는 객체의 텍스트 설명을 제공하면, YOLOWorld는 해당 특정 클래스에 대한 사전 학습 없이도 이미지에서 이를 찾을 수 있습니다. 이것은 초기 레이블을 생성하기 위한 시작점으로 사용될 수 있으며, 그 후에 정제될 수 있습니다.
이러한 모델을 사용하면 "사전 레이블 지정" 단계를 제공하여 필요한 수동 노력을 줄일 수 있습니다. 그러나 품질이 학습된 YOLOv5 모델의 성능에 직접적인 영향을 미치므로 정확성과 일관성을 보장하기 위해 자동으로 생성된 레이블을 검토하고 정제하는 것이 중요합니다. 레이블을 생성(그리고 잠재적으로 정제)한 후에는 YOLO 형식을 준수하는지 확인하세요: 이미지당 하나의 *.txt 파일, 각 행은 class_index x_center y_center width height (정규화된 좌표, 0부터 시작하는 클래스)으로 객체를 나타냅니다. 이미지에 관심 객체가 없는 경우 해당 *.txt 파일이 필요하지 않습니다.
YOLO 형식 *.txt 파일 사양은 다음과 같이 정확합니다:
- 객체 바운딩 박스당 하나의 행.
- 각 행에는 다음이 포함되어야 합니다:
class_index x_center y_center width height. - 좌표는 0과 1 사이의 값으로 정규화되어야 합니다. 이를 달성하려면
x_center과width의 픽셀 값을 이미지의 총 너비로 나누고,y_center와height을 이미지의 총 높이로 나눕니다. - 클래스 인덱스는 0부터 시작합니다(즉, 첫 번째 클래스는
0, 두 번째 클래스는1등으로 표시됨).

두 개의 'person' 객체(클래스 인덱스 0)와 하나의 'tie' 객체(클래스 인덱스 27)를 포함하는 위의 이미지에 해당하는 레이블 파일은 다음과 같습니다:

1.3 디렉터리 정리#
dataset 디렉터리의 구조를 아래와 같이 구성하세요. 기본적으로 YOLOv5는 dataset 디렉터리(예: /coco128)가 /yolov5 저장소 디렉터리와 인접하여 위치한 /datasets 폴더 내에 위치할 것으로 예상합니다.
YOLOv5는 이미지 경로에 있는 마지막 /images/ 인스턴스를 /labels/로 대체하여 각 이미지의 레이블을 자동으로 찾습니다. 예를 들어:
../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file권장되는 디렉터리 구조는 다음과 같습니다:
/datasets/
└── coco128/ # Dataset root
├── images/
│ ├── train2017/ # Training images
│ │ ├── 000000000009.jpg
│ │ └── ...
│ └── val2017/ # Validation images (optional if using same set for train/val)
│ └── ...
└── labels/
├── train2017/ # Training labels
│ ├── 000000000009.txt
│ └── ...
└── val2017/ # Validation labels (optional if using same set for train/val)
└── ...
모델 선택#
학습 프로세스를 시작할 사전 학습된 모델을 선택하십시오. 사전 학습된 가중치로 시작하면 처음부터 학습하는 것에 비해 학습 속도가 크게 빨라지고 성능이 향상됩니다. YOLOv5는 다양한 모델 크기를 제공하며, 각 크기는 속도와 정확도의 균형을 다르게 유지합니다. 예를 들어 YOLOv5s는 두 번째로 작고 가장 빠른 모델로, 리소스가 제한된 환경에 적합합니다. 사용 가능한 모든 모델에 대한 자세한 비교는 README 표를 참조하십시오.

학습#
train.py 스크립트를 사용하여 모델 학습을 시작하십시오. 필수 인자는 다음과 같습니다:
--img: 입력 이미지 크기(예:--img 640)를 정의합니다. 일반적으로 크기가 클수록 정확도가 높아지지만 더 많은 GPU 메모리가 필요합니다.--batch: 배치 크기(예:--batch 16)를 결정합니다. GPU가 처리할 수 있는 가장 큰 크기를 선택하세요.--epochs: 총 학습 에폭(epoch) 수(예:--epochs 100)를 지정합니다. 하나의 에폭은 전체 학습 데이터셋에 대한 전체 패스를 나타냅니다.--data:dataset.yaml파일 경로(예:--data coco128.yaml).--weights: 초기 가중치 파일 경로. 더 빠른 수렴과 우수한 결과를 위해 사전 학습된 가중치(예:--weights yolov5s.pt)를 사용하는 것이 강력히 권장됩니다. 처음부터 학습하려면(매우 큰 데이터셋과 특정 요구 사항이 없는 한 권장되지 않음),--weights '' --cfg yolov5s.yaml를 사용하세요.
사전 학습된 가중치는 로컬에서 찾을 수 없는 경우 최신 YOLOv5 릴리스에서 자동으로 다운로드됩니다.
# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt💡 각각 --cache ram 또는 --cache disk을 사용하여 데이터셋 이미지를 RAM 또는 로컬 디스크에 캐시하십시오. 이는 특히 데이터셋 I/O(입출력) 작업이 병목 현상을 일으킬 때 학습 속도를 극적으로 가속합니다. 단, 상당한 RAM 또는 디스크 공간이 필요하다는 점에 유의하십시오.
💡 항상 로컬에 저장된 데이터셋을 사용하여 학습하십시오. 네트워크 드라이브(예: Google Drive)나 원격 저장소에서 데이터에 액세스하는 것은 훨씬 느릴 수 있으며 학습 성능을 저해할 수 있습니다. 데이터셋을 로컬 SSD에 복사하는 것이 가장 좋습니다.
가중치와 로그를 포함한 모든 학습 출력은 runs/train/ 디렉터리에 저장됩니다. 각 학습 세션은새로운 하위 디렉터리(예: runs/train/exp, runs/train/exp2 등)를 생성합니다. 대화형의 직접적인 경험을 위해 공식 튜토리얼 노트북의 학습 섹션을 살펴보세요:
시각화#
YOLOv5는 학습 진행 상황 시각화, 결과 평가 및 실시간 성능 모니터링을 위한 다양한 도구와 원활하게 통합됩니다.
Comet 로깅 및 시각화#
Comet은 포괄적인 실험 추적을 위해 완전히 통합되어 있습니다. 대화형 Comet 커스텀 패널을 사용하여 메트릭을 실시간으로 시각화하고, 하이퍼파라미터를 저장하고, 데이터셋 및 모델 체크포인트를 관리하고, 모델 예측을 분석하세요.
시작하기는 매우 쉽습니다:
pip install comet_ml # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!Comet 통합 가이드에서 지원되는 기능에 대해 더 자세히 알아보세요. 공식 문서에서 Comet의 기능에 대해 자세히 알아보세요. 라이브 데모를 위해 Comet Colab 노트북을 체험해 보세요:
ClearML 로깅 및 자동화#
ClearML 통합을 통해 상세한 실험 추적, 데이터셋 버전 관리, 심지어 학습 실행의 원격 실행까지 가능합니다. 다음의 간단한 단계로 ClearML을 활성화하세요:
- 패키지 설치:
pip install clearml - ClearML 초기화: ClearML 서버(자체 호스팅 또는 무료 티어)에 연결하려면
clearml-init을 한 번 실행하십시오.
ClearML은 실험 세부 정보, 모델 업로드, 비교, 커밋되지 않은 코드 변경 사항, 설치된 패키지를 자동으로 캡처하여 완전한 재현성을 보장합니다. ClearML Data를 사용하여 원격 에이전트에서 학습 작업을 쉽게 예약하고 데이터셋 버전을 관리할 수 있습니다. 자세한 내용은 ClearML 통합 가이드를 살펴보세요.
로컬 로깅#
학습 결과는 TensorBoard를 사용하여 자동으로 기록되며 특정 실험 디렉터리 내에 CSV 파일로 저장됩니다(예: runs/train/exp). 기록되는 데이터에는 다음이 포함됩니다:
- 학습 및 검증 손실과 성능 메트릭.
- 적용된 증강(예: 모자이크)을 보여주는 샘플 이미지.
- 시각적 검사를 위한 모델 예측과 나란히 표시된 정답 라벨.
- 정밀도(Precision)-재현율(Recall) (PR) 곡선과 같은 핵심 평가 지표.
- 상세한 클래스별 성능 분석을 위한 혼동 행렬(Confusion matrices).
results.csv 파일은 매 에폭마다 업데이트되며 학습이 완료되면 results.png로 플롯됩니다. 제공된 유틸리티 함수를 사용하여 수동으로 모든 results.csv 파일을 플롯할 수도 있습니다:
from utils.plots import plot_results
# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv") # This will generate 'results.png' in the same directory
다음 단계#
학습이 성공적으로 완료되면 가장 성능이 좋은 모델 체크포인트(best.pt)가 저장되어 배포 또는 추가 정비에 사용할 준비가 됩니다. 잠재적인 다음 단계는 다음과 같습니다:
- CLI 또는 Python을 통해 학습된 모델을 사용하여 새 이미지나 비디오에 대한 추론을 실행하십시오.
- 다양한 데이터 분할(예: 홀드아웃 테스트 세트)에서 모델의 정확도와 일반화 기능을 평가하기 위해 검증을 수행하십시오.
- 다양한 플랫폼에서 최적화된 추론을 위해 모델을 ONNX, TensorFlow SavedModel 또는 TensorRT와 같은 다양한 배포 형식으로 내보내기하십시오.
- 추가적인 성능 향상을 잠재적으로 끌어내기 위해 하이퍼파라미터 튜닝(hyperparameter tuning) 기법을 적용합니다.
- 최고의 학습 결과를 위한 팁(Tips for Best Training Results)을 따르고 성능 분석을 바탕으로 더 다양하고 도전적인 데이터를 반복적으로 추가하여 모델을 계속 개선하세요.
지원되는 환경#
Ultralytics는 CUDA, cuDNN, Python, PyTorch와 같은 필수 종속성이 갖추어진 즉시 사용 가능한 환경을 제공하여 원활한 시작을 지원합니다.
- 무료 GPU 노트북:
- 클라우드 플랫폼:
- Google Cloud: GCP 퀵스타트 가이드
- Amazon AWS: AWS 퀵스타트 가이드
- Microsoft Azure: AzureML 퀵스타트 가이드
- 로컬 설정:
- Docker: Docker 퀵스타트 가이드
- Docker: Docker 퀵스타트 가이드
프로젝트 상태#
이 배지는 모든 YOLOv5 GitHub Actions 지속적 통합(CI) 테스트가 성공적으로 통과하고 있음을 나타냅니다. 이러한 엄격한 CI 테스트는 macOS, Windows 및 Ubuntu 운영 체제에서 학습, 검증, 추론, 내보내기, 벤치마크를 포함한 핵심 기능을 다룹니다. 테스트는 24시간마다 그리고 각 코드 커밋 시 자동으로 실행되어 일관된 안정성과 최적의 성능을 보장합니다.
FAQ#
사용자 지정 데이터셋으로 YOLOv5를 학습시키는 과정은 몇 가지 주요 단계로 구성됩니다:
- 데이터셋 준비: 이미지를 수집하고 주석을 달니다. 주석이 필수 YOLO 형식인지 확인합니다. 이미지와 레이블을
train/및val/(선택적으로test/) 디렉터리로 구성합니다. Google Gemini, SAM2 또는 YOLOWorld와 같은 모델을 사용하여 레이블 지정 과정을 지원하거나 자동화하는 것을 고려하세요(섹션 1.2 참조). - 환경 설정: YOLOv5 리포지토리를 복제하고
pip install -r requirements.txt을 사용하여 종속성을 설치합니다.git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt - 데이터셋 구성 생성:
dataset.yaml파일에 데이터셋 경로, 클래스 수, 클래스 이름을 정의합니다. - 학습 시작:
train.py스크립트를 실행하고,dataset.yaml경로, 원하는 사전 학습된 가중치(예:yolov5s.pt), 이미지 크기, 배치 크기, 에폭 수를 제공합니다.python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
- 데이터셋 준비: 이미지를 수집하고 주석을 달니다. 주석이 필수 YOLO 형식인지 확인합니다. 이미지와 레이블을
Ultralytics Platform은 코드를 작성할 필요 없이 전체 YOLO 모델 개발 수명 주기를 간소화하도록 설계된 포괄적인 플랫폼입니다. 주요 이점은 다음과 같습니다:
- 학습 간소화: 사전 구성된 환경과 직관적인 사용자 인터페이스를 사용하여 모델을 쉽게 학습시킬 수 있습니다.
- 통합 데이터 관리: 플랫폼 내에서 효율적으로 데이터셋을 업로드하고 버전 제어하며 관리할 수 있습니다.
- 실시간 모니터링: Comet 또는 TensorBoard와 같은 통합 도구를 사용하여 학습 진행 상황을 추적하고 성능 지표를 시각화합니다.
- 협업 기능: 공유 리소스, 프로젝트 관리 도구 및 쉬운 모델 공유를 통해 팀워크를 원활하게 합니다.
- 코드 없는 배포(No-Code Deployment): 학습된 모델을 다양한 타겟에 직접 배포할 수 있습니다.
실용적인 연습을 위해 블로그 게시물을 확인하세요: Ultralytics Platform으로 커스텀 모델을 학습시키는 방법.
수동으로 주석을 달든 자동화된 도구(1.2절에서 언급된 것과 같은)를 사용하든, 최종 레이블은 YOLOv5에서 요구하는 특정 YOLO 형식이어야 합니다:
- 각 이미지에 대해 하나의
.txt파일을 생성하십시오. 파일 이름은 이미지 파일 이름과 일치해야 합니다(예:image1.jpg은image1.txt에 해당함). 이 파일들을images/디렉터리와 평행한labels/디렉터리(예:../datasets/mydataset/labels/train/)에 배치하십시오. .txt파일 내의 각 행은 하나의 객체 주석을 나타내며 다음 형식을 따릅니다:class_index center_x center_y width height.- 좌표(
center_x,center_y,width,height)는 이미지의 치수에 상대적으로 정규화되어야 합니다(0.0에서 1.0 사이의 값). - 클래스 인덱스는 0부터 시작합니다(첫 번째 클래스는
0, 두 번째 클래스는1등).
많은 수동 주석 도구가 YOLO 형식으로의 직접 내보내기를 제공합니다. 자동화된 모델을 사용하는 경우, 해당 출력(예: 바운딩 박스 좌표, 세분화 마스크)을 이 특정 정규화된 텍스트 형식으로 변환하기 위한 스크립트나 프로세스가 필요합니다. 최종 데이터셋 구조가 가이드에 제공된 예시를 준수하는지 확인하세요. 자세한 내용은 데이터 수집 및 주석 가이드(Data Collection and Annotation Guide)를 참조하세요.
- 각 이미지에 대해 하나의
Ultralytics는 다양한 요구 사항에 맞춰 조정된 유연한 라이선스를 제공합니다:
- AGPL-3.0 License: 이 오픈소스 라이선스는 학술 연구, 개인 프로젝트, 그리고 오픈소스 준수가 허용되는 상황에 적합합니다. 수정 및 파생 저작물 또한 AGPL-3.0에 따라 오픈소스화되어야 함을 의무화합니다. AGPL-3.0 License 세부 정보를 검토하세요.
- 엔터프라이즈 라이선스(Enterprise License): 독점 제품이나 서비스에 YOLOv5를 통합하는 비즈니스를 위해 설계된 상업용 라이선스입니다. 이 라이선스는 AGPL-3.0의 오픈소스 의무를 제거하여 소스코드 비공개 배포를 허용합니다. 자세한 내용을 확인하거나 엔터프라이즈 라이선스(Enterprise License)를 요청하려면 라이선스 페이지를 방문하십시오.
프로젝트의 요구 사항 및 배포 모델에 가장 적합한 라이선스를 선택하십시오.
