
    |h                         d dl m Z  d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ  G d d	ej                   j"                        Zy
)    )copy)Path)DictOptionalUnion)yolo)SegmentationModel)DEFAULT_CFGRANK)plot_resultsc                   z     e Zd ZdZeddfdee   f fdZ	 ddeeee	f      deee	e
f      defdZd	 Zd
 Z xZS )SegmentationTrainera  
    A class extending the DetectionTrainer class for training based on a segmentation model.

    This trainer specializes in handling segmentation tasks, extending the detection trainer with segmentation-specific
    functionality including model initialization, validation, and visualization.

    Attributes:
        loss_names (Tuple[str]): Names of the loss components used during training.

    Examples:
        >>> from ultralytics.models.yolo.segment import SegmentationTrainer
        >>> args = dict(model="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
        >>> trainer = SegmentationTrainer(overrides=args)
        >>> trainer.train()
    N	overridesc                 :    |i }d|d<   t         |   |||       y)ad  
        Initialize a SegmentationTrainer object.

        This initializes a trainer for segmentation tasks, extending the detection trainer with segmentation-specific
        functionality. It sets the task to 'segment' and prepares the trainer for training segmentation models.

        Args:
            cfg (dict): Configuration dictionary with default training settings.
            overrides (dict, optional): Dictionary of parameter overrides for the default configuration.
            _callbacks (list, optional): List of callback functions to be executed during training.

        Examples:
            >>> from ultralytics.models.yolo.segment import SegmentationTrainer
            >>> args = dict(model="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
            >>> trainer = SegmentationTrainer(overrides=args)
            >>> trainer.train()
        Nsegmenttask)super__init__)selfcfgr   
_callbacks	__class__s       d/var/www/html/test/engine/venv/lib/python3.12/site-packages/ultralytics/models/yolo/segment/train.pyr   zSegmentationTrainer.__init__   s+    $ I%	&i4    r   weightsverbosec                     t        || j                  d   | j                  d   |xr	 t        dk(        }|r|j                  |       |S )a  
        Initialize and return a SegmentationModel with specified configuration and weights.

        Args:
            cfg (dict | str, optional): Model configuration. Can be a dictionary, a path to a YAML file, or None.
            weights (str | Path, optional): Path to pretrained weights file.
            verbose (bool): Whether to display model information during initialization.

        Returns:
            (SegmentationModel): Initialized segmentation model with loaded weights if specified.

        Examples:
            >>> trainer = SegmentationTrainer()
            >>> model = trainer.get_model(cfg="yolo11n-seg.yaml")
            >>> model = trainer.get_model(weights="yolo11n-seg.pt", verbose=False)
        ncchannels)r   chr   )r	   datar   load)r   r   r   r   models        r   	get_modelzSegmentationTrainer.get_model5   sF    & "#$))D/dii
>S]d]simqsistJJwr   c                     d| _         t        j                  j                  | j                  | j
                  t        | j                        | j                        S )zIReturn an instance of SegmentationValidator for validation of YOLO model.)box_lossseg_losscls_lossdfl_loss)save_dirargsr   )	
loss_namesr   r   SegmentationValidatortest_loaderr+   r   r,   	callbacksr   s    r   get_validatorz!SegmentationTrainer.get_validatorN   sG    H||11t}}4		?W[WeWe 2 
 	
r   c                 H    t        | j                  d| j                         y)z!Plot training/validation metrics.T)filer   on_plotN)r   csvr5   r1   s    r   plot_metricsz SegmentationTrainer.plot_metricsU   s    $((D$,,Gr   )NNT)__name__
__module____qualname____doc__r
   r   r   r   r   strr   boolr%   r2   r7   __classcell__)r   s   @r   r   r      sn      'DUY 58D> 50 swE$),-?GcSWiHX?Yko2
Hr   r   N)r   pathlibr   typingr   r   r   ultralytics.modelsr   ultralytics.nn.tasksr	   ultralytics.utilsr
   r   ultralytics.utils.plottingr   detectDetectionTrainerr    r   r   <module>rH      s9      ( ( # 2 / 3JH$++66 JHr   