콘텐츠로 건너뛰기

사용자 지정 데이터로 YOLOv5 학습

이 가이드에서는 사용자 지정 데이터 집합을 사용하여 사용자 지정 데이터 집합을 훈련하는 방법을 설명합니다. YOLOv5 모델을 사용하여 나만의 맞춤형 데이터 세트를 훈련하는 방법을 설명합니다 🚀. 사용자 지정 모델을 훈련하는 것은 일반적인 객체 감지를 넘어 특정 실제 애플리케이션에 맞게 컴퓨터 비전 솔루션을 조정하는 기본 단계입니다.

시작하기 전에

먼저 필요한 환경이 설정되어 있는지 확인합니다. YOLOv5 리포지토리를 복제하고 다음에서 필요한 종속성을 설치합니다. requirements.txt. A Python.8.0 환경과 함께 PyTorch8 는 필수입니다. 모델과 데이터 세트는 최신 YOLOv5 자동으로 다운로드됩니다. 릴리스 로컬에서 찾을 수 없는 경우.

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies

사용자 지정 데이터에 대한 교육

데이터 수집, 레이블 지정, 학습, 배포 및 에지 사례 수집을 보여주는 Ultralytics 활성 학습 루프 다이어그램

사용자 지정 객체 감지 모델을 개발하는 것은 반복적인 프로세스입니다:

  1. 이미지 수집 및 정리: 특정 업무와 관련된 이미지를 수집하세요. 고품질의 다양한 데이터가 중요합니다. 데이터 수집 및 주석 달기 가이드를 참조하세요.
  2. 개체에 라벨을 붙입니다: 이미지 내에서 관심 있는 객체에 정확하게 주석을 달 수 있습니다.
  3. 모델 훈련하기: 레이블이 지정된 데이터를 사용하여 YOLOv5 모델을 훈련하세요. 사전 훈련된 가중치로 시작하여 전이 학습을 활용하세요.
  4. 배포 및 예측: 학습된 모델을 활용하여 보이지 않는 새로운 데이터에 대한 추론을 수행합니다.
  5. 엣지 케이스 수집: 모델이 제대로 작동하지 않는 시나리오(엣지 케이스)를 식별하고 유사한 데이터를 데이터 세트에 추가하여 견고성을 개선합니다. 이 과정을 반복합니다.

데이터 세트 관리, 모델 학습 및 배포를 포함한 전체 머신 러닝 운영(MLOps) 주기를 위한 간소화된 노코드 솔루션을 제공합니다.

라이선스

Ultralytics 다양한 사용 시나리오를 수용할 수 있도록 두 가지 라이선스 옵션을 제공합니다:

  • AGPL-3.0 라이선스: 이 OSI 승인 오픈 소스 라이선스는 개방형 협업과 지식 공유에 열정적인 학생, 연구원 및 애호가에게 이상적입니다. 파생된 저작물은 동일한 라이선스에 따라 공유해야 합니다. 자세한 내용은 라이선스 파일을 참조하세요.
  • 엔터프라이즈 라이선스: 상업용 애플리케이션을 위해 설계된 이 라이선스는 AGPL-3.0 오픈 소스 규정 없이도 Ultralytics 소프트웨어와 AI 모델을 상업용 제품 및 서비스에 원활하게 통합할 수 있도록 허용합니다. 프로젝트에 상업적 배포가 필요한 경우, 엔터프라이즈 라이선스를 요청하세요.

라이선스 옵션에 대한 자세한 내용은 Ultralytics 라이선스 페이지에서 확인하세요.

교육을 시작하기 전에 데이터 세트 준비는 필수입니다.

1. 데이터 집합 만들기

YOLOv5 모델은 객체 클래스의 시각적 특성을 학습하기 위해 레이블이 지정된 데이터가 필요합니다. 데이터 집합을 올바르게 구성하는 것이 핵심입니다.

1.1 만들기 dataset.yaml

데이터 세트 구성 파일(예:, coco128.yaml)는 데이터 세트의 구조, 클래스 이름 및 이미지 디렉터리 경로에 대한 개요를 설명합니다. COCO128 는 방대한 데이터 세트에서 처음 128개의 이미지로 구성된 작은 예제 데이터 세트 역할을 합니다. COCO 데이터 세트. 교육 파이프라인을 빠르게 테스트하고 다음과 같은 잠재적인 문제를 진단하는 데 유용합니다. 오버피팅.

그리고 dataset.yaml 파일 구조를 포함합니다:

  • path: 데이터 집합이 포함된 루트 디렉터리입니다.
  • train, val, test: 다음에서 상대 경로 path 를 트레이닝, 유효성 검사 및 테스트 세트의 이미지 경로가 나열된 이미지 또는 텍스트 파일이 포함된 디렉터리로 이동합니다.
  • names: 클래스 인덱스(0부터 시작)를 해당 클래스 이름에 매핑하는 딕셔너리입니다.

