Ultralytics YOLO27:

Ray Tune 및 YOLO26을 활용한 효율적인 하이퍼파라미터 튜닝#

하이퍼파라미터 튜닝은 최적의 하이퍼파라미터 조합을 찾아 모델 성능을 최고 수준으로 끌어올리는 데 필수적입니다. 이를 위해 다양한 하이퍼파라미터로 트라이얼을 실행하고 각 트라이얼의 성능을 평가합니다.

Ultralytics YOLO26 및 Ray Tune으로 튜닝 가속화#

Ultralytics YOLO26은 하이퍼파라미터 튜닝에 Ray Tune을 통합하여 YOLO26 모델 하이퍼파라미터의 최적화 과정을 간소화합니다. Ray Tune을 사용하면 고급 검색 전략, 병렬 처리 및 조기 중지 기능을 활용하여 튜닝 프로세스를 가속화할 수 있습니다.

Ray Tune#

Ray Tune hyperparameter optimization workflow

Ray Tune은 효율성과 유연성을 위해 설계된 하이퍼파라미터 튜닝 라이브러리입니다. 다양한 검색 전략, 병렬 처리 및 조기 중지 전략을 지원하며, Ultralytics YOLO26을 비롯한 인기 있는 머신 러닝 프레임워크와 원활하게 통합됩니다.

Weights & Biases와의 통합#

YOLO26은 튜닝 프로세스를 모니터링하기 위해 Weights & Biases와 선택적으로 통합할 수도 있습니다.

설치#

필요한 패키지를 설치하려면 다음을 실행합니다:

설치
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna

# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True

사용법#

사용법
from ultralytics import YOLO

# Load a YOLO26n model
model = YOLO("yolo26n.pt")

# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

tune() 메서드 매개변수#

YOLO26의 tune() 메서드는 Ray Tune을 사용한 하이퍼파라미터 튜닝을 위한 사용하기 쉬운 인터페이스를 제공합니다. 튜닝 프로세스를 사용자 지정할 수 있는 여러 인수를 허용합니다. 다음은 각 매개변수에 대한 자세한 설명입니다:

매개변수유형설명기본값
datastr튜너를 실행할 데이터셋 YAML로, 학습 및 검증 데이터 경로와 기타 데이터셋별 설정을 지정합니다. 분류의 경우 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름(예: imagenet10)을 사용합니다.
spacedict, optionalRay Tune의 하이퍼파라미터 검색 공간을 정의하는 딕셔너리입니다. 각 키는 하이퍼파라미터 이름에 해당하며, 값은 튜닝 중 탐색할 값의 범위를 지정합니다. 제공하지 않으면 YOLO26은 다양한 하이퍼파라미터가 포함된 기본 검색 공간을 사용합니다.
grace_periodint, optionalRay Tune의 ASHA 스케줄러에 적용되는 에포크 단위의 유예 기간입니다. 스케줄러는 이 에포크 수 이전에는 트라이얼을 종료하지 않으므로, 조기 중지 여부를 결정하기 전에 모델이 일정 수준 이상 학습되도록 합니다.10
gpu_per_trialint, optionalRay가 각 트라이얼에 할당하는 GPU 수입니다. GPU 학습을 사용하려면 이 값을 명시적으로 설정해야 하며, 생략하면 트라이얼에 GPU 리소스가 할당되지 않습니다.None
iterationsint, optional튜닝 중 실행할 최대 트라이얼 수입니다. 이 매개변수를 사용하면 테스트할 총 하이퍼파라미터 조합 수를 제어하여 튜닝 프로세스가 무한히 실행되지 않도록 할 수 있습니다.300
search_algstr or Searcher, optional사용할 Ray Tune 검색 전략입니다. Ray searcher 객체를 직접 전달하거나 optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax 또는 random과 같이 지원되는 문자열을 사용할 수 있습니다. 문자열 기반 searcher는 기본 작업 메트릭과 mode="max"를 자동으로 사용합니다. 기본값은 병렬 처리를 고려한 제안 기능이 적용된 Optuna 다변량 TPE를 사용합니다."optuna"
**train_argsdict, optional튜닝 중 train() 메서드에 전달할 추가 인수입니다. 학습 에포크 수, 배치 크기 및 기타 학습별 구성과 같은 설정을 포함할 수 있습니다.{}

