Saltar para o conteúdo

Personalização avançada

Ambas as interfaces Ultralytics YOLO linha de comando e Python são simplesmente uma abstração de alto nível nos executores do motor base. Vamos dar uma olhadela ao motor Trainer.



Ver: Dominar Ultralytics YOLO : Personalização avançada

BaseTrainer

O BaseTrainer contém a rotina de formação genérica. Pode ser personalizada para qualquer tarefa com base na substituição das funções ou operações necessárias, desde que sejam seguidos os formatos corretos. Por exemplo, pode suportar o seu próprio modelo e carregador de dados personalizados, substituindo apenas estas funções:

  • get_model(cfg, weights) - A função que constrói o modelo a ser treinado
  • get_dataloader() - A função que constrói o carregador de dados Mais detalhes e código fonte podem ser encontrados em BaseTrainer Referência

DetectionTrainer

Eis como pode utilizar o YOLO11 DetectionTrainer e personalizá-lo.

from ultralytics.models.yolo.detect import DetectionTrainer

trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # get best model

Personalização do DetectionTrainer

Vamos personalizar o formador para treinar um modelo de deteção personalizado que não é suportado diretamente. Pode fazer isso simplesmente sobrecarregando a função existente get_model funcionalidade:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model given configuration and weight files."""
        ...


trainer = CustomTrainer(overrides={...})
trainer.train()

Agora percebe que precisa de personalizar mais o formador para:

  • Personalizar o loss function.
  • Adicionar callback que carrega o modelo para a sua unidade Google a cada 10 epochs Eis como o pode fazer:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel


class MyCustomModel(DetectionModel):
    def init_criterion(self):
        """Initializes the loss function and adds a callback for uploading the model to Google Drive every 10 epochs."""
        ...


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Returns a customized detection model instance configured with specified config and weights."""
        return MyCustomModel(...)


# callback to upload model weights
def log_model(trainer):
    """Logs the path of the last model weight used by the trainer."""
    last_weight_path = trainer.last
    print(last_weight_path)


trainer = CustomTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model)  # Adds to existing callback
trainer.train()

Para saber mais sobre eventos de ativação de Callback e ponto de entrada, consulte o nosso Guia de Callbacks

Outros componentes do motor

Existem outros componentes que podem ser personalizados de forma semelhante, como Validators e Predictors. Ver secção Referência para mais informações sobre estes.

FAQ

Como é que posso personalizar o Ultralytics YOLO11 DetectionTrainer para tarefas específicas?

Para personalizar o Ultralytics YOLO11 DetectionTrainer para uma tarefa específica, pode substituir os seus métodos para os adaptar ao seu modelo personalizado e ao seu carregador de dados. Comece por herdar de DetectionTrainer e depois redefinir métodos como get_model para implementar as suas funcionalidades personalizadas. Eis um exemplo:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model given configuration and weight files."""
        ...


trainer = CustomTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # get best model

Para mais personalizações, como alterar o loss function ou adicionar um callback, pode consultar a nossa Guia de Callbacks.

Quais são os principais componentes do BaseTrainer em Ultralytics YOLO11 ?

O BaseTrainer em Ultralytics YOLO11 serve de base para rotinas de treino e pode ser personalizado para várias tarefas, substituindo os seus métodos genéricos. Os principais componentes incluem:

  • get_model(cfg, weights) para construir o modelo a ser treinado.
  • get_dataloader() para construir o carregador de dados.

Para obter mais detalhes sobre a personalização e o código-fonte, consulte o BaseTrainer Referência.

Como é que posso adicionar uma chamada de retorno ao Ultralytics YOLO11 DetectionTrainer?

É possível adicionar chamadas de retorno para monitorizar e modificar o processo de formação em Ultralytics YOLO11 DetectionTrainer. Por exemplo, eis como pode adicionar uma chamada de retorno para registar os pesos do modelo após cada treino época:

from ultralytics.models.yolo.detect import DetectionTrainer


# callback to upload model weights
def log_model(trainer):
    """Logs the path of the last model weight used by the trainer."""
    last_weight_path = trainer.last
    print(last_weight_path)


trainer = DetectionTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model)  # Adds to existing callbacks
trainer.train()

Para mais informações sobre eventos de retorno de chamada e pontos de entrada, consulte o nosso Guia de retornos de chamada.

Por que razão devo utilizar Ultralytics YOLO11 para a formação de modelos?

Ultralytics YOLO11 oferece uma abstração de alto nível em poderosos executores de motores, tornando-o ideal para um rápido desenvolvimento e personalização. As principais vantagens incluem:

  • Facilidade de utilização: As interfaces de linha de comandos e Python simplificam tarefas complexas.
  • Desempenho: Optimizado para deteção de objectos em tempo real e várias aplicações de IA de visão.
  • Personalização: Facilmente extensível para modelos personalizados, funções de perda e carregadores de dados.

Saiba mais sobre as capacidades do YOLO11 visitando Ultralytics YOLO.

Posso utilizar o Ultralytics YOLO11 DetectionTrainer para modelos não normalizados?

Sim, Ultralytics YOLO11 DetectionTrainer é altamente flexível e pode ser personalizado para modelos não padronizados. Ao herdar de DetectionTrainerpode sobrecarregar diferentes métodos para satisfazer as necessidades específicas do seu modelo. Eis um exemplo simples:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomDetectionTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model."""
        ...


trainer = CustomDetectionTrainer(overrides={...})
trainer.train()

Para obter instruções e exemplos mais abrangentes, consulte a documentação do DetectionTrainer.

📅C riado há 1 ano ✏️ Atualizado há 2 meses

Comentários