Ray Tune 및 YOLO11을 사용한 효율적인 하이퍼파라미터 튜닝
하이퍼파라미터 튜닝은 최적의 하이퍼파라미터 세트를 찾아 모델 성능을 극대화하는 데 매우 중요합니다. 여기에는 다양한 하이퍼파라미터로 실험을 실행하고 각 실험의 성능을 평가하는 과정이 포함됩니다.
Ultralytics YOLO11 및 Ray Tune을 사용한 튜닝 가속화
Ultralytics YOLO11은(는) 하이퍼파라미터 튜닝을 위해 Ray Tune을 통합하여 YOLO11 모델 하이퍼파라미터의 최적화를 간소화합니다. Ray Tune을 사용하면 고급 검색 전략, 병렬 처리 및 조기 중지를 활용하여 튜닝 프로세스를 가속화할 수 있습니다.
Ray Tune
Ray Tune은 효율성과 유연성을 위해 설계된 하이퍼파라미터 튜닝 라이브러리입니다. 다양한 검색 전략, 병렬 처리 및 조기 중단 전략을 지원하며 Ultralytics YOLO11을 포함한 널리 사용되는 머신 러닝 프레임워크와 원활하게 통합됩니다.
Weights & Biases 연동
YOLO11은 또한 튜닝 프로세스 모니터링을 위해 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 YOLO11n model
model = YOLO("yolo11n.pt")
# Start tuning hyperparameters for YOLO11n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)
tune()
메서드 매개변수
에 지정되어 있습니다. tune()
YOLO11의 메서드는 Ray Tune을 사용하여 하이퍼파라미터 튜닝을 위한 사용하기 쉬운 인터페이스를 제공합니다. 튜닝 프로세스를 사용자 정의할 수 있는 여러 인수를 허용합니다. 다음은 각 매개변수에 대한 자세한 설명입니다.
파라미터 | 유형 | 설명 | 기본값 |
---|---|---|---|
data |
str |
튜너를 실행할 데이터 세트 구성 파일(YAML 형식)입니다. 이 파일은 훈련 및 유효성 검사 데이터 경로와 기타 데이터 세트별 설정을 지정해야 합니다. | |
space |
dict, optional |
Ray Tune의 하이퍼파라미터 검색 공간을 정의하는 사전입니다. 각 키는 하이퍼파라미터 이름에 해당하고 값은 튜닝 중에 탐색할 값의 범위를 지정합니다. 제공되지 않은 경우 YOLO11은 다양한 하이퍼파라미터가 있는 기본 검색 공간을 사용합니다. | |
grace_period |
int, optional |
Ray Tune의 ASHA 스케줄러에서 epoch에 대한 유예 기간입니다. 스케줄러는 조기 중단 결정을 내리기 전에 모델이 최소한의 훈련을 받을 수 있도록 이 epoch 수 이전에는 어떤 평가판도 종료하지 않습니다. | 10 |
gpu_per_trial |
int, optional |
튜닝 중에 평가판당 할당할 GPU 수입니다. 이는 특히 다중 GPU 환경에서 GPU 사용량을 관리하는 데 도움이 됩니다. 제공되지 않으면 튜너는 사용 가능한 모든 GPU를 사용합니다. | None |
iterations |
int, optional |
튜닝 중에 실행할 최대 시험 횟수입니다. 이 매개변수는 테스트된 하이퍼파라미터 조합의 총 수를 제어하여 튜닝 프로세스가 무기한 실행되지 않도록 합니다. | 10 |
**train_args |
dict, optional |
다음에 전달할 추가 인자: train() 메서드 중에 튜닝합니다. 이러한 인수는 학습 epoch 수와 같은 설정을 포함할 수 있습니다. 배치 크기, 기타 학습 관련 구성. |
{} |
이러한 파라미터를 사용자 정의하면 특정 요구 사항 및 사용 가능한 컴퓨팅 리소스에 맞게 하이퍼파라미터 최적화 프로세스를 미세 조정할 수 있습니다.
기본 검색 공간 설명
다음 표에는 Ray Tune을 사용한 YOLO11의 하이퍼파라미터 튜닝을 위한 기본 검색 공간 파라미터가 나열되어 있습니다. 각 파라미터는 다음으로 정의된 특정 값 범위를 갖습니다. tune.uniform()
.
파라미터 | 범위 | 설명 |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
최적화 중 단계 크기를 제어하는 초기 학습률입니다. 값이 클수록 훈련 속도가 빨라지지만 불안정해질 수 있습니다. |
lrf |
tune.uniform(0.01, 1.0) |
학습 종료 시 학습률이 감소하는 정도를 결정하는 최종 학습률 요소입니다. |
momentum |
tune.uniform(0.6, 0.98) |
학습을 가속화하고 로컬 최소값을 극복하는 데 도움이 되는 옵티마이저의 모멘텀 요소입니다. |
weight_decay |
tune.uniform(0.0, 0.001) |
가중치가 큰 값에 페널티를 주어 과적합을 방지하는 정규화 파라미터입니다. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
초기 학습을 안정화하기 위해 점진적으로 학습률을 높이는 epoch 수입니다. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
웜업 기간 동안 점진적으로 증가하는 초기 모멘텀 값입니다. |
box |
tune.uniform(0.02, 0.2) |
모델의 지역화 정확도 균형을 맞추는 경계 상자 손실 구성 요소에 대한 가중치입니다. |
cls |
tune.uniform(0.2, 4.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.9) |
서로 다른 거리에서 객체를 시뮬레이션하는 스케일링 증대 범위입니다. |
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) |
수평 뒤집기 증강 확률, 대칭 객체에 유용합니다. |
mosaic |
tune.uniform(0.0, 1.0) |
네 개의 이미지를 하나의 학습 샘플로 결합하는 모자이크 증강 확률입니다. |
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 증강 확률입니다. |
맞춤형 검색 공간 예시
이 예제에서는 Ray Tune 및 YOLO11을 사용하여 하이퍼파라미터 튜닝을 위한 사용자 정의 검색 공간을 사용하는 방법을 보여줍니다. 사용자 정의 검색 공간을 제공하면 관심 있는 특정 하이퍼파라미터에 튜닝 프로세스를 집중할 수 있습니다.
사용법
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-1)},
epochs=50,
use_ray=True,
)
위의 코드 스니펫에서는 "yolo11n.pt" 사전 훈련된 가중치로 YOLO 모델을 만듭니다. 그런 다음, tune()
"coco8.yaml"로 데이터 세트 구성을 지정하는 메서드입니다. 초기 학습률에 대한 사용자 정의 검색 공간을 제공합니다. lr0
"lr0" 키와 값을 가진 사전을 사용 tune.uniform(1e-5, 1e-1)
. 마지막으로, 에포크 수와 같은 추가 훈련 인수를 tune 메서드에 직접 전달합니다. epochs=50
.
Ray Tune을 사용하여 중단된 하이퍼파라미터 튜닝 세션 재개
다음을 전달하여 중단된 Ray Tune 세션을 재개할 수 있습니다. resume=True
선택적으로 디렉토리를 전달할 수 있습니다. name
Ray Tune에서 사용 runs/{task}
재개합니다. 그렇지 않으면 마지막으로 중단된 세션이 재개됩니다. 다음을 제공할 필요가 없습니다. iterations
및 space
다시 시도하되, 다음을 포함하여 나머지 학습 인수를 다시 제공해야 합니다. data
및 epochs
.
사용: resume=True
와 함께 model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.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 실험 결과 로드 중
튜닝 실험을 실행한 후 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()
기본 실험 수준 분석
평가판이 어떻게 수행되었는지에 대한 개요를 확인하세요. 평가판 중에 오류가 있었는지 빠르게 확인할 수 있습니다.
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의 결과 분석 문서 페이지를 통해 하이퍼파라미터 튜닝 실험을 최대한 활용하는 방법을 알아보십시오.
FAQ
Ray Tune을 사용하여 YOLO11 모델의 하이퍼파라미터를 어떻게 조정하나요?
Ray Tune을 사용하여 Ultralytics YOLO11 모델의 하이퍼파라미터를 조정하려면 다음 단계를 따르십시오.
-
필요한 패키지를 설치합니다:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
YOLO11 모델을 로드하고 튜닝을 시작합니다:
from ultralytics import YOLO # Load a YOLO11 model model = YOLO("yolo11n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
이는 Ray Tune의 고급 검색 전략과 병렬 처리를 활용하여 모델의 하이퍼파라미터를 효율적으로 최적화합니다. 자세한 내용은 Ray Tune 설명서를 확인하세요.
Ray Tune을 사용한 YOLO11 튜닝을 위한 기본 하이퍼파라미터는 무엇인가요?
Ultralytics YOLO11은 Ray Tune을 사용한 튜닝을 위해 다음과 같은 기본 하이퍼파라미터를 사용합니다.
파라미터 | 값 범위 | 설명 |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
초기 학습률 |
lrf |
tune.uniform(0.01, 1.0) |
최종 학습률 요소 |
momentum |
tune.uniform(0.6, 0.98) |
모멘텀 |
weight_decay |
tune.uniform(0.0, 0.001) |
가중치 감쇠 |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Warmup epochs |
box |
tune.uniform(0.02, 0.2) |
Box 손실 가중치 |
cls |
tune.uniform(0.2, 4.0) |
클래스 손실 가중치 |
hsv_h |
tune.uniform(0.0, 0.1) |
색조 증가 범위 |
translate |
tune.uniform(0.0, 0.9) |
변환 증강 범위 |
이러한 하이퍼파라미터는 특정 요구 사항에 맞게 사용자 정의할 수 있습니다. 전체 목록 및 자세한 내용은 하이퍼파라미터 튜닝 가이드를 참조하십시오.
Weights & Biases를 YOLO11 모델 튜닝과 어떻게 통합할 수 있습니까?
Weights & Biases(W&B)를 Ultralytics YOLO11 튜닝 프로세스와 통합하려면:
-
W&B 설치:
pip install wandb
-
튜닝 스크립트 수정:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo11n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
이 설정을 통해 튜닝 프로세스를 모니터링하고, 하이퍼파라미터 구성을 추적하며, W&B에서 결과를 시각화할 수 있습니다.
YOLO11을 사용한 하이퍼파라미터 최적화에 Ray Tune을 사용해야 하는 이유는 무엇인가요?
Ray Tune은 하이퍼파라미터 최적화를 위한 다양한 이점을 제공합니다.
- 고급 검색 전략: 효율적인 파라미터 검색을 위해 베이지안 최적화 및 HyperOpt와 같은 알고리즘을 활용합니다.
- 병렬 처리: 여러 평가판의 병렬 실행을 지원하여 튜닝 프로세스 속도를 크게 향상시킵니다.
- 조기 중단: ASHA와 같은 전략을 사용하여 성능이 낮은 평가판을 조기에 종료하여 컴퓨팅 리소스를 절약합니다.
Ray Tune은 Ultralytics YOLO11과 원활하게 통합되어 하이퍼파라미터를 효과적으로 튜닝할 수 있는 사용하기 쉬운 인터페이스를 제공합니다. 시작하려면 하이퍼파라미터 튜닝 가이드를 확인하십시오.
YOLO11 하이퍼파라미터 튜닝을 위한 사용자 정의 검색 공간을 어떻게 정의할 수 있습니까?
Ray Tune으로 YOLO11 하이퍼파라미터 튜닝을 위한 사용자 정의 검색 공간을 정의하려면:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
이것은 튜닝 과정에서 탐색할 초기 학습률 및 모멘텀과 같은 하이퍼파라미터의 범위를 사용자 정의합니다. 고급 구성은 사용자 정의 검색 공간 예제 섹션을 참조하십시오.