이러한 매개변수를 사용자 지정하면 특정 요구 사항과 사용 가능한 컴퓨팅 리소스에 맞게 하이퍼파라미터 최적화 프로세스를 세밀하게 조정할 수 있습니다.

기본 검색 공간 설명#

다음 표에는 Ray Tune을 사용한 YOLO26 하이퍼파라미터 튜닝의 기본 검색 공간 매개변수가 나와 있습니다. 각 매개변수에는 tune.uniform()으로 정의된 특정 값 범위가 있습니다.

매개변수범위설명
lr0tune.uniform(1e-5, 1e-2)최적화 중 스텝 크기를 제어하는 초기 학습률입니다. 값이 높으면 학습 속도가 빨라지지만 불안정성이 발생할 수 있습니다.
lrftune.uniform(0.01, 1.0)학습 종료 시 학습률이 얼마나 감소하는지를 결정하는 최종 학습률 계수입니다.
momentumtune.uniform(0.7, 0.98)학습을 가속하고 로컬 최솟값을 극복하는 데 도움이 되는 옵티마이저의 모멘텀 계수입니다.
weight_decaytune.uniform(0.0, 0.001)큰 가중치 값에 페널티를 적용하여 과적합을 방지하는 정규화 매개변수입니다.
warmup_epochstune.uniform(0.0, 5.0)초기 학습을 안정화하기 위해 학습률을 점진적으로 증가시키는 에포크 수입니다.
warmup_momentumtune.uniform(0.0, 0.95)워밍업 기간 동안 점진적으로 증가하는 초기 모멘텀 값입니다.
boxtune.uniform(1.0, 20.0)바운딩 박스 손실 구성 요소의 가중치로, 모델의 위치 추정 정확도와 균형을 이룹니다.
clstune.uniform(0.1, 4.0)분류 손실 구성 요소의 가중치로, 모델의 클래스 예측 정확도와 균형을 이룹니다.
cls_pwtune.uniform(0.0, 1.0)클래스 가중치 적용 강도로, 비활성화(0.0) 상태부터 완전한 역빈도 가중치 적용(1.0)까지 설정할 수 있습니다.
dfltune.uniform(0.4, 12.0)박스 거리 회귀 구성 요소의 가중치로, 정확한 바운딩 박스 위치 추정을 강조합니다.
hsv_htune.uniform(0.0, 0.1)모델의 일반화 성능을 돕기 위해 색상 변화를 도입하는 색조 증강 범위입니다.
hsv_stune.uniform(0.0, 0.9)견고성을 향상하기 위해 색상 강도를 변화시키는 채도 증강 범위입니다.
hsv_vtune.uniform(0.0, 0.9)다양한 조명 조건에서 모델이 작동하도록 돕는 명도 증강 범위입니다.
degreestune.uniform(0.0, 45.0)회전된 객체의 인식 성능을 향상하는 도 단위 회전 증강 범위입니다.
translatetune.uniform(0.0, 0.9)이미지를 가로 및 세로 방향으로 이동시키는 이동 증강 범위입니다.
scaletune.uniform(0.0, 0.95)서로 다른 거리에 있는 객체를 시뮬레이션하는 스케일 증강 범위입니다.
sheartune.uniform(0.0, 10.0)원근 이동을 시뮬레이션하는 도 단위 전단 증강 범위입니다.
perspectivetune.uniform(0.0, 0.001)3D 시점 변화를 시뮬레이션하는 원근 증강 범위입니다.
flipudtune.uniform(0.0, 1.0)데이터셋 다양성을 높이는 수직 뒤집기 증강 확률입니다.
fliplrtune.uniform(0.0, 1.0)대칭적인 객체에 유용한 수평 뒤집기 증강 확률입니다.
bgrtune.uniform(0.0, 1.0)색상 불변성을 높이는 BGR 채널 교환 증강 확률입니다.
mosaictune.uniform(0.0, 1.0)네 개의 이미지를 하나의 학습 샘플로 결합하는 Mosaic 증강 확률입니다.
mixuptune.uniform(0.0, 1.0)두 이미지와 해당 레이블을 함께 혼합하는 Mixup 증강 확률입니다.
cutmixtune.uniform(0.0, 1.0)지역 특징을 유지하면서 이미지 영역을 결합하는 Cutmix 증강 확률입니다.
copy_pastetune.uniform(0.0, 1.0)flip 모드에서는 이미지에 복사되는 대상 객체 중 조건을 충족하는 객체의 비율이며, mixup 모드에서는 이를 실행할 확률이기도 합니다.
close_mosaictune.randint(0, 11)완료 전 학습을 안정화하기 위해 마지막 N개 에포크에서 Mosaic을 비활성화합니다.