아래는 다음과 같은 구조입니다. coco128.yaml (깃허브에서 보기):

# Dataset root directory relative to the yolov5 directory
path: ../datasets/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: toothbrush

1.2 자동화된 라벨 제작을 위한 모델 활용하기

도구를 사용해 수동으로 라벨을 붙이는 것이 일반적인 접근 방식이지만, 이 과정은 시간이 많이 소요될 수 있습니다. 최근 기초 모델의 발전으로 주석 프로세스를 자동화하거나 반자동화할 수 있는 가능성이 생겨 데이터 세트 생성 속도가 크게 빨라졌습니다. 다음은 라벨 생성에 도움이 될 수 있는 몇 가지 모델의 예입니다:

  • Google 제미니: Gemini와 같은 대형 멀티모달 모델은 강력한 이미지 이해 기능을 갖추고 있습니다. 이미지 내에서 개체를 식별하고 위치를 파악하여 경계 상자나 설명을 생성하고 이를 YOLO 형식의 레이블로 변환할 수 있습니다. 제공된 튜토리얼 노트에서 그 잠재력을 살펴보세요.
  • SAM2 (세그먼트 애니씽 모델 2): SAM2 같이 세분화에 초점을 맞춘 기초 모델은 객체를 매우 정밀하게 식별하고 묘사할 수 있습니다. 주로 세분화를 위한 것이지만, 결과 마스크는 종종 객체 감지 작업에 적합한 경계 상자 주석으로 변환될 수 있습니다.
  • 욜로월드: 이 모델은 개방형 어휘 감지 기능을 제공합니다. 관심 있는 객체에 대한 텍스트 설명을 제공하면 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등).

두 사람과 넥타이에 주석이 달린 이미지 예시

위 이미지에 해당하는 레이블 파일로, 두 개의 '사람' 객체(클래스 인덱스 0)와 하나의 '동점' 객체(클래스 인덱스 27)는 다음과 같이 표시됩니다:

주석이 달린 이미지의 YOLO 형식 라벨 파일 콘텐츠 예시

1.3 디렉토리 정리

구조화 데이터 세트 디렉토리에 저장합니다. 기본적으로 YOLOv5 데이터 세트 디렉터리(예:, /coco128)를 /datasets 폴더 위치 에 인접한/yolov5 리포지토리 디렉토리에 저장합니다.

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 데이터 세트 디렉터리 구조를 보여주는 다이어그램

2. 모델 선택

사전 학습된 모델을 선택하여 학습 프로세스를 시작합니다. 사전 학습된 가중치로 시작하면 처음부터 학습할 때보다 학습 속도가 크게 빨라지고 성능이 향상됩니다. YOLOv5 다양한 모델 크기를 제공하며, 각 모델마다 속도와 정확도의 균형을 다르게 맞춥니다. 예를 들어, YOLOv5s는 두 번째로 작고 빠른 모델로 리소스가 제한된 환경에 적합합니다. 사용 가능한 모든 모델에 대한 자세한 비교는 README 표를 참조하세요.

크기, 속도, 정확도를 보여주는 YOLOv5 모델 비교 차트

3. 기차

시작 모델 교육 를 사용하여 train.py 스크립트. 필수 인수는 다음과 같습니다:

  • --img: 입력을 정의합니다. 이미지 크기 (예 --img 640). 일반적으로 크기가 클수록 정확도는 향상되지만 더 많은 GPU 메모리가 필요합니다.
  • --batch: 결정 배치 크기 (예 --batch 16). GPU 처리할 수 있는 가장 큰 크기를 선택합니다.
  • --epochs: 총 교육 횟수를 지정합니다. epochs (예 --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 드라이브) 또는 원격 저장소의 데이터에 액세스하면 속도가 상당히 느려지고 훈련 성능이 저하될 수 있습니다. 데이터 세트를 로컬 SSD에 복사하는 것이 가장 좋습니다.

웨이트 및 로그를 포함한 모든 트레이닝 출력은 다음과 같이 저장됩니다. runs/train/ 디렉터리를 만듭니다. 각 교육 세션은 새 하위 디렉터리(예:, runs/train/exp, runs/train/exp2등). 대화형 실습 경험을 원하시면 공식 튜토리얼 노트북의 교육 섹션을 살펴보세요: 콜랩에서 열기 캐글에서 열기

4. 시각화

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 Notebook의 라이브 데모를 사용해 보세요: 콜랩에서 열기

YOLOv5 교육 지표 및 시각화를 보여주는 Comet UI

