Ultralytics YOLO Hyperparameter Tuning 가이드
소개
하이퍼파라미터 튜닝은 일회성 설정이 아니라 정확도, 정밀도, 재현율과 같은 머신 러닝 모델의 성능 지표를 최적화하기 위한 반복적인 프로세스입니다. Ultralytics YOLO의 경우 이러한 하이퍼파라미터는 학습률부터 레이어 수 또는 사용된 활성화 함수 유형과 같은 아키텍처 세부 사항에 이르기까지 다양할 수 있습니다.
참고: 더 나은 모델 성능을 위해 하이퍼파라미터를 조정하는 방법 🚀
하이퍼파라미터란 무엇입니까?
하이퍼파라미터는 알고리즘에 대한 높은 수준의 구조적 설정입니다. 이는 학습 단계 이전에 설정되며 학습 중에는 일정하게 유지됩니다. 다음은 Ultralytics YOLO에서 일반적으로 튜닝되는 몇 가지 하이퍼파라미터입니다.
- 학습률
lr0
: 손실 함수에서 최소값을 향해 이동하는 동안 각 반복에서의 스텝 크기를 결정합니다. 손실 함수. - 배치 크기
batch
: 순방향 패스에서 동시에 처리되는 이미지 수입니다. - Epochs 수
epochs
: Epoch는 모든 학습 예제의 완전한 순방향 및 역방향 패스입니다. - 아키텍처 관련 세부 정보: 채널 수, 레이어 수, 활성화 함수 유형 등.
YOLO11에서 사용되는 전체 증강 하이퍼파라미터 목록은 구성 페이지를 참조하십시오.
유전적 진화 및 변이
Ultralytics YOLO는 유전 알고리즘을 사용하여 하이퍼파라미터를 최적화합니다. 유전 알고리즘은 자연 선택 및 유전 메커니즘에서 영감을 받았습니다.
- 변이: Ultralytics YOLO에서 변이는 기존 하이퍼파라미터에 작고 임의적인 변경을 적용하여 평가를 위한 새로운 후보를 생성함으로써 하이퍼파라미터 공간을 로컬로 검색하는 데 도움이 됩니다.
- 교차: 교차는 널리 사용되는 유전 알고리즘 기술이지만 현재 Ultralytics YOLO의 하이퍼파라미터 튜닝에는 사용되지 않습니다. 새로운 하이퍼파라미터 세트를 생성하는 데 주로 변이에 중점을 둡니다.
하이퍼파라미터 튜닝 준비
튜닝 프로세스를 시작하기 전에 다음 사항이 중요합니다.
- 지표 식별: 모델의 성능을 평가하는 데 사용할 지표를 결정합니다. AP50, F1-score 또는 기타 지표가 될 수 있습니다.
- 튜닝 예산 설정: 할당할 컴퓨팅 리소스의 양을 정의합니다. 하이퍼파라미터 튜닝은 계산 집약적일 수 있습니다.
관련 단계
하이퍼파라미터 초기화
합리적인 초기 하이퍼파라미터 세트부터 시작합니다. 이는 Ultralytics YOLO에서 설정한 기본 하이퍼파라미터이거나 도메인 지식 또는 이전 실험을 기반으로 한 것일 수 있습니다.
하이퍼파라미터 변형
다음을 사용하여 _mutate
메서드를 사용하여 기존 세트를 기반으로 새로운 하이퍼파라미터 세트를 생성합니다. 해당 Tuner 클래스 이 프로세스를 자동으로 처리합니다.
모델 학습
돌연변이된 하이퍼파라미터 세트를 사용하여 학습이 수행됩니다. 그런 다음 선택한 지표를 사용하여 학습 성능을 평가합니다.
모델 평가
AP50, F1-score 또는 사용자 지정 메트릭과 같은 메트릭을 사용하여 모델의 성능을 평가합니다. 평가 프로세스는 현재 하이퍼파라미터가 이전 하이퍼파라미터보다 나은지 판단하는 데 도움이 됩니다.
결과 기록
향후 참조를 위해 성능 지표와 해당 하이퍼파라미터를 모두 기록하는 것이 중요합니다. Ultralytics YOLO는 이러한 결과를 자동으로 CSV 형식으로 저장합니다.
반복
설정된 반복 횟수에 도달하거나 성능 메트릭이 만족스러울 때까지 프로세스가 반복됩니다. 각 반복은 이전 실행에서 얻은 지식을 기반으로 합니다.
기본 검색 공간 설명
다음 표에는 YOLO11의 하이퍼파라미터 튜닝을 위한 기본 검색 공간 파라미터가 나열되어 있습니다. 각 파라미터는 튜플로 정의된 특정 값 범위를 갖습니다. (min, max)
.
파라미터 | 유형 | 값 범위 | 설명 |
---|---|---|---|
lr0 |
float |
(1e-5, 1e-1) |
학습 시작 시 초기 학습률. 값이 낮을수록 학습은 더 안정적이지만 수렴 속도는 느립니다. |
lrf |
float |
(0.01, 1.0) |
lr0의 비율로 표시되는 최종 학습률 요소입니다. 학습 중에 학습률이 얼마나 감소하는지 제어합니다. |
momentum |
float |
(0.6, 0.98) |
SGD 모멘텀 요소. 값이 높을수록 일관된 기울기 방향을 유지하는 데 도움이 되며 수렴 속도를 높일 수 있습니다. |
weight_decay |
float |
(0.0, 0.001) |
과적합을 방지하기 위한 L2 정규화 요소입니다. 값이 클수록 더 강력한 정규화가 적용됩니다. |
warmup_epochs |
float |
(0.0, 5.0) |
선형 학습률 워밍업을 위한 epoch 수입니다. 초기 학습 불안정을 방지하는 데 도움이 됩니다. |
warmup_momentum |
float |
(0.0, 0.95) |
웜업 단계 동안의 초기 모멘텀. 최종 모멘텀 값으로 점진적으로 증가합니다. |
box |
float |
(0.02, 0.2) |
전체 손실 함수에서 바운딩 박스 손실 가중치입니다. 박스 회귀 대 분류의 균형을 맞춥니다. |
cls |
float |
(0.2, 4.0) |
전체 손실 함수에서 분류 손실 가중치. 값이 높을수록 올바른 클래스 예측을 강조합니다. |
hsv_h |
float |
(0.0, 0.1) |
HSV 색 공간에서 임의의 색조 증가 범위입니다. 모델이 색상 변화에 따라 일반화되도록 돕습니다. |
hsv_s |
float |
(0.0, 0.9) |
HSV 공간에서 임의의 채도 증가 범위입니다. 다양한 조명 조건을 시뮬레이션합니다. |
hsv_v |
float |
(0.0, 0.9) |
임의 값(밝기) 증가 범위입니다. 모델이 다양한 노출 수준을 처리하도록 돕습니다. |
degrees |
float |
(0.0, 45.0) |
최대 회전 증대 각도(도)입니다. 모델이 객체 방향에 불변하도록 돕습니다. |
translate |
float |
(0.0, 0.9) |
이미지 크기의 비율로 나타낸 최대 이동 증대입니다. 객체 위치에 대한 견고성을 향상시킵니다. |
scale |
float |
(0.0, 0.9) |
임의 스케일링 증가 범위입니다. 모델이 다양한 크기의 객체를 감지하도록 돕습니다. |
shear |
float |
(0.0, 10.0) |
최대 전단 증대 각도(도)입니다. 훈련 이미지에 원근감과 유사한 왜곡을 추가합니다. |
perspective |
float |
(0.0, 0.001) |
임의 원근법 증가 범위입니다. 다양한 시점을 시뮬레이션합니다. |
flipud |
float |
(0.0, 1.0) |
학습 중 수직 이미지 반전 확률입니다. 오버헤드/항공 이미지에 유용합니다. |
fliplr |
float |
(0.0, 1.0) |
수평 이미지 반전 확률. 모델이 객체 방향에 불변하도록 돕습니다. |
mosaic |
float |
(0.0, 1.0) |
4개의 이미지를 결합하는 Mosaic 증강 사용 확률. 특히 작은 객체 감지에 유용합니다. |
mixup |
float |
(0.0, 1.0) |
두 이미지를 혼합하는 MixUp 증강 사용 확률. 모델 견고성을 향상시킬 수 있습니다. |
copy_paste |
float |
(0.0, 1.0) |
Copy-Paste 증강 사용 확률. 인스턴스 분할 성능 향상에 도움이 됩니다. |
맞춤형 검색 공간 예시
다음은 검색 공간을 정의하고 사용하는 방법입니다. model.tune()
다음을 활용하는 방법: Tuner
AdamW 옵티마이저를 사용하여 COCO8 데이터셋에서 YOLO11n 모델의 하이퍼파라미터 튜닝을 30 epoch 동안 수행하고, 더 빠른 튜닝을 위해 최종 epoch을 제외한 플로팅, 체크포인트 저장, 검증을 생략하는 클래스입니다.
예시
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
data="coco8.yaml",
epochs=30,
iterations=300,
optimizer="AdamW",
space=search_space,
plots=False,
save=False,
val=False,
)
중단된 하이퍼파라미터 튜닝 세션 재개
다음을 전달하여 중단된 하이퍼파라미터 튜닝 세션을 재개할 수 있습니다. resume=True
선택적으로 디렉토리를 전달할 수 있습니다. name
아래에서 사용 runs/{task}
재개합니다. 그렇지 않으면 마지막으로 중단된 세션이 재개됩니다. 다음을 포함하여 이전 훈련 인수를 모두 제공해야 합니다. data
, epochs
, iterations
및 space
.
사용: resume=True
와 함께 model.tune()
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Define search space
search_space = {
"lr0": (1e-5, 1e-1),
"degrees": (0.0, 45.0),
}
# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)
결과
하이퍼파라미터 튜닝 프로세스를 성공적으로 완료하면 튜닝 결과를 캡슐화하는 여러 파일과 디렉토리를 얻게 됩니다. 다음은 각 항목에 대한 설명입니다.
파일 구조
결과 디렉토리 구조는 다음과 같습니다. 다음과 같은 학습 디렉토리: train1/
개별 튜닝 반복, 즉 하나의 하이퍼파라미터 세트로 학습된 하나의 모델을 포함합니다. 다음 tune/
디렉토리에는 모든 개별 모델 학습의 튜닝 결과가 포함되어 있습니다.
runs/
└── detect/
├── train1/
├── train2/
├── ...
└── tune/
├── best_hyperparameters.yaml
├── best_fitness.png
├── tune_results.csv
├── tune_scatter_plots.png
└── weights/
├── last.pt
└── best.pt
파일 설명
best_hyperparameters.yaml
이 YAML 파일에는 튜닝 프로세스 중에 찾은 최적의 하이퍼파라미터가 포함되어 있습니다. 이 파일을 사용하여 최적화된 설정으로 향후 학습을 초기화할 수 있습니다.
- 형식: YAML
- 용도: 하이퍼파라미터 결과
-
예시:
# 558/900 iterations complete ✅ (45536.81s) # Results saved to /usr/src/ultralytics/runs/detect/tune # Best fitness=0.64297 observed at iteration 498 # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/train498 # Best fitness hyperparameters are printed below. lr0: 0.00269 lrf: 0.00288 momentum: 0.73375 weight_decay: 0.00015 warmup_epochs: 1.22935 warmup_momentum: 0.1525 box: 18.27875 cls: 1.32899 dfl: 0.56016 hsv_h: 0.01148 hsv_s: 0.53554 hsv_v: 0.13636 degrees: 0.0 translate: 0.12431 scale: 0.07643 shear: 0.0 perspective: 0.0 flipud: 0.0 fliplr: 0.08631 mosaic: 0.42551 mixup: 0.0 copy_paste: 0.0
best_fitness.png
이것은 반복 횟수에 따른 적합도(일반적으로 AP50과 같은 성능 지표)를 표시하는 플롯입니다. 이를 통해 유전 알고리즘이 시간이 지남에 따라 얼마나 잘 수행되었는지 시각화할 수 있습니다.
- 형식: PNG
- 용도: 성능 시각화
tune_results.csv
이 CSV 파일에는 튜닝 중 각 반복에 대한 자세한 결과가 포함되어 있습니다. 파일의 각 행은 하나의 반복을 나타내며, 적합도 점수, 정밀도, 재현율과 같은 지표와 사용된 하이퍼파라미터를 포함합니다.
- 형식: CSV
- 용도: 반복별 결과 추적
- 예시:
fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste 0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0 0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0 0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
tune_scatter_plots.png
이 파일에는 다음에서 생성된 산점도가 포함되어 있습니다. tune_results.csv
, 다양한 하이퍼파라미터와 성능 지표 간의 관계를 시각화하는 데 도움이 됩니다. 0으로 초기화된 하이퍼파라미터는 튜닝되지 않습니다. degrees
및 shear
아래.
- 형식: PNG
- 용도: 탐색적 데이터 분석
weights/
이 디렉토리에는 하이퍼파라미터 튜닝 프로세스 중 마지막 및 최상의 반복에 대해 저장된 PyTorch 모델이 포함되어 있습니다.
last.pt
: last.pt는 학습의 마지막 epoch의 가중치입니다.best.pt
: best.pt는 최고의 적합도 점수를 달성한 반복에 대한 가중치입니다.
이러한 결과를 사용하여 향후 모델 학습 및 분석에 대해 더 많은 정보를 바탕으로 결정을 내릴 수 있습니다. 모델이 얼마나 잘 수행되었는지, 어떻게 개선할 수 있는지 이해하려면 이러한 결과물을 자유롭게 참조하십시오.
결론
Ultralytics YOLO의 하이퍼파라미터 튜닝 프로세스는 돌연변이에 초점을 맞춘 유전 알고리즘 기반 접근 방식으로 단순화되면서도 강력합니다. 이 가이드에 설명된 단계를 따르면 모델을 체계적으로 튜닝하여 더 나은 성능을 얻을 수 있습니다.
추가 자료
더 자세한 내용은 다음을 살펴보십시오. Tuner
클래스 소스 코드 및 관련 문서. 질문, 기능 요청 또는 추가 지원이 필요하시면 언제든지 다음 주소로 문의하십시오. GitHub 또는 Discord.
FAQ
하이퍼파라미터 튜닝 중 Ultralytics YOLO의 학습률을 어떻게 최적화합니까?
Ultralytics YOLO의 학습률을 최적화하려면 먼저 다음을 사용하여 초기 학습률을 설정하십시오. lr0
파라미터를 사용합니다. 일반적인 값의 범위는 다음과 같습니다. 0.001
에서 0.01
. 하이퍼파라미터 튜닝 프로세스 중에 이 값은 최적의 설정을 찾기 위해 변경됩니다. 다음을 활용하여 이 프로세스를 자동화할 수 있습니다. model.tune()
메서드를 사용합니다. 예를 들면 다음과 같습니다.
예시
from ultralytics import YOLO
# Initialize the YOLO model
model = YOLO("yolo11n.pt")
# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)
자세한 내용은 Ultralytics YOLO 구성 페이지를 확인하십시오.
YOLO11에서 하이퍼파라미터 튜닝을 위해 유전 알고리즘을 사용하면 어떤 이점이 있습니까?
Ultralytics YOLO11의 유전 알고리즘은 하이퍼파라미터 공간을 탐색하는 강력한 방법을 제공하여 고도로 최적화된 모델 성능을 제공합니다. 주요 이점은 다음과 같습니다.
- 효율적인 검색: 돌연변이와 같은 유전 알고리즘은 많은 수의 하이퍼파라미터를 빠르게 탐색할 수 있습니다.
- 로컬 최소값 회피: 무작위성을 도입하여 로컬 최소값을 피하는 데 도움이 되어 더 나은 글로벌 최적화를 보장합니다.
- 성능 지표: AP50 및 F1-점수와 같은 성능 지표를 기반으로 조정됩니다.
유전 알고리즘이 하이퍼파라미터를 어떻게 최적화하는지 확인하려면 하이퍼파라미터 진화 가이드를 확인하십시오.
Ultralytics YOLO의 하이퍼파라미터 튜닝 프로세스는 얼마나 걸립니까?
Ultralytics YOLO를 사용한 하이퍼파라미터 튜닝에 필요한 시간은 데이터 세트의 크기, 모델 아키텍처의 복잡성, 반복 횟수 및 사용 가능한 컴퓨팅 리소스와 같은 여러 요인에 따라 크게 달라집니다. 예를 들어 하드웨어에 따라 COCO8과 같은 데이터 세트에서 YOLO11n을 30 epoch 동안 튜닝하는 데 몇 시간에서 며칠이 걸릴 수 있습니다.
튜닝 시간을 효과적으로 관리하려면 사전에 명확한 튜닝 예산을 정의하십시오(내부 섹션 링크). 이는 리소스 할당과 최적화 목표의 균형을 맞추는 데 도움이 됩니다.
YOLO에서 하이퍼파라미터 튜닝 중 모델 성능을 평가하기 위해 어떤 지표를 사용해야 합니까?
YOLO에서 하이퍼파라미터 튜닝 중에 모델 성능을 평가할 때 다음과 같은 몇 가지 주요 지표를 사용할 수 있습니다.
- AP50: IoU 임계값이 0.50일 때의 평균 정밀도입니다.
- F1-점수: 정밀도와 재현율의 조화 평균입니다.
- 정밀도 및 재현율: 참 긍정 대 거짓 긍정 및 거짓 부정을 식별하는 모델의 정확도를 나타내는 개별 지표입니다.
이러한 지표는 모델 성능의 다양한 측면을 이해하는 데 도움이 됩니다. 포괄적인 개요는 Ultralytics YOLO 성능 지표 가이드를 참조하십시오.
YOLO11에서 Ray Tune을 사용하여 고급 하이퍼파라미터 최적화를 할 수 있나요?
예, Ultralytics YOLO11은 고급 하이퍼파라미터 최적화를 위해 Ray Tune과 통합됩니다. Ray Tune은 베이지안 최적화 및 하이퍼밴드와 같은 정교한 검색 알고리즘과 튜닝 프로세스 속도를 높이기 위한 병렬 실행 기능을 제공합니다.
YOLO11과 함께 Ray Tune을 사용하려면 다음을 설정하기만 하면 됩니다. use_ray=True
매개변수를 사용하십시오. model.tune()
메서드 호출. 자세한 내용과 예제는 다음을 참조하십시오. Ray Tune 통합 가이드.