사용자 지정 검색 공간 예제#

이 예제에서는 Ray Tune과 YOLO26을 사용한 하이퍼파라미터 튜닝에 사용자 지정 검색 공간을 사용하는 방법을 보여줍니다. 사용자 지정 검색 공간을 지정하면 관심 있는 특정 하이퍼파라미터에 튜닝 프로세스를 집중할 수 있습니다.

사용법
from ray import tune

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-2)},
    epochs=50,
    use_ray=True,
)

위 코드 스니펫에서는 "yolo26n.pt" 사전 학습 가중치를 사용하여 YOLO 모델을 생성합니다. 그런 다음 "coco8.yaml"로 데이터셋 구성을 지정하여 tune() 메서드를 호출합니다. 키가 "lr0"이고 값이 tune.uniform(1e-5, 1e-2)인 딕셔너리를 사용하여 초기 학습률 lr0에 대한 사용자 지정 검색 공간을 제공합니다. 마지막으로 에포크 수와 같은 추가 학습 인수를 epochs=50으로 tune 메서드에 직접 전달합니다.

검색 알고리즘 예제#

이름으로 Ray Tune 검색 전략을 선택할 수 있습니다. 문자열 기반 검색 알고리즘의 경우 Ultralytics가 현재 작업의 기본 최적화 메트릭과 mode="max"을 자동으로 사용합니다. search_alg이 제공되지 않으면 Ultralytics는 병렬 처리를 고려한 제안 기능이 적용된 Optuna 다변량 TPE를 사용합니다.

문자열 `search_alg`를 `model.tune()`과 함께 사용
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

searcher의 sampler를 사용자 지정하거나 메트릭 및 최적화 모드를 재정의해야 하는 경우 문자열 대신 인스턴스화된 Ray Tune searcher 객체를 전달합니다.

`OptunaSearch` 객체를 `model.tune()`과 함께 사용
from ray.tune.search.optuna import OptunaSearch

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Define a searcher
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

Ray Tune으로 중단된 하이퍼파라미터 튜닝 세션 재개#

resume=True을 전달하여 중단된 Ray Tune 세션을 재개할 수 있습니다. 선택적으로 Ray Tune이 runs/{task} 아래에서 사용하는 디렉터리 name을 전달하여 재개할 수 있습니다. 그렇지 않으면 마지막으로 중단된 세션이 재개됩니다. iterationsspace를 다시 제공할 필요는 없지만, dataepochs을 포함한 나머지 학습 인수는 다시 제공해야 합니다.

`resume=True`와 `model.tune()` 사용
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)

Ray Tune 결과 처리#

Ray Tune으로 하이퍼파라미터 튜닝 실험을 실행한 후에는 얻은 결과를 다양한 방식으로 분석할 수 있습니다. 이 가이드에서는 이러한 결과를 처리하고 분석하는 일반적인 워크플로를 안내합니다.

디렉터리에서 Tune 실험 결과 로드#

model.tune(use_ray=True)은(는) Ray ResultGrid을(를) 반환하고 실험을 runs/{task}/tune 아래에 저장하거나 사용자가 전달한 name 아래에 저장합니다. 원래 스크립트가 종료된 후 해당 결과를 로드하려면 세션을 재개하여 저장된 시도를 복원하고 동일한 ResultGrid을(를) 반환합니다.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)

기본 실험 수준 분석#

트라이얼의 성능에 대한 개요를 확인합니다. 트라이얼 중 오류가 있었는지 빠르게 확인할 수 있습니다.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

기본 트라이얼 수준 분석#

개별 트라이얼의 하이퍼파라미터 구성과 마지막으로 보고된 메트릭에 액세스합니다.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

트라이얼에서 보고된 메트릭 전체 기록 플로팅#

각 트라이얼에서 보고된 메트릭의 기록을 플로팅하여 시간에 따라 메트릭이 어떻게 변화했는지 확인할 수 있습니다.

import matplotlib.pyplot as plt

