Salta 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.



Observa: Dominar Ultralytics YOLOv8 : 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 correctos. Por exemplo, podes suportar o teu pr√≥prio modelo personalizado e o teu carregador de dados, 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 podes utilizar o YOLOv8 DetectionTrainer e personaliza-o.

from ultralytics.models.yolo.detect import DetectionTrainer

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

Personalização do DetectionTrainer

Personaliza o formador para treinar um modelo de deteção personalizado que não é suportado diretamente. Podes fazer isto 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()

Percebes agora que precisas de personalizar ainda mais o treinador para:

  • Personaliza o loss function.
  • Acrescenta callback que carrega o modelo para o teu Google Drive a cada 10 epochs Eis como o podes 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 saberes mais sobre eventos de ativação de Callbacks e ponto de entrada, consulta o nosso Guia de Callbacks

Outros componentes do motor

Existem outros componentes que podem ser personalizados de forma semelhante, como Validators e Predictors. Consulta a sec√ß√£o Refer√™ncia para obteres mais informa√ß√Ķes sobre os mesmos.



Created 2023-11-12, Updated 2024-06-02
Authors: glenn-jocher (6), RizwanMunawar (1), AyushExel (1), Laughing-q (1)

Coment√°rios