ClearML 로깅 및 자동화 🌟 신규

ClearML 통합을 통해 상세한 실험 추적, 데이터 세트 버전 관리, 트레이닝 실행의 원격 실행까지 가능합니다. 다음의 간단한 단계를 통해 ClearML 활성화하세요:

  • 패키지를 설치합니다: pip install clearml
  • ClearML 초기화합니다: 실행 clearml-init 를 한 번만 클릭하면 ClearML 서버(자체 호스팅 또는 무료 티어).

ClearML 실험 세부 정보, 모델 업로드, 비교, 커밋되지 않은 코드 변경 사항 및 설치된 패키지를 자동으로 캡처하여 완벽한 재현성을 보장합니다. 원격 에이전트에 대한 교육 작업을 쉽게 예약하고 ClearML 데이터를 사용하여 데이터 세트 버전을 관리할 수 있습니다. 자세한 내용은 ClearML 통합 가이드를 참조하세요.

YOLOv5 교육 실행에 대한 차트 및 로그를 보여주는 ClearML 실험 관리 UI

로컬 로깅

교육 결과는 다음을 사용하여 자동으로 기록됩니다. 텐서보드 로 저장하고 CSV 파일을 특정 실험 디렉터리 내(예 runs/train/exp). 기록된 데이터에는 다음이 포함됩니다:

  • 교육 및 검증 손실 및 성능 지표.
  • 적용된 증강 기능(모자이크 등)을 보여주는 샘플 이미지입니다.
  • 시각적 검사를 위해 모델 예측과 함께 실측 데이터 레이블을 제공합니다.
  • 정밀도-회상도 (PR) 곡선과 같은 주요 평가 지표.
  • 자세한 클래스별 성능 분석을 위한 혼동 행렬.

차트 및 이미지 모자이크를 포함한 로컬 로깅 결과의 예( YOLOv5 교육)

그리고 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

mAP, 정확도, 리콜, 에포크별 손실과 같은 트레이닝 메트릭을 보여주는 예시 결과.png 플롯

5. 다음 단계

교육이 성공적으로 완료되면 가장 성과가 좋은 모델 체크포인트(best.pt)를 저장하고 배포하거나 더 다듬을 준비가 되었습니다. 잠재적인 다음 단계는 다음과 같습니다:

  • 학습된 모델을 사용하여 새로운 이미지 또는 비디오에 대해 추론을 실행합니다. CLI 또는 Python.
  • 유효성 검사를 수행하여 다양한 데이터 분할(예: 보류된 테스트 세트)에서 모델의 정확도 및 일반화 기능을 평가합니다.
  • 모델을 다음과 같은 다양한 배포 형식으로 내보내기 ONNX, TensorFlow SavedModel또는 TensorRT 를 사용하여 다양한 플랫폼에서 추론을 최적화할 수 있습니다.
  • 하이퍼파라미터 튜닝 기술을 사용하여 잠재적으로 추가적인 성능 향상을 이끌어낼 수 있습니다.
  • 최상의 훈련 결과를 위한 팁을 따르고 성능 분석을 기반으로 더 다양하고 도전적인 데이터를 반복적으로 추가하여 모델을 계속 개선하세요.

지원 환경

Ultralytics 다음과 같은 필수 종속성을 갖춘 즉시 사용 가능한 환경을 제공합니다. CUDA, cuDNN, PythonPyTorch를 사용하여 원활하게 시작할 수 있습니다.

프로젝트 상태

YOLOv5 지속적 통합 상태 배지

이 배지는 모든 YOLOv5 GitHub Actions 지속적 통합(CI) 테스트를 성공적으로 통과했음을 나타냅니다. 이러한 엄격한 CI 테스트는 macOS, Windows 및 Ubuntu 운영 체제 전반에서 교육, 검증, 추론, 내보내기벤치마크를 포함한 핵심 기능을 다룹니다. 테스트는 24시간마다 그리고 각 코드 커밋 시 자동으로 실행되어 일관된 안정성과 최적의 성능을 보장합니다.

자주 묻는 질문

자주 묻는 질문

사용자 지정 데이터 집합에서 YOLOv5 을 어떻게 학습하나요?

