Afinação eficiente de hiperparâmetros com Ray Tune e YOLO11
A afinação de hiperparâmetros é vital para atingir o desempenho máximo do modelo, descobrindo o conjunto ótimo de hiperparâmetros. Isto envolve a execução de ensaios com diferentes hiperparâmetros e a avaliação do desempenho de cada ensaio.
Acelerar a afinação com Ultralytics YOLO11 e Ray Tune
Ultralytics YOLO11 incorpora o Ray Tune para ajuste de hiperparâmetros, simplificando a otimização dos hiperparâmetros do modelo YOLO11 . Com o Ray Tune, é possível utilizar estratégias de pesquisa avançadas, paralelismo e paragem antecipada para acelerar o processo de afinação.
Ray Tune
Ray Tune é uma biblioteca de ajuste de hiperparâmetros concebida para ser eficiente e flexível. Suporta várias estratégias de pesquisa, paralelismo e estratégias de paragem antecipada, e integra-se perfeitamente com estruturas populares de aprendizagem automática, incluindo Ultralytics YOLO11 .
Integração com Weights & Biases
YOLO11 permite também a integração opcional com Weights & Biases para monitorizar o processo de afinação.
Instalação
Para instalar os pacotes necessários, execute:
Instalação
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandb
Utilização
Utilização
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()
Parâmetros do método
O tune()
em YOLO11 fornece uma interface fácil de usar para o ajuste de hiperparâmetros com o Ray Tune. Aceita vários argumentos que lhe permitem personalizar o processo de afinação. Segue-se uma explicação pormenorizada de cada parâmetro:
Parâmetro | Tipo | Descrição | Valor por defeito |
---|---|---|---|
data |
str |
O ficheiro de configuração do conjunto de dados (em formato YAML) para executar o sintonizador. Esse arquivo deve especificar os caminhos de dados de treinamento e validação, bem como outras configurações específicas do conjunto de dados. | |
space |
dict, optional |
Um dicionário que define o espaço de pesquisa de hiperparâmetros para o Ray Tune. Cada chave corresponde a um nome de hiperparâmetro e o valor especifica o intervalo de valores a explorar durante o ajuste. Se não for fornecido, YOLO11 usa um espaço de pesquisa padrão com vários hiperparâmetros. | |
grace_period |
int, optional |
O período de carência em épocas para o programador ASHA no Ray Tune. O programador não terminará nenhum ensaio antes deste número de épocas, permitindo que o modelo tenha algum treino mínimo antes de tomar uma decisão sobre a paragem antecipada. | 10 |
gpu_per_trial |
int, optional |
O número de GPUs a alocar por tentativa durante o ajuste. Isso ajuda a gerenciar o uso do GPU , particularmente em ambientes com váriosGPU . Se não for fornecido, o sintonizador usará todas as GPUs disponíveis. | None |
iterations |
int, optional |
O número máximo de tentativas a serem executadas durante o ajuste. Este parâmetro ajuda a controlar o número total de combinações de hiperparâmetros testadas, garantindo que o processo de afinação não é executado indefinidamente. | 10 |
**train_args |
dict, optional |
Argumentos adicionais para passar para o train() durante a afinação. Estes argumentos podem incluir definições como o número de épocas de treino, tamanho do lotee outras configurações específicas da formação. |
{} |
Ao personalizar estes parâmetros, pode afinar o processo de otimização do hiperparâmetro para se adequar às suas necessidades específicas e aos recursos computacionais disponíveis.
Espaço de pesquisa predefinido Descrição
A tabela a seguir lista os parâmetros padrão do espaço de pesquisa para o ajuste de hiperparâmetros em YOLO11 com Ray Tune. Cada parâmetro tem um intervalo de valores específico definido por tune.uniform()
.
Parâmetro | Gama | Descrição |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Taxa de aprendizagem inicial que controla o tamanho do passo durante a otimização. Valores mais elevados aceleram a formação mas podem causar instabilidade. |
lrf |
tune.uniform(0.01, 1.0) |
Fator da taxa de aprendizagem final que determina o quanto a taxa de aprendizagem diminui no final da formação. |
momentum |
tune.uniform(0.6, 0.98) |
Fator de impulso para o optimizador que ajuda a acelerar a formação e a ultrapassar mínimos locais. |
weight_decay |
tune.uniform(0.0, 0.001) |
Parâmetro de regularização que impede o sobreajuste penalizando valores de peso elevados. |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Número de épocas com aumento gradual da taxa de aprendizagem para estabilizar a formação inicial. |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Valor do impulso inicial que aumenta gradualmente durante o período de aquecimento. |
box |
tune.uniform(0.02, 0.2) |
Peso para a componente de perda da caixa delimitadora, equilibrando a precisão da localização no modelo. |
cls |
tune.uniform(0.2, 4.0) |
Peso para o componente de perda de classificação, equilibrando a precisão da previsão de classes no modelo. |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento de tonalidade que introduz variabilidade de cor para ajudar o modelo a generalizar. |
hsv_s |
tune.uniform(0.0, 0.9) |
Gama de aumento da saturação que varia a intensidade da cor para melhorar a robustez. |
hsv_v |
tune.uniform(0.0, 0.9) |
Gama de aumento do valor (brilho) que ajuda o modelo a funcionar em várias condições de iluminação. |
degrees |
tune.uniform(0.0, 45.0) |
Intervalo de aumento da rotação em graus, melhorando o reconhecimento de objectos rodados. |
translate |
tune.uniform(0.0, 0.9) |
Gama de aumento de tradução que desloca as imagens na horizontal e na vertical. |
scale |
tune.uniform(0.0, 0.9) |
Gama de aumento de escala que simula objectos a diferentes distâncias. |
shear |
tune.uniform(0.0, 10.0) |
O aumento de cisalhamento varia em graus, simulando mudanças de perspetiva. |
perspective |
tune.uniform(0.0, 0.001) |
Gama de aumento de perspetiva que simula alterações do ponto de vista 3D. |
flipud |
tune.uniform(0.0, 1.0) |
Probabilidade de aumento da rotação vertical, aumentando a diversidade do conjunto de dados. |
fliplr |
tune.uniform(0.0, 1.0) |
Probabilidade de aumento da rotação horizontal, útil para objectos simétricos. |
mosaic |
tune.uniform(0.0, 1.0) |
Probabilidade de aumento do mosaico que combina quatro imagens numa amostra de treino. |
mixup |
tune.uniform(0.0, 1.0) |
Probabilidade de aumento de mistura que mistura duas imagens e as suas etiquetas. |
cutmix |
tune.uniform(0.0, 1.0) |
Probabilidade de aumento de Cutmix que combina regiões de imagem mantendo as caraterísticas locais, melhorando a deteção de objectos parcialmente ocluídos. |
copy_paste |
tune.uniform(0.0, 1.0) |
Probabilidade de aumento de copiar-colar que transfere objectos entre imagens para aumentar a diversidade de instâncias. |
Exemplo de espaço de pesquisa personalizado
Neste exemplo, demonstramos como usar um espaço de pesquisa personalizado para ajuste de hiperparâmetros com Ray Tune e YOLO11. Ao fornecer um espaço de pesquisa personalizado, pode concentrar o processo de afinação em hiperparâmetros específicos de interesse.
Utilização
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,
)
No trecho de código acima, criamos um modelo YOLO com os pesos pré-treinados "yolo11n.pt". De seguida, chamamos o tune()
especificando a configuração do conjunto de dados com "coco8.yaml". Fornecemos um espaço de pesquisa personalizado para a taxa de aprendizagem inicial lr0
utilizando um dicionário com a chave "lr0" e o valor tune.uniform(1e-5, 1e-1)
. Finalmente, passamos argumentos de treino adicionais, como o número de épocas, diretamente para o método tune como epochs=50
.
Retomada de uma sessão de ajuste de hiperparâmetros interrompida com o Ray Tune
É possível retomar uma sessão interrompida do Ray Tune passando resume=True
. Opcionalmente, pode passar o diretório name
utilizado por Ray Tune sob a designação runs/{task}
para retomar. Caso contrário, será retomada a última sessão interrompida. Não é necessário fornecer o parâmetro iterations
e space
novamente, mas é necessário fornecer novamente o resto dos argumentos de formação, incluindo data
e epochs
.
Utilizar resume=True
com 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)
Processamento de resultados de afinação de raios
Depois de executar uma experiência de ajuste de hiperparâmetros com o Ray Tune, poderá querer efetuar várias análises dos resultados obtidos. Este guia o guiará por fluxos de trabalho comuns para processar e analisar esses resultados.
Carregar resultados de experiências de afinação a partir de um diretório
Depois de efetuar a experiência de afinação com tuner.fit()
pode carregar os resultados a partir de um diretório. Isto é útil, especialmente se estiver a efetuar a análise após o script de formação inicial ter saído.
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()
Análise básica ao nível da experiência
Obter uma visão geral do desempenho dos ensaios. Pode verificar rapidamente se houve algum erro durante os ensaios.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")
Análise básica a nível do ensaio
Aceder a configurações de hiperparâmetros de ensaios individuais e às últimas métricas comunicadas.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
Traçando todo o histórico de métricas relatadas para um estudo
Pode traçar o histórico das métricas comunicadas para cada ensaio para ver como as métricas evoluíram ao longo do tempo.
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()
Resumo
Nesta documentação, abordámos fluxos de trabalho comuns para analisar os resultados de experiências executadas com o Ray Tune utilizando Ultralytics. Os principais passos incluem o carregamento dos resultados da experiência a partir de um diretório, a realização de análises básicas ao nível da experiência e ao nível do ensaio e a representação gráfica de métricas.
Explore mais, consultando a página de documentos Analisar resultados do Ray Tune para tirar o máximo partido das suas experiências de ajuste de hiperparâmetros.
FAQ
Como posso ajustar os hiperparâmetros do meu modelo YOLO11 utilizando o Ray Tune?
Para ajustar os hiperparâmetros do seu modelo Ultralytics YOLO11 utilizando o Ray Tune, siga estes passos:
-
Instalar os pacotes necessários:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Carregue o seu modelo YOLO11 e comece a afinar:
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)
Isto utiliza as estratégias de pesquisa avançadas e o paralelismo do Ray Tune para otimizar eficientemente os hiperparâmetros do seu modelo. Para obter mais informações, consulte a documentação do Ray Tune.
Quais são os hiperparâmetros predefinidos para YOLO11 afinação com o Ray Tune?
Ultralytics YOLO11 utiliza os seguintes hiperparâmetros predefinidos para afinação com o Ray Tune:
Parâmetro | Intervalo de valores | Descrição |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Taxa de aprendizagem inicial |
lrf |
tune.uniform(0.01, 1.0) |
Fator de taxa de aprendizagem final |
momentum |
tune.uniform(0.6, 0.98) |
Momento |
weight_decay |
tune.uniform(0.0, 0.001) |
Diminuição do peso |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Épocas de aquecimento |
box |
tune.uniform(0.02, 0.2) |
Caixa perda de peso |
cls |
tune.uniform(0.2, 4.0) |
Perda de peso por classe |
hsv_h |
tune.uniform(0.0, 0.1) |
Gama de aumento de tonalidade |
translate |
tune.uniform(0.0, 0.9) |
Gama de aumentos de tradução |
Esses hiperparâmetros podem ser personalizados para atender às suas necessidades específicas. Para obter uma lista completa e mais detalhes, consulte o guia Ajuste de hiperparâmetros.
Como posso integrar Weights & Biases com a minha afinação do modelo YOLO11 ?
Para integrar Weights & Biases (W&B) no seu processo de afinação Ultralytics YOLO11 :
-
Instalar a W&B:
pip install wandb
-
Modificar o guião de afinação:
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)
Esta configuração permitir-lhe-á monitorizar o processo de afinação, seguir as configurações dos hiperparâmetros e visualizar os resultados em W&B.
Por que razão devo utilizar o Ray Tune para a otimização de hiperparâmetros com YOLO11?
O Ray Tune oferece inúmeras vantagens para a otimização de hiperparâmetros:
- Estratégias de pesquisa avançadas: Utiliza algoritmos como a Otimização Bayesiana e o HyperOpt para uma pesquisa de parâmetros eficiente.
- Paralelismo: Suporta a execução paralela de vários ensaios, acelerando significativamente o processo de afinação.
- Interrupção antecipada: Utiliza estratégias como o ASHA para terminar precocemente ensaios com fraco desempenho, poupando recursos computacionais.
O Ray Tune integra-se perfeitamente no Ultralytics YOLO11, fornecendo uma interface fácil de utilizar para ajustar os hiperparâmetros de forma eficaz. Para começar, consulte o guia de ajuste de hiperparâmetros.
Como é que posso definir um espaço de pesquisa personalizado para YOLO11 afinação de hiperparâmetros?
Para definir um espaço de pesquisa personalizado para o seu YOLO11 ajuste de hiperparâmetros com o Ray Tune:
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)
Isso personaliza o intervalo de hiperparâmetros, como a taxa de aprendizado inicial e o momento a ser explorado durante o processo de ajuste. Para configurações avançadas, consulte a secção Exemplo de espaço de pesquisa personalizado.