Ray Tune 및 YOLO26을 활용한 효율적인 하이퍼파라미터 튜닝#
하이퍼파라미터 튜닝은 최적의 하이퍼파라미터 조합을 찾아 모델 성능을 최고 수준으로 끌어올리는 데 필수적입니다. 이를 위해 다양한 하이퍼파라미터로 트라이얼을 실행하고 각 트라이얼의 성능을 평가합니다.
Ultralytics YOLO26 및 Ray Tune으로 튜닝 가속화#
Ultralytics YOLO26은 하이퍼파라미터 튜닝에 Ray Tune을 통합하여 YOLO26 모델 하이퍼파라미터의 최적화 과정을 간소화합니다. Ray Tune을 사용하면 고급 검색 전략, 병렬 처리 및 조기 중지 기능을 활용하여 튜닝 프로세스를 가속화할 수 있습니다.
Ray Tune#
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을 사용한 하이퍼파라미터 튜닝을 위한 사용하기 쉬운 인터페이스를 제공합니다. 튜닝 프로세스를 사용자 지정할 수 있는 여러 인수를 허용합니다. 다음은 각 매개변수에 대한 자세한 설명입니다:
| 매개변수 | 유형 | 설명 | 기본값 |
|---|---|---|---|
data | str | 튜너를 실행할 데이터셋 YAML로, 학습 및 검증 데이터 경로와 기타 데이터셋별 설정을 지정합니다. 분류의 경우 데이터셋 디렉터리 또는 기본 제공 데이터셋 이름(예: imagenet10)을 사용합니다. | |
space | dict, optional | Ray Tune의 하이퍼파라미터 검색 공간을 정의하는 딕셔너리입니다. 각 키는 하이퍼파라미터 이름에 해당하며, 값은 튜닝 중 탐색할 값의 범위를 지정합니다. 제공하지 않으면 YOLO26은 다양한 하이퍼파라미터가 포함된 기본 검색 공간을 사용합니다. | |
grace_period | int, optional | Ray Tune의 ASHA 스케줄러에 적용되는 에포크 단위의 유예 기간입니다. 스케줄러는 이 에포크 수 이전에는 트라이얼을 종료하지 않으므로, 조기 중지 여부를 결정하기 전에 모델이 일정 수준 이상 학습되도록 합니다. | 10 |
gpu_per_trial | int, optional | Ray가 각 트라이얼에 할당하는 GPU 수입니다. GPU 학습을 사용하려면 이 값을 명시적으로 설정해야 하며, 생략하면 트라이얼에 GPU 리소스가 할당되지 않습니다. | None |
iterations | int, optional | 튜닝 중 실행할 최대 트라이얼 수입니다. 이 매개변수를 사용하면 테스트할 총 하이퍼파라미터 조합 수를 제어하여 튜닝 프로세스가 무한히 실행되지 않도록 할 수 있습니다. | 300 |
search_alg | str or Searcher, optional | 사용할 Ray Tune 검색 전략입니다. Ray searcher 객체를 직접 전달하거나 optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax 또는 random과 같이 지원되는 문자열을 사용할 수 있습니다. 문자열 기반 searcher는 기본 작업 메트릭과 mode="max"를 자동으로 사용합니다. 기본값은 병렬 처리를 고려한 제안 기능이 적용된 Optuna 다변량 TPE를 사용합니다. | "optuna" |
**train_args | dict, optional | 튜닝 중 train() 메서드에 전달할 추가 인수입니다. 학습 에포크 수, 배치 크기 및 기타 학습별 구성과 같은 설정을 포함할 수 있습니다. | {} |
이러한 매개변수를 사용자 지정하면 특정 요구 사항과 사용 가능한 컴퓨팅 리소스에 맞게 하이퍼파라미터 최적화 프로세스를 세밀하게 조정할 수 있습니다.
기본 검색 공간 설명#
다음 표에는 Ray Tune을 사용한 YOLO26 하이퍼파라미터 튜닝의 기본 검색 공간 매개변수가 나와 있습니다. 각 매개변수에는 tune.uniform()으로 정의된 특정 값 범위가 있습니다.
| 매개변수 | 범위 | 설명 |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | 최적화 중 스텝 크기를 제어하는 초기 학습률입니다. 값이 높으면 학습 속도가 빨라지지만 불안정성이 발생할 수 있습니다. |
lrf | tune.uniform(0.01, 1.0) | 학습 종료 시 학습률이 얼마나 감소하는지를 결정하는 최종 학습률 계수입니다. |
momentum | tune.uniform(0.7, 0.98) | 학습을 가속하고 로컬 최솟값을 극복하는 데 도움이 되는 옵티마이저의 모멘텀 계수입니다. |
weight_decay | tune.uniform(0.0, 0.001) | 큰 가중치 값에 페널티를 적용하여 과적합을 방지하는 정규화 매개변수입니다. |
warmup_epochs | tune.uniform(0.0, 5.0) | 초기 학습을 안정화하기 위해 학습률을 점진적으로 증가시키는 에포크 수입니다. |
warmup_momentum | tune.uniform(0.0, 0.95) | 워밍업 기간 동안 점진적으로 증가하는 초기 모멘텀 값입니다. |
box | tune.uniform(1.0, 20.0) | 바운딩 박스 손실 구성 요소의 가중치로, 모델의 위치 추정 정확도와 균형을 이룹니다. |
cls | tune.uniform(0.1, 4.0) | 분류 손실 구성 요소의 가중치로, 모델의 클래스 예측 정확도와 균형을 이룹니다. |
cls_pw | tune.uniform(0.0, 1.0) | 클래스 가중치 적용 강도로, 비활성화(0.0) 상태부터 완전한 역빈도 가중치 적용(1.0)까지 설정할 수 있습니다. |
dfl | tune.uniform(0.4, 12.0) | 박스 거리 회귀 구성 요소의 가중치로, 정확한 바운딩 박스 위치 추정을 강조합니다. |
hsv_h | tune.uniform(0.0, 0.1) | 모델의 일반화 성능을 돕기 위해 색상 변화를 도입하는 색조 증강 범위입니다. |
hsv_s | tune.uniform(0.0, 0.9) | 견고성을 향상하기 위해 색상 강도를 변화시키는 채도 증강 범위입니다. |
hsv_v | tune.uniform(0.0, 0.9) | 다양한 조명 조건에서 모델이 작동하도록 돕는 명도 증강 범위입니다. |
degrees | tune.uniform(0.0, 45.0) | 회전된 객체의 인식 성능을 향상하는 도 단위 회전 증강 범위입니다. |
translate | tune.uniform(0.0, 0.9) | 이미지를 가로 및 세로 방향으로 이동시키는 이동 증강 범위입니다. |
scale | tune.uniform(0.0, 0.95) | 서로 다른 거리에 있는 객체를 시뮬레이션하는 스케일 증강 범위입니다. |
shear | tune.uniform(0.0, 10.0) | 원근 이동을 시뮬레이션하는 도 단위 전단 증강 범위입니다. |
perspective | tune.uniform(0.0, 0.001) | 3D 시점 변화를 시뮬레이션하는 원근 증강 범위입니다. |
flipud | tune.uniform(0.0, 1.0) | 데이터셋 다양성을 높이는 수직 뒤집기 증강 확률입니다. |
fliplr | tune.uniform(0.0, 1.0) | 대칭적인 객체에 유용한 수평 뒤집기 증강 확률입니다. |
bgr | tune.uniform(0.0, 1.0) | 색상 불변성을 높이는 BGR 채널 교환 증강 확률입니다. |
mosaic | tune.uniform(0.0, 1.0) | 네 개의 이미지를 하나의 학습 샘플로 결합하는 Mosaic 증강 확률입니다. |
mixup | tune.uniform(0.0, 1.0) | 두 이미지와 해당 레이블을 함께 혼합하는 Mixup 증강 확률입니다. |
cutmix | tune.uniform(0.0, 1.0) | 지역 특징을 유지하면서 이미지 영역을 결합하는 Cutmix 증강 확률입니다. |
copy_paste | tune.uniform(0.0, 1.0) | flip 모드에서는 이미지에 복사되는 대상 객체 중 조건을 충족하는 객체의 비율이며, mixup 모드에서는 이를 실행할 확률이기도 합니다. |
close_mosaic | tune.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를 사용합니다.
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 객체를 전달합니다.
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을 전달하여 재개할 수 있습니다. 그렇지 않으면 마지막으로 중단된 세션이 재개됩니다. iterations 및 space를 다시 제공할 필요는 없지만, data 및 epochs을 포함한 나머지 학습 인수는 다시 제공해야 합니다.
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 모델의 하이퍼파라미터를 튜닝하려면 다음 단계를 따르세요:
-
필수 패키지 설치:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
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 튜닝 프로세스와 통합하려면 다음을 수행하세요:
-
W&B 설치:
pip install wandb wandb login yolo settings wandb=True -
튜너 실행:
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)이를 통해 튜닝 프로세스 중 탐색할 초기 학습률 및 모멘텀과 같은 하이퍼파라미터의 범위를 사용자 지정할 수 있습니다. 고급 구성은 사용자 지정 검색 공간 예제 섹션을 참조하세요.