사용자 지정 데이터 세트에 대한 YOLOv5 학습에는 몇 가지 주요 단계가 포함됩니다:

  1. 데이터 집합 준비: 이미지를 수집하고 주석을 달기. 주석이 필수 항목에 있는지 확인합니다. YOLO 형식. 이미지와 레이블을 다음과 같이 구성합니다. train/ 그리고 val/ (그리고 선택적으로 test/) 디렉토리에 저장합니다. 다음과 같은 모델을 사용하는 것이 좋습니다. Google 제미니 자리, SAM2또는 YOLOWorld 를 사용하여 라벨링 프로세스를 지원하거나 자동화할 수 있습니다(섹션 1.2 참조).
  2. 환경 설정: 다음을 사용하여 YOLOv5 리포지토리를 복제하고 종속 요소를 설치합니다. pip install -r requirements.txt.
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
    
  3. 데이터 세트 구성 만들기: 데이터 집합 경로, 클래스 수 및 클래스 이름을 정의합니다. dataset.yaml 파일을 만듭니다.
  4. 교육 시작: 실행 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 HUB를 사용해야 하는 이유는 무엇인가요?

Ultralytics 허브는 코드를 작성할 필요 없이 전체 YOLO 모델 개발 라이프사이클을 간소화하도록 설계된 종합 플랫폼입니다. 주요 이점은 다음과 같습니다:

  • 간소화된 교육: 사전 구성된 환경과 직관적인 사용자 인터페이스를 사용하여 모델을 쉽게 훈련할 수 있습니다.
  • 통합 데이터 관리: 플랫폼 내에서 데이터 세트를 효율적으로 업로드, 버전 관리 및 관리하세요.
  • 실시간 모니터링: 다음과 같은 통합 도구를 사용하여 교육 진행 상황을 추적하고 성과 지표를 시각화하세요. Comet 또는 텐서보드와 같은 통합 도구를 사용하여 교육 진행 상황을 추적하고 시각화하세요.
  • 협업 기능: 공유 리소스, 프로젝트 관리 도구, 손쉬운 모델 공유를 통해 팀워크를 촉진합니다.
  • 코드 없는 배포: 학습된 모델을 다양한 대상에 직접 배포할 수 있습니다.

실용적인 안내는 블로그 게시물을 참조하세요: Ultralytics HUB로 사용자 지정 모델을 훈련하는 방법.

주석이 달린 데이터를 YOLOv5 형식으로 변환하려면 어떻게 해야 하나요?

수동으로 주석을 달든 자동화된 도구(1.2절에서 언급한 것과 같은)를 사용하든, 최종 라벨은 YOLOv5 요구하는 특정 YOLO 형식으로 작성해야 합니다:

  • 하나 만들기 .txt 파일을 추가합니다. 파일명은 이미지 파일명과 일치해야 합니다(예:, image1.jpg 에 해당합니다. image1.txt). 이 파일을 labels/ 디렉토리와 평행한 images/ 디렉토리(예:, ../datasets/mydataset/labels/train/).
  • 내의 각 줄 .txt 파일은 하나의 객체 주석을 나타내며 형식을 따릅니다: class_index center_x center_y width height.
  • 좌표(center_x, center_y, width, height)는 다음과 같아야 합니다. 정규화 (0.0에서 1.0 사이의 값)을 이미지의 크기에 비례하여 설정합니다.
  • 클래스 인덱스는 다음과 같습니다. 제로 기반 (첫 번째 클래스는 0두 번째는 1등).

많은 수동 주석 도구는 YOLO 형식으로 직접 내보내기를 제공합니다. 자동화된 모델을 사용하는 경우, 출력(예: 경계 상자 좌표, 분할 마스크)을 이 특정 정규화된 텍스트 형식으로 변환하는 스크립트나 프로세스가 필요합니다. 최종 데이터 세트 구조가 가이드에 제공된 예제를 준수하는지 확인하세요. 자세한 내용은 데이터 수집 및 어노테이션 가이드를 참조하세요.

상업용 애플리케이션에서 YOLOv5 을 사용하기 위한 라이선스 옵션은 무엇인가요?

Ultralytics 다양한 요구 사항에 맞춘 유연한 라이선싱을 제공합니다:

  • AGPL-3.0 라이선스: 이 오픈소스 라이선스는 학술 연구, 개인 프로젝트 및 오픈소스 준수가 허용되는 상황에 적합합니다. 이 라이선스는 수정 및 파생 저작물도 AGPL-3.0 따라 오픈소스로 제공하도록 규정하고 있습니다. AGPL-3.0 라이선스 세부사항을 검토하세요.
  • 기업용 라이선스: 기업용 라이선스: 독점 제품 또는 서비스에 YOLOv5 통합하는 기업을 위해 설계된 상업용 라이선스입니다. 이 라이선스는 AGPL-3.0 오픈 소스 의무를 제거하여 비공개 소스 배포를 허용합니다. 자세한 내용을 알아보거나 엔터프라이즈 라이선스를 요청하려면 라이선스 페이지를 방문하세요.

프로젝트의 요구 사항 및 배포 모델에 가장 적합한 라이선스를 선택하세요.



📅1 년 전 생성됨 ✏️ 1개월 전 업데이트됨

댓글