Ray Tune 및 YOLO26을 사용한 효율적인 하이퍼파라미터 튜닝#
하이퍼파라미터 튜닝은 최적의 하이퍼파라미터 조합을 찾아 모델 성능을 극대화하는 데 필수적입니다. 이는 서로 다른 하이퍼파라미터로 실험을 실행하고 각 실험의 성능을 평가하는 과정을 포함합니다.
Ultralytics YOLO26 및 Ray Tune으로 튜닝 가속화#
Ultralytics YOLO26은(는) 초매개변수 튜닝을 위해 Ray Tune을 통합하여 YOLO26 모델 초매개변수 최적화를 간소화합니다. Ray Tune을 사용하면 고급 탐색 전략, 병렬 처리 및 조기 종료를 활용하여 튜닝 과정을 가속화할 수 있습니다.
Ray Tune#
Ray Tune은(는) 효율성과 유연성을 위해 설계된 초매개변수 튜닝 라이브러리입니다. 다양한 탐색 전략, 병렬 처리 및 조기 종료 전략을 지원하며, Ultralytics YOLO26을 포함한 인기 machine learning 프레임워크와 원활하게 통합됩니다.
Weights & Biases와의 통합#
또한 YOLO26은 튜닝 과정을 모니터링하기 위해 Weights & Biases과의 선택적 통합을 지원합니다.
설치#
필수 패키지를 설치하려면 다음을 실행하십시오:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandb사용법#
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 형식)입니다. 이 파일은 훈련 및 validation data 경로와 기타 데이터셋 고유의 설정들을 지정해야 합니다. | |
space | dict, optional | Ray Tune을 위한 하이퍼파라미터 탐색 공간을 정의하는 딕셔너리입니다. 각 키는 하이퍼파라미터 이름에 해당하며, 값은 튜닝 중에 탐색할 값의 범위를 지정합니다. 제공되지 않으면 YOLO26은 다양한 하이퍼파라미터가 포함된 기본 탐색 공간을 사용합니다. | |
grace_period | int, optional | Ray Tune의 ASHA scheduler에서 epochs 단위의 유예 기간입니다. 스케줄러는 이 에폭 수 이전에는 어떠한 시도(trial)도 중단하지 않으므로, 조기 종료 여부를 결정하기 전에 모델이 최소한의 학습을 거칠 수 있도록 합니다. | 10 |
gpu_per_trial | int, optional | 튜닝 중 실험당 할당할 GPU 수입니다. 이는 특히 멀티 GPU 환경에서 GPU 사용량을 관리하는 데 도움이 됩니다. 제공되지 않으면 튜너는 사용 가능한 모든 GPU를 사용합니다. | None |
iterations | int, optional | 튜닝 중에 실행할 최대 실험 횟수입니다. 이 파라미터는 테스트할 총 하이퍼파라미터 조합 수를 제어하여 튜닝 과정이 무한히 실행되지 않도록 합니다. | 10 |
search_alg | str or Searcher, optional | 사용할 Ray Tune 탐색 전략입니다. Ray searcher 객체를 직접 전달하거나 optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax, random과 같은 지원되는 문자열을 사용할 수 있습니다. 문자열 기반 검색기는 기본 태스크 메트릭과 mode="max"을(를) 자동으로 사용합니다. 제공되지 않는 경우, Ray Tune은 기본 무작위 탐색 전략인 BasicVariantGenerator으로 대체됩니다. | None |
**train_args | dict, optional | 튜닝 중 train() 메서드에 전달할 추가 인수입니다. 이러한 인수에는 훈련 에폭 수, batch size 및 기타 훈련 관련 설정이 포함될 수 있습니다. | {} |
이러한 파라미터를 사용자화하여 특정 요구 사항과 사용 가능한 컴퓨팅 리소스에 맞게 하이퍼파라미터 최적화 과정을 미세 조정할 수 있습니다.
기본 탐색 공간 설명#
다음 표에는 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) | 모델의 클래스 예측 정확도를 균형 있게 조정하는 분류 손실 구성 요소의 가중치입니다. |
dfl | tune.uniform(0.4, 12.0) | 정확한 바운딩 박스 로컬라이제이션을 강조하는 Distribution Focal Loss 구성 요소의 가중치입니다. |
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) | 4개의 이미지를 하나의 학습 샘플로 결합하는 모자이크 증강 확률입니다. |
mixup | tune.uniform(0.0, 1.0) | 두 이미지와 그 레이블을 혼합하는 Mixup 증강 확률입니다. |
cutmix | tune.uniform(0.0, 1.0) | 지역적 특징을 유지하면서 이미지 영역을 결합하는 Cutmix 증강 확률입니다. |
copy_paste | tune.uniform(0.0, 1.0) | 인스턴스 다양성을 높이기 위해 이미지 간 객체를 전송하는 Copy-paste 증강 확률입니다. |
close_mosaic | tune.randint(0, 11) | 완료 전 학습을 안정화하기 위해 마지막 N 에포크에서 모자이크를 비활성화합니다. |
사용자 지정 탐색 공간 예시#
이 예시에서는 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이(가) 제공되지 않으면, Ray Tune은 기본 무작위 탐색 전략인 BasicVariantGenerator을(를) 사용합니다.
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,
)검색기의 샘플러를 사용자화하거나 지표 및 최적화 모드를 재정의해야 하는 경우, 문자열 대신 인스턴스화된 Ray 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 세션을 재개할 수 있습니다. 재개를 위해 runs/{task} 아래에서 Ray Tune이 사용하는 디렉토리 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으로 하이퍼파라미터 튜닝 실험을 실행한 후 얻은 결과에 대해 다양한 분석을 수행할 수 있습니다. 이 가이드는 이러한 결과를 처리하고 분석하는 일반적인 워크플로우를 안내합니다.
디렉토리에서 튜닝 실험 결과 불러오기#
tuner.fit()을(를) 사용하여 튜닝 실험을 실행한 후, 디렉토리에서 결과를 로드할 수 있습니다. 이는 특히 초기 훈련 스크립트가 종료된 후에 분석을 수행하는 경우에 유용합니다.
experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")
restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()기본 실험 수준 분석#
각 시행(trial)이 어떻게 수행되었는지 개요를 확인합니다. 시행 중 오류가 발생했는지 빠르게 점검할 수 있습니다.
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["mean_accuracy"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()요약#
이 가이드에서는 Ultralytics를 사용하여 Ray Tune으로 실행된 실험 결과를 분석하는 일반적인 워크플로우를 다루었습니다. 주요 단계에는 디렉토리에서 실험 결과 로드, 기본 실험 및 시행 수준 분석 수행, 메트릭 플롯이 포함됩니다.
초매개변수 튜닝 실험을 최대한 활용하려면 Ray Tune의 Analyze Results 문서 페이지를 살펴보세요.
FAQ#
Ray Tune을 사용하여 YOLO26 모델의 하이퍼파라미터를 튜닝하려면 어떻게 해야 합니까?#
Ray Tune을 사용하여 Ultralytics YOLO26 모델의 하이퍼파라미터를 튜닝하려면 다음 단계를 따르십시오:
-
필수 패키지 설치:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging -
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 documentation을(를) 참조하세요.
Ray Tune을 사용한 YOLO26 튜닝의 기본 하이퍼파라미터는 무엇입니까?#
Ultralytics YOLO26은 Ray Tune을 사용한 튜닝에 대해 다음 기본 하이퍼파라미터를 사용합니다:
| 파라미터 | 값 범위 | 설명 |
|---|---|---|
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) | 웜업 에포크 |
box | tune.uniform(1.0, 20.0) | BBox 손실 가중치 |
cls | tune.uniform(0.1, 4.0) | 클래스 손실 가중치 |
dfl | tune.uniform(0.4, 12.0) | DFL 손실 가중치 |
hsv_h | tune.uniform(0.0, 0.1) | 색조 증강 범위 |
translate | tune.uniform(0.0, 0.9) | 변환 증강 범위 |
이러한 초매개변수는 특정 요구사항에 맞게 사용자 정의할 수 있습니다. 전체 목록과 자세한 내용은 Hyperparameter Tuning 가이드를 참조하세요.
YOLO26 모델 튜닝에 Weights & Biases를 어떻게 통합할 수 있습니까?#
Ultralytics YOLO26 튜닝 프로세스에 Weights & Biases(W&B)를 통합하려면:
-
W&B 설치:
pip install wandb -
튜닝 스크립트 수정:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo26n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
이 설정을 통해 튜닝 프로세스를 모니터링하고, 하이퍼파라미터 구성을 추적하며, W&B에서 결과를 시각화할 수 있습니다.
YOLO26으로 하이퍼파라미터 최적화를 수행할 때 왜 Ray Tune을 사용해야 합니까?#
Ray Tune은 하이퍼파라미터 최적화를 위한 수많은 이점을 제공합니다:
- 고급 탐색 전략: 효율적인 매개변수 검색을 위해 Bayesian Optimization 및 HyperOpt와 같은 알고리즘을 활용합니다.
- 병렬 처리: 여러 시행의 병렬 실행을 지원하여 튜닝 프로세스 속도를 크게 향상시킵니다.
- 조기 종료: ASHA와 같은 전략을 사용하여 성능이 낮은 시행을 조기에 종료하고 컴퓨팅 리소스를 절약합니다.
Ray Tune은 Ultralytics YOLO26과 원활하게 통합되어 초매개변수를 효과적으로 튜닝할 수 있는 사용하기 쉬운 인터페이스를 제공합니다. 시작하려면 Hyperparameter Tuning 가이드를 확인하세요.
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)이는 튜닝 과정에서 탐색할 초기 학습률 및 모멘텀과 같은 초매개변수의 범위를 사용자 정의합니다. 고급 설정에 대해서는 Custom Search Space Example 섹션을 참조하세요.