for i, result in enumerate(result_grid):
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["metrics/mAP50-95(B)"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()

요약#

이 가이드에서는 Ultralytics를 사용하여 Ray Tune으로 실행한 실험 결과를 분석하는 일반적인 워크플로를 살펴보았습니다. 주요 단계는 디렉터리에서 실험 결과를 로드하고, 기본적인 실험 수준 및 트라이얼 수준 분석을 수행하며, 메트릭을 플로팅하는 것입니다.

하이퍼파라미터 튜닝 실험을 최대한 활용하려면 Ray Tune의 결과 분석 문서 페이지를 확인해 보세요.

FAQ#

  • Ray Tune을 사용하여 Ultralytics YOLO26 모델의 하이퍼파라미터를 튜닝하려면 다음 단계를 따르세요:

    1. 필수 패키지 설치:

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. YOLO26 모델을 로드하고 튜닝 시작:

      from ultralytics import YOLO
      
      # Load a YOLO26 model
      model = YOLO("yolo26n.pt")
      
      # Start tuning with the COCO8 dataset
      result_grid = model.tune(data="coco8.yaml", use_ray=True)

    이 기능은 Ray Tune의 고급 검색 전략과 병렬 처리를 활용하여 모델의 하이퍼파라미터를 효율적으로 최적화합니다. 자세한 내용은 Ray Tune 문서를 확인하세요.

  • Ultralytics YOLO26은 Ray Tune을 사용한 튜닝에 다음과 같은 기본 하이퍼파라미터를 사용합니다:

    매개변수값 범위설명
    lr0tune.uniform(1e-5, 1e-2)초기 학습률
    lrftune.uniform(0.01, 1.0)최종 학습률 계수
    momentumtune.uniform(0.7, 0.98)모멘텀
    weight_decaytune.uniform(0.0, 0.001)가중치 감쇠
    warmup_epochstune.uniform(0.0, 5.0)워밍업 에포크
    boxtune.uniform(1.0, 20.0)박스 손실 가중치
    clstune.uniform(0.1, 4.0)클래스 손실 가중치
    cls_pwtune.uniform(0.0, 1.0)클래스 가중치 적용 강도
    dfltune.uniform(0.4, 12.0)박스 거리 손실 가중치
    hsv_htune.uniform(0.0, 0.1)색조 증강 범위
    translatetune.uniform(0.0, 0.9)이동 증강 범위

    이러한 하이퍼파라미터는 특정 요구 사항에 맞게 사용자 지정할 수 있습니다. 전체 목록과 자세한 내용은 하이퍼파라미터 튜닝 가이드를 참조하세요.

  • Weights & Biases (W&B)를 Ultralytics YOLO26 튜닝 프로세스와 통합하려면 다음을 수행하세요:

    1. W&B 설치:

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. 튜너 실행:

      from ultralytics import YOLO
      
      # Load YOLO model
      model = YOLO("yolo26n.pt")
      
      # Each Ray trial creates its own W&B run in this project
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)

    이 설정을 사용하면 튜닝 프로세스를 모니터링하고, 하이퍼파라미터 구성을 추적하며, W&B에서 결과를 시각화할 수 있습니다.

  • Ray Tune은 하이퍼파라미터 최적화에 다음과 같은 다양한 이점을 제공합니다:

    • 고급 검색 전략: 효율적인 파라미터 검색을 위해 베이지안 최적화 및 HyperOpt와 같은 알고리즘을 활용합니다.
    • 병렬 처리: 여러 트라이얼을 병렬로 실행하여 튜닝 프로세스의 속도를 크게 높입니다.
    • 조기 중지: ASHA와 같은 전략을 사용하여 성능이 낮은 트라이얼을 조기에 종료하고 컴퓨팅 리소스를 절약합니다.

    Ray Tune은 Ultralytics YOLO26과 원활하게 통합되어 하이퍼파라미터를 효과적으로 튜닝할 수 있는 사용하기 쉬운 인터페이스를 제공합니다. 시작하려면 하이퍼파라미터 튜닝 가이드를 확인하세요.

  • Ray Tune을 사용한 YOLO26 하이퍼파라미터 튜닝의 사용자 지정 검색 공간을 정의하려면 다음을 수행하세요:

    from ray import tune
    
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)}
    result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

    이를 통해 튜닝 프로세스 중 탐색할 초기 학습률 및 모멘텀과 같은 하이퍼파라미터의 범위를 사용자 지정할 수 있습니다. 고급 구성은 사용자 지정 검색 공간 예제 섹션을 참조하세요